Vim按鍵映射可用於設置Vim命令或命令串的別名,完成個性化Vim按鍵設置。
Vim命令雖然很多,但是常用的Vim命令卻被使用者所熟知。通過 Vim 按鍵映射,可減少按鍵次數、提供Vim的工作效率。
本文介紹15種常用的Vim按鍵映射配置,並詳細分析了對應的Vim命令及功能。更多個性化Vim配置,推薦閱讀《 無插件Vim配置及Vim命令介紹 》。
1. 打開/關閉顯示行號按鍵映射
通過以下的 Vim 按鍵映射,可以在 Vim 的普通模式下按 F2 快速打開(或關閉)顯示行號。
nnoremap <F2> :set nu! nu?<CR>
還可以根據個人使用需用,設置以下類似的按鍵映射。
nnoremap <F3> :set list! list?<CR> nnoremap <F4> :set wrap! wrap?<CR> nnoremap <F6> :exec exists('syntax_on') ? 'syn off' : 'syn on'<CR>
2. 退出Vim的按鍵映射
退出Vim是最常用的操作, :q 、 :w 等命令需要先按 : 鍵進入 Vim 命令行模式。Vim leader鍵 主要用於避免按鍵沖突,類似於命名空間的作用。
nnoremap <leader>q :q<CR> nnoremap <leader>w :w<CR>
在上述按鍵映射的設置下,Vim 默認模式下,按 \q (因為默認的leader鍵是 \ )就等價於輸入 :q 並按回車鍵執行,按 \w 等價於輸入 :w 並按回車鍵執行之。
3. Vim全選按鍵映射
可以通過Vim 可視化模式 實現全選 Vim 中的全部文本。具體來說,先通過 gg 命令跳轉到文件的首行,再按 V 進入可視化模式的行選擇模式,再通過 G 命令將光標移動到尾行,從而實現選中全部文本的效果。
假設 leader 鍵是默認的 \ ,通過下面的 Vim 按鍵映射,可以實現按 \sa 全選當前文件所有文本的效果。
map <leader>sa ggVG"
4. Vim 縮進及按鍵映射配置
Vim可視化模式下, > 用於增加縮進;而 gv 命令可以用於重新選取上一次由可視模式所選擇的文本范圍。
為了避免丟失可視化模式下的選擇本文,可增加如下 Vim 按鍵映射配置:
vnoremap < <gv vnoremap > >gv
5. Vim分割窗口切換映射
在 Vim 窗口分割模式下,默認可以使用 <Ctrl-w> 組合鍵進行窗口切換。例如, <Ctrl-w>j 可切換到下面的分割窗口, <Ctrl-w>k 可切換到上面的分割窗口, <Ctrl-w>h 可切換到左邊的分割窗口,而 <Ctrl-w>l 可切換到右邊的分割窗口。
但是,個人覺得上述按鍵太過繁瑣,可以通過以下按鍵映射,減少按鍵次數。
map <C-j> <C-W>j map <C-k> <C-W>k map <C-h> <C-W>h map <C-l> <C-W>l
在上述Vim按鍵映射設置下,通過組合鍵 <Ctrl-j> 可切換到下面的分割窗口, <Ctrl-k> 可切換到上面的分割窗口, <Ctrl-h> 可切換到左邊的分割窗口,而 <Ctrl-l> 可切換到右邊的分割窗口。
6. Vim光標行移動
nnoremap k gk nnoremap gk k nnoremap j gj nnoremap gj j
nnoremap gk k 表示將 gk 按鍵映射 為 k ,從 Vim光標移動之實際行與屏幕行 一文可知, gk 表示上移一個屏幕行。
7. Vim行首、行尾光標移動按鍵映射
Vim 普通模式下, ^ 命令可將光標移動到當前行的第一個非空字符; $ 可將光標移動到當前行的行尾。
而 h 命令用於向左移動光標, l 命令用於向右移動光標。
所以,Vim教程網(https://vimjc.com)進行如下按鍵映射,實現按大寫的 H 將光標 左移 至當前行的第一個字符,按大小的 L 將光標 右移 至當前行的最后一個字符。
nnoremap H ^ nnoremap L $
8. Vim 命令行模式光標移動
在 Vim 的命令行模式下,如果想實現類似於《 高效Linux技巧及Vim命令 》一文提到的快速移動光標到行首的效果,可配置如下 Vim 按鍵映射。
cnoremap <C-j> <t_kd> cnoremap <C-k> <t_ku> cnoremap <C-a> <Home> cnoremap <C-e> <End>
例如, cnoremap <C-a> <Home> 表示將 <Ctrl> a 組合鍵映射為 Home 鍵,從而實現在 Vim 命令行模式下按 <Ctrl> a 即可快速移動光標到行首的效果。
上述其他幾個按鍵映射含義類似,在此不再贅述。
9. Vim 復制命令
y ( yank 的縮寫形式) 命令用於復制文本到Vim寄存器中,其命令格式為: ["x]y{motion} ,表示 復制 {motion} 跨越的文本 [到寄存器 x] (參考:Vim文本編輯命令匯總)。
如果希望復制 從光標到行尾 所在范圍的文本,可使用 y$ 命令。
以下 Vim 按鍵映射,將大寫的 Y 按鍵映射為 y$ 。
map Y y$
10. Vim取消撤銷操作
Vim 普通模式下,通過 u 可撤銷上次的操作,而組合命令 <Ctrl r> 可取消撤銷操作。為了減少按鍵操作,可將 U 鍵映射為 <Ctrl r> 命令,從而實現按 U 便可以 取消撤銷 操作。
對應按鍵映射配置如下:
nnoremap U <C-r>
11. Vim 位置標記與跳轉
如Vim位置標記mark詳解一文所介紹,Vim命令 'a (單引號加一個標記a) 會將光標跳轉到a標記所在行的 行首 。而 a 命令會將光標跳轉到標記所在行上被標記的列位置,即同時恢復行、列的位置。
nnoremap ' ` nnoremap ` '
12. Vim搜索結果居中展示
nnoremap <silent> n nzz nnoremap <silent> N Nzz nnoremap <silent> * *zz nnoremap <silent> # #zz nnoremap <silent> g* g*zz
Vim普通模式下, z 命令用於屏幕重繪。 z. 命令使當前光標所在的行顯示在窗口中部,且光標會移動到當前行的第一個非空白字符上;而 zz 會使當前光標所在的行顯示在窗口中部,且保持光標所在列的位置不變。同時,在 Vim 普通模式下, n 命令表示跳轉到下一個查找匹配項。
因此, nzz 表示把下一個查找匹配項所在的行顯示在屏幕的最中間。
為了減少按鍵次數,同時不改變使用習慣,可以設置 Vim 普通模式下的按鍵映射: nnoremap <silent> n nzz ,實現按 n 鍵就可以將下一個查找匹配項所在的行顯示在屏幕的最中間。
上述其他幾個按鍵映射同理,不再贅述。可參考《 Vim搜索命令使用方法和技巧 》一文,了解 N 、 * 、 # 、`` 在 Vim 查找匹配下的作用。
注: silien 命令用於安靜地執行命令,既不顯示正常的消息,也不會把它加進消息歷史,其格式為: :sil[ent][!] {command} 。如果有 [!] ,則表示還將跳過錯誤消息 (即時檢測到錯誤時,Vim 命令和按鍵映射也不會被終止)。
13. 取消 Vim 查找高亮顯示
noremap <silent><leader>/ :nohls<CR>
如《 Vim清除上次的搜索高亮 》一文介紹,Vim 命令行模式下執行 nohls 可取消高亮顯示查找匹配結果。
如果 leader 鍵是默認的 \ ,那么在上述的按鍵映射下,Vim 普通模式下執行 \/ 等價於在 Vim 命令行模式下 執行 nohls 命令,可用於取消搜索結果高亮顯示。
廣州vi設計http://www.maiqicn.com 我的007辦公資源網站https://www.wode007.com
14. 進入Vim命令行模式/返回Vim普通模式
普通模式下,輸入 : 可進入 Vim 的命令行模式。
考慮到按鍵便利性,可將 ; 映射為 : ,從而實現按 ; 鍵便可以從 Vim 普通模式進入命令行模式的效果。對應配置如下:
nnoremap ; :
在任何模式下,按 Esc 可返回到 Vim 普通模式。
同樣出於按鍵便利性,可以在 Vim 的插入模式下,將 kj 映射為 Esc 鍵,實現按 kj 鍵退出插入模式,返回到普通模式的效果。對應配置如下:
inoremap kj <Esc>
15. Vim 保存沒權限修改的文件
:w! 命令可實現強制保存文件 (即便該文件是只讀文件)。但這個命令無法保存那些沒修改權限的文件,如果中途強制退出,又容易丟失辛辛苦苦修改的內容。這時候,Vim 下可執行 shell 終端命令的功能便派上了大用場。《 Vim超級用戶權限保存文件 》一文已經介紹過通過 :write !sudo tee % > /dev/null 命令,可實現使用超級用戶權限保存文件。