【筆記】Vim的操作


1.0 Vim的工作模式

  • Vim的命令模式:

使用Vim編輯文件時,默認處于命令模式。

此模式下,可使用方向鍵(上、下、左、右鍵)或 k、j、h、i 移動光標的位置,還可以對文件內容進行復制、粘貼、替換、刪除等操作。

  • Vim的輸入模式:

在輸入模式下,Vim可以對文件執(zhí)行寫操作。

命令模式狀態(tài)下輸入 i、I、a、A、o、O 等插入命令切換到輸入模式,當編輯文件完成后按Esc鍵即可返回命令模式。

  • Vim的編輯模式:

編輯模式用于對文件中的指定內容執(zhí)行保存、查找或替換等操作。

命令模式狀態(tài)下按“:”鍵切換到編輯模式,指令執(zhí)行后Vim會自動返回命令模式。如想直接返回命令模式,按Esc即可。


2.0 Vim打開文件

Vi打開文件的選項 說 明
vim filename 打開或新建一個文件,并將光標置于第一行的首部
vim -r filename 恢復上次vim打開時崩潰的文件
vim -R filename 把指定的文件以只讀方式放入Vim編輯器中
vim + filename 打開文件,并將光標置于最后一行的首部
vi +n filename 打開文件,并將光標置于第n行的首部
vi +/pattern filename 打幵文件,并將光標置于第一個與pattern匹配的位置
vi -c command filename 在對文件進行編輯前,先執(zhí)行指定的命令

剛打開文件時Vim處于命令模式,此時文件的下方會顯示文件的一些信息,包括文件的總行數和字符數,以及當前光標所在的位置等。


3.0 Vim編輯文件

3.1 Vim插入文本-命令模式

快捷鍵 功能描述
i 在當前光標所在位置插入隨后輸入的文本,光標后的文本相應向右移動
I 在光標所在行的行首插入隨后輸入的文本,行首是該行的第一個非空白字符,
相當于光標移動到行首執(zhí)行i命令
o 在光標所在行的下面插入新的一行。光標停在空行首,等待輸入文本
O 在光標所在行的上面插入新的一行。光標停在空行的行首,等待輸入文本
a 在當前光標所在位置之后插入隨后輸入的文本
A 在光標所在行的行尾插入隨后輸入的文本,相當于光標移動到行尾再執(zhí)行a命令

3.2 Vim查找文本-編輯模式

快捷鍵 功能描述
/abc 從光標所在位置向前查找字符串abc
/^abc 查找以abc為行首的行
/abc$ 查找以abc為行尾的行
?abc 從光標所在為主向后查找字符串abc
n 向同一方向重復上次的查找指令
N 向相反方向重復上次的查找指定
  • 在查找過程中需要注意的是,要查找的字符串是嚴格區(qū)分大小寫的。
  • 如果想忽略大小寫,則輸入命令":set ic";調整回來輸入":set noic"。
  • 如果在字符串中出現特殊符號,則需要加上轉義字符 "\"。常見的特殊符號有 \、*、?、$等。如果出現這些字符,例如,要查找字符串"10",則需要在命令模式中輸入 "/10\\"。

3.3 Vim替換文本-編輯模式

快捷鍵 功能描述
r 替換光標所在位置的字符
R 從光標所在位置開始替換字符,其輸入內容會覆蓋掉后面等長的文本內容,按“Esc”可以結束
:s/a1/a2/g 將當前光標所在行中的所有a1用a2替換
:n1,n2s/a1/a2/g 將文件中n1到n2行中所有a1都用a2替換
:g/a1/a2/g 將文件中所有的a1都用a2替換

例如,要將某文件中所有的"root"替換為"liudehua",則有兩種輸入命令,分別為:

:1, $s/root/liudehua/g
或
:%s/root/liudehua/g

3.4 Vim 刪除文本-命令模式

快捷鍵 功能描述
x 刪除光標所在位置的字符
dd 刪除光標所在行
ndd 刪除當前行(包括此行)后n行文本
dG 刪除光標所在行一直到文件末尾的所有內容
D 刪除光標位置到行尾的內容
:a1,a2d 函數從a1行到a2行的文本內容

注意,被刪除的內容并沒有真正刪除,都放在了剪貼板中。將光標移動到指定位置處,按下 "p"鍵,就可以將剛才刪除的內容又粘貼到此處。

3.5 Vim復制文本-命令模式

快捷鍵 功能描述
p 將剪貼板中的內容復制到光標后
P 將剪貼板中的內容復制到光標前
yy 將光標所在行復制到剪貼板,此命令前可以加數字n,可復制多行
yw 將光標位置的單詞復制到剪貼板

3.6 Vim其他常用快捷鍵

某些情況下,可能需要把兩行進行連接。比如說,下面的文件中有兩行文本,現在需要將其合并成一行(實際上就是將兩行間的換行符去掉)??梢灾苯釉诿钅J街邪?J"鍵。


4.0 Vim保存退出文本

Vim的保存和退出是在編輯模式中進行的。

命令 功能描述
:wq 保存并退出Vim編輯器
:wq! 保存并強制退出Vim編輯器
:q 不保存就退出Vim編輯器
:q! 不保存,且強制退出Vim編輯器
:w 保存但是不退出Vim編輯器
:w! 強制保存文本
:w filename 另存到filename文件
x! 保存文本,并退出Vim編輯器,更通用的一個vim命令
ZZ 直接退出Vim編輯器

需要注意的是,"w!"和"wq!"等類似的指令,通常用于對文件沒有寫權限的時候(顯示 readonly,如圖12所示),但如果你是文件的所有者或者root用戶,就可以強制執(zhí)行。


5.0 Vim移動光標

5.1 光標以字母為單位移動

快捷鍵 功能描述
j/下 光標向下移動一行(以回車為換行符),也就是光標向下移動
k/上 光標向上移動一行(也就是向上移動)
h/左 光標向左移動一位
i/右 光標向右移動一位

5.2 光標以單詞為單位移動

快捷鍵 功能描述
w 或 W 光標移動至下一個單詞的單詞首
b 或 B 光標移動至上一個單詞的單詞首
e 或 E 光標移動至下一個單詞的單詞尾
nw 或 nW n為數字,表示光標向右移動n個單詞
nb 或 nB n為數字,表示光標向左移動n個單詞

5.3 光標移動至行首或行尾

快捷鍵 功能描述
0 或 ^ 光標移動至當前行的行首
$ 光標移動至當前行的行尾
n$ 光標移動至當前行只有n行的行尾,n為數字

5.4 光標移動至指定字符

快捷鍵 功能描述
fx 光標移動至當前行中下一個x字符處
Fx 光標移動至當前行中下一個x字符處

5.5 光標移動到指定行

快捷鍵 功能描述
gg 光標移動到文件開頭
G 光標移動至文件末尾
nG 光標移動到第n行,n為數字
:n 編輯模式下使用的快捷鍵,可以將光標快速定義到指定行的行首

5.6 光標移動到匹配的括號處

程序員在編輯程序時,經常會為將光標移動到與一個 "(" 匹配的 ")" (對于 [] 和 {} 也是一樣的)處而感到頭疼。Vim里面提供了一個非常方便地査找匹配括號的命令,這就是 "%"。


6.0 Vim多窗口編輯

在編輯文件時,可以使用Vim同時打開兩個文件,每個文件分別占用一個窗口。
例如,在査看 /etc/passwd 時需要參考 /etc/shadow,有兩種辦法可以實現:

方法一:

  1. 先使用Vim打開第一個文件;
  2. 接著輸入命令":sp/etc/shadow",水平切分窗口,然后按回車鍵;
  3. 如果想垂直切分窗口則可以輸入 ":vs/etc/shadow";

方法二:

可以直接執(zhí)行命令"vim -o 第一個文件名 第二個文件名",也就是 "vim-o /etc/passwd /etc/shadow"。

  • 切換到另一個文件窗口,可以按"Ctrl+W"快捷鍵。
  • 如果想將一個文件的內容全部復制到另一個文件中,則可以輸入命令":r 被復制的文件名",即可將導入文件的全部內容復制到當前光標所在行下面。

7.0 Vim批量注釋

連續(xù)行的注釋其實可以用替換命令來完成。換句話說,在指定范圍行加"#"注釋,可以使用 ":起始行,終止行 s/^/#/g",例如:

:1,10s/^/#/g
  • 表示在第1~10行行首加"#"注釋。"^"意為行首;"g"表示執(zhí)行替換時不詢問確認。如果希望每行交互詢問是否執(zhí)行,則可將"g"改為"c"。

取消連續(xù)行注釋,則可以使用":起始行,終止行s/^#//g",例如:

:1,10s/^#//g
  • 意為將行首的"#"替換為空,即刪除。

添加"http://"注釋要稍微麻煩一些,命令格式為":起始行,終止行 s/^////g"。例如:

:1,5s/^/\/\//g
  • 表示在第1~5行行首加"http://"注釋,因為"/"前面需要加轉義字符 "\",所以寫出來比較奇特。

以上方法可以解決連續(xù)行的注釋問題,如果是非連續(xù)的多行就不靈了,這時我們可以定義快捷鍵簡化操作。格式如下:

:map 快捷鍵 執(zhí)行命令
  • 如定義快捷鍵"Ctrl+P"為在行首添加"#"注釋,可以執(zhí)行":map^P l#<Esc>"。其中"^P"為定義快捷鍵"Ctrl+P"。注意:必須同時按"Ctrl+V+P"快捷鍵生成"^P"方可有效,或先按 "Ctrl+V"再按"Ctrl+P"也可以,直接輸入"^P"是無效的。
  • "l#<Esc>"就是此快捷鍵要觸發(fā)的動作,"l"為在光標所在行行首插入,"#"為要輸入的字符,"<Esc>"表示退回命令模式。"<Esc>"要逐個字符輸入,不可直接按鍵盤上的Esc鍵。
  • 設置成功后,直接在任意需要注釋的行上按"Ctrl+P"快捷鍵,就會自動在行首加上"#" 注釋。取消此快捷鍵定義,輸入":unmap^P"即可。
  • 我們可以延伸一下,如果想取消文件行首的快捷鍵,則可以設置":map^B 0x",快捷鍵為 "Ctrl+B", "0" 表示跳到行首,"x" 表示刪除光標所在處字符。
  • 再如,有時我們寫完腳本等文件,需要在末尾注釋中加入自己的郵箱,則可以直接定義每次按快捷鍵 "Ctrl+E" 實現插入郵箱,定義方法為 ":map^E asamlee@itxdl.net<Esc>"。其中 "a" 表示在當前字符后插入,"samlee@itxdl.net" 為插入的郵箱,"<Esc>" 表示插入后返回命令模式。
  • 將快捷鍵對應的命令保存在 .vimrc 文件中,即可在每次使用 Vim 時自動調用,非常方便。

8.0 Vim顯示行號

在命令模式下輸入":set nu"即可顯示每一行的行號,如果想要取消行號,則再次輸入":set nonu"即可。
如果希望每次打開文件都默認顯示行號,則可以編輯Vim的配置文件。每次使用Vim 打開文件時,Vim 都會到當前登錄用戶的宿主目錄(用戶配置文件所在地)中讀取 .vimrc 文件,此文件可以對 Vim 進行一些默認配置設定。

8.1 常見的可以寫入.vimrc文件中的設置參數

快捷鍵 功能描述
:set nu/:set nonu 設置與取消行號
:syn on/:syn off 是否依據語法顯示相關的顏色幫助。在Vim中修改相關的配置文件或Shell腳本文件 時(如前面示例的腳本/etc/init.d/sshd),默認會顯示相應的顏色,用來幫助排錯。如果覺得顏色產生了干擾,則可以取消此設置
set hlsearch/set nohlsearch 設置是否將査找的字符串高亮顯示。默認是hlsearch高亮顯示
set nobackup/set backup 是否保存自動備份文件。默認是nobackup不自動備份。如果設定了:set backup,則會產生“文件名?”作為備份文件
set ruler/set noruler 設置是否顯示右下角的狀態(tài)欄。默認是ruler顯示
set showmode/set noshowmode 設置是否在左下角顯示如“一INSERT--”之類的狀態(tài)欄。默認是showmode顯示
  • 設置參數實在太多了,這里只列舉了常見的幾個,可以使用":set all"命令査看所有的設置參數。這些設置參數都可以寫入 .vimrc 配置文件中,讓它們永久生效,也可在 Vim 中執(zhí)行,讓它們臨時生效。
  • 注意,表中各配置參數前面可以添加冒號(:),也可以省略,兩種寫法都可以。

9.0 Vim 配置文件(.vimrc)

Vim 配置文件分為系統(tǒng)配置文件和用戶配置文件:

系統(tǒng)配置文件位于 Vim 的安裝目錄(默認路徑為 /etc/.vimrc)。
用戶配置文件位于主目錄 ~/.vimrc,即通過執(zhí)行 vim ~/.vimrc 命令即可對此配置文件進行合理修改。通常情況下,Vim 用戶配置文件需要自己手動創(chuàng)建。
注意,Vim 用戶配置文件比系統(tǒng)配置文件的優(yōu)先級高,Vim 啟動時,會優(yōu)先讀取 Vim 用戶配置文件。


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容