在這天地間,流傳這兩大神器的故事:據說Emacs是神的編輯器,而Vim是編輯器之神。正所謂,工欲善其事,必先利其器。今天就和大家分享一下關于編輯器之神Vim的傳說。

VI:Visual Interface
何為文本檔案?文本檔案一般指隻有字元原生編碼構成的二進制計算機檔案,與富文本相比,其不包含字樣樣式的控制元素,能夠被最簡單的文本編輯器直接讀取
文本檔案常見的格式?ASCII、MIME、.txt、…
那麼,何為文本編輯器?文本編輯器是計算機軟體中的一種。主要用于用來編寫和檢視文本檔案。
文本編輯器的種類:
行編輯器:sed
全屏編輯器:nano、vi、vim
VIM:模式化的編輯器
基本模式
編輯模式 (指令模式)
輸入模式 (插入模式)
末行模式 (vim内置的指令行接口)
Note:打開的時候預設的模式是編輯模式
打開檔案
<code># vim [OPTION]... FILE...</code>
<code>+#</code>:打開檔案後,直接讓光标處于第#行的行首
<code>+/PATTERN</code>:打開檔案後,直接讓光标處于第一個被PATTERN比對到的行的行首;
模式轉換
模式轉換:
<code>:q</code>:退出
<code>:!</code>:強制退出,丢棄做出的修改;
<code>:wq</code>:儲存退出;
<code>:x</code>:儲存退出;
<code>:w /PATH/TO/SOMEWHERE</code>:目前編輯的文本儲存到别的檔案;
<code>ZZ</code>:儲存退出;
<code>ESC</code>
<code>:</code>
<code>i</code>:insert,在光标所在處前面插入;
<code>a</code>:append,在光标所在處的後面插入;
<code>o</code>:open,在目前光标所在行的下一行打開新行,并轉換為輸入模式;
<code>I</code>:在目前光标所在行的行首輸入;
<code>A</code>:在目前光标所在行的行尾輸入;
<code>O</code>:在光标所在行的上一行打開一個新行,并轉換為輸入模式;
編輯模式 - - > 輸入模式
輸入模式 - - > 編輯模式
編輯模式 - - > 末行模式
末行模式 - - > 編輯模式
關閉檔案
圖示說明如下: (轉載請注明出處)
字元間跳轉:
<code>h</code>:左
<code>l</code>:右
<code>k</code>:上
<code>j</code>:下
<code>h,j,k,l</code>
<code>#COMMAND</code>:跳轉由#指定的個數的字元;
單詞間跳轉:
<code>w</code>:跳轉至下一個單詞或後一個單詞的詞首;
<code>e</code>:跳轉至目前或下一個單詞的詞尾;
<code>b</code>:跳轉至目前或下一個單詞的詞首;
<code>#COMMAND</code>:由#指定一次跳轉的單詞數;
行首行尾跳轉:
<code>^</code>:跳轉至行首的第一個非空白字元;
<code>0</code>:跳轉至絕對的行首;
<code>$</code>:跳轉至絕對行尾;
行間移動:
<code>#G</code>:跳轉至由#指定行;
<code>G</code>:跳轉至最後一行;
<code>1G</code>,<code>gg</code>:跳轉至第一行;
句間移動:
<code>)</code>:跳轉至下一個句子;
<code>(</code>:跳轉至上一個句子;
段落間移動:
<code>}</code>:跳轉至下一段
<code>{</code>:跳轉至上一段
字元編輯:
<code>x</code>:删除光标處的單個字元;
<code>#x</code>:删除光标處起始的#個字元;
<code>xp</code>:交換光标所在處的字元及其後面字元的位置;
替換指令:
<code>r</code>,replace
<code>r</code>:替換光标所在處的字元;(單字元替換)
删除指令:
<code>#dd</code>:向下删除#行;
<code>d$</code>:删除至絕對行尾
<code>d^</code>:删除至行首的第一個非空白字元
<code>d0</code>:删除至絕對行首
<code>d</code>:删除指令,可結合光标跳轉字元,實作範圍删除;
<code>dd</code>:删除光标所在行;
粘貼指令:
(<code>p</code>,put,paste)
<code>p</code>:緩沖區中存儲的如果為整行内容,則粘貼至目前光标所在行的下方;否則,則粘貼至目前光标所在處的後面;
<code>P</code>:緩沖區中存儲的如果為整行内容,則粘貼至目前光标所在行的上方;否則,則粘貼至目前光标所在處的前面;
複制指令:
<code>y$</code>:複制至絕對行尾
<code>y0</code>:複制至絕對行首
<code>y^</code>:複制至行首的第一個非空白字元
<code>yy</code>:複制整行
<code>#yy</code>:複制多行;
<code>y</code>,yank
<code>y</code>:複制,工作行行為相似于d指令;
改變指令:編輯模式 - -> 輸入模式
<code>c</code>,change
<code>c</code>:修改
<code>cc</code>:删除并輸入新内容
<code>#cc</code>:一次删除#行
<code>v</code>:按字元標明
<code>V</code>:按行標明
Note:經常結合編輯指令;
<code>u</code>(undo):撤銷此前的操作;
<code>#u</code>:撤銷指定次數的操作;
撤銷此前的撤銷:Ctrl+r
重複前一個編輯操作:<code>.</code>
<code>Ctrl+f</code>:向檔案尾部翻一屏;
<code>Ctrl+b</code>:向檔案首部翻一屏;
<code>Ctrl+d</code>:向檔案尾部翻半屏;
<code>Ctrl+u</code>:向檔案首部翻半屏;
vim自帶的練習教程:
<code>vimtutor</code>
内建的指令行接口;
特性:
(1). 位址定界
後跟一個編輯指令:
<code>d</code>:删除指定範圍的内容
<code>y</code>:複制指定範圍的内容
<code>w /PATH/TO/SOMEWHERE</code>:将範圍内的行另存至指定檔案中;
<code>r /PATH/FROM/SOMEFILE</code>:在指定位置插入指定檔案中的所有内容;
<code>:start_pos,end_pos</code>
<code>#:</code>具體的第#行,例如:2表示第2行;
<code>#,#</code>:從左側#表示起始,到右側#表示結束;
<code>#,+#</code>:從左側#表示的行開始,加上右側#表示的行數;
<code>.</code>目前行;
<code>$</code>:最後一行;
<code>%</code>:全文;相當于(1,$)
<code>/pat1/,/pat2/</code>:表示從第一次被pat1比對到的行開始,一直到pat2比對到的行結束
使用方式:
(2). 查找
<code>n</code>:與指令同方向;
<code>N</code>:與指令反方向;
<code>/PATTERN</code>:從目前光标所在處向檔案尾部查找
<code>?PATTERN</code>:從目前光标所在處向檔案首部查找
(3). 查找并替換
<code>s/要查找的内容/替換為的内容/修飾符</code>
查找替換中的分隔符<code>/</code>可替換為其它字元,例如:
<code>i</code>:忽略大小寫
<code>g</code>:全局替換;預設情況下,沒一行隻替換第一次出現的内容;
要查找的内容:可使用模式;
替換為的内容:不能使用模式,但可以使用\1, \2, …等後向引用符号;好可以使用<code>"&"</code>引用前面查找時查找到的整個内容;
修飾符:
<code>s@@@</code>
<code>s###</code>
<code>s</code>:在末行模式下完成查找替換操作
vim FILE1 FILE2 FILE3 …
<code>:next</code> 切換至下一個文本
<code>:prev</code> 切換至前一個文本
<code>:first</code> 切換至前一個文本
<code>:last</code> 切換至最後一個文本
<code>:wall</code> 儲存所有
<code>:qall</code> 退出所有
vim -o|-O FILE1 FILE2 …
<code>-o</code>:水準分割
<code>-O</code>:垂直分割
在視窗間切換:<code>Ctrl+w,Arrow</code>
<code>Ctrl+w,s</code>:split,水準分割
<code>Ctrl+w,v</code>:vertical,垂直分割
配置檔案:(永久有效)
全局:<code>/etc/vimrc</code>
個人:<code>~/.vimrc</code> (預設不存在,需要自己建立)
末行:(目前vim程序有效)
(1) 行号:
顯示:<code>set number</code>,簡寫為:<code>set nu</code>
取消顯示:<code>set nonumber</code>,簡寫為:<code>set nonu</code>
(2) 括号比對:
比對:<code>set showmatch</code>,簡寫為:<code>set sm</code>
取消比對:<code>set nosm</code>
(3) 自動縮進:
開啟:<code>set ai</code>
禁用:<code>set noai</code>
(4) 高亮搜尋
開啟:<code>set hlsearch</code>
禁用:<code>set nohlsearch</code>
(5) 文法高亮
開啟:<code>syntax on</code>
禁用:<code>syntax off</code>
(6) 忽略字元大小寫
啟用:<code>set ic</code>
禁用:<code>set noic</code>
在末行模式下:<code>help SUBJECT</code>