Vim进阶2 map映射
Vim進階2 map映射
簡介
map是一個 vim 中的一些列映射命令,將常用的很長的命令映射到一個新的功能鍵上。map是Vim強大的一個重要原因,可以自定義各種快捷鍵,用起來自然得心應手。
map系列命令格式
格式
以 map 命令為例,它的命令格式是這樣的:
:map {lhs} {rhs}其含義是,在 :map 作用的模式中把鍵系列 {lhs} 映射為 {rhs},{rhs} 可進行映射掃描,也就是可遞歸映射。
舉例
:map td :tabnew .<cr>含義:在其作用模式(普通、可視、操作符)下,輸入 td 等價于輸入 :tabnew . <cr>。而普通模式下輸入:tabnew . <cr> 就是打開當前目錄。
而如果再映射一次
:map ts td就是指在其作用模式下輸入 ts 等價于 td,也就是打開當前目錄。不過如果沒有特殊需要,一般不建議遞歸映射。
映射命令
不同模式下的映射命令
使用下表中不同形式的map命令,可以針對特定的模式設置鍵盤映射,實際上,不同的 map 命令前綴是可以相互組合的,
-
nore 表示非遞歸。 遞歸的映射。其實很好理解,也就是如果鍵a被映射成了b,c又被映射成了a,如果映射是遞歸的,那么c就被映射成了b,這個會在后面再介紹。
-
n 表示在普通模式下生效
-
v 表示在可視模式下生效
-
i 表示在插入模式下生效
-
c 表示在命令行模式下生效
常見的映射命令的有效模式如下:
| :map | y | y | y | ||
| :nmap | y | ||||
| :vmap | y | ||||
| :omap | y | ||||
| :map! | y | y | |||
| :imap | y | ||||
| :cmap | y |
noremap
看它的名字其實也很好理解它的含義:no re map,即不要 重新 映射,就是說不要進行遞歸映射。
具體來說,:noremap 和 :map命令相對,作用模式和命令格式都相同,只不過不允許再對 {rhs} 進行映射掃描,也就是 {lhs} 定義后的映射就是 {rhs} 的鍵序列,不會再對 {rhs} 鍵序列重新解釋掃描。它一般用于重定義一個命令,當然如果 :map 不需要遞歸映射的話,建議使用 :noremap。
比如:
:noremap ts td它的意思是在其作用模式下,輸入 ts 就是輸入td,但是和 :map 不同的是,此時 td 再不會做進一步掃描解釋。雖然之前已經定義了 td,但是不會對 td 再做掃描。
取消映射
unmap
:unmap 是對應取消 :map 綁定的 {lhs},作用模式相同,命令格式 :unmap {lhs}。
例如:
:unmap td就是取消在其作用模式中 td 的綁定,比如之前 td 被綁定為 :tabnew .<cr>,此時此綁定消失。
注意 unmap 必須要有一個參數,即被取消的 {lhs} ,否則會報錯。
mapclear
:mapclear 是對應取消所有 :map 綁定的,慎用!
常用map映射參考
下面介紹幾個筆者在用的 vim 映射,大家如果覺得好用的話可以加到自己的 vimrc 里面。主要還是鼓勵大家在自己的日常使用中根據自己輸入的痛點,靈活地設計自己的map,畢竟做不同的工作,寫不同的語言,輸入的痛點都是不同的,這也正是 Vim 靈活好玩的地方之一。
推薦的原則是:將自己最常用的鍵設置在自己最容易按到的地方。
1. 禁用方向鍵
為了強迫幫助新手盡快適應 hjkl 來移動光標,而非用方向鍵,我們可以將方向鍵禁用掉,包括常規模式和插入模式,這也是 MIT 建議的 vimrc 中的設置 (該鏈接會直接下載MIT的vimrc)。
" 常規模式禁用方向鍵 nnoremap <Left> :echoe "Use h"<CR> nnoremap <Right> :echoe "Use l"<CR> nnoremap <Up> :echoe "Use k"<CR> nnoremap <Down> :echoe "Use j"<CR>" 插入模式禁用方向鍵 inoremap <Left> <ESC>:echoe "Use h"<CR> inoremap <Right> <ESC>:echoe "Use l"<CR> inoremap <Up> <ESC>:echoe "Use k"<CR> inoremap <Down> <ESC>:echoe "Use j"<CR>2. 縮進
我們在 VS Code 等編輯器中都是 Tab 和 Shift+Tab 來進行縮進和反縮進,在 Vim 中,縮進和反縮進稍顯復雜,我們可以用下面的映射來使得它和我們在其他編輯器中一樣。
" 常規模式 nmap <tab> V> nmap <s-tab> V<" 可視模式 vmap <tab> >gv vmap <s-tab> <gv3. 移動窗口
在 Vim 分屏中,我們使用 sp 和 vsp 來同時打開多個窗口,并通過 Ctrl+w+hjkl 來在各個窗口之間進行切換,但這也很麻煩,筆者實在是沒想通加那個 w 干嘛,換掉!
map <C-h> <C-w>h map <C-j> <C-w>j map <C-k> <C-w>k map <C-l> <C-w>l4. 移動到行首行位
在 Vim 常規模式下,移動到行首行位分別是 0、^ 和 $,但是筆者也感覺直接格鍵巨難按,剛好 H 和 L 在平時不怎么用到,還是處在鍵盤的黃金位置,所以可以用來替換:
noremap H ^ noremap L $5. 功能按鍵
在鍵盤的黃金區域,Vim 留給我們可以自己設置的鍵位并不多,但是功能鍵( F2 等)還是有很多可以用的,要注意的是,功能鍵離我們的手也很遠,所以最好不要設置一些頻繁用到的操作,而是應該讓 “鍵如其名”,設置一些 “功能鍵” 在功能鍵上。比如開關行數顯示,有時很有用,但是有時又看著很煩或者在復制文本時很礙事,以此為例,我們將開關行數設置在 F2 上:
nnoremap <F2> :set nu! nu?<CR>其他的功能鍵大家可以結合自己日常輸入中常用的功能來進行設置。推薦在功能鍵設置一些 set 的功能命令。可參考 vimrc配置文件。
筆者在這里拋磚引玉,就介紹怎么多,其他的高效映射,大家自己在日常工作中再去探索吧。
Ref:
http://www.pythonclub.org/linux/vim/map
https://www.jianshu.com/p/8ae25a680ed7
總結
以上是生活随笔為你收集整理的Vim进阶2 map映射的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 卫生间地面瓷砖脚一站,缝隙就渗水是什么原
- 下一篇: 租房后遇到逝者遗体该怎么办?