Vim 簡明教程
VIM 基礎教程
目錄前言
最難的不是如何學習 VIM,而是一直使用 VIM。
儘管網上有非常多的 VIM 教程,大多數教程要麼是過於直白、要麼是過於基礎。從這篇文章中你可以學習到 VIM 的操作邏輯,使用 VIM 實現你現在使用的編輯器的編輯技巧。當然,最好的文件還是 VIM 的幫助文件,如果有耐心看的話,可以把它當成一個字典或者百科全書。
VIM 配置
這篇文章不會詳細介紹 VIM 如何配置,但是有一些重要配置可以提高編輯體驗,有必要介紹一下。安裝好 VIM 之後,VIM 的配置檔案位置:
vim ~/.vimrc
下面是一些推薦配置:
-
重對映 ESC 按鍵:ESC 用來退出編輯模式,但是位於鍵盤邊緣,不太容易按。所以可以輸入 jk 代替 ESC。
inoremap jk <ESC>
-
修改 Leader Key:
Leader Key 用來觸發快捷鍵。預設的 Leader Key 是
\
,不太容易按。而'
就在小拇指右邊。let mapleader = "'"
有了上面兩個配置,手基本上不會離開鍵盤太遠。
下面是一些特別推薦的配置:
syntax on # highlight syntax
set number # show line number
set noswapfile # disable the swapfile
set hlsearch # highlight the search
set ignorecase # ignore case in search
set incsearch # show search results as you type
-
重對映 CAPSLOCK:這不是 VIM 的配置,CAPSLOCK 可以說是鍵盤上最沒用的按鍵,建議對映為 ESC 或者 Ctrl。這個對映可以在作業系統層面上實現。
-
外掛管理:建議儘量保持原有的外掛管理,不要使用第三方外掛管理器。在 VIM 8.x 版本上,外掛管理非常簡單,只需要把外掛複製到下面的資料夾即可:
~/.vim/pack/{外掛資料夾名字,可以隨意取}/start/{外掛名字}
VIM 的語言
使用 VIM 的方式思考會大幅提高你的編輯效率。VIM 就像一門語言,包括名詞、動詞、形容詞/副詞。這些術語在 VIM 的技術實現上不是準確的,但是可以幫助理解 VIM 的操作邏輯。
動詞
動詞就是要採取的動作,可以作用於名字上。比如:
- d: delete,刪除
- c: change,修改
- y: yank,複製
- v: visual,視覺化選擇(V 選擇行,v 選擇字元)
形容詞/副詞
這類詞解釋應該按什麼方式完成動作。比如:
- i: inside,內部
- a: around,周圍
- NUM: 數字
- t: 搜尋目標,在目標前面停止
- f: 搜尋目標,在目標上面停止
- /: 查詢字串(正則)
名詞
名詞就是要作用的物件,比如:
- w: word,單詞
- s: sentence,句子
- ): sentence,另外一種方式
- p: paragraph,段落
- },paragraph,另外一種方式
- t,tag,標籤(HTML或者XML)
- b: block,程式碼塊
名字用作動詞
名字也可以用作動詞,可以用於以某個單位移動游標。
生成句子
組合動詞、形容詞/副詞、名字可以生成一個合法的句子。比如:
刪除兩個單詞
d2w
在句子內部修改(刪除當前句子並且進入插入模式)
cis
複製所在的段落
yip
修改直到下一個尖括號(刪除直到下一個尖括號,並且進入插入模式)
ct<
這裡 to
的目標是 <
,實際上可以是任何元素,比如 yt.
, dt.
等等。
開始使用 VIM
VIM 編輯檔案的基礎操作:
- vim file: 使用 vim 開啟 file
- :w: 儲存修改
- :q!: 退出 vim,不儲存修改
- :wq: 儲存修改並退出
- :saveas ~/somepath: 在指定目錄儲存檔案
- ZZ,等價於 :wq
在文字中搜索
字串搜尋
使用 /
可以進行搜尋,輸入想要搜尋的內容然後按下回車。
搜尋 include
/include
一旦搜尋完畢,使用 n
跳轉到下一個搜尋結果,使用 N
跳轉到上一個搜尋結果。可以使用 ?
從反向查詢字串。
跳轉到指定字元
跳轉到下一個 < 上
f<
跳轉到下一個 < 的前面
t<
修改直到下一個,
ct,
搜尋總結
- /{string},搜尋指定字串
- t, 跳轉到某個字元前
- f,跳轉到某個字元上
- *****,搜尋當前位置的單詞
- n,字串搜尋中,跳轉到下一個
- N,字串搜尋中,跳轉到上一個
- ;,字元搜尋中,跳轉到下一個
- ,,字元搜尋中,跳轉到上一個
移動游標
- j,向下移動
- k,向上移動
- h,向左移動
- l,向右移動
需要多加練習,剛開始不是很習慣。
行內移動
- 0,移動到行首
- $,移動到行尾
- ^,移動到第一個非空白字元
- t",移動到下一個 " 前
- f",移動到下一個 " 上
以單詞為單位移動
- w,移動一個單詞
- b,向後一個一個單詞
- e,移動到單詞末尾
大寫指令會忽略掉某些字元分隔符。
- W,移動一個單詞,忽略分隔符
- B,前後移動一個單詞,忽略分隔符
在段落間移動
- ),移動一個句子
- },移動一個段落
移動螢幕
- H,移動到螢幕頂端
- M,移動到螢幕中間
- L,移動到螢幕底部
- gg,移動到檔案頂部
- G,移動到檔案底部
- ^U,向上移動半個螢幕
- ^D,向下移動半個螢幕
- ^F,向上翻頁
- ^B,向下翻頁
來回跳轉
- Ctrl+i,跳轉到前一個位置
- Ctrl+o,跳轉到後一個位置
其他動作
- :line_number,跳轉到指定行
- ^E,向上滾動一行
- ^Y,向下滾動一行
修改文字
現在開始使用 VIM 進行編輯。
VIM 模式
- 正常模式:一開始就處於正常模式。正常模式又叫做命令模式,通常用來輸入命令。
- 插入模式:修改文字的模式,有很多從正常模式切換到插入模式的方法。
- 視覺化模式:選擇文字的一種模式,與正常模式相似,只不過游標的移動會選中文字。視覺化模式的目的是可以在選中的文字上執行命令,非常方便。
-
擴充套件模式:從底部輸入
:
,可以執行很多功能強大的命令。
基礎修改/插入選項
修改文字的方式有 修改(c), 插入(i),附加(a)。
- i,insert,在游標之前插入
- a,append,在游標之後插入
- I,在行首插入
- A,在行尾插入
- o,在下一行插入新行
- O,在上一行插入新行
- r,替換游標位置的字元
- R,替換游標位置的字元,但是保持繼續輸入狀態
- cm,比如 cw,cs,cp
// TODO
挖坑,以後再填