Coding 初學指南-文字編輯
Last Edited: Jan, 2016 (如果內容有誤,你可以留言,或用任何管道告訴我)
這個章節會帶大家認識一個很簡單的純文字格式 Markdown,方便大家整理筆記。同時希望大家學會一個 terminal based 的文字編輯器,方便往後在 server 環境底下的操作。
其他 Coding 初學指南系列文章:
- Introduction
- Chapter 1 – Linux
- Chapter 2 – Text Editing (Markdown, Text Editor)
- Chapter 3 – Version Control (Git)
- Chapter 4 – Python
- Appendix 1 – OSX Development Environment
- Appendix 2 – Python in Bioinformatics
或者,用 labcoding 這個 tag 也可以找到所有的文章。
Markdown
這是一個簡便的語法,它的概念是在純文字的檔案中用一些簡單的標記,就能做出大小標題、粗斜體、超連結、表格、程式碼上色等語法。
如果大家了解網頁的格式 HTML 的話,那 markdown 的語法能直接對應到 HTML 的語法,所以這個格式在網路的世界十分流行。它的副檔名為 .md
,近代程式的 REAME 許多都用 markdown 寫成(例:README.md
)
相關資源
Markdown 語法
學習目標
- 這一系列的筆記就是用 markdown 寫成,你可以在這裡找到它的原始檔。
- 試著把 Linux 學習過的指令,或者自己常用的組合指令用 markdown 記錄。
Text Editor
在 Linux 的世界很多都是純文字檔案,再加上一些規定的語法成為新的格式。前面的 markdown 就是個例子。甚至許多可以執行的程式都只是個腳本檔,能用一般的編輯器(editor)打開就能讀懂。你可以試試
# cd is a shell script
nano `which cd` # thanks TP's idea
常見的 editor 有:nano、vi、vim、emacs。到底什麼是最好用的文字編輯器,這是一場永無止盡的戰爭,近年來又有 Notepad++(GUI)、Sublime Text (GUI)、Neovim 的加入,這話題將不會有結論。對初學者而言,至少學會一個 editor 是必要的。
雖然一開始都說是介紹文字編輯器,但後來會開始學程式設計,所以最後大家在討論的都是「程式碼的編輯器」。
當在編輯一些設定檔、程式碼時,為了避免打錯關鍵字但難以查覺,多數人會把程式碼的關鍵字上色。按照程式碼不同的屬性、功能上色之後,多數人發現能更好的理解程式的結構,因此 editor 大多帶有語法上色(syntax highlighting)。
除了語法上色,這些 editor 都有自己的設定檔規範,可以讓使用者自行修改 editor 的行為。把自己常見的編輯器改得合乎自己習慣,是長期生活在 terminal 世界的第一步,大家可以參考(抄)別人的範本開始。
讓自己的編輯器有家的感覺。
除了設定檔之外,功能多的編輯器還會有「外掛」的功能,可以讓使用者增加自己的套件。這也等大家熟悉環境之後再自行玩玩吧。
Nano
這是一個操作簡單好懂的編輯器,沒有語法上色1。多數的系統都有內建,所以到一個新的環境時幾乎都能使用。
鳥哥有教。其實直接執行它 nano
它的指令都會顯示在編輯畫面中。
Emacs
抱歉,我不會。但它是一個很好的編輯器。(誠徵大大補全)
Vim
一個老字號但維持穩定開發的編輯器。他有個特色是編輯器的模式,有些模式能編輯文字,有些不行,但能做選取、搜尋等動作。還有特有的指令合成方式(像連續技、buff 這樣)
初學者通常會難以習慣,初期不熟模式、指令記不住的話會很難操作。所以建議一開始先記住最基本的指令,隨時掌握自己在的模式,日後再慢慢加深對 vim 的了解。
如果真的很沒概念,鳥哥也有寫介紹。
Vim 相關資源
Open Vim
互動式的線上學習網站,很短,跟著操作完能會 Vim 基本動作、存檔。
學習 Vim 的心法與攻略 (ptt)
了解最常用的 normal 與 insert 模式及最基本的指令。這篇的內容理解之後,就能用 vim 處理文字編輯了。
Vim adventure
如果很難學習 hjkl
、wb
移動的話,這是個要用 vim 指令控制的小遊戲。
Vim 本身的使用手冊
可以使用 vimtutor
指令,或者在 vim normal 模式時鍵入 :help
學習目標
-
能在 terminal 中編修一個文字檔名為
foo.txt
- Hint: try nano
nano foo.txt
-
搭配 root 權限修改系統的設定檔(你在鳥哥可能有經驗了)
- Hint: try sudo
-
能在 console 中編寫程式碼。用 1. 的方案也可,但建議再試試看另外一個
- Hint: try vi, vim or emacs
-
修改 editor 設定讓它更符合自己的習慣。
- Hint: for vim, try editing
~/.vimrc
; for emacs, try editing~/.emacs
- Hint: for vim, try editing
-
用 terminal editor 使用 markdown 格式記錄這些練習的筆記與答案。
正規表示式 Regex
Vim 在 normal 模式下能用 /{pattern}
搜尋文中的字串。除了直接把想要查的字串寫在 pattern 裡以外,還可以設計規則找出符合 pattern 但不一樣的結果。這樣的規則稱之為正規表示式(Regular Expression, or regex)。
想做很複雜的字串比對時,都應該考慮是否能使用 regex
要做字串比對的地方,工具通常都會提供使用 regex,例如 grep
、sed
。Vim 與 Python 也都有提供 regex 的功能。
Regex 語法派別
既然 regex 是一套字串比對的規則,就有規範它的語法。主要的 regex 語法有兩大類:
- BRE (basic regex)
- Ex.
[:alnum:]
- Ex.
- ERE (extended regex)
- Ex.
\w
- Ex.
在 Linux 指令當中通常會因為使用 regex 語法的不同分成多個指令2。例如 grep 使用 BRE;egrep 使用 ERE。
與文字編輯相關的工具,像 Vim、Python、Perl3 也有他們各自寫 regex 的方式,但多少都與前兩大類相似,使用時都應該先查一下他們的語法。Vim 可以用 :help regex
查看。
相關資源
Regex One
主要是介紹 pcre 的語法,每一個 example 多介紹一個新的語法。接著還有個 practical examples 練習整理不同的語法。
Regex 101
regex 很容易寫到自己都看不懂,這是一個幫助了解自己或別人寫好的 regex pattern 的網站。