post

Vim zh-tw:第一步

Contents

開啟 Vim

第一步當然是學會怎麼打開 Vim。

圖形化介面

First vim screenshot.png

Windows
用滑鼠點一下 開始 → 所有程式 → Vim 7 → gVim。或者按 windows 鍵 + r,然後輸入 ‘gvim’。
Mac OS X
點一下 Finder → 應用程式 → MacVim。
Linux/BSD
應用程式 → 附屬應用程式 → GVim 文字編輯器,或是按 Alt+F2,輸入 gvim 後按 enter。

終端機版

First vim console screenshot.png

Windows
開始 → 執行,輸入 vim 後按 enter。
Mac OS X
Finder → 應用程式 → 工具程式 → 終端機,輸入 vim 再按 enter。
Linux/BSD
應用程式 → 附屬應用程式 → 終端機,或是按 Alt+F2,輸入 konsole/gnome-terminal 後按 enter。然後輸入 vim 完再按 enter。

之後就用上面的兩種方法打開 Vim。

注意
你會發現剛開始執行 Vim 的時候沒辦法輸入文字。別緊張,待會兒會解釋。

要選圖形化介面還是終端機版本呢?

圖形化介面的 Vim 在軟體的上方都有選單可以方便使用,也可以用滑鼠作很多事,不過要提醒你的是,其實不一定要用滑鼠。單單只用鍵盤一樣可以使用 Vim 的所有功能。

為什麼這很重要?因為如果一個人打字的效率變高,相對於有用到滑鼠,只用鍵盤會讓你速度更快又比較不會出錯。這是因為我們的手在鍵盤和滑鼠間的來回速度很慢,進而會造成我們注意力不停的轉移。假如你盡可能只用鍵盤,會省下很多費時又費力的動作。

當然,這只是我自己主觀的看法。有些人喜歡用滑鼠,有些人喜歡用鍵盤。我鼓勵你盡量只使用鍵盤,才能體會 Vim 的強大。

模式初探

假裝現在是星期六下午,你覺得電視節目好無趣,想看個喜歡的老電影。於是你把電視切到影音模式,原本的第四台就換成 DVD 了。注意到電視一樣是在播放影像,不過你可以把播放的環境設成看 DVD 或是看電視頻道。

同樣的道理,Vim 也有所謂的模式,像是輸入文字的模式和執行指令的模式等等。這些模式都與文字編輯這個目的息息相關,不過你可以把環境切換成只能打字的模式,或是在內文上執行某些命令的模式。

不就是這麼簡單嗎?

一直以來,這種模式的概念都是初學者覺得 Vim “莫名其妙”的理由。這種情況就像學腳踏車,你一定會先摔個幾次,一旦你抓到訣竅,就會很納悶之前到底是怎麼搞的。

所以到底為什麼 Vim 要有模式?目的是要把事情盡可能地簡化,雖然這樣子的作法會讓剛接觸的人覺得很”奇怪”。

這是什麼意思呢?舉個例子來說,Vim 的許多重要的目標中,其中一個是完全排除掉對滑鼠的需求,純粹只用鍵盤,當然如果你想用還是可以用滑鼠。只用鍵盤的前提下,你要怎麼分辨要輸入的文字和要執行的命令?Vim 的解決方法是,一個可以執行命令的”常態”模式和一個可以打字的”插入”模式。你可以隨時切換這兩個模式。按 i 會切換到插入模式,按 <Esc> 則回到常態模式。

那一般的編輯器是怎麼區分命令和輸入的文字呢?利用圖形化的選單和快速鍵。問題是這樣子沒辦法應付龐大的工作。首先,假設你有百來個命令要執行,光在選單上按來按去就會要了你的命。其次,要讓這些命令符合你的需求更是困難。

舉一個具體的例子來看。假設你要把一份文件中所有的 “from” 都換成 “to”。用一般的編輯器,你會用選單裡的 編輯 -> 取代(或是按像是 Ctrl-R 之類的快速鍵),然後輸入 ‘from’ 和 ‘to’ 之後按’取代’,還要勾選’取代全部’的選項。Vim 的話只要在常態模式下輸入 :%s/from/to/g 就可以了。看到有多簡單了吧?

取代命令解說
看一下這個命令 :%s/from/to/g%是指檔案的每一行,表明我們要執行命令的範圍。所以 0,10 就是表示 0 到 10 行。:s 是”取代(substitute)”的意思。’from’ 和 ‘to’ 分別代表要尋找和取代的文字。g 則是指如果同一行中有一個以上的 ‘from’ 字串,要全部取代。
第一次看到會覺得好多東西要記,不過只要你學會了,以後每一次都只要簡單的幾個按鍵,用不著繁瑣的選單和對話窗。

那現在如果你只想把取代套用在前十行,而且在取代前先出現是否取代的提示,該怎麼辦?如果是用傳統的文字編輯器,取消勾選’取代全部’的選項就會出現是否取代的提示,不過要注意的是,你得先找到這個選項然後用滑鼠在選項上點一下,或者是用一大串的快速鍵。但是只要替換前十行又該怎麼辦?Vim 的話只要執行 :0,10s/from/to/gc。多加的 c 是指在每一次取代前都先秀出確認(‘c’onfirmation)訊息。

因為 Vim 區分輸入(插入)模式和命令(常態)模式的作法,所以我們可以輕易地在這兩個環境中轉換。

儘管一開始用 Vim 會覺得有那麼一點”怪”,那麼一點”陌生”,不過只要你親身體驗過,就會開始覺得有道理。最棒的是只要掌握這些核心概念就會知道怎麼用 Vim。

因為你已經瞭解常態模式和插入模式的不同,找出那些能在常態模式下執行的命令,馬上就能用。但是如果想要學傳統的編輯器中新的命令,得看一堆文件,在選單裡翻來翻去,反覆嘗試,或者是直接問別人。

我自己是覺得這些模式的名字對初學者來說不太直覺。我比較喜歡把插入模式稱作”寫作”模式,常態模式則是”改寫”模式,不過為了避免混淆,我們還是會用 Vim 的標準名稱。

Note
在常態模式中,輸入命令後都要按 enter 鍵,讓 Vim 知道我們已經打好命令了。所以我們說執行 :help vim-modes-intro 表示你得輸入 :help vim-modes-intro 然後按 enter。

編寫檔案

我們來看看如何打開、編寫以及關閉檔案。

  1. 開啟 Vim。
    Firststeps open.png

  2. 輸入 :edit hello.txt 然後按 enter 鍵。
    Firststeps edit.png

  3. i
    Firststeps insert.png

  4. 輸入 Hello World
    Firststeps type.png

  5. <Esc>
    Firststeps normal.png

  6. 輸入 :write 後按 enter 鍵。
    Firststeps write.png

  7. 執行 :q 離開 Vim。
    Firststeps quit.png

恭喜!你用 Vim 寫了第一個檔案:-)。

看起來好像好多個步驟喔?沒錯,的確是,就一開始而言。因為這是我們第一次試著去習慣開關 Vim 和寫檔。你要記得,相較於寫文件內容花的時間,這些只會佔掉一小部份。

看看上面的命令做了些甚麼事。

  • :edit hello.txt 或是簡單一點的 :e hello.txt
    • 打開檔案以供編輯(editing)。如果指定檔名的檔案不存在的話,會在第一次”儲存”檔案時產生該檔案。
  • i
    • 會切換到插入模式
  • 輸入 Hello World
    • 就是你想寫的內容。
  • <Esc>
    • 跳到常態模式
  • :write 或是更簡潔的 :w
    • 要 Vim 把由 Vim 自動產生的暫存檔中的文字寫入(write)硬碟的檔案裡。表示我們到目前為止寫的都會存在電腦裡。
  • :quit 或是 :q 會結束正在編輯的”視窗”的檔案。如果只有打開一個”視窗”,Vim 也會跟著關閉(視窗的概念會在之後的章節討論)。

試著用不同的檔名和文字內容重複這些過程幾次, 你就會習慣這幾個基本的步驟。

注意到在插入模式的時候,在左下角會顯示 -- INSERT --。常態模式的話就什麼也沒有,因為常態模式是 Vim 的預設模式。

花點時間咀嚼這些資訊,這些可能是學 Vim 最難的地方,其他都很簡單:)

不過不用擔心,使用手冊就近在咫尺。其實就在一個指令 :help 遠的地方而已。例如輸入 :help:edit 然後說明文件就會出現。試試看吧。

總結

我們講了一些 Vim 的基本概念和使用方法。可以參考一下 :help notation:help keycodes

好好了解這些概念,如果能”用 Vim 的方式思考”,理解其他部份就簡單了。


Advertisements