Linux之vim編輯器

你想以最快的速度學(xué)習(xí)人類史上最好的文本編輯器VIM嗎物延?你先得懂得如何在VIM幸存下來门驾,然后一點(diǎn)一點(diǎn)地學(xué)習(xí)各種戲法鹉戚。

Vim the Six Billion Dollar editor

Better, Stronger, Faster.

學(xué)習(xí) vim 并且其會成為你最后一個(gè)使用的文本編輯器谭贪。沒有比這個(gè)更好的文本編輯器了斤蔓,非常地難學(xué),但是卻不可思議地好用漱挚。

我建議下面這四個(gè)步驟:

  1. 存活
  2. 感覺良好
  3. 覺得更好翔烁,更強(qiáng),更快
  4. 使用VIM的超能力

當(dāng)你走完這篇文章旨涝,你會成為一個(gè)vim的 superstar蹬屹。

在開始學(xué)習(xí)以前,我需要給你一些警告:

  • 學(xué)習(xí)vim在開始時(shí)是痛苦的白华。
  • 需要時(shí)間
  • 需要不斷地練習(xí)慨默,就像你學(xué)習(xí)一個(gè)樂器一樣。
  • 不要期望你能在3天內(nèi)把vim練得比別的編輯器更有效率弧腥。
  • 事實(shí)上厦取,你需要2周時(shí)間的苦練,而不是3天管搪。

第一級 – 存活

  1. 安裝 vim
  2. 啟動 vim
  3. 什么也別干虾攻!請先閱讀

當(dāng)你安裝好一個(gè)編輯器后,你一定會想在其中輸入點(diǎn)什么東西更鲁,然后看看這個(gè)編輯器是什么樣子霎箍。但vim不是這樣的,請按照下面的命令操作:

  • 啟 動Vim后澡为,vim在 Normal 模式下漂坏。
  • 讓我們進(jìn)入 Insert 模式,請按下鍵 i 媒至。(陳皓注:你會看到vim左下角有一個(gè)–insert–字樣樊拓,表示,你可以以插入的方式輸入了)
  • 此時(shí)塘慕,你可以輸入文本了筋夏,就像你用“記事本”一樣。
  • 如果你想返回 Normal 模式图呢,請按 ESC 鍵条篷。

現(xiàn)在,你知道如何在 Insert 和 Normal 模式下切換了蛤织。下面是一些命令赴叹,可以讓你在 Normal 模式下幸存下來:

  • i → Insert 模式,按 ESC 回到 Normal 模式.
  • x → 刪當(dāng)前光標(biāo)所在的一個(gè)字符指蚜。
  • :wq → 存盤 + 退出 (:w 存盤, :q 退出) (陳皓注::w 后可以跟文件名)
  • dd → 刪除當(dāng)前行乞巧,并把刪除的行存到剪貼板里
  • p → 粘貼剪貼板

推薦:

  • hjkl (強(qiáng)例推薦使用其移動光標(biāo),但不必需) →你也可以使用光標(biāo)鍵 (←↓↑→). 注: j 就像下箭頭摊鸡。
  • :help <command> → 顯示相關(guān)命令的幫助绽媒。你也可以就輸入 :help 而不跟命令蚕冬。(陳皓注:退出幫助需要輸入:q)

你能在vim幸存下來只需要上述的那5個(gè)命令,你就可以編輯文本了是辕,你一定要把這些命令練成一種下意識的狀態(tài)囤热。于是你就可以開始進(jìn)階到第二級了。

當(dāng)是获三,在你進(jìn)入第二級時(shí)旁蔼,需要再說一下 Normal 模式。在一般的編輯器下疙教,當(dāng)你需要copy一段文字的時(shí)候棺聊,你需要使用 Ctrl 鍵,比如:Ctrl-C贞谓。也就是說限佩,Ctrl鍵就好像功能鍵一樣,當(dāng)你按下了功能鍵Ctrl后经宏,C就不在是C了犀暑,而且就是一個(gè)命令或是一個(gè)快鍵鍵了驯击,在VIM的Normal模式下烁兰,所有的鍵就是功能鍵了。這個(gè)你需要知道徊都。

標(biāo)記:

  • 下面的文字中沪斟,如果是 Ctrl-λ我會寫成 <C-λ>.
  • : 開始的命令你需要輸入 <enter>回車,例如 — 如果我寫成 :q 也就是說你要輸入 :q<enter>.

第二級 – 感覺良好

上面的那些命令只能讓你存活下來暇矫,現(xiàn)在是時(shí)候?qū)W習(xí)一些更多的命令了主之,下面是我的建議:(陳皓注:所有的命令都需要在Normal模式下使用,如果你不知道現(xiàn)在在什么樣的模式李根,你就狂按幾次ESC鍵)

  1. 各種插入模式

    • a → 在光標(biāo)后插入
    • o → 在當(dāng)前行后插入一個(gè)新行
    • O → 在當(dāng)前行前插入一個(gè)新行
    • cw → 替換從光標(biāo)所在位置后到一個(gè)單詞結(jié)尾的字符
  2. 簡單的移動光標(biāo)

    • 0 → 數(shù)字零槽奕,到行頭
    • ^ → 到本行第一個(gè)不是blank字符的位置(所謂blank字符就是空格,tab房轿,換行粤攒,回車等)
    • $ → 到本行行尾
    • g_ → 到本行最后一個(gè)不是blank字符的位置。
    • /pattern → 搜索 pattern 的字符串(陳皓注:如果搜索出多個(gè)匹配囱持,可按n鍵到下一個(gè))
  3. 拷貝/粘貼 (陳皓注:p/P都可以夯接,p是表示在當(dāng)前位置之后,P表示在當(dāng)前位置之前)

    • P → 粘貼
    • yy → 拷貝當(dāng)前行當(dāng)行于 ddP
  4. Undo/Redo

    • u → undo
    • <C-r> → redo (ctrl+r)
  5. 打開/保存/退出/改變文件(Buffer)

    • :e <path/to/file> → 打開一個(gè)文件
    • :w → 存盤
    • :saveas <path/to/file> → 另存為 <path/to/file>
    • :x纷妆, ZZ:wq → 保存并退出 (:x 表示僅在需要時(shí)保存盔几,ZZ不需要輸入冒號并回車)
    • :q! → 退出不保存 :qa! 強(qiáng)行退出所有的正在編輯的文件,就算別的文件有更改掩幢。
    • :bn:bp → 你可以同時(shí)打開很多文件逊拍,使用這兩個(gè)命令來切換下一個(gè)或上一個(gè)文件上鞠。(陳皓注:我喜歡使用:n到下一個(gè)文件)

花點(diǎn)時(shí)間熟悉一下上面的命令,一旦你掌握他們了顺献,你就幾乎可以干其它編輯器都能干的事了旗国。但是到現(xiàn)在為止,你還是覺得使用vim還是有點(diǎn)笨拙注整,不過沒關(guān)系能曾,你可以進(jìn)階到第三級了。

第三級 – 更好肿轨,更強(qiáng)寿冕,更快

先恭喜你!你干的很不錯椒袍。我們可以開始一些更為有趣的事了驼唱。在第三級,我們只談那些和vi可以兼容的命令驹暑。

更好

下面玫恳,讓我們看一下vim是怎么重復(fù)自己的:

  1. . → (小數(shù)點(diǎn)) 可以重復(fù)上一次的命令
  2. N<command> → 重復(fù)某個(gè)命令N次

下面是一個(gè)示例,找開一個(gè)文件你可以試試下面的命令:

  • 2dd → 刪除2行
  • 3p → 粘貼文本3次
  • 100idesu [ESC] → 會寫下 “desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu “
  • . → 重復(fù)上一個(gè)命令—— 100 “desu “.
  • 3. → 重復(fù) 3 次 “desu” (注意:不是 300优俘,你看京办,VIM多聰明啊).
更強(qiáng)

你要讓你的光標(biāo)移動更有效率,你一定要了解下面的這些命令帆焕,千萬別跳過惭婿。

  1. NG → 到第 N 行 (陳皓注:注意命令中的G是大寫的,另我一般使用 : N 到第N行叶雹,如 :137 到第137行)

  2. gg → 到第一行财饥。(陳皓注:相當(dāng)于1G,或 :1)

  3. G → 到最后一行折晦。

  4. 按單詞移動:

    1. w → 到下一個(gè)單詞的開頭钥星。
    2. e → 到下一個(gè)單詞的結(jié)尾。

    如果你認(rèn)為單詞是由默認(rèn)方式满着,那么就用小寫的e和w谦炒。默認(rèn)上來說,一個(gè)單詞由字母漓滔,數(shù)字和下劃線組成(陳皓注:程序變量)

    如果你認(rèn)為單詞是由blank字符分隔符编饺,那么你需要使用大寫的E和W。(陳皓注:程序語句)

    image

下面响驴,讓我來說說最強(qiáng)的光標(biāo)移動:

  • % : 匹配括號移動透且,包括 (, {, [. (陳皓注:你需要把光標(biāo)先移到括號上)
  • *#: 匹配光標(biāo)當(dāng)前所在的單詞,移動光標(biāo)到下一個(gè)(或上一個(gè))匹配單詞(*是下一個(gè),#是上一個(gè))

相信我秽誊,上面這三個(gè)命令對程序員來說是相當(dāng)強(qiáng)大的鲸沮。

更快

你一定要記住光標(biāo)的移動,因?yàn)楹芏嗝疃伎梢院瓦@些移動光標(biāo)的命令連動锅论。很多命令都可以如下來干:

<start position><command><end position>

例如 0y$ 命令意味著:

  • 0 → 先到行頭
  • y → 從這里開始拷貝
  • $ → 拷貝到本行最后一個(gè)字符

你可可以輸入 ye讼溺,從當(dāng)前位置拷貝到本單詞的最后一個(gè)字符。

你也可以輸入 y2/foo 來拷貝2個(gè) “foo” 之間的字符串最易。

還有很多時(shí)間并不一定你就一定要按y才會拷貝怒坯,下面的命令也會被拷貝:

  • d (刪除 )
  • v (可視化的選擇)
  • gU (變大寫)
  • gu (變小寫)
  • 等等

(陳皓注:可視化選擇是一個(gè)很有意思的命令,你可以先按v藻懒,然后移動光標(biāo)剔猿,你就會看到文本被選擇,然后嬉荆,你可能d归敬,也可y,也可以變大寫等)

第四級 – Vim 超能力

你只需要掌握前面的命令鄙早,你就可以很舒服的使用VIM了汪茧。但是,現(xiàn)在限番,我們向你介紹的是VIM殺手級的功能舱污。下面這些功能是我只用vim的原因。

在當(dāng)前行上移動光標(biāo): 0 ^ $ f F t T , ;
  • 0 → 到行頭
  • ^ → 到本行的第一個(gè)非blank字符
  • $ → 到行尾
  • g_ → 到本行最后一個(gè)不是blank字符的位置扳缕。
  • fa → 到下一個(gè)為a的字符處慌闭,你也可以fs到下一個(gè)為s的字符别威。
  • t, → 到逗號前的第一個(gè)字符躯舔。逗號可以變成其它字符。
  • 3fa → 在當(dāng)前行查找第三個(gè)出現(xiàn)的a省古。
  • FT → 和 ft 一樣粥庄,只不過是相反方向。
image

還有一個(gè)很有用的命令是 dt" → 刪除所有的內(nèi)容豺妓,直到遇到雙引號—— "惜互。

區(qū)域選擇 <action>a<object><action>i<object>

在visual 模式下,這些命令很強(qiáng)大琳拭,其命令格式為

<action>a<object><action>i<object>

  • action可以是任何的命令训堆,如 d (刪除), y (拷貝), v (可以視模式選擇)。
  • object 可能是: w 一個(gè)單詞白嘁, W 一個(gè)以空格為分隔的單詞坑鱼, s 一個(gè)句字, p 一個(gè)段落。也可以是一個(gè)特別的字符:"鲁沥、 '呼股、 )、 }画恰、 ]彭谁。

假設(shè)你有一個(gè)字符串 (map (+) ("foo")).而光標(biāo)鍵在第一個(gè) o的位置。

  • vi" → 會選擇 foo.
  • va" → 會選擇 "foo".
  • vi) → 會選擇 "foo".
  • va) → 會選擇("foo").
  • v2i) → 會選擇 map (+) ("foo")
  • v2a) → 會選擇 (map (+) ("foo"))
image
塊操作: <C-v>

塊操作允扇,典型的操作: 0 <C-v> <C-d> I-- [ESC]

  • ^ → 到行頭
  • <C-v> → 開始塊操作
  • <C-d> → 向下移動 (你也可以使用hjkl來移動光標(biāo)缠局,或是使用%,或是別的)
  • I-- [ESC] → I是插入考润,插入“--”甩鳄,按ESC鍵來為每一行生效。
image

在Windows下的vim额划,你需要使用 <C-q> 而不是 <C-v> 妙啃,<C-v> 是拷貝剪貼板。

自動提示: <C-n><C-p>

在 Insert 模式下俊戳,你可以輸入一個(gè)詞的開頭揖赴,然后按 <C-p>或是<C-n>,自動補(bǔ)齊功能就出現(xiàn)了……

image
宏錄制: qa 操作序列 q, @a, @@
  • qa 把你的操作記錄在寄存器 a抑胎。
  • 于是 @a 會replay被錄制的宏燥滑。
  • @@ 是一個(gè)快捷鍵用來replay最新錄制的宏。

示例

在一個(gè)只有一行且這一行只有“1”的文本中阿逃,鍵入如下命令:

  • qaYp<C-a>q
    • qa 開始錄制
    • Yp 復(fù)制行.
    • <C-a> 增加1.
    • q 停止錄制.
  • @a → 在1下面寫下 2
  • @@ → 在2 正面寫下3
  • 現(xiàn)在做 100@@ 會創(chuàng)建新的100行铭拧,并把數(shù)據(jù)增加到 103.
image
可視化選擇: v,V,<C-v>

前面,我們看到了 <C-v>的示例 (在Windows下應(yīng)該是<C-q>)恃锉,我們可以使用 vV搀菩。一但被選好了,你可以做下面的事:

  • J → 把所有的行連接起來(變成一行)
  • <> → 左右縮進(jìn)
  • = → 自動給縮進(jìn) (陳皓注:這個(gè)功能相當(dāng)強(qiáng)大破托,我太喜歡了)
image

在所有被選擇的行后加上點(diǎn)東西:

  • <C-v>
  • 選中相關(guān)的行 (可使用 j<C-d> 或是 /pattern 或是 % 等……)
  • $ 到行最后
  • A, 輸入字符串肪跋,按 ESC。
image
分屏: :splitvsplit.

下面是主要的命令土砂,你可以使用VIM的幫助 :help split. 你可以參考本站以前的一篇文章VIM分屏州既。

  • :split → 創(chuàng)建分屏 (:vsplit創(chuàng)建垂直分屏)
  • <C-w><dir> : dir就是方向,可以是 hjkl 或是 ←↓↑→ 中的一個(gè)萝映,其用來切換分屏吴叶。
  • <C-w>_ (或 <C-w>|) : 最大化尺寸 (<C-w>| 垂直分屏)
  • <C-w>+ (或 <C-w>-) : 增加尺寸
image

結(jié)束語

  • 上面是作者最常用的90%的命令。

  • 我建議你每天都學(xué)1到2個(gè)新的命令序臂。

  • 在兩到三周后蚌卤,你會感到vim的強(qiáng)大的。

  • 有時(shí)候,學(xué)習(xí)VIM就像是在死背一些東西造寝。

  • 幸運(yùn)的是磕洪,vim有很多很不錯的工具和優(yōu)秀的文檔。

  • 運(yùn)行vimtutor直到你熟悉了那些基本命令诫龙。

  • 其在線幫助文檔中你應(yīng)該要仔細(xì)閱讀的是 :help usr_02.txt.

  • 你會學(xué)習(xí)到諸如 !析显, 目錄,寄存器签赃,插件等很多其它的功能谷异。

學(xué)習(xí)vim就像學(xué)彈鋼琴一樣,一旦學(xué)會锦聊,受益無窮歹嘹。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市孔庭,隨后出現(xiàn)的幾起案子尺上,更是在濱河造成了極大的恐慌,老刑警劉巖圆到,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怎抛,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門吴藻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人眠副,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵椭赋,是天一觀的道長。 經(jīng)常有香客問我纹笼,道長纹份,這世上最難降的妖魔是什么苟跪? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任廷痘,我火速辦了婚禮,結(jié)果婚禮上件已,老公的妹妹穿的比我還像新娘笋额。我一直安慰自己,他們只是感情好篷扩,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布兄猩。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪枢冤。 梳的紋絲不亂的頭發(fā)上鸠姨,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機(jī)與錄音淹真,去河邊找鬼讶迁。 笑死,一個(gè)胖子當(dāng)著我的面吹牛核蘸,可吹牛的內(nèi)容都是我干的巍糯。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼客扎,長吁一口氣:“原來是場噩夢啊……” “哼祟峦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起徙鱼,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤宅楞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后袱吆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咱筛,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年杆故,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了迅箩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡处铛,死狀恐怖饲趋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情撤蟆,我是刑警寧澤奕塑,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站家肯,受9級特大地震影響龄砰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜讨衣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一换棚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧反镇,春花似錦固蚤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽你弦。三九已至,卻和暖如春燎孟,著一層夾襖步出監(jiān)牢的瞬間禽作,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工揩页, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留领迈,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓碍沐,卻偏偏與公主長得像狸捅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子累提,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348

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

  • 你想以最快的速度學(xué)習(xí)人類史上最好的文本編輯器VIM嗎尘喝?你先得懂得如何在VIM幸存下來,然后一點(diǎn)一點(diǎn)地學(xué)習(xí)各種戲法斋陪。...
    數(shù)據(jù)萌新閱讀 505評論 0 0
  • Linux之vim編輯器 你想以最快的速度學(xué)習(xí)人類史上最好的文本編輯器VIM嗎朽褪?你先得懂得如何在VIM幸存下來,然...
    Arroganter閱讀 279評論 0 0
  • 你想以最快的速度學(xué)習(xí)人類史上最好的文本編輯器VIM嗎无虚?你先得懂得如何在VIM幸存下來缔赠,然后一點(diǎn)一點(diǎn)地學(xué)習(xí)各種戲法。...
    Dream_wdl閱讀 214評論 1 1
  • 你想以最快的速度學(xué)習(xí)人類史上最好的文本編輯器VIM嗎友题?你先得懂得如何在VIM幸存下來嗤堰,然后一點(diǎn)一點(diǎn)地學(xué)習(xí)各種戲法。...
    極課編程閱讀 2,589評論 0 1
  • 五月五日度宦,立夏踢匣。 晴,23度戈抄。 醫(yī)院里照顧叔叔离唬。 老爸來電話,說舅母骨折划鸽,讓我抽空去舅舅家探望输莺。 想起舅母, 腦海...
    淺畫瓷閱讀 460評論 0 0