2016-01-27 112 views
1

在我的vimrc文件我有以下的條目的前後加上「+」字的字:Vim的映射,圍繞一個字符

:nnoremap <silent> q+ wbi+<ESC>ea+<Esc> 

我想改變這種包圍與任何其他符號字,例如一個報價,但我不想使用另一個插件或插入一個更多的地圖。我想在我的vimrc中這樣的東西:

:nnoremap <silent> qX wbiX<ESC>eaX<Esc> 

其中X將字符放在單詞。

這怎麼可以在VIM中完成?

感謝

回答

3

總體思路:

:nnoremap q :let c=nr2char(getchar())\|:exec "normal wbi".c."\eea".c."\e"<CR> 

但我不認爲q是一個不錯的選擇,尤其是對於行情的例子,因爲q開始從VIM的extremely handy recording feature。正常的q命令也期望第二個字符(記錄目標寄存器),它實際上可以是"。當你在另一臺計算機上或其他人正在使用vim時,這會讓你感到困惑。您應該preprend a leaderq。在對領導:

:nnoremap <leader>q :let c=nr2char(getchar())\|:exec "normal wbi".c."\eea".c."\e"<CR> 

默認領袖值爲\,但是這是可以改變的。請注意,在定義映射之前必須對其進行更改。您可以看到當前配置的領導let mapleader(如果沒有配置領導,則打印錯誤消息)。有了這些語句,

:let mapleader=',' 
:nnoremap <leader>q :let c=nr2char(getchar())\|:exec "normal wbi".c."\eea".c."\e"<CR> 

您可以鍵入,q++,q"包圍,以圍繞與"你的話你的話。


順便說一句:如果你的光標在線上的最後一個字符上,你的映射不起作用。將映射更改爲:

:nnoremap <leader>q :let c=nr2char(getchar())\|:exec "normal viwo\ei".c."\eea".c."\e"<CR> 
+0

我真的很感激你的答案,因爲它不僅解決了我的問題,同時也介紹了我一些有用的Vim syntatic和語義結構。謝謝! – mljrg

1

使用Tim Pope的surround.vim插件!

要圍繞一個字與+體徵:

ysiw+ 
+0

我已經知道該插件,但我更喜歡避免使用插件來防止它們之間的衝突。無論如何,謝謝你的回答。 – mljrg

+0

蒂姆波普的插件*超級*流行。這可能會被認爲是另一個衝突插件的問題/錯誤。我個人認爲surround.vim是一個「必備」插件。 –

+0

那麼,它可能會改變其他插件可能定義的關鍵映射,或者不是?我擔心的是,當我安裝一個新穎的插件時,我不知道這種衝突...... – mljrg