編輯器之神——Vim之常用快捷鍵分類整理
Vim起源
??Vim是從vi發展出來的一個文本編輯器,vi(visual editor)是unix/linux操作系統中最經典的文本編輯器,vim原來的名字叫做vi imitation(vi模擬器),目的是完全復制vi的功能,為開源和在類unix系統中移植而生,在成功被移植到unix之后名字變成了vi improved(vi改進版)。
??Vim創造了開源世界“協作精神”和“自由軟件持續改進”的奇跡。成為了自由軟件歷史上不朽的“豐碑”。后世為了紀念這場偉大的編輯器開源運動,給vim封了神——“編輯器之神”。
有一款與Vim并稱的編輯器Emacs,遠古時代誕生的始祖軟件很多都是用Emacs編輯器創造的,Emacs被稱作“神之編輯器”,為了紀念使用Emacs寫C的大神們。
??最近涉及了很多Linux下的工作,使用了一段時間的Vim,雖然Vim的學習曲線陡峭,但是奇異的操作方式在熟悉了之后帶來的是對鼠標依賴的解除,用起來還是很帶感的,雖然快捷鍵非常多,但快捷鍵的設定富有邏輯性,理解了之后要在Vim下生存并不是很困難的事,存活下來之后就是日常使用增加熟練度。
??整理了常用的Vim快捷鍵分類如下。
1 模式切換
- esc:normal常規模式;
- i:insert插入模式;
- v:visual可視模式;
- ctrl+v:visual block可視塊模式
- : ——command命令模式;
- r:replace替換模式。
2 啟動vim
- vim + file: 打開文件,從文件的末尾開始;
- vim +num file: 打開文件,從第num行開始;
- vim +/string file: 打開file,并將光標停留在第一個找到的string上。
- vim -c cmd file: 在打開文件前,先執行指定的命令;
- vim -R file: 以只讀的方式打開文件,但可以強制保存;
- vim -M file: 以只讀的方式打開文件,不可以強制保存;
- vim -r file: 恢復上次異常退出的文件;
3 文檔操作
-
:——進入命令模式
-
:!——調用shell命令的前綴“!”,比如:!pwd可以顯示當前路徑
-
:w ——保存修改;
-
:q[uit] ——退出當前窗口(CTRL-w q);
-
:q!——強制退出(可在不保存的情況下退出)
-
:wq ——保存并退出(ZZ或:x);
-
:saveas newfilename ——另存為;
-
:e ——重新加載當前文檔;
-
:f或ctrl+g ——顯示文檔名,是否修改,和光標位置。
-
:help ——查看幫助
4 移動光標
4.1 基本移動(文檔方向=文字輸入方向:后->前)
- h,j,k,l:左(退格),上,下,右(空格)移動光標
? - b:移動到上一個單詞的開頭;
- B:移動到上一個單詞的開頭(忽略標點);
- w:移動到下一個單詞的開頭;
- W:移動到下一個單詞的開頭(忽略標點);
? - e:移動到單詞結尾(如果已在結尾則移動到下一單詞結尾);
- E:移動到單詞結尾(忽略標點);
- ge:移動到上一個單詞結尾;
- gE:移動到上一個單詞結尾(忽略標點);
? - %:移動到配對的括號
? - (:上移一句;
- ):下移一句;
- {:移動到上一個空行,段落以空行為間隔;
- }:移動到下一個空行;
- [[:將光標移動到上一個代碼段(或函數)的行首;
- ]]:將光標移動到下一個代碼段(或函數)的行首;
? - +或Enter: 把光標移至下一行第一個非空白字符;
- -: 把光標移至上一行第一個非空白字符;
? - f+“單字符”:行內移動到下一個目標,使用“,”和“;”可以沿上下繼續搜索;
- F+“單字符”:行內移動到上一個目標,使用“,”和“;”可以沿上下繼續搜索;
- t+“單字符”:行內移動到下一個目標前,使用“,”和“;”可以沿上下繼續搜索;
- T+“單字符”:行內移動到上一個目標后,使用“,”和“;”可以沿上下繼續搜索;
可以在操作前加上數字,表示操作的重復次數:
[n]+“移動操作”——操作前加上“數字”表示重復次數,3h表示左移三次,3fx表示移到后續的第3個x的位置;
[n]+“i”+“輸入”——重復多次輸入,3igo表示輸入gogogo。
- 0:移動到行首
- ^:移動到行首(非空白字符)
- $:移動到行尾
? - H:移動到屏幕上方(high)
- M:移動到屏幕中間(middle)
- L:移動到屏幕下方(low)
? - gg:移動到文件開頭
- G:移動到文件結尾
? - n| ——移動到第n列
- nG或:n ——移動到第n行
4.2 翻屏(不修改代碼)
- ctrl+b: 向上翻一屏;
- ctrl+f:向下翻一屏;
? - ctrl+u:向上翻半屏;
- ctrl+d:向下翻半屏;
? - ctrl+e:向下滾動一行;
- ctrl+y:向上滾動一行;
? - zz:將當前光標所在行居中;
- zt:將當前光標所在行置頂;
- zb:將當前光標所在行置底;
4.3 標記(導航)
可以用Ctrl+o和Ctrl+i進行后退和前進。
m{a-z}: 標記光標所在位置,局部標記,只用于當前文件;
m{A-Z}: 標記光標所在位置,全局標記,標記后,退出Vim, 重新啟動,標記仍有效;
`{a-z}: 移動到標記位置;
`{0-9}:回到上[1-10]次關閉vim時最后離開的位置;
``: 移動到上次編輯的位置;
`": 移動到上次離開的地方;
`.: 移動到最后改動的地方;
:marks ——顯示所有標記;
:delmarks a b ——刪除標記a和b;
:delmarks a-c ——刪除標記a、b和c;
:delmarks a c-f ——刪除標記a、c、d、e、f;
:delmarks! ——刪除當前緩沖區的所有標記;
:help mark-motions ——查看更多關于mark的知識。
上述操作中,出現`(點號)的地方也可以使用'(單引號),使用點號可以精確到列,使用單引號只精確到行
5 插入
所有的插入操作都會自動進入i插入模式
5.1 基本插入
- i:光標前插入;
- I:當前行第一個非空字符前插入
- a: 在光標后插入;
- A: 在當前行最后插入;
- o: 在下面新建一行插入;
- O: 在上面新建一行插入;
? - :r filename在當前位置插入另一個文件的內容;
- :[n]r filename在第n行插入另一個文件的內容;
? - :r !date ——在光標處插入當前日期與時間;
- :r !command ——同理,可以將其它shell命令的輸出插入當前文檔。
5.2 改寫插入
- [n]cc:改寫光標所在行;
- [n]s: 以輸入的文本替代光標之后1(n)個字符,相當于c[n]l;
- [n]S: 刪除指定數目的行,并以所輸入文本代替之,相當于[n]cc;
c[n]+移動操作:改寫對應范圍的內容([n]+操作——在第4節的移動操作里已經介紹過了):
- c[n]h:改寫光標左邊1(n)個字符;
- c[n]l: 改寫光標右邊1(n)個字符。
- c[n]k: 改寫光標上n行(包含當前行)的內容;
- c[n]j:改寫光標下n行(包含當前行)的內容;
- c[n]b:改寫光標位置到上n個單詞的開頭位置的內容;
- c[n]w:改寫光標位置到下n個單詞的開頭位置的內容;
- c[n]e:改寫光標位置到下n個單詞的結尾位置的內容;
- c$: 改寫從光標當前位置到行尾;
- c0: 改寫從光標當前位置到行首;
- cgg: 改寫光標以上的所有行;
- cG: 改寫光標以下的所有行。
? - r+“字符”:替換當前位置的字符
- R:進入replace模式,輸入的內容會覆蓋當前位置
5.3 拼接行
- J:將下一行拼接到當前行末尾
5.4 多行注釋
通過visual block可視塊模式可以使用列選中功能,從而在想要的位置進行多行注釋。
在行首插入注釋符:
按ctrl+v進入visual block可視塊模式;
利用h、j、k、l方向鍵調整需要注釋多少行;
再按I(大寫字母i,shift+i)進入插入模式,并將光標移至所有選中列的行首;
輸入代表注釋的符號“//或者#;(在這一步只會在選中的第一行出現注釋符號)
再次按ESC鍵,等待一會兒即可完成多行注釋。(此時才會在所有選中行出現注釋符號)
在選中區域使用注釋符替換:
按ctrl+v進入visual block可視塊模式;
利用h、j、k、l方向鍵調整需要替換成注釋符的區域;
再按s進入插入模式,并將光標選中的區域清空;
輸入注釋符“//或者#;(在這一步只會在選中的第一行出現注釋符)
再次按ESC鍵,等待一會兒即可完成多行注釋。(此時才會在所有選中行出現注釋符)
需要刪除注釋的時候,同樣通過列選中功能,選中所有的注釋之后,d或者x即可。(d和x在下面會介紹)
6 刪除
- [n]dd:刪除1(n)行;
d[n]+移動操作:刪除對應范圍的內容,d操作刪除的內容會保存到vim寄存器,相當于剪切:
- d[n]h: 刪除光標左邊1(n)個字符。
- d[n]l: 刪除光標右邊1(n)個字符。
- d[n]k: 刪除光標上n行(包含當前行)的內容;
- d[n]j: 刪除光標下n行(包含當前行)的內容;
- d[n]b:刪除光標位置到上n個單詞的開頭位置的內容;
- d[n]w:刪除光標位置到下n個單詞的開頭位置的內容;
- d[n]e:刪除光標位置到下n個單詞的結尾位置的內容;
- d$或D: 刪除從光標當前位置到行尾的內容;
- d0: 刪除從光標當前位置到行首的內容。
- dgg: 刪除光標以上的所有行;
- dG: 刪除光標以下的所有行;
- :m,nd ——刪除m行到n行的內容。
在vim里,d操作刪除的字符也會放入寄存器供粘貼時使用,所以也等同于剪切操作。
7 剪切
- [n]x: 剪切光標右邊n個字符,相當于d[n]l;
- [n]X: 剪切光標左邊n個字符,相當于d[n]h。
8 復制
- y: 復制在可視模式下選中的文本;
- yy或Y: 復制整行文本;
y[n]+移動操作:復制對應范圍的內容:
- y[n]h: 復制光標左邊1(n)個字符。
- y[n]l: 復制光標右邊1(n)個字符。
- y[n]k: 復制光標上n行(包含當前行)的內容;
- y[n]j: 復制光標下n行(包含當前行)的內容;
- y[n]b:復制光標位置到上n個單詞的開頭位置的內容;
- y[n]w:復制光標位置到下n個單詞的開頭位置的內容;
- y[n]e:復制光標位置到下n個單詞的結尾位置的內容;
- y$: 復制從光標當前位置到行尾的內容;
- y0: 復制從光標當前位置到行首的內容;
- ygg: 復制光標以上的所有行;
- yG: 復制光標以下的所有行;
- :m,ny ——復制m行到n行的內容。
9 粘貼
- p: 在光標之后粘貼;
- P: 在光標之前粘貼。
10 選擇
- v:進入visual模式,可以執行選擇操作
- e+“移動操作”:選擇范圍,選擇完成后可以執行c、d、y、p等操作
11 寄存器
復制粘貼功能需要用到寄存器,使用的是vim自身的寄存器,所有只能在vim中使用
要關聯系統剪貼板,需要vim的clipboard功能的支持
使用“vim --version | grep clipboard”查看
clipboard之前是+表示支持,-表示不支持
安裝gvim或者vim-gnome可以支持剪貼板
:reg 顯示所有寄存器的內容
"" ——不加寄存器索引時,默認使用的寄存器,""yy把當前行的內容放入默認寄存器。
"+ ——系統剪貼板,"+yy把當前行的內容放入系統剪貼板,"+p從系統剪貼板復制到vim。
12 查找與替換
查找
*——向下查找當前光標所在單詞,可繼續使用n向后查,N向前查
#——向上查找當前光標所在單詞,可繼續使用n向后查,N向前查
/+“字符串”:向下查找字符串,可繼續使用n向后查,N向前查
?+“字符串”:向上查找字符串,可繼續使用n向后查,N向前查
替換
:s/old/new ———用new替換當前行第一個old。
:s/old/new/g ——用new替換當前行所有的old。
:n1,n2s/old/new/g - 用new替換文件n1行到n2行所有的old。
:%s/old/new/g - 用new替換文件中所有的old。
:%s/^/xxx/g - 在每一行的行首插入xxx,^表示行首。
:%s/$/xxx/g - 在每一行的行尾插入xxx,$表示行尾。
所有替換命令末尾加上c,每個替換都將需要用戶確認。
如:%s/old/new/gc,加上i則忽略大小寫(ignore)。
13 重復操作
. ————(英文句號)重復執行上一次的操作
例如你想手動將文件中所有的old轉換為new,只需要:
進入普通模式,將光標移到old下
- 敲擊*查找old
- 敲擊cw替換old,輸入new
- 按ESC繼續進入普通模式
- 敲擊n查找下一個old
- 敲擊.重復執行替換(重復執行的是步驟2中的輸入new操作)
- 重復步驟4、5即可
14 撤銷、重做
- u:撤銷
- ctrl+r:重做
15 鎖屏、解鎖
- ctrl+s:鎖屏
- ctrl+q:解鎖

浙公網安備 33010602011771號