1. 關於Vim vim是我最喜歡的編輯器,也是linux下第二強大的編輯器。 雖然emacs是公認的世界第一,我認為使用emacs並沒有使用vi進行編輯來得高效。 如果是初學vi,運行一下vimtutor是個聰明的決定。 (如果你的系統環境不是中文,而你想使用中文的vimtutor,就運行vimt ...
1. 關於Vim
vim是我最喜歡的編輯器,也是linux下第二強大的編輯器。 雖然emacs是公認的世界第一,我認為使用emacs並沒有使用vi進行編輯來得高效。 如果是初學vi,運行一下vimtutor是個聰明的決定。 (如果你的系統環境不是中文,而你想使用中文的vimtutor,就運行vimtutor zh)
1.1 Vim的幾種模式
- 正常模式:可以使用快捷鍵命令,或按:輸入命令行。
- 插入模式:可以輸入文本,在正常模式下,按i、a、o等都可以進入插入模式。
- 可視模式:正常模式下按v可以進入可視模式, 在可視模式下,移動游標可以選擇文本。按V進入可視行模式, 總是整行整行的選中。ctrl+v進入可視塊模式。
- 替換模式:正常模式下,按R進入。
2. 啟動Vim
- vim -c cmd file: 在打開文件前,先執行指定的命令;
- vim -r file: 恢覆上次異常退出的文件;
- vim -R file: 以只讀的方式打開文件,但可以強制保存;
- vim -M file: 以只讀的方式打開文件,不可以強制保存;
- vim -y num file: 將編輯視窗的大小設為num行;
- vim + file: 從文件的末尾開始;
- vim +num file: 從第num行開始;
- vim +/string file: 打開file,並將游標停留在第一個找到的string上。
- vim --remote file: 用已有的vim進程打開指定的文件。 如果你不想啟用多個vim會話,這個很有用。但要註意, 如果你用vim,會尋找名叫VIM的伺服器;如果你已經有一個gvim在運行了, 你可以用gvim --remote file在已有的gvim中打開文件。
3. 文檔操作
- :e file --關閉當前編輯的文件,並開啟新的文件。 如果對當前文件的修改未保存,vi會警告。
- :e! file --放棄對當前文件的修改,編輯新的文件。
- :e+file -- 開始新的文件,並從文件尾開始編輯。
- :e+n file -- 開始新的文件,並從第n行開始編輯。
- :enew --編譯一個未命名的新文檔。(CTRL-W n)
- :e -- 重新載入當前文檔。
- :e! -- 重新載入當前文檔,並丟棄已做的改動。
- :e#或ctrl+^ -- 回到剛纔編輯的文件,很實用。
- :f或ctrl+g -- 顯示文檔名,是否修改,和游標位置。
- :f filename -- 改變編輯的文件名,這時再保存相當於另存為。
- gf -- 打開以游標所在字元串為文件名的文件。
- :w -- 保存修改。
- :n1,n2w filename -- 選擇性保存從某n1行到另n2行的內容。
- :wq -- 保存並退出。
- ZZ -- 保存並退出。
- :x -- 保存並退出。
- :q[uit] ——退出當前視窗。(CTRL-W q或CTRL-W CTRL-Q)
- :saveas newfilename -- 另存為
- :browse e -- 會打開一個文件瀏覽器讓你選擇要編輯的文件。 如果是終端中,則會打開netrw的文件瀏覽視窗; 如果是gvim,則會打開一個圖形界面的瀏覽視窗。 實際上:browse後可以跟任何編輯文檔的命令,如sp等。 用browse打開的起始目錄可以由browsedir來設置:
- :set browsedir=last -- 用上次訪問過的目錄(預設);
- :set browsedir=buffer -- 用當前文件所在目錄;
- :set browsedir=current -- 用當前工作目錄;
- :Sex -- 水平分割一個視窗,瀏覽文件系統;
- :Vex -- 垂直分割一個視窗,瀏覽文件系統;
4. 游標的移動
4.1 基本移動
以下移動都是在normal模式下。
- h或退格: 左移一個字元;
- l或空格: 右移一個字元;
- j: 下移一行;
- k: 上移一行;
- gj: 移動到一段內的下一行;
- gk: 移動到一段內的上一行;
- +或Enter: 把游標移至下一行第一個非空白字元。
- -: 把游標移至上一行第一個非空白字元。
- w: 前移一個單詞,游標停在下一個單詞開頭;
- W: 移動下一個單詞開頭,但忽略一些標點;
- e: 前移一個單詞,游標停在下一個單詞末尾;
- E: 移動到下一個單詞末尾,如果詞尾有標點,則移動到標點;
- b: 後移一個單詞,游標停在上一個單詞開頭;
- B: 移動到上一個單詞開頭,忽略一些標點;
- ge: 後移一個單詞,游標停在上一個單詞末尾;
- gE: 同 ge ,不過‘單詞’包含單詞相鄰的標點。
- (: 前移1句。
- ): 後移1句。
- {: 前移1段。
- }: 後移1段。
- fc: 把游標移到同一行的下一個c字元處
- Fc: 把游標移到同一行的上一個c字元處
- tc: 把游標移到同一行的下一個c字元前
- Tc: 把游標移到同一行的上一個c字元後
- ;: 配合f & t使用,重覆一次
- ,: 配合f & t使用,反向重覆一次
上面的操作都可以配合n使用,比如在正常模式(下麵會講到)下輸入3h, 則游標向左移動3個字元。
- 0: 移動到行首。
- g0: 移到游標所在屏幕行行首。
- ^: 移動到本行第一個非空白字元。
- g^: 同 ^ ,但是移動到當前屏幕行第一個非空字元處。
- $: 移動到行尾。
- g$: 移動游標所在屏幕行行尾。
- n|: 把游標移到遞n列上。
- nG: 到文件第n行。
- :n
移動到第n行。 -