剛?cè)腴T Vim函匕,網(wǎng)上找了很多資料,有的太復(fù)雜不適合我這樣的新手蚪黑,有的不全盅惜,自己動(dòng)手整理一份。參考了一些資料忌穿,備注鏈接放在下面抒寂,侵權(quán)刪。
如何你想要成為一個(gè)vim的 superstar掠剑,我需要給你一些警告:
- 學(xué)習(xí)開始時(shí)是痛苦的屈芜。
- 需要時(shí)間,忘記速成。
- 需要不斷不斷地練習(xí)井佑。
而Kana大神也說(shuō)過(guò)属铁,對(duì)vim的掌握有五個(gè)層次:
- 層次0: 對(duì)vim一無(wú)所知。
- 層次1: 了解vim的基本使用躬翁。
- 層次2: 知道可視模式焦蘑。
- 層次3: 知道多種移動(dòng)動(dòng)作。
- 層次4: 不再需要可視模式盒发。
所以例嘱,我猜你可能需要3周甚至更多時(shí)間的苦練,而不是3天宁舰,才能更有效率的使用它拼卵。
Vim 世界觀
Vi 最初是由 Bill Joy 在 1976 年編碼實(shí)現(xiàn)的。而 Vim (Vi IMproved) 則是改進(jìn)的 Vi明吩,由 Bram Moolenaar 在 1991 年開發(fā)并發(fā)布间学。Vi/Vim 是所有 Unix/Linux 操作系統(tǒng)默認(rèn)配備的編輯器。因其強(qiáng)大的功能和高效的操作印荔,Vi/Vim 也成為眾多 Unix/Linux 用戶低葫、管理員必須掌握并熟練使用的編輯工具之一。尤其是在沒(méi)有圖形界面的情況下仍律,更是離不開 Vi/Vim嘿悬。Vi/Vim 命令非常多、用法極為靈活水泉,掌握起來(lái)有一定的難度善涨。本文為入門教程,關(guān)于 Vi/Vim 各種定制后的功能不在本文討論范圍之列草则。
Vi和Vim
在 Linux 的世界中钢拧,絕大部分的配置文件都是以 ASCII 的純文本形態(tài)存在,因此利用簡(jiǎn)單的文字編輯軟件就能夠修改炕横! 與微軟 Windows 系統(tǒng)不同的是源内,如果你用慣了 Microsoft Word 的話,在 Linux 的文本模式下份殿,會(huì)覺(jué)得文書編輯程序都沒(méi)有窗口接口來(lái)的直觀與方便膜钓,那么問(wèn)題來(lái)了,干嘛還要學(xué)這個(gè)不是很友善和方便的vi編輯器呢卿嘲?因?yàn)椋?/p>
- 跨平臺(tái)無(wú)所不在颂斜。所有的 Unix 和 Linux 系統(tǒng)都會(huì)內(nèi)建 vi 文本編輯器,其他的編輯器則不一定會(huì)有而且你無(wú)需擔(dān)心到了其他平臺(tái)需要學(xué)習(xí)新編輯器拾枣,除了Linux/Mac OS X外Windows系統(tǒng)也都可用沃疮。
- 很多個(gè)別軟件的編輯接口都會(huì)主動(dòng)調(diào)用 vi 盒让;
- 可擴(kuò)展性。你可以只用它來(lái)編輯配置文件忿磅,也可以將它當(dāng)做你的開發(fā)平臺(tái)糯彬。vim 具有程序編輯的能力,可以主動(dòng)的以字體顏色辨別語(yǔ)法的正確性葱她,方便程序設(shè)計(jì)撩扒;
- 程序簡(jiǎn)單、功能強(qiáng)大吨些、運(yùn)行飛快搓谆。
其實(shí)重點(diǎn)是上述的第二點(diǎn),因?yàn)橛刑?Linux 上面的指令都默認(rèn)使用 vi 作為數(shù)據(jù)編輯的接口,所以你必須、一定要學(xué)會(huì)笔呀。
什么是 Vim 呢?
其實(shí)你可以將 vim 視作 vi 的進(jìn)階版本斩萌,vim 可以用顏色或底線等方式來(lái)顯示一些特殊的信息。 舉例來(lái)說(shuō)屏轰,當(dāng)你使用 vim 去編輯一個(gè) C 程序語(yǔ)言的檔案颊郎,或者是shell script程序時(shí),vim 會(huì)依據(jù)檔案的擴(kuò)展名或者是檔案內(nèi)的開頭信息霎苗, 判斷該檔案的內(nèi)容而自動(dòng)調(diào)用該程序的語(yǔ)法判斷式姆吭,再以顏色來(lái)顯示程序代碼與一般信息。也就是說(shuō)唁盏, 這個(gè) vim 已經(jīng)是個(gè)『程序編輯器』了内狸!甚至一些 Linux 基礎(chǔ)配置文件內(nèi)的語(yǔ)法,都能用 vim 來(lái)檢查厘擂!
簡(jiǎn)單來(lái)說(shuō)昆淡, vi 是老式的文本處理器,不過(guò)功能已經(jīng)很齊全了刽严,但是還是有可以進(jìn)步的地方昂灵。vim 則可以說(shuō)是程序開發(fā)者的『程序編輯器』了,就連 vim 的官網(wǎng)也說(shuō) vim 是一個(gè)『程序開發(fā)工具』而不是文本處理軟件港庄。 因?yàn)?vim 里面加入了很多額外的功能倔既,例如支持正規(guī)表示法的搜尋架構(gòu)恕曲、多檔案編輯鹏氧、區(qū)塊復(fù)制等等。
簡(jiǎn)單講選擇它就是因?yàn)樗?/p>
Better, Stronger, Faster.
學(xué)習(xí) vim 并且它可能會(huì)成為你最后一個(gè)使用的文本編輯器佩谣。沒(méi)有比這個(gè)更好的文本編輯器了把还,非常地難學(xué),但是卻不可思議地好用。
提示:在 Linux 下吊履,如果以 root 用戶登錄系統(tǒng)的話安皱,通過(guò) vi 命令打開的 Vim 編輯器往往只加載最基本的功能,像語(yǔ)法加亮著色的功能基本上沒(méi)有艇炎。在 root 用戶下使用 Vim 所有功能的技巧是用 vim 命令打開 Vim 編輯器酌伊。
怎么進(jìn)入 Vim?
可以在終端(不明白什么是終端的缀踪,請(qǐng)自行谷歌命令行居砖、終端、shell驴娃、bash了解)輸入下面的命令:
$vim [filename]
其中filename
是文件的路徑奏候。如果文件不存在,它將為你建立一個(gè)新文件唇敞。
Vim的三種操作模式
Vim編輯程序有三種操作模式蔗草,分別稱為編輯模式、插入模式 和 命令模式疆柔。
編輯模式:用以執(zhí)行命令咒精,也稱為Normal正常模式,也是進(jìn)入Vim的缺省模式婆硬。進(jìn)入Vim后會(huì)直接進(jìn)入編輯模式(這是默認(rèn)的模式)狠轻。在這個(gè)模式中, 你可以使用『上下左右』按鍵來(lái)移動(dòng)光標(biāo)彬犯,你可以使用『刪除字符』或『刪除整行』來(lái)操作文本向楼, 也可以使用『復(fù)制、剪切谐区、粘貼』來(lái)處理文本數(shù)據(jù)湖蜕,刪除正文和插入新的正文。但是卻是無(wú)法編輯文本內(nèi)容的宋列!
插入模式:即 Insert 模式昭抒,用來(lái)輸入文本,就像你用“記事本”一樣炼杖。進(jìn)入Vim后會(huì)直接進(jìn)入編輯模式灭返,要等到你按下『i, I, o, O, a, A, r, R』等任何一個(gè)字母之后才會(huì)進(jìn)入編輯模式。注意了坤邪!通常在 Linux 中熙含,按下這些按鍵時(shí),在畫面的左下方會(huì)出現(xiàn)『 INSERT 或 REPLACE 』的字樣艇纺,此時(shí)才可以進(jìn)行編輯怎静,可以輸入字符邮弹。而如果要回到一般模式時(shí), 則必須要按下『Esc』這個(gè)按鍵才可退出編輯模式蚓聘。
命令模式:用來(lái)執(zhí)行冒號(hào)命令腌乡。在編輯模式下輸入『 : / ? 』三個(gè)中的任何一個(gè)按鈕,就可以將光標(biāo)移動(dòng)到最底下那一行夜牡。在這個(gè)模式當(dāng)中与纽,可以進(jìn)行保存、查找塘装、替換渣锦、顯示行號(hào)、退出氢哮、配置Vim操作等等的動(dòng)作袋毙。
簡(jiǎn)單的說(shuō),我們可以將這三個(gè)模式想成底下的圖標(biāo)來(lái)表示:
i → Insert 模式冗尤,按 ESC 回到 Normal 模式听盖。
x → 刪當(dāng)前光標(biāo)所在的一個(gè)字符。
dd → 刪除當(dāng)前行裂七,并把刪除的行存到剪貼板里皆看。
p → 粘貼剪貼板。
:wq → 存盤 + 退出 (:w 存盤后可以跟文件名背零,:q 退出腰吟,:q!強(qiáng)制退出)
:help <command> → 顯示相關(guān)命令的幫助。你也可以就輸入 :help 而不跟命令徙瓶。
推薦:
強(qiáng)例推薦使用hjkl鍵盤移動(dòng)光標(biāo)毛雇,但不必需,你也可以使用光標(biāo)鍵 (←↓↑→)移動(dòng)侦镇。
以 : 開始的命令你需要輸入 <enter> 回車結(jié)束灵疮,例如我寫成 :q 也就是說(shuō)你要輸入 :q然后回車。
編輯模式下命令
跳轉(zhuǎn)
如果鍵盤上有上壳繁、下震捣、左、右箭頭的導(dǎo)航鍵闹炉,就由這些鍵來(lái)完成光標(biāo)的移動(dòng)蒿赢。另外,可以用下面的鍵完成同樣的按字符移動(dòng)功能:
k或↑ 上移
j或↓ 下移
h或← 左移
l或→ 右移
上面這4個(gè)鍵將光標(biāo)位置每次移動(dòng)一行或一個(gè)字符 渣触。Vim還提供稍大范圍移動(dòng)光標(biāo)的命令:
ctrl+f 在文件中前移一頁(yè)(相當(dāng)于 page down)
ctrl+b 在文件中后移一頁(yè)(相當(dāng)于 page up)
ctrl+d 屏幕向下移動(dòng)半頁(yè)
ctrl+u 屏幕向上移動(dòng)一頁(yè)
更大范圍的移動(dòng):
* 當(dāng)光標(biāo)停留在一個(gè)單詞上羡棵,* 鍵會(huì)在文件內(nèi)搜索該單詞,并跳轉(zhuǎn)到下一處昵观;
# 當(dāng)光標(biāo)停留在一個(gè)單詞上晾腔,# 在文件內(nèi)搜索該單詞,并跳轉(zhuǎn)到上一處啊犬;
(/) 移動(dòng)到 前/后 句 的開始灼擂;
{/} 跳轉(zhuǎn)到 當(dāng)前/下一個(gè) 段落 的開始。
g_ 到本行最后一個(gè)不是 blank 字符的位置觉至。
fa 到下一個(gè)為 a 的字符處剔应,你也可以fs到下一個(gè)為s的字符。
t, 到逗號(hào)前的第一個(gè)字符语御。逗號(hào)可以變成其它字符峻贮。
3fa 在當(dāng)前行查找第三個(gè)出現(xiàn)的 a。
F/T 和 f 和 t 一樣应闯,只不過(guò)是相反方向;
在屏幕中找到需要的 一頁(yè) 時(shí)纤控,可以用下面的命令快速移動(dòng)光標(biāo):
H 將光標(biāo)移到屏幕上的起始行(或最上行)
M 將光標(biāo)移到屏幕中間
L 將光標(biāo)移到屏幕最后一行
G 將光標(biāo)定位到文件最后一行起始位置
NG或Ngg 將光標(biāo)定位到第 N 行的起始位置
gg 將光標(biāo)定位到文件第一行起始位置
N(ENTER) 光標(biāo)下移N行
同樣需要注意字母的大小寫。H 和 L 命令還可以加數(shù)字碉纺。如 2H 表示將光標(biāo)移到屏幕的第2行船万,3L 表示將光標(biāo)移到屏幕的倒數(shù)第3行。
當(dāng)將光標(biāo)移到所要的行是骨田,行內(nèi)移動(dòng) 光標(biāo)可以用下面的命令來(lái)實(shí)現(xiàn):
w 右移光標(biāo)到下一個(gè)字的開頭耿导;
e 右移光標(biāo)到一個(gè)字的末尾;
b 左移光標(biāo)到前一個(gè)字的開頭态贤;
0 數(shù)字0舱呻,左移光標(biāo)到本行的開始;
$ 右移光標(biāo)悠汽,到本行的末尾箱吕;
^ 移動(dòng)光標(biāo),到本行的第一個(gè)非空字符柿冲。
+ 光標(biāo)移動(dòng)到非空格符的下一行殖氏;
- 光標(biāo)移動(dòng)到非空格符的上一行n;
n n表示數(shù)字姻采,按下數(shù)字后按空格鍵雅采,光標(biāo)右移n個(gè)字符,會(huì)跨行移動(dòng)慨亲。
查找婚瓜、搜索匹配
和許多先進(jìn)的編輯器一樣,Vim 提供了強(qiáng)大的字符串搜索功能刑棵。要查找文件中指定字或短語(yǔ)出現(xiàn)的位置巴刻,可以用Vim直接進(jìn)行搜索,而不必以手工方式進(jìn)行蛉签。搜索方法是:鍵入字符 / 胡陪,后面跟以要搜索的字符串沥寥,然后按回車鍵。編輯程序執(zhí)行正向搜索(即朝文件末尾方向)柠座,并在找到指定字符串后邑雅,將光標(biāo)停到該字符串的開頭;鍵入 n 命令可以繼續(xù)執(zhí)行搜索妈经,找出這一字符串下次出現(xiàn)的位置淮野。用字符 ? 取代 / ,可以實(shí)現(xiàn)反向搜索(朝文件開頭方向)吹泡。例如:
/str1 正向搜索字符串 str1骤星;
n 繼續(xù)搜索,重復(fù)之前的查找爆哑,但是向上重復(fù)查找洞难;
N 繼續(xù)搜索,重復(fù)之前的查找揭朝,但是向下重復(fù)查找廊营;
?str2 反向搜索字符串 str2 。
:n1,n2s/word1/word2/g 這個(gè)操作代表在n1與n2行之間查找word1并用word2來(lái)代替它
:1,$s/word1/word2/g 這個(gè)操作是從第一行到最后一行進(jìn)行查找替換
:1,$s/word1/word2/gc 與上面一樣只不過(guò)多了個(gè)確認(rèn)confirm
無(wú)論搜索方向如何萝勤,當(dāng)?shù)竭_(dá)文件末尾或開頭時(shí)露筒,搜索工作會(huì)循環(huán)到文件的另一端并繼續(xù)執(zhí)行。
Vim中執(zhí)行搜索匹配最強(qiáng)大的地方是結(jié)合 正則表達(dá)式 來(lái)搜索敌卓,后續(xù)將會(huì)介紹慎式。
替換和刪除
Vim常規(guī)的刪除命令是 d、 x (前者刪除 行 趟径,后者刪除 字符 ),結(jié)合Vim的其他特性可以實(shí)現(xiàn)基礎(chǔ)的刪除功能瘪吏。將光標(biāo)定位于文件內(nèi)指定位置后,可以用其他字符來(lái)替換光標(biāo)所指向的字符蜗巧,或從當(dāng)前光標(biāo)位置刪除一個(gè)或多個(gè)字符或一行掌眠、多行。例如:
rc 用 c 替換光標(biāo)所指向的當(dāng)前字符幕屹;
nrc 用 c 替換光標(biāo)所指向的前 n 個(gè)字符蓝丙;
5rA 用 A 替換光標(biāo)所指向的前 5 個(gè)字符;
x 刪除光標(biāo)所指向的當(dāng)前字符望拖;
nx 刪除光標(biāo)所指向的前 n 個(gè)字符渺尘;
3x 刪除光標(biāo)所指向的前 3 個(gè)字符;
dw 刪除光標(biāo)右側(cè)的字说敏;
ndw 刪除光標(biāo)右側(cè)的 n 個(gè)字鸥跟;
3dw 刪除光標(biāo)右側(cè)的 3 個(gè)字;
db 刪除光標(biāo)左側(cè)的字;
ndb 刪除光標(biāo)左側(cè)的 n 個(gè)字医咨;
5db 刪除光標(biāo)左側(cè)的 5 個(gè)字枫匾;
dd 刪除光標(biāo)所在行,并去除空隙拟淮;
ndd 刪除(剪切) n 行內(nèi)容干茉,并去除空隙;
3dd 刪除(剪切) 3 行內(nèi)容惩歉,并去除空隙;
其他常用的刪除命令有:
d$ 從當(dāng)前光標(biāo)起刪除字符直到行的結(jié)束俏蛮;
d0 從當(dāng)前光標(biāo)起刪除字符直到行的開始撑蚌;
J 刪除本行的回車符(CR),并和下一行合并搏屑。
Vim常規(guī)的替換命令有 c 和 s 争涌,結(jié)合Vim的其他特性可以實(shí)現(xiàn)基礎(chǔ)的替換功能,不過(guò)替換命令執(zhí)行以后辣恋,通常會(huì)由編輯模式進(jìn)入插入模式:
s 用輸入的正文替換光標(biāo)所指向的字符亮垫;
S 刪除當(dāng)前行,并進(jìn)入編輯模式伟骨;
ns 用輸入的正文替換光標(biāo)右側(cè) n 個(gè)字符饮潦;
nS 刪除當(dāng)前行在內(nèi)的 n 行,并進(jìn)入編輯模式携狭;
cw 用輸入的正文替換光標(biāo)右側(cè)的字继蜡;
cW 用輸入的正文替換從光標(biāo)到行尾的所有字符(同 c$ );
ncw 用輸入的正文替換光標(biāo)右側(cè)的 n 個(gè)字逛腿;
cb 用輸入的正文替換光標(biāo)左側(cè)的字稀并;
ncb 用輸入的正文替換光標(biāo)左側(cè)的 n 個(gè)字;
cd 用輸入的正文替換光標(biāo)的所在行单默;
ncd 用輸入的正文替換光標(biāo)下面的 n 行碘举;
c$ 用輸入的正文替換從光標(biāo)開始到本行末尾的所有字符;
c0 用輸入的正文替換從本行開頭到光標(biāo)的所有字符搁廓。
Vim 入門教程
vim 程序編輯器
http://www.reibang.com/p/7678a7e6973e
http://www.reibang.com/p/bcbe916f97e1
http://coolshell.cn/articles/5426.html