對一個程式員來說,選擇一個文本編輯器是一件非常重要的事。因為不同編輯器之間有着不少的差異:圖形界面或者非圖形界面、不同的快捷鍵、不同的程式設計語言支援、不同的插件以及自定義設定等等。我建議不是去搜尋最棒的編輯器,而是去選擇最适合你的習慣且最适應你的任務的那一個。假如你打算在一個團體中工作,那麼最好和你的共事者選擇一樣的編輯器。這樣的話,一旦你在使用中遇到問題,你就可以去向他們尋求幫助。
這正是我在幾年之前開始使用 vim 的原因。通常來說,vim 會被置于傳說中的 emacs 的對立面。我承認我對 emacs 知之甚少,但是對于它倆,你需要知道的是它們都可以被深度定制,并且在初學時也都非常令人困惑。這個教程并不會介紹有關 vim 的所有内容,而是将介紹一些基礎以使你在最初就能正确使用它,随後還會展示一些小技巧,借此(希望能)讓你有能力自己去探索學習。
vim 一詞來源于 “vi improved”。vi 是一個被廣泛安裝于 unix 系統的非圖形界面文本編輯器,并且它也被預設安裝在了 linux 系統中。vim 是這個原始編輯器的增強版,但是不同于 vi,并不是每個發行版都預設安裝了它。
<a target="_blank"></a>
在 ubuntu 中可以使用如下指令來安裝 vim:
<code>sudo apt-get install vim</code>
如果你已經對某些插件有了興趣,使用以下指令:
<code>sudo apt-cache search vim</code>
這指令将給你輸出一個很長的和 vim 有關的包清單。在這之中,有針對不同程式設計語言的工具,有插件管理器,等等。
在這系列教程中,我将會在 ubuntu 上使用最新版的 vim(7.3.154,lctt 譯注:現在最新版為 8.0)。當然你也可以使用其它任何版本。
在終端輸入 <code>vim</code> 指令,你将會看到一個非常棒的歡迎界面。

(lctt 譯注:看到了歡迎界面中那行“help poor children in uganda!” 了嗎?)
如果你之前從未使用過 vi 或者 vim,那麼你很可能甚至不知道該怎麼退出它... 是的,這是事實。任何你常用的快捷鍵在 vim 中都将失去原有的效果。(lctt 譯注:網上有個流傳的笑話——“如何制造亂碼”,“讓新手退出 vi”)
首先,要使用任何指令式的功能,像儲存save或者退出exit,你都先得輸入一個冒号(<code>:</code>)。儲存是 <code>:w</code> 而退出是 <code>:q</code>。如果你想不儲存檔案就退出,那麼就要使用強制退出指令 <code>:q!</code>。vim 中非常棒的一點是你不需要分開輸入各個指令,換言之,如果你想儲存然後退出,你就可以直接使用 <code>:wq</code>。
現在,我們退出 vim 再打開一個文本檔案。為此,你隻需把想要編輯的檔案名加在指令後面即可:
<code>vim [文本檔案名]</code>
一般而言,當你打開一個文本檔案,你将會處在檢視模式。這使得 vim 與衆不同并且最初會讓人感到困惑。vim 主要由兩種模式構成:檢視模式和編輯模式。檢視模式用于檢視内容并且使用一些指令。想要進入編輯模式,隻需按 <code>i</code> 鍵進行插入insert或者 <code>a</code> 鍵進行添加add。想要傳回到檢視模式或者進行指令式功能的操作,按 <code>escape</code> 鍵即可。插入insert和添加add的差異僅僅在于你是想在光标位置之前還是在光标之後進入編輯模式并進行文字輸入。要想徹底地明白,你應該親自去嘗試一下。我的建議是:僅在行尾使用添加add,而在其它時候使用插入insert。
(lctt 譯注:此段落中“檢視模式”原文是 “visual mode”,疑為“view mode”,在此模式下可以檢視文本,但是不能進行編輯;而“visual mode” 是編輯模式的一種,可以按 <code>v</code> 鍵進入,然後就可以用方向鍵從目前光标位置開始進行選擇,并以反白的視覺效果顯示,通常選擇後可以按 <code>y</code> 進行複制、按 <code>d</code> 進行剪切等操作。此外, 本文作者的用語并不标準,按照 vim 自己的用語來說,此處所謂的“檢視模式”,應該稱之為“普通模式”,“編輯模式”應該稱之為“插入模式”,不過意思是一緻的。)
要想在文本之中移動光标,你通常可以使用鍵盤上的方向鍵,它們無論是在檢視模式還是在編輯模式都可以生效。不過,一個真正的純粹主義者将會告訴你使用按鍵 <code>h</code> 向左,<code>j</code> 向下,<code>k</code> 向上,<code>l</code> 向右來(在檢視模式)進行移動。
現在你已經明白了如何和簡單地控制 vim,我們再來更加深入一些。
現在你已經熟悉了在正常模式和插入模式之間進行切換,下面是一些可以在正常模式中使用的指令:
<code>x</code>:删除一個字元
<code>u</code>:撤銷一個操作(相當與 <code>ctrl+z</code>)
<code>dd</code>:删除一行内容
<code>dw</code>:删除一個單詞
<code>yy</code>:複制一行内容
<code>yw</code>:複制一個單詞
<code>p</code>:粘貼一個之前删除或複制的行或者單詞
<code>e</code>:跳到下個單詞(lctt 譯注:詞尾)(比單純用方向鍵更快)
<code>r</code>:替換一個字母(按 <code>r</code>,松開,然後再按新字母)
當然不止這些,不過這些對現在來說已經足夠了。如果你掌握了上面的全部,你将能你很順溜地使用 vim 了。
對于那些還想知道更多的人,我再多提一下。你可以在任何這些指令之前加上一個數值,那麼這個指令将被重複執行相應的次數。例如,<code>5x</code> 将在目前行連續删除 5 個字母,而 <code>3p</code> 将會粘貼 3 次。
最後,作為對你自己繼續探索的鼓勵和示例,這裡給出幾個進階且常用的指令:
<code>/所搜尋的内容</code>:在文中搜尋特定内容
<code>:sp 文本檔案名</code>:将螢幕水準分割成上下兩半,新檔案展示在另一半。想要在兩側切換焦點,可以使用 <code>ctrl+w</code> 快捷鍵。
<code>:vsp 文本檔案名</code>:同上,但是是垂直分割螢幕
<code>ctrl+shift+c</code> 和 <code>ctrl+shift+v</code>:在終端中複制和粘貼文本
<code>:! 指令名</code>:在 vim 中運作 vim 外的終端指令,直接發送給 shell。例如,<code>:! ls</code> 将在不退出編輯器的同時,顯示你目前目錄内的檔案。
我覺得你現在應該已經有了足夠的準備來開始使用 vim。你還可以通過安裝各種插件,編輯 <code>~.vimrc</code>檔案,或者在 shell 中輸入 <code>vimtutor</code> 指令來使用互動式教程以學到更多。
原文釋出時間為:2017-01-24
本文來自雲栖社群合作夥伴“linux中國”