Vim从理解到应用
1991 年,來自荷蘭的一名工程師 Bram Moolenaar 為了在他的Amiga計(jì)算機(jī)上復(fù)制Vi的功能,正式發(fā)布 了Vim的第一個(gè)版本。在當(dāng)時(shí)無論誰也沒想到,這款軟件未來能在技術(shù)圈爆發(fā)出那么大的威力,為千千萬萬的工程師節(jié)省了無數(shù)時(shí)間,大幅提升他們的開發(fā)效率。
從Vi衍生出來的Vim有著不同于大多數(shù)編輯器的使用方式:通過鍵盤對(duì)多種模式的相互切換,進(jìn)行各項(xiàng)命令的執(zhí)行和對(duì)文本的編寫。這種方式使得Vim可以不用進(jìn)行菜單或者鼠標(biāo)操作,并且最小化組合鍵的操作。對(duì)文字錄入員或者程序員可以大大增強(qiáng)速度和效率。
接下來我們將開始對(duì)Vim的學(xué)習(xí)。
1、Vim模式介紹
Vim具有6種基本模式和5種派生模式,我們將只簡(jiǎn)單介紹下6種基本模式:
-
普通模式(Normal mode)(常用)
在普通模式中,用的編輯器命令,比如移動(dòng)光標(biāo),刪除文本等等。這也是Vim啟動(dòng)后的默認(rèn)模式。這正好和許多新用戶期待的操作方式相反(大多數(shù)編輯器默認(rèn)模式為插入模式)。 -
插入模式(Insert mode)(常用)
在這個(gè)模式中,大多數(shù)按鍵都會(huì)向文本緩沖中插入文本。大多數(shù)新用戶希望文本編輯器編輯過程中一直保持這個(gè)模式。
在插入模式中,可以按ESC鍵回到普通模式。 -
可視模式(Visual mode)
這個(gè)模式與普通模式比較相似。但是移動(dòng)命令會(huì)擴(kuò)大高亮的文本區(qū)域。高亮區(qū)域可以是字符、行或者是一塊文本。當(dāng)執(zhí)行一個(gè)非移動(dòng)命令時(shí),命令會(huì)被執(zhí)行到這塊高亮的區(qū)域上。Vim的"文本對(duì)象"也能和移動(dòng)命令一樣用在這個(gè)模式中。 -
選擇模式(Select mode)
這個(gè)模式和無模式編輯器的行為比較相似(Windows標(biāo)準(zhǔn)文本控件的方式)。這個(gè)模式中,可以用鼠標(biāo)或者光標(biāo)鍵高亮選擇文本,不過輸入任何字符的話,Vim會(huì)用這個(gè)字符替換選擇的高亮文本塊,并且自動(dòng)進(jìn)入插入模式。 -
命令行模式(Command line mode)(常用)
在命令行模式中可以輸入會(huì)被解釋成并執(zhí)行的文本。例如執(zhí)行命令(:鍵),搜索(/和?鍵)或者過濾命令(!鍵)。在命令執(zhí)行之后,Vim返回到命令行模式之前的模式,通常是普通模式。 -
Ex模式(Ex mode) 這和命令行模式比較相似,在使用:visual命令離開Ex模式前,可以一次執(zhí)行多條命令。
六種基本模式中以普通、插入和命令行三種模式最為常用,因?yàn)檫@三種模式的相互配合即可完成基本的編輯功能(普通模式:對(duì)文本進(jìn)行復(fù)制、粘貼、刪除、撤銷等操作;插入模式:編寫文本內(nèi)容;命令行模式:保存、退出文檔,以及設(shè)置編輯環(huán)境)。
vim啟動(dòng)進(jìn)入普通模式后,可通過按i鍵(插入)或a鍵(附加)進(jìn)入插入模式,通過:鍵進(jìn)入命令行模式。而當(dāng)Vim處于插入模式或者命令行模式,均可以用過按Esc鍵或者Ctrl+[回到普通模式。
2、Vim的進(jìn)出與游標(biāo)移動(dòng)
2.1、Vim的打開
使用vim命令進(jìn)入vim界面,命令格式如下
vim 文件名默認(rèn)條件下為當(dāng)前路徑下的相應(yīng)文件,如果文件不存在將新建文本后打開Vim。
2.2、游標(biāo)移動(dòng)與跳轉(zhuǎn)
在普通模式下,使用方向鍵或者反人類的h、j、k、l鍵可以移動(dòng)游標(biāo),并通過w、b、e等鍵進(jìn)行游標(biāo)的跳轉(zhuǎn),具體內(nèi)容參見下表:
| nG(n Shift+g) | 游標(biāo)移動(dòng)到第n行(行間跳轉(zhuǎn)) |
| gg | 游標(biāo)移動(dòng)到第一行(行間跳轉(zhuǎn)) |
| G(Shift+g) | 游標(biāo)移動(dòng)到最后一行(行間跳轉(zhuǎn)) |
| b | 到前一個(gè)單詞的開頭 |
| w | 到下一個(gè)單詞的開頭 |
| e | 到當(dāng)前單詞的結(jié)尾 |
| ge | 到前一個(gè)單詞的結(jié)尾 |
| 0或^ | 到行頭 |
| $ | 到行尾 |
| f<字母> | 向后搜索<字母>并跳轉(zhuǎn)到第一個(gè)匹配的位置(很實(shí)用) |
| F<字母> | 向前搜索<字母>并跳轉(zhuǎn)到第一個(gè)匹配的位置(實(shí)用) |
| t<字母> | 向后搜索<字母>并跳轉(zhuǎn)到第一個(gè)匹配的位置之前的一個(gè)字母(不常用) |
| T<字母> | 向前搜索<字母>并跳轉(zhuǎn)到第一個(gè)匹配的位置之后的一個(gè)字母(不常用) |
注:在命令行模式下,可通過輸入:set nu以顯示行號(hào)
2.3、Vim的退出與保存
2.3.1命令行模式下的退出
在命令行模式下,常用輸入wq回車,保存并退出編輯,下表為具體的退出方式:
| :q | 退出 |
| :wq | 保存并退出 |
| :q! | 強(qiáng)制退出 |
| :wq! | 強(qiáng)制保存并退出 |
| :x | 保存并退出 |
| :w<文件路徑> | 另存為 |
| :saves 文件路徑 | 另存為 |
2.3.3普通模式下的退出
普通模式下用戶可以使用Shift+zz進(jìn)行保存并退出操作!
3、Vim的增刪改查、復(fù)制粘貼撤銷與快速縮進(jìn)
不知道為什么,一提到增刪改查我就很激動(dòng)。
3.1、增刪改查
3.1.1、增加(插入)操作
Vim很直接的擁有一個(gè)插入模式進(jìn)行插入操作,下表為在普通模式下進(jìn)入插入模式的具體方式(不包括通過替換方式進(jìn)入插入模式的方法):
| i | 在當(dāng)前光標(biāo)處進(jìn)行編輯 |
| I | 在行首插入 |
| a | 在光標(biāo)后插入編輯 |
| A | 在行末插入 |
| o | 在當(dāng)前行后插入一個(gè)新行 |
| O | 在當(dāng)前行前插入一個(gè)新行 |
3.1.2、刪除操作
進(jìn)入普通模式,使用下列命令可以進(jìn)行文本快速刪除:
| x | 刪除游標(biāo)所在的字符 |
| X | 刪除游標(biāo)所在前一個(gè)字符 |
| Delete | 刪除游標(biāo)所在的字符(同x) |
| dd | 刪除整行 |
| dw | 刪除一個(gè)單詞(不適用中文) |
| d$或D | 刪除至行尾 |
| d^ | 刪除至行首 |
| dG | 刪除到文檔結(jié)尾處 |
| d1G | 刪至文檔首部 |
3.1.3、修改(替換)操作
替換是針對(duì)普通模式下的操作,具體操作間下表:
| r+<待替換字母> | 將游標(biāo)所在字母替換為指定字母 |
| R | 連續(xù)替換,直到按下Esc |
| cc | 替換整行,即刪除游標(biāo)所在行(將進(jìn)入插入模式) |
| cw | 替換一個(gè)單詞,即刪除一個(gè)單詞(將進(jìn)入插入模式) |
| C | 替換游標(biāo)以后至行末 |
| ~ | 反轉(zhuǎn)游標(biāo)所在字母大小寫 |
3.1.4、查找操作
普通模式下輸入 / 然后鍵入需要查找的字符串 按回車后就會(huì)進(jìn)行查找。 ? 與/ 功能相同,只不過 ? 是向上而 / 是向下查找。 進(jìn)入查找之后,輸入n 和 N 可以繼續(xù)查找。 n是查找下一個(gè)內(nèi)容,N查找上一個(gè)內(nèi)容。
此外,普通模式下可以使用*(或g*)和#(或#)來向下和向上尋找游標(biāo)所在處的單詞。
3.2、復(fù)制、粘貼、撤銷與快速縮進(jìn)
3.2.1、復(fù)制粘貼與剪切粘貼
普通模式中使用y復(fù)制:
| yy | 復(fù)制游標(biāo)所在的整行(5yy表示復(fù)制5行) |
| y^ | 復(fù)制至行首,或y0。不含光標(biāo)所在處字符 |
| y$ | 復(fù)制至行尾。含光標(biāo)所在處字符 |
| yw | 復(fù)制一個(gè)單詞 |
| y2w | 復(fù)制兩個(gè)單詞 |
| yG | 復(fù)制至文本末 |
| y1G | 復(fù)制至文本開頭 |
普通模式下的使用p進(jìn)行粘貼:
- p(小寫)代表粘貼至光標(biāo)后(下)
- P(大寫)代表粘貼至光標(biāo)前(上)
此外上文提到的dd刪除操作也是剪切,刪除后可以使用p進(jìn)行粘貼的。
3.2.2、撤銷(Undo)操作
- Vim使用u或者u{n}進(jìn)行撤銷一次或者n次的操作;
- 使用U(大寫) 撤銷當(dāng)前行的所有修改;
- 此外,Vim使用Ctrl+r進(jìn)行Redo(復(fù)原)操作,進(jìn)行對(duì)undo操作的插銷。
3.3.3、快速縮進(jìn)與文本調(diào)整
以下是常用的縮進(jìn)和文本調(diào)整方式:
| << | 整行向左回退 |
| >> | 整行將向右縮進(jìn)(非常好用) |
| :set shiftwidth? | 命令行模式下,獲取縮進(jìn)設(shè)定值 |
| :set shiftwidth?=n | 命令行模式下,設(shè)定縮進(jìn)值為n |
| :ce(center) | 使本行內(nèi)容居中 |
| :ri(right) | 使本行文本靠右 |
| :le(left) | 使本行內(nèi)容靠左 |
4、Vim的高級(jí)功能
高級(jí)功能剩下的內(nèi)容有時(shí)間再更新吧。。。
5、總結(jié)
VIM 如果不是經(jīng)常使用,很容易忘記它的使用技巧,需要經(jīng)常復(fù)盤,久而久之也就養(yǎng)成了手指記憶。
為了更好的解決這個(gè)問題,讓各大開發(fā)者可以快速掌握 Vim 的常用快捷鍵,一位開發(fā)者做了一款游戲:Vim Adventures。在這個(gè)游戲中,你需要配合各種常用的 Vim 快捷鍵,來移動(dòng)光標(biāo),與 NPC 進(jìn)行對(duì)話,尋找線索,獲取鑰匙,打開寶箱。當(dāng)你一次次通關(guān)后,便會(huì)慢慢發(fā)現(xiàn)自己已成功掌握大量 Vim 使用技巧。
PS:這個(gè)游戲只有前三關(guān)是免費(fèi)的!!!
如果文章有表述不當(dāng)?shù)牡胤娇梢粤粞灾刚?#xff0c;互相學(xué)習(xí) 。
總結(jié)
- 上一篇: Shell脚本——基础语法
- 下一篇: Ambari系统架构