Vimscript 更多的Mappings

2020-09-04 15:54 更新

迄今為止我們已經(jīng)說了很多mappings的內(nèi)容,但現(xiàn)在我們要再次實(shí)踐一下。mappings是 使得Vim編輯更為高效的方便快捷途徑之一,有必要多加用心。

有個(gè)概念在多個(gè)例子中出現(xiàn)過,但是我們都沒有明確解釋,那就是多字符mappings的連續(xù)性。

運(yùn)行如下命令:

:nnoremap jk dd

確保你出于normal模式,快速輸入jk。Vim會刪除當(dāng)前行。

現(xiàn)在試試先輸入j,停頓一下。如果你輸入j后沒有快速輸入k,Vim就會判定你不想 生效那個(gè)映射,而是將j按默認(rèn)操作運(yùn)行(下移一行)。

這個(gè)映射會給光標(biāo)移動操作帶來麻煩,我們先刪除它。運(yùn)行下面的命令:

:nunmap jk

現(xiàn)在normal模式下快速輸入jk會像往常一樣下移一行然后又上移一行。

一個(gè)更為復(fù)雜的Mapping

你已經(jīng)見過很多簡單的mappings了,是時(shí)候看看一些復(fù)雜的了。運(yùn)行下面的命令:

:nnoremap <leader>" viw<esc>a"<esc>hbi"<esc>lel

那是一個(gè)有趣的mappings!你自己可以先試試。進(jìn)入normal模式,移動光標(biāo)至一個(gè)單詞, 輸入<leader>"。Vim將那個(gè)單詞用雙引號包圍!

它是如何工作的呢?我們拆分這個(gè)映射并逐個(gè)解釋:

viw<esc>a"<esc>hbi"<esc>lel
  • viw: 高亮選中單詞
  • <esc>: 退出visual模式,此時(shí)光標(biāo)會在單詞的最后一個(gè)字符上
  • a: 移動光標(biāo)至當(dāng)前位置之  并進(jìn)入insert模式
  • ": 插入一個(gè)"
  • <esc>: 返回到normal模式
  • h: 左移一個(gè)字符
  • b: 移動光標(biāo)至單詞頭部
  • i: 移動光標(biāo)至當(dāng)前位置之  并進(jìn)入insert模式
  • ": 插入一個(gè)"
  • <esc>: 返回到normal模式
  • l: 右移一個(gè)字符,光標(biāo)置于單詞的頭部
  • e: 移動光標(biāo)至單詞尾部
  • l: 右移一個(gè)字符,置光標(biāo)位置在第一個(gè)添加的引號上

記住:因?yàn)槲覀兪褂玫氖?code>nnoremap而不是nmap,所以盡管你映射了字符序列中的字符 也不會有影響。Vim會將其中的字符按默認(rèn)功能執(zhí)行。

希望你能看出Vim mappings的潛能及隨之引發(fā)的閱讀困難。

Exercises

像剛才一樣創(chuàng)建一個(gè)mapping,用單引號而不是雙引號。

試試用vnoremap添加一個(gè)mapping,使其能夠用引號將你 高亮選中 的文本包裹。 你可能會需要???<?``? ??和????>??命令,所以先執(zhí)行??:help `<``?看看幫助文檔。

將normal模式下的H映射為移動到當(dāng)前行的首部。h是左移,所以你可以認(rèn)為H是 “加強(qiáng)版”的h

將normal模式下的L映射為移動到當(dāng)前行的尾部。l是右移,所以你可以認(rèn)為L是 “加強(qiáng)版”的l、

讀取幫助文檔:help H:help L看看你覆蓋了哪些命令。考慮考慮這會不會影響你。

將這些mappings添加到你的~/.vimrc文件中,確保用你的“編輯~/.vimrc”和“重讀~/.vimrc” 映射操作~


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號