Vim入門基礎(chǔ)教程

剛?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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末引颈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子境蜕,更是在濱河造成了極大的恐慌线欲,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汽摹,死亡現(xiàn)場(chǎng)離奇詭異李丰,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)逼泣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門趴泌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)舟舒,“玉大人,你說(shuō)我怎么就攤上這事嗜憔⊥豪” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵吉捶,是天一觀的道長(zhǎng)夺鲜。 經(jīng)常有香客問(wèn)我,道長(zhǎng)呐舔,這世上最難降的妖魔是什么币励? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮珊拼,結(jié)果婚禮上食呻,老公的妹妹穿的比我還像新娘。我一直安慰自己澎现,他們只是感情好仅胞,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著剑辫,像睡著了一般干旧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上妹蔽,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天莱革,我揣著相機(jī)與錄音,去河邊找鬼讹开。 笑死盅视,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的旦万。 我是一名探鬼主播闹击,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼成艘!你這毒婦竟也來(lái)了赏半?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤淆两,失蹤者是張志新(化名)和其女友劉穎断箫,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秋冰,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仲义,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片埃撵。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赵颅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出暂刘,到底是詐尸還是另有隱情饺谬,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布谣拣,位于F島的核電站募寨,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏森缠。R本人自食惡果不足惜拔鹰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辅鲸。 院中可真熱鬧格郁,春花似錦腹殿、人聲如沸独悴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)刻炒。三九已至,卻和暖如春自沧,著一層夾襖步出監(jiān)牢的瞬間坟奥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工拇厢, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留爱谁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓孝偎,卻偏偏與公主長(zhǎng)得像访敌,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子衣盾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容