2014年9月17日 星期三

vim 學習地圖

vim 學習地圖 vim 編輯器超強。 跟其他自由軟體一樣, 這種 「學一次, 用一輩子」 的 長線學習投資 非常有價值。 但是學 vim 跟學 linux 或學英文一樣 (撇開三者份量差異不談), 最好的策略並不是要密集投入多少小時一口氣全部學會。 正好相反, 應該 從最常用的少數功能開始, 天天使用, 但是隔一段時間或有需要時, 才多學一兩個次常用的功能, 長期緩步累積。 所以越常用的功能就會越熟悉。 此外, 新舊知識拿來發揮 組合的力量 也是學習重點。 至於不想學 vim 的人, 至少也要學會 逃生動作

我參考 這一頁的用語, 按照 vim 最常用的幾大操作模式畫成一張圖, 並且做成了一份 sozi 簡報, 以下是簡要說明。

  1. 用 vim 打開一份文件時, 所看到的操作介面稱為 正常模式 normal mode。 在這個模式下, 大部分的時間都在瀏覽/移動游標。 例如方向鍵等等。 按移動指令之前, 如果先按數字, 那麼那個移動指令會被重複很多次。 其他比較進階的指令, 以後再學。
  2. 如果要編修文件, 可以按 a 或 i 或 o 進入 插入模式 insert mode。 在這個模式下, 除了方向鍵之外, 其他鍵都變成文件的文字內容, 所以我喜歡稱它為打字模式。 打字結束之後, 按 Esc 鍵可以跳脫插入模式, 回到正常模式。
  3. 某些動作需要提供更多資訊給 vim, 這時就要按冒號 ":" 游標會跳到螢幕最下面一列, 進入 命令列模式 command line mode。 例如 :wq 存檔並離開、 :q! 不存檔直接離開、 :e /tmp/abc.txt 改編輯 /tmp/abc.txt 這個檔案。 如果打到一半, 後悔想放棄, 可以按 Esc 回到正常模式。
  4. 想搜尋字串嗎? 按斜線 "/" 游標也會跳到螢幕最下面一列, 進入 搜尋模式 search mode。 (在一般文件裡, 這還是算在命令列模式底下; 不過使用的指令/語法完全不同, 所以我把它獨立出來。) 在這個模式下, 可以採用 regular expressions 的語法, 一次搜尋很多相關、 但不完全相同的字串。 如果打到一半, 後悔想放棄, 可以按 Esc 回到正常模式。
  5. 回來談正常模式。 除了移動之外, 經常用到的還有三種功能: 剪下(刪除)、 複製、 貼上。
  6. 「刪除」 類型的編輯指令: x 是刪除一個字元、 8x 是刪除八個字元、 dd 是刪除一列、 7dd 是刪除七列。
  7. 「複製」 類型的編輯指令: yy 是複製一列、 6yy 是複製六列。
  8. 「貼上」 類型的編輯指令: p 是貼上、 8p 是貼上八次。
  9. 按 "v" (小寫) 可以進入 超級好用的 視覺模式 visual mode。 接下來用各種移動指令來移動游標時, 你會發現有一段文字反白了。 移到你滿意的位置之後, 如果可以按 「刪除」 類型或 「複製」 類型的指令, 然後這一塊反白的文字就會消失, 或是反白文字就會恢復正常。 總之會回到正常模式。 然後把游標移到另一處, 按 p 就可以把剛剛刪除/複製的內容貼在此處。 在視覺模式底下 (反白的時候) 如果移動到一半, 後悔想放棄, 可以按 Esc 回到正常模式。
  10. 事實上, 還有兩種視覺模式。 按 "V" (大寫), 會進入 列視覺模式 line visual mode, 反白的內容會以列為單位。 按 "ctrl-v" , 會進入 方塊視覺模式 block visual mode, 反白的內容會是一個長方形。

你可以注意到: 在任何模式底下, 按 Esc 鍵都會放棄目前的動作, 跳回正常模式。 包含如果原先已經在正常模式底下, 也還是會留在正常模式底下。 所以在 vim 裡面, 遇到沒有把握的狀況, 按 Esc 就一定可以放棄目前動作、 回到最熟悉、 最安心的正常模式。

請注意各種指令的組合。 例如 "3d/。Enter" 會搜尋 「。」 三次, 從目前位置刪到搜尋目的地為止。 再跟三種視覺模式組合起來, 你會開始理解高手為什麼喜歡用 vim。 在 vim 裡面, 投入 5+5+5+5 份量的學習投資之後, 透過組合的力量, 可以產生 5*5*5*5 種可能的學習效果。

也要再次提醒大家: 指令不需要一次全部學到位。 這張圖刻意把較進階的指令放在下面、 又用漸層淡化背景, 就是要強調這點。 這份簡報的理想使用方式, 並不是 「一頁全部學完再學下一頁」。 比較理想的使用方式應該是: 第一次只看每一頁的最上面, 很簡要地照著全部操作一次, 感覺一下。 以後每隔一段時間整份簡報重看一次; 每次重看時, 每一頁稍微往下再多看一點。

對了, 還要推薦 vim adventures 這個網頁遊戲給 vim 初學者!

希望這樣的導引, 有助於降低踏入 vim 的門檻, 讓更多人勇於嘗試、 能夠享受它的強大威力。 如果遺漏了什麼很基本、 很好用的指令, 也歡迎留言提醒, 我看看還有沒有空間可以塞進去 ^_^

沒有留言:

張貼留言