Github火爆的項目,用聰明的方式學(xué)習(xí)Vim!
(給程序IT圈加星標(biāo),提升編程技能)
本文轉(zhuǎn)自AI新媒體量子位
最近,在 GitHub 上便出現(xiàn)了一個叫做用聰明的方式學(xué)習(xí)Vim的項目,上線短短幾天時間,便已經(jīng)斬獲2200星。

那么,如此學(xué)習(xí)Vim的方式,到底有多「聰明」?
用聰明的方式與Vim「交流」
這也是本教程中最為重要的一個章節(jié)——一旦了解了 Vim 命令類似語法的結(jié)構(gòu),就能跟它「暢談無阻」。

按照作者的說法,「只需要知道一個語法規(guī)則」,就可以說Vim的語言了:
verb + noun如果拿英文短句做類比,就例如:
Eat (verb) a donut (noun)
Kick (verb) a ball (noun)
現(xiàn)在,只需要使用基本的 Vim 動詞和名詞來增加詞匯量。
Vim 的名詞和動詞
這里說到的Nouns,就是 Vim 中的一些動作,例如:
h:左
j:下
k:上
l:右
w:移動到下個詞的開頭
}:跳到下一個段
$:移動到本行末尾而 Vim 中的 Verbs,就相當(dāng)于操作符。
以 h 操作符為例,Vim 中有16種,但只需要知道其中3種,便可以滿足80%的需求。
y:復(fù)制
d:刪除文本,保存到register
c:刪除文本,保存到register,并開始「插入」模式OK,了解了「名詞」和「動詞」,現(xiàn)在便可以應(yīng)用到「語法規(guī)則」中了:
y$:把當(dāng)前所有的東西,從當(dāng)前位置拖拽至行末
dw:從當(dāng)前位置刪除到下一個單詞的開頭
c}:將當(dāng)前位置更改為此段末尾當(dāng)然,類似這樣的組合,也接受數(shù)字作為其中的參數(shù),例如:
y2h:向左拉2個字符
d2w:刪除接下來的2個單詞
c2j:改變接下來的2行內(nèi)容除此之外,行式操作(linewise operations)是文本編輯中的常見操作,因此,Vim 也允許你通過連續(xù)鍵入2次操作符來完成類似這樣的操作。
比如,鍵入「dd」,刪除整行內(nèi)容;鍵入「cc」,更改整行內(nèi)容。
可組合性和語法
在討論 Vim 語法之后,便是 Vim 的可組合性(Composability)。
可組合性意味著擁有一組通用命令,可以組合起來執(zhí)行更復(fù)雜的命令。當(dāng)與外部程序集成時,Vim 的可組合性的真正威力就顯現(xiàn)出來了。
舉個例子,現(xiàn)在有一段「亂七八糟」的文字,如下所示:
Id|Name|Cuteness
01|Puppy|Very
02|Kitten|Ok
03|Bunny|Ok現(xiàn)在需要將這些文字轉(zhuǎn)換成為表格形式,若是用 Vim 命令來實現(xiàn)這點可能會有一些困難,但是可以使用 column terminal 命令快速完成。
將鼠標(biāo)指向「ID」,然后運行 !}column -t -s “|” ,就可以得到漂亮的表格了:
Id Name Cuteness
01 Puppy Very
02 Kitten Ok
03 Bunny Ok回過頭來看下剛才的命令。
「!」是過濾操作符,「}」是名詞,過濾操作符接收了另一個參數(shù),也就是一個終端命令,「column -t -s “|” 」。
簡而言之,經(jīng)過這樣的一番操作后,便完成了文字表格化的任務(wù)。
再例如,除了表格化之外,再篩選帶有「OK」的行,可以這樣做:
!}column -t -s “|” | awk ‘NR > 1 && /Ok/ {print $0}’得到的結(jié)果便是:
02 Kitten Ok
03 Bunny Ok這就是一種與 Vim「交流」的聰明方式。
但作者也同時指出,剛開始學(xué)習(xí)、適應(yīng)這種「Vim 語法」是需要一定時間,但只要熟練起來后,便可輕松駕馭。
基于Vim語法的更多操作
在介紹完 Vim 的語法規(guī)則后,便可以基于此來完成更多操作和任務(wù)。
例如在本教程中的第五章,便介紹了「如何在文件中移動」。
最基本的操作便是向左、向右、向上和向下移動一個字符:
h Left
j Down
k Up
l Right在字符之后,便是以文字為單元的移動。
W:移動到下一個單詞的開頭處
E:移動到下一個單詞的結(jié)尾處
B:移動到前一個單詞的開頭處
gE:移動到前一個單詞的結(jié)尾處接下來是以「行」為單位的移動:
0:移動到當(dāng)前行的第一個字符處
^:移動到當(dāng)前行第一個非空字符處
g_:移動到當(dāng)前行最后一個非空字符處
$:移動到當(dāng)前行最后一個字符處
n|:移動到當(dāng)前行的第n列當(dāng)然,用類似的Vim方式,還可以完成「段」級別、搜索、滾動、標(biāo)記等一系列移動操作。

此外,教程中還提供了許多其他操作的教程,例如「Insert Mode」、「Undo」等等。
目前教程還在更新中,有興趣的讀者可以持續(xù)關(guān)注這份「聰明的Vim教程」。
傳送門:
https://github.com/iggredible/Learn-Vim
推薦一個每天都能領(lǐng)外賣優(yōu)惠券的服務(wù)號
················· END ·················
長按進入小程序,進行打卡簽到
(更多精彩值得期待……)
最近熱文: 一周內(nèi)被程序員瘋轉(zhuǎn)5.6W次,最終被大廠封殺! 字節(jié)跳動《算法中文手冊》火了,完整版 PDF 開放下載! 改個圓角200萬?原研哉是怎么“說服”小米的? 這個敢賣360元的瀏覽器果然有東西!還好我給你搞來了免費版! 喬布斯的簡歷17.4萬拍賣,HR看了想打人…… LeetCode1-220題匯總,希望對你有點幫助! 2T技術(shù)資源大放送!包括但不限于:C/C++,Linux,Python,Java,人工智能,考研,軟考,英語,等等。在公眾號內(nèi)回復(fù)「資源」,即可免費獲??!回復(fù)「社群」,可以邀請你加入讀者群! ??給個「在看」,是對我最大的支持??


