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=n,n 預設值為 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為了支援豐富的第三方外掛,自身定義了一套簡單的指令碼開發語言,供程式設計師自行開發自己所需要的外掛,外掛開發介紹可以參考: