用聪明的方式学习Vim,不再死记硬背,复杂命令一学就会
金磊發(fā)自凹非寺
量子位報道公眾號 QbitAI
Vim 難學難用?但事實是,它依舊受許多程序員的歡迎。
或許,只是你的「打開方式」不對。
最近,在 GitHub 上便出現(xiàn)了一個叫做用聰明的方式學習 Vim 的項目,上線短短幾天時間,便已經(jīng)斬獲 2200 星。
那么,如此學習 Vim 的方式,到底有多「聰明」?
用聰明的方式與 Vim「交流」
很多人可能會被 Vim 命令的復雜性嚇到。
因此,作者將 Vim 命令的一般結(jié)構(gòu),分解成了一個簡單語法規(guī)則。
這也是本教程中最為重要的一個章節(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,就相當于操作符。
以 h 操作符為例,Vim 中有 16 種,但只需要知道其中 3 種,便可以滿足 80% 的需求。
y:復制
d:刪除文本,保存到 register
c:刪除文本,保存到 register,并開始「插入」模式
OK,了解了「名詞」和「動詞」,現(xiàn)在便可以應用到「語法規(guī)則」中了:
y$:把當前所有的東西,從當前位置拖拽至行末
dw:從當前位置刪除到下一個單詞的開頭
c}:將當前位置更改為此段末尾
當然,類似這樣的組合,也接受數(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í)行更復雜的命令。當與外部程序集成時,Vim 的可組合性的真正威力就顯現(xiàn)出來了。
舉個例子,現(xiàn)在有一段「亂七八糟」的文字,如下所示:
IdNameCuteness
01PuppyVery
02KittenOk
03BunnyOk
現(xiàn)在需要將這些文字轉(zhuǎn)換成為表格形式,若是用 Vim 命令來實現(xiàn)這點可能會有一些困難,但是可以使用column terminal命令快速完成。
將鼠標指向「ID」,然后運行!}column -t -s “”,就可以得到漂亮的表格了:
Id Name Cuteness
01 Puppy Very
02 Kitten Ok
03 Bunny Ok
回過頭來看下剛才的命令。
「!」是過濾操作符,「}」是名詞,過濾操作符接收了另一個參數(shù),也就是一個終端命令,「column -t -s “”」。
簡而言之,經(jīng)過這樣的一番操作后,便完成了文字表格化的任務。
再例如,除了表格化之外,再篩選帶有「OK」的行,可以這樣做:
!}column -t -s “” awk ‘NR > 1 && /Ok/ {print $0}’
得到的結(jié)果便是:
02 Kitten Ok
03 Bunny Ok
這就是一種與 Vim「交流」的聰明方式。
但作者也同時指出,剛開始學習、適應這種「Vim 語法」是需要一定時間,但只要熟練起來后,便可輕松駕馭。
基于 Vim 語法的更多操作
在介紹完 Vim 的語法規(guī)則后,便可以基于此來完成更多操作和任務。
例如在本教程中的第五章,便介紹了「如何在文件中移動」。
剛開始用鍵盤來完成這項任務,肯定是比較慢的,但作者認為:
只要你把這個方法熟悉起來,要比用鼠標還要快。
最基本的操作便是向左、向右、向上和向下移動一個字符:
h Left
j Down
k Up
l Right
在字符之后,便是以文字為單元的移動。
W:移動到下一個單詞的開頭處
E:移動到下一個單詞的結(jié)尾處
B:移動到前一個單詞的開頭處
gE:移動到前一個單詞的結(jié)尾處
接下來是以「行」為單位的移動:
0:移動到當前行的第一個字符處
^:移動到當前行第一個非空字符處
g_:移動到當前行最后一個非空字符處
$:移動到當前行最后一個字符處
n:移動到當前行的第n列
當然,用類似的 Vim 方式,還可以完成「段」級別、搜索、滾動、標記等一系列移動操作。
此外,教程中還提供了許多其他操作的教程,例如「Insert Mode」、「Undo」等等。
目前教程還在更新中,有興趣的讀者可以持續(xù)關(guān)注這份「聰明的 Vim 教程」。
傳送門:
https://github.com/iggredible/Learn-Vim
總結(jié)
以上是生活随笔為你收集整理的用聪明的方式学习Vim,不再死记硬背,复杂命令一学就会的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 亚运会开幕式上舞者在水墨画上跳舞 观众:
- 下一篇: 歌曲《红豆》歌词及歌词的寓意?