1. 程式人生 > >VIM基本操作(本人還不熟悉的~)

VIM基本操作(本人還不熟悉的~)

更大範圍的移動:

*          當游標停留在一個單詞上,* 鍵會在檔案內搜尋該單詞,並跳轉到下一處;
#          當游標停留在一個單詞上,# 在檔案內搜尋該單詞,並跳轉到上一處;
(/)        移動到 前/後 句 的開始;
{/}        跳轉到 當前/下一個 段落 的開始。
g_         到本行最後一個不是 blank 字元的位置。
fa         到下一個為 a 的字元處,你也可以fs到下一個為s的字元。
t,         到逗號前的第一個字元。逗號可以變成其它字元。
3fa        在當前行查詢第三個出現的 a。
F/T        和 f 和 t 一樣,只不過是相反方向;
gg         將游標定位到檔案第一行起始位置;
G          將游標定位到檔案最後一行起始位置;
NG或Ngg    將游標定位到第 N 行的起始位置。

同樣需要注意字母的大小寫。H 和 L 命令還可以加數字。如 2H 表示將游標移到螢幕的第2行3L 表示將游標移到螢幕的倒數第3行。

當將游標移到所要的行是,行內移動 游標可以用下面的命令來實現:

w                右移游標到下一個字的開頭;
e                右移游標到一個字的末尾;
b                左移游標到前一個字的開頭;0                數字0,左移游標到本行的開始;$                右移游標,到本行的末尾;
^                移動游標,到本行的第一個非空字元。

3. 插入模式

3.1 進入插入模式

在編輯模式下正確定位游標之後,可用以下命令切換到插入模式:

i            在游標左側插入正文
a            在游標右側插入正文
o            在游標所在行的下一行增添新行
O            在游標所在行的上一行增添新行
I            在游標所在行的開頭插入
A            在游標所在行的末尾插入

4. 命令模式

4.4 Vim中的正則表示式

:/^struct/

^ 字元比較每行開頭的字串。所以上面的命令表示:找出以字串 struct 開頭的行。
也可以用類似辦法在搜尋字串後面加上表示行的末尾的特殊字元 $ 來找出位於行末尾的字:

:/^struct/

下表給出大多數特殊字元和它們的含義:

^                放在字串前面,匹配行首的字;
$                放在字串後面,匹配行尾的字;\<               匹配一個字的字頭;
\>               匹配一個字的字尾;
.                匹配任何單個正文字元;
[str]            匹配 str 中的任何單個字元;
[^str]           匹配任何不在 str 中的單個字元;
[a-b]            匹配 a 到 b 之間的任一字元;
*                匹配前一個字元的 0 次或多次出現;
\                轉義後面的字元。

4.5 正文替換

利用 :s 命令可以實現字串的替換。具體的用法包括:

:%s/str1/str2/        用字串 str2 替換行中首次出現的字串 str1(%表示全文)
:s/str1/str2/g        用字串 str2 替換行中所有出現的字串 str1
:.,$ s/str1/str2/g    用字串 str2 替換正文當前行到末尾所有出現的字串 str1
:1,$ s/str1/str2/g    用字串 str2 替換正文中所有出現的字串 str1
:g/str1/s//str2/g     功能同上
:m,ns/str1/str2/g     將從m行到n行的str1替換成str2

從上述替換命令可以看到:
1. g 放在命令末尾,表示對搜尋字串的每次出現進行替換,不止匹配每行中的第一次出現;不加 g,表示只對搜尋字串的首次出現進行替換;g 放在命令開頭,表示對正文中所有包含搜尋字串的行進行替換操作;
2. s 表示後面跟著一串替換的命令;
3. % 表示替換範圍是所有行,即全文。

另外一個實用的命令,在Vim中統計當前檔案中字串 str1 出現的次數,可用替換命令的變形:

:%s/str1/&/gn

4.7 恢復檔案

Vim 在編輯某個檔案時,會另外生成一個臨時檔案,這個檔案的名稱通常以 . 開頭,並以 .swp 結尾。Vim 在正常退出時,該檔案被刪除,若意外退出,而沒有儲存檔案的最新修改內容,則可以使用恢復命令 :recover 來恢復檔案,也可以在啟動Vim時用 -r 選項。

4.8 選項設定

為控制不同的編輯功能,Vim 提供了很多內部選項。利用 :set 命令可以設定選項。基本語法為:

:set option         設定選項 option

常見的功能選項包括:

autoindent        設定該選項,則正文自動縮排
ignorecase        設定該選項,則忽略規則表示式中大小寫字母的區別
number            設定該選項,則顯示正文行號
ruler             設定該選項,則在螢幕底部顯示游標所在行、列的位置
tabstop           設定按 Tab 鍵跳過的空格數。例如 :set tabstop=nn 預設值為 8
mk                將選項儲存在當前目錄的 .exrc 檔案中

4.10 分屏與標籤頁

分屏

普通的Vim模式,開啟一個Vim程式只能檢視一個檔案,如果想同時檢視多個檔案,就需要用到Vim分屏與標籤頁功能。
Vim的分屏,主要有兩種方式:上下分屏(水平分屏)和左右分屏(垂直分屏),在命令模式分別敲入以下命令即可:

:split(可用縮寫 :sp)            上下分屏;
:vsplit(可用縮寫 :vsp)          左右分屏。

另外,也可以在終端裡啟動vim時就開啟分屏操作:

vim -On file1 file2...   開啟 file1 和 file2 ,垂直分屏
vim -on file1 file2...   開啟 file1 和 file2 ,水平分屏

理論上,一個Vim視窗,可以分為多個Vim螢幕,切換螢幕需要用鍵盤快捷鍵,命令分別有:

Ctrl+w+h            切換到當前分屏的左邊一屏;
Ctrl+w+l            切換到當前分屏的右邊一屏;
Ctrl+w+j            切換到當前分屏的下方一屏;
Ctrl+w+k            切換到當前分屏的上方一屏。

即鍵盤上的h,j,k,l 四個Vim專用方向鍵,配合Ctrl鍵和w鍵(window的縮寫),就能跳轉到目標分屏。另外,也可以直接按 Ctrl+w+w 來跳轉分屏,不過跳轉方向則是在當前Vim視窗所有分屏中,按照逆時針方向跳轉。
下面是改變尺寸的一些操作,主要是高度,對於寬度你可以使用 [Ctrl+W <] 或是 [Ctrl+W >] ,但這可能需要最新的版本才支援。

Ctrl+W =            讓所有的屏都有一樣的高度;
Ctrl+W +            增加高度;
Ctrl+W -            減少高度。

標籤頁

Vim的標籤(Tab)頁,類似瀏覽器的標籤頁,一個標籤頁開啟一個Vim的視窗,一個Vim的視窗可以支援N個分屏。
在Vim中新建一個標籤的命令是:

:tabnew

如果要在新建標籤頁的同時開啟一個檔案,則可以在命令後面直接附帶檔案路徑:

:tabnew filename

Vim中的每個標籤頁有一個唯一的數字序號,第一個標籤頁的序號是0,從左向右依次加一。關於標籤頁有一系列操作命令,簡介如下:

:tN[ext]                跳轉到上一個匹配的標籤
:tabN[ext]              跳到上一個標籤頁
:tabc[lose]             關閉當前標籤頁
:tabdo                  為每個標籤頁執行命令
:tabe[dit]              在新標籤頁裡編輯檔案
:tabf[ind]              尋找 'path' 裡的檔案,在新標籤頁裡編輯之
:tabfir[st]             轉到第一個標籤頁
:tabl[ast]              轉到最後一個標籤頁
:tabm[ove]  N           把標籤頁移到序號為N位置
:tabnew [filename]      在新標籤頁裡編輯檔案
:tabn[ext]              轉到下一個標籤頁
:tabo[nly]              關閉所有除了當前標籤頁以外的所有標籤頁
:tabp[revious]          轉到前一個標籤頁
:tabr[ewind]            轉到第一個標籤頁

4.11 與外部工具整合

Vim可以與許多外部程式整合,功能十分強大,比如 diff , ctags , sort , xxd 等等,下面選取幾個簡單介紹一下。

diff

Linux命令 diff 用來對比兩個檔案的內容,不過對比結果顯示在終端裡,可讀性比較差。結合Vim,在終端裡可以直接輸入命令 vimdiff,後面跟兩個檔名作為引數:

vimdiff file1 file2

即可在Vim裡分屏顯示兩個檔案內容的對比結果,對檔案內容差異部分進行高亮標記,還可以同步滾動兩個檔案內容,更可以實時修改檔案內容,方便程度和使用者體驗大大提高。

vimdiff a.txt b.txt

如果直接給 -d 選項是一樣的

vim -d a.txt b.txt

除了在終端裡開啟vimdiff 功能,也可以在開啟Vim後,在Vim的命令模式輸入相關命令來開啟 vimdiff 功能:

:diffsplit abc.txt

如果你現在已經開啟了一個檔案,想Vim幫你區分你的檔案跟 abc.txt 有什麼區別,可以在Vim中用 diffsplit 的方式開啟第二個檔案,這個時 候Vim會用 split(分上下兩屏)的方式開啟第二個檔案,並且通過顏色,fold來顯示兩個檔案的區別
這樣Vim就會用顏色幫你區分開2個檔案的區別。如果檔案比較大(原始碼)重複的部分會幫你摺疊起來。

:diffpatch filename

通過 :diffpatch 你的patch的檔名,就可以以當前檔案加上你的patch來顯示。vim會split一個新的屏,顯示patch後的資訊並且用顏色標明區別。
如果不喜歡上下對比,喜歡左右(比較符合視覺)可以在前面加 vert ,例如:

:vert diffsplit abc.txt
:vert diffpatch abc.txt

看完diff,用 :only 回到原本編輯的檔案,覺得diff的討厭顏色還是在哪裡,只要用 :diffoff 關閉就好了。
還有個常用的diff中的就是 :diffu ,這個是 :diffupdate 的簡寫,更新的時候用。
Vim的diff功能顯示效果如下所示:

sort

Linux命令 sort 可以對文字內容進行按行中的字元比較、排序,但在終端裡使用 sort命令處理檔案,並不能實時檢視檔案內容。具體用法請自查手冊。

xxd

vim+xxd 是Linux下最常用的二進位制文字編輯工具,xxd其實是Vim外部的一個轉換程式,隨Vim一起釋出,在Vim裡呼叫它來編輯二進位制文字非常方便。
首先以二進位制模式在終端裡開啟一個檔案:

vim -b filename

Vim 的 -b 選項是告訴 Vim 開啟的是一個二進位制檔案,不指定的話,會在後面加上 0x0a ,即一個換行符。
然後在Vim的命令模式下鍵入:

:%!xxd

即可看到二進位制模式顯示出來的文字,看起來像這樣:

 0000000: 1f8b 0808 39d7 173b 0203 7474 002b 4e49  ....9..;..tt.+NI 
 0000010: 4b2c 8660 eb9c ecac c462 eb94 345e 2e30  K,......b..4^.0 
 0000020: 373b 2731 0b22 0ca6 c1a2 d669 1035 39d9  7;'1.".....i.59

然後就可以在二進位制模式下編輯該檔案,編輯後儲存,然後用下面命令從二進位制模式轉換到普通模式:

:%!xxd -r

另外,也可以調整二進位制的顯示模式,預設是 2 個位元組為一組,可以通過 g 引數調整每組位元組數:

:%!xxd -g 1         表示每1個位元組為1組 
:%!xxd -g 2         表示每2個位元組為1組(預設) 
:%!xxd -g 4         表示每4個位元組為1

5. Vim配置

最初安裝的Vim功能、特性支援比較少,用起來比較費勁,想要稍微“好用”一點,需做一些初步的配置。Vim的配置主要分為Vim本身特性的配置和外部外掛的配置兩部分。
Vim的配置是通常是存放在使用者主目錄的 .vimrc 的隱藏檔案中的。就Vim本身特性來說,基礎的配置有程式語言語法高亮、縮排設定、行號顯示、搜尋高亮、TAB鍵設定、字型設定、Vim主題設定等等,稍微高階一些的有程式語言縮排、自動補全設定等,具體配置項可以自行查資料,全面詳細的配置項介紹可以參考:
《Vim Options》:
http://vimcdoc.sourceforge.net/doc/options.html#%27completeopt%27

6. Vim外掛

Vim“編輯器之神”的稱號並不是浪得虛名,然而,這個榮譽的背後,或許近半的功勞要歸功於強大的外掛支援特性,以及社群開發的各種各樣功能強大的外掛。

平時開發人員常用外掛主要是目錄(檔案)檢視和管理、程式語言縮排與自動補全、程式語言Docs支援、函式跳轉、專案管理等等,簡單配置可以參考下面:

當然,這些外掛都是拜Vim本身的外掛支援特性所賜。Vim為了支援豐富的第三方外掛,自身定義了一套簡單的指令碼開發語言,供程式設計師自行開發自己所需要的外掛,外掛開發介紹可以參考:

7. Vim完整文件