vim 自定义命令 自定义快捷键(转)
生活随笔
收集整理的這篇文章主要介紹了
vim 自定义命令 自定义快捷键(转)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有五種映射存在?
- 用于普通模式: 輸入命令時。?
- 用于可視模式: 可視區域高亮并輸入命令時。?
- 用于操作符等待模式: 操作符等待中 ("d","y","c" 等等之后)。?
見下: |omap-info|。?
- 用于插入模式: 也用于替換模式。?
? 用于命令行模式: 輸入 ":" 或 "/" 命令時。?
下表是map綁定中,對應的模式代號。現在先了解一下,等看完之后再回過頭看這個模式代號就會明白了。?
字 符 模 式 ~?
<Space> 普通、可視、選擇和操作符等待?
n 普通?
v 可視和選擇?
s 選擇?
x 可視?
o 操作符等待?
! 插入和命令行?
i 插入?
l 插入、命令行和 Lang-Arg 模式的 ":lmap" 映射?
c 命令行?
我主要講解一下“n(普通模式)”下的兩個綁定命令,等看完之后就對應的明白別的模式下的命令了。?
適用于普通模式的映射命令主要有:?
1. :map?
[語法] :map {lhs} {rhs} |mapmode-nvo| *:map*?
1.1 作用模式: n、v、o (普通、可視和選擇、操作符等待)?
1.2 命令格式:?
:map {lhs} {rhs}?
含義: 在:map作用的模式中把鍵系列 {lhs} 映射為 {rhs},{rhs}可進行映射掃描,也就是可遞歸映射。?
1.3 舉例:?
:map td :tabnew .<cr>?
含義:在其作用模式(普通、可視、操作符)下,輸入td等價于輸入 :tabnew . <cr>。而普通模式下輸入:tabnew . <cr>就是打開當前目錄?
如果再定義綁定 :map ts td,就是指在其作用模式下輸入ts等價于td,也就是打開當前目錄。不過如果沒有特殊需要,一般不建議遞歸映射。?
2. :noremap?
:moremap和:map命令相對,作用模式和命令格式都相同,只不過不允許再對{rhs}進行映射掃描,也就是{lhs}定義后的映射就是{rhs}的鍵序列,不會再對{rhs}鍵序列重新解釋掃描。它一般用于重定義一個命令,當然如果:map不需要遞歸映射的話,建議試用:noremap?
比如:?
:noremap ts td?
它的意思是在其作用模式下,輸入ts就是輸入td,但是和:map不同的是,此時td再不會做進一步掃描解釋。雖然之前已經定義了td,但是不會對td再做掃描?
3. :unmap?
:unmap是對應取消:map綁定的{lhs},作用模式相同,命令格式 :unmap {lhs}。?
例如:?
:unmap td?
就是取消在其作用模式中td的綁定,比如之前td被綁定為:tabnew .<cr>,此時此綁定消失。?
4. :mapclear?
:mapclear時對應取消所有:map綁定的,慎用!?
5. :nmap?
:nmap是:map的普通模式板,也就是說其綁定的鍵只作用于普通模式。?
例如:?
:nmap td :tabnew .<cr> 和 :map td :tabnew .<cr> 在普通模式下等效?
6. :nnoremap?
:nnorempa和:nmap的關系和:noremap和:map的關系一樣,只是:nmap的非遞歸版?
7. :nunmap?
:nunmap和:nmap的關系和:unmap和:map的關系一樣,取消:nmap的綁定。?
8. :nmapclear?
:nmapclear是對應取消所有:map綁定的,慎用!?
看完以上,應該可以發現一個規律,前4個是一組,后4個時一組,后一組比前一組多一個n就是指只作用于普通模式。其中每組內*nore*是其對應的非遞歸版、*un*是取消綁定某個<lhs>綁定、clear后綴是取消所有綁定。發現了這個規律,再翻到前面的模式代號表,你大體可以猜到vmap、xmap、smap、omap是什么意思了吧,以及相對應的nore版本、un版本、clear版本。?
另外:?
{rhs} 之前可能顯示一個特殊字符:?
* 表示它不可重映射?
& 表示僅腳本的局部映射可以被重映射?
@ 表示緩沖區的局部映射?
到這一步你可以輕松的長吸一口氣,因為相關的命令已經都了解了,記不住沒關系,可以隨時:help map一下。不過別急,后面還有map更多的選項等著去攻克。?
鍵表 |key-notation|?
<k0> - <k9> 小鍵盤 0 到 9 *keypad-0* *keypad-9*?
<S-...> Shift+鍵 *shift* *<S-*?
<C-...> Control+鍵 *control* *ctrl* *<C-*?
<M-...> Alt+鍵 或 meta+鍵 *meta* *alt* *<M-*?
<A-...> 同 <m-...> *<A-*?
<t_xx> termcap 里的 "xx" 入口鍵?
特殊參數:?
1. <buffer>?
2. <silent>?
3. <special>?
4. <script>?
5. <expr>?
6. <unique>?
它們必須映射命令的后邊,在其他任何參數的前面。?
<buffer>如果這些映射命令的第一個參數是<buffer>,映射將只局限于當前緩沖區(也就是你此時正編輯的文件)內。比如:?
:map <buffer> ,w /a<CR>?
它的意思時在當前緩沖區里定義鍵綁定,“,w”將在當前緩沖區里查找字符a。同樣你可以在其他緩沖區里定義:?
:map <buffer> ,w /b<CR>?
比如我經常打開多個標簽(:tabedit),想要在各自標簽里定義",w"鍵綁定,那么你只要在每個標簽頁里分別定義就可,其作用域也只在各自的標簽里。同樣要清除這些緩沖區的鍵綁定也要加上<buffer>參數,比如:?
:unmap <buffer> ,w?
:mapclear <buffer>?
<silent>是指執行鍵綁定時不在命令行上回顯,比如:?
:map <silent> ,w /abcd<CR>?
你在輸入,w查找abcd時,命令行上不會顯示/abcd,如果沒有<silent>參數就會顯示出來?
<special>一般用于定義特殊鍵怕有副作用的場合。比如:?
:map <special> <F12> /Header<CR>?
<unique>一般用于定義新的鍵映射或者縮寫命令的同時檢查是否該鍵已經被映射,如果該映射或者縮寫已經存在,則該命令會失敗?
<expr>. 如果定義新映射的第一個參數是<expr>,那么參數會作為表達式來進行計算,結果使用實際使用的<rhs>,例如:?
:inoremap <expr> . InsertDot()?
這可以用來檢查光標之前的文本并在一定條件下啟動全能 (omni) 補全。?
一個例子:?
let counter = 0?
inoremap <expr> <C-L> ListItem()?
inoremap <expr> <C-R> ListReset()?
func ListItem()?
let g:counter += 1?
return g:counter . '. '?
endfunc?
func ListReset()?
let g:counter = 0?
return ''?
endfunc?
在插入模式下,CTRL-L插入順序的列表編號,并返回;CTRL-R復位列表編號到0,并返回空。?
<Leader> mapleader?
mapleader變量對所有map映射命令起效,它的作用是將參數<leader>替換成mapleader變量的值,比如:?
:map <Leader>A oanother line<Esc>?
如果mapleader變量沒有設置,則用默認的反斜杠代替,因此這個映射等效于:?
:map \A oanother line<Esc>?
意思時輸入\A鍵時,在下一行輸入another line并返回到普通模式。?
如果設置了mapleader變量,比如:?
let mapleader = ","?
那么就等效于:?
:map ,A oanother line<Esc>?
<LocalLeader> maplocalleader?
<LocalLeader>和<Leader>類似,只不過它只作用于緩沖區。?
因此在設置mapleader和maplocalleader時最好區分開,不要出現沖突。?
大體上映射的主要部分已經都提到了,還有很多具體的映射相關的內容可以參見:help map
- 用于普通模式: 輸入命令時。?
- 用于可視模式: 可視區域高亮并輸入命令時。?
- 用于操作符等待模式: 操作符等待中 ("d","y","c" 等等之后)。?
見下: |omap-info|。?
- 用于插入模式: 也用于替換模式。?
? 用于命令行模式: 輸入 ":" 或 "/" 命令時。?
下表是map綁定中,對應的模式代號。現在先了解一下,等看完之后再回過頭看這個模式代號就會明白了。?
字 符 模 式 ~?
<Space> 普通、可視、選擇和操作符等待?
n 普通?
v 可視和選擇?
s 選擇?
x 可視?
o 操作符等待?
! 插入和命令行?
i 插入?
l 插入、命令行和 Lang-Arg 模式的 ":lmap" 映射?
c 命令行?
我主要講解一下“n(普通模式)”下的兩個綁定命令,等看完之后就對應的明白別的模式下的命令了。?
適用于普通模式的映射命令主要有:?
1. :map?
[語法] :map {lhs} {rhs} |mapmode-nvo| *:map*?
1.1 作用模式: n、v、o (普通、可視和選擇、操作符等待)?
1.2 命令格式:?
:map {lhs} {rhs}?
含義: 在:map作用的模式中把鍵系列 {lhs} 映射為 {rhs},{rhs}可進行映射掃描,也就是可遞歸映射。?
1.3 舉例:?
:map td :tabnew .<cr>?
含義:在其作用模式(普通、可視、操作符)下,輸入td等價于輸入 :tabnew . <cr>。而普通模式下輸入:tabnew . <cr>就是打開當前目錄?
如果再定義綁定 :map ts td,就是指在其作用模式下輸入ts等價于td,也就是打開當前目錄。不過如果沒有特殊需要,一般不建議遞歸映射。?
2. :noremap?
:moremap和:map命令相對,作用模式和命令格式都相同,只不過不允許再對{rhs}進行映射掃描,也就是{lhs}定義后的映射就是{rhs}的鍵序列,不會再對{rhs}鍵序列重新解釋掃描。它一般用于重定義一個命令,當然如果:map不需要遞歸映射的話,建議試用:noremap?
比如:?
:noremap ts td?
它的意思是在其作用模式下,輸入ts就是輸入td,但是和:map不同的是,此時td再不會做進一步掃描解釋。雖然之前已經定義了td,但是不會對td再做掃描?
3. :unmap?
:unmap是對應取消:map綁定的{lhs},作用模式相同,命令格式 :unmap {lhs}。?
例如:?
:unmap td?
就是取消在其作用模式中td的綁定,比如之前td被綁定為:tabnew .<cr>,此時此綁定消失。?
4. :mapclear?
:mapclear時對應取消所有:map綁定的,慎用!?
5. :nmap?
:nmap是:map的普通模式板,也就是說其綁定的鍵只作用于普通模式。?
例如:?
:nmap td :tabnew .<cr> 和 :map td :tabnew .<cr> 在普通模式下等效?
6. :nnoremap?
:nnorempa和:nmap的關系和:noremap和:map的關系一樣,只是:nmap的非遞歸版?
7. :nunmap?
:nunmap和:nmap的關系和:unmap和:map的關系一樣,取消:nmap的綁定。?
8. :nmapclear?
:nmapclear是對應取消所有:map綁定的,慎用!?
看完以上,應該可以發現一個規律,前4個是一組,后4個時一組,后一組比前一組多一個n就是指只作用于普通模式。其中每組內*nore*是其對應的非遞歸版、*un*是取消綁定某個<lhs>綁定、clear后綴是取消所有綁定。發現了這個規律,再翻到前面的模式代號表,你大體可以猜到vmap、xmap、smap、omap是什么意思了吧,以及相對應的nore版本、un版本、clear版本。?
另外:?
{rhs} 之前可能顯示一個特殊字符:?
* 表示它不可重映射?
& 表示僅腳本的局部映射可以被重映射?
@ 表示緩沖區的局部映射?
到這一步你可以輕松的長吸一口氣,因為相關的命令已經都了解了,記不住沒關系,可以隨時:help map一下。不過別急,后面還有map更多的選項等著去攻克。?
鍵表 |key-notation|?
<k0> - <k9> 小鍵盤 0 到 9 *keypad-0* *keypad-9*?
<S-...> Shift+鍵 *shift* *<S-*?
<C-...> Control+鍵 *control* *ctrl* *<C-*?
<M-...> Alt+鍵 或 meta+鍵 *meta* *alt* *<M-*?
<A-...> 同 <m-...> *<A-*?
<t_xx> termcap 里的 "xx" 入口鍵?
特殊參數:?
1. <buffer>?
2. <silent>?
3. <special>?
4. <script>?
5. <expr>?
6. <unique>?
它們必須映射命令的后邊,在其他任何參數的前面。?
<buffer>如果這些映射命令的第一個參數是<buffer>,映射將只局限于當前緩沖區(也就是你此時正編輯的文件)內。比如:?
:map <buffer> ,w /a<CR>?
它的意思時在當前緩沖區里定義鍵綁定,“,w”將在當前緩沖區里查找字符a。同樣你可以在其他緩沖區里定義:?
:map <buffer> ,w /b<CR>?
比如我經常打開多個標簽(:tabedit),想要在各自標簽里定義",w"鍵綁定,那么你只要在每個標簽頁里分別定義就可,其作用域也只在各自的標簽里。同樣要清除這些緩沖區的鍵綁定也要加上<buffer>參數,比如:?
:unmap <buffer> ,w?
:mapclear <buffer>?
<silent>是指執行鍵綁定時不在命令行上回顯,比如:?
:map <silent> ,w /abcd<CR>?
你在輸入,w查找abcd時,命令行上不會顯示/abcd,如果沒有<silent>參數就會顯示出來?
<special>一般用于定義特殊鍵怕有副作用的場合。比如:?
:map <special> <F12> /Header<CR>?
<unique>一般用于定義新的鍵映射或者縮寫命令的同時檢查是否該鍵已經被映射,如果該映射或者縮寫已經存在,則該命令會失敗?
<expr>. 如果定義新映射的第一個參數是<expr>,那么參數會作為表達式來進行計算,結果使用實際使用的<rhs>,例如:?
:inoremap <expr> . InsertDot()?
這可以用來檢查光標之前的文本并在一定條件下啟動全能 (omni) 補全。?
一個例子:?
let counter = 0?
inoremap <expr> <C-L> ListItem()?
inoremap <expr> <C-R> ListReset()?
func ListItem()?
let g:counter += 1?
return g:counter . '. '?
endfunc?
func ListReset()?
let g:counter = 0?
return ''?
endfunc?
在插入模式下,CTRL-L插入順序的列表編號,并返回;CTRL-R復位列表編號到0,并返回空。?
<Leader> mapleader?
mapleader變量對所有map映射命令起效,它的作用是將參數<leader>替換成mapleader變量的值,比如:?
:map <Leader>A oanother line<Esc>?
如果mapleader變量沒有設置,則用默認的反斜杠代替,因此這個映射等效于:?
:map \A oanother line<Esc>?
意思時輸入\A鍵時,在下一行輸入another line并返回到普通模式。?
如果設置了mapleader變量,比如:?
let mapleader = ","?
那么就等效于:?
:map ,A oanother line<Esc>?
<LocalLeader> maplocalleader?
<LocalLeader>和<Leader>類似,只不過它只作用于緩沖區。?
因此在設置mapleader和maplocalleader時最好區分開,不要出現沖突。?
大體上映射的主要部分已經都提到了,還有很多具體的映射相關的內容可以參見:help map
轉載于:https://www.cnblogs.com/zhihaowang/archive/2011/01/07/10128588.html
總結
以上是生活随笔為你收集整理的vim 自定义命令 自定义快捷键(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 长安铃木天语sx4防冻液壶怎么打开?
- 下一篇: 数据库优化的几条基本策略