Vim學習指南

jopen 11年前發布 | 13K 次閱讀 Vim

你想盡可能快地自學vim(為大家所熟知的最好的編輯器) 。這是我學習的方法:從細處入手然后慢慢掌握所有技巧。

Vim 六十億美元的編輯器

設計優良,強壯,快速。

</blockquote>

學習vim并把它作為你的下一個文本編輯器,據我所知沒有比它更好的編輯器,學起來難但出奇的好用。

我建議你按下附4個步驟學習Vim:

  1. 適應
  2. 感覺舒適
  3. 感覺很好,強壯,快速
  4. 使用vim的高級技能
  5. </ol>

    本課程結束時你將成為一個vim高手。

    但在我們開始之前,先提醒一下。剛開始學習vim會有點痛苦,它很費時間,有點像玩樂器一樣。不要指望能像其他編輯器一樣花3天以內的時間便能很好的使用它,事實上,這肯定要花2周而不是3天。

    第一層次 – 適應

    1. 安裝vim
    2. 運行vim
    3. 什么也別做,讀!
    4. </ol>

      在標準的編輯器里,寫一些東西到屏幕上只需要在鍵盤上輸入就足夠了,在Vim中不是這樣。Vim在普通模式里,讓我們轉到插入模式,鍵入字符i。

      你應該感覺好一點了,能像在標準編輯器里輸入了,回到普通模式只需按ESC鍵即可。

      你現在知道了如何在插入和普通模式之間轉換,下面是你在普通模式下需要記住的指令:

      • i→ 插入模式. 按ESC鍵返回普通模式
      • x→ 刪除光標所在的字符
      • :wq→ 保存退出(:w 保存,:q 退出)
      • dd→ 刪除(拷貝)當前行
      • p→ 粘貼
      • </ul>

        推薦:

        • hjkl(高度推薦) → 基本的光標移動 (←↓↑→), hj按行移動。
        • :help → 顯示關于的幫助,可以使用help不帶獲得常規幫助。
        • </ul> </blockquote>

          只有5個命令,一開始只需掌握這些,當適應了這些命令后(大概需要一天或更多的詩句),你可以轉到第二層級了。

          但首先,稍回顧一下普通模式。在標準編輯器里,要復制的話你需要使用ctrl鍵(Ctrl-c)。實際上,當你按下ctrl鍵時所有的按鍵的意義都改變了。在vim普通模式下就像在ctrl鍵自動按下的情況下使用編輯器。

          最后的補充:

          • 我使用代替Ctrl-λ
          • 命令后附帶回車,比如我若是寫:q,我是指:q
          • </ul>

            第二層 - 爽一把

            你知道,命令是由需求所定。是時候學習更多命令了。下面這些是我的建議:

            1. 插入模式變種命令:

              • a→ 在光標后插入
              • o→ 在當前行之后插入新行
              • O→ 在當前行之前插入新行
              • cw→ 替換從光標到單詞結束
              • </ul> </blockquote> </li>

              • 基本移動命令

                • 0→ 跳到第一列
                • ^→ 跳到本行第一個非空字符
                • $→ 跳到本行末尾
                • g_→ 跳到本行最后一個非空字符
                • /pattern→ 搜索pattern
                • </ul> </blockquote> </li>

                • 復制/粘貼

                  • P→ 在當前位置之前粘貼,記住 p 是在當前位置之前粘貼.
                  • yy→ 復制當前行,與dd和P命令相比更簡單。
                  • </ul> </blockquote> </li>

                  • 取消/恢復

                    • u→ 取消
                    • → 恢復
                    • </ul> </blockquote> </li>

                    • 加載/保存/退出/修改 文件(緩存)

                      • :e <文件路徑>→ 打開
                      • :w→ 保存
                      • :saveas <文件路徑>→ 保存到這個文件
                      • :x,ZZ或者:wq→ 保存和退出 (:x 如果可能的話,只保存)
                      • :q!→ 退出但不保存,使用:qa!,即使在緩存中還有已經修改的也會退出。
                      • :bn(對比:bp) → 顯示下一個(上一個)文件緩存
                      • </ul> </blockquote> </li> </ol>

                        花些時間學習所有這些命令。一旦完成后,你應該就能完成在像在其它編輯器中所有事情。也許,你可能還會覺得有點笨手笨腳。但是跟著我進入下一個層次,你就會發現為什么vim值得你額外付出的努力。

                        第三層次——更好,更強,更快

                        為達到這一步表示祝賀!現在我們可以開始這有趣的東西。在第三層次,我們將只討論命令,它兼容舊的vi編輯器。

                        更好

                        讓我們看看vim是怎么幫你做重復事情的。

                        1. .→(點)可以重復最后一個命令,

                        2. N<命令>會重復命令N次。

                        一些例子,打開一個文件然后寫入下面內容:

                        ? 2dd→ will delete 2 lines ? 3p→ will paste the text 3 times ? 100idesu [ESC]→ will write “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” ?.→ Just after the last command will write again the 100 “desu”. ?3.→ Will write 3 “desu” (and not 300, how clever).

                        更強

                        知道怎么有效的移動對vim是非常重要的。請不要跳過這一節。

                        1. NG→定位到第N行

                        2. gg→1G的快捷方式——定位到第一行

                        3. G→定位到最后一行

                        4. 單詞移動:

                        1. w→定位到當前單詞的開始位置,

                        2. e→ 定位到當前單詞的最后位置. 默認情況下, 單詞有字符和下劃線組成. 我們稱一句話是由一組被空格符號分隔的單詞組成. 如果你想定位一句話,那么就用大寫字符:

                          1. W→ 定位到當前句子的開始位置,

                          2. E→ 定位到當前這句話的最后位置.

                        Vim學習指南

                        </blockquote>

                         現在讓我們來談談幾個非常有效率的移動:

                        %: Go to the corresponding(,{,[.

                        ? *(resp.#) : go to next (resp. previous) occurrence of the word under the cursor

                        </blockquote>

                        相信我,最后的三行命令是精華。

                        更快

                        記住了vi移動的重要性?這里就是原因。大多數命令使用下面這種通用格式:

                        <開始位置><命令><結束位置>

                        例如: 0y$意味著

                        • 0→ 跳到本行開頭
                        • y→ 從這里開始復制
                        • $→ 直到本行結束
                        • </ul>

                          我們也可以使用ye,從當前位置復制到單詞的末尾。但是y2/foo 會一直復制到第二個foo出現的地方。

                          但對于y(復制), d(刪除), v(visual 選擇), gU(大寫), gu(小寫)等等命令都是真實的。

                          第四層次 – Vim 超能量

                          使用上述的命令,你就覺得很爽了。但是現在,這里才是殺手锏。正因為其中有些特性,我才使用vim的。

                          在當前行移動:0^$g_fFtT,;

                          • 0→ 跳到第一列
                          • ^→ 跳到當前行的第一個字符
                          • $→ 跳到最后一列
                          • g_→ 跳到這行的最后一個字符
                          • fa→ 跳到這行a字母的下一個出現的地方。(對比 ; )會查找下一個(上一個)地方
                          • t,→ 跳到,字符的前一個字符.
                          • 3fa→ 在這行中查找a出現的第三個位置.
                          • F 和 T→ 與f和t相似, 但是方向相反.
                          • Vim學習指南
                            </li> </ul> </blockquote>

                            一個有用的提示:dt"→刪除所有的直到”。 

                            區域選擇 : <命令>a<對象> 或 <命令>i<對象>

                            這些命令僅僅能用在可視化模式的一個操作后。但是他們相當的有用。他們的主要模式有:

                            <命令>a<對象> 和 <命令>i<對象>

                            命令可以是任何命令,例如 , d(刪除),y(拉取),v(進入可視化模式)。對象可以是: w一個單詞,W一個單詞 (擴展的),s一個句子,p一個段落。而且也可以是普通的字符, 例如",',),},]。

                            假設現在光標在 (map (+) ("foo")) 這個字符串的第一個o上。

                            • vi"→ 將會選擇 foo
                            • va"→ 將會選擇 "foo"
                            • vi)→ 將會選擇 "foo"
                            • va)→ 將會選擇 ("foo")
                            • v2i)→ 將會選擇 map (+) ("foo")
                            • v2a)→ 將會選擇 (map (+) ("foo"))
                            • </ul> </blockquote>

                              Vim學習指南

                              </div>

                              矩形選擇塊:

                              矩形選擇塊能夠方便的對多行代碼進行注釋。 如:0I-- [ESC]

                              • ^→ 將光標定位到這行第一個非空格字符
                              • → 選擇開始位置
                              • → 向下移動 (也可使用 jjj 或者 % , 其他…)
                              • I-- [ESC]→ 用 -- 來注釋每一行  
                              • </ul>

                                Vim學習指南

                                提示:如果你的剪貼板在Windows中是非空的話,那么你就不得不使用來代替

                                實現:.

                                在插入模式中:只要打出單詞的首字母,然后按,神奇的事情就發生了...

                                Vim學習指南

                                宏命令 : qa 做的一些事,@a,@@

                                qa 把你的動作記錄在了寄存器 a 中。然后@a 就會將存在寄存器中的動作重現,就好像你從新打了一邊。@@是將你最后一次執行的宏命令再次執行的快捷鍵。

                                事例

                                在只有數字1的一行上, 像這樣鍵入命令: