天天看點

【基礎拾遺】編輯器之神-VIM

在這天地間,流傳這兩大神器的故事:據說Emacs是神的編輯器,而Vim是編輯器之神。正所謂,工欲善其事,必先利其器。今天就和大家分享一下關于編輯器之神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>:在光标所在行的上一行打開一個新行,并轉換為輸入模式;

編輯模式 - - &gt; 輸入模式

輸入模式 - - &gt; 編輯模式

編輯模式 - - &gt; 末行模式

末行模式 - - &gt; 編輯模式

關閉檔案

圖示說明如下: (轉載請注明出處)

字元間跳轉:

<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指令;

改變指令:編輯模式 - -&gt; 輸入模式

<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>"&amp;"</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>:水準分割

【基礎拾遺】編輯器之神-VIM

<code>-O</code>:垂直分割

【基礎拾遺】編輯器之神-VIM

在視窗間切換:<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>