Vim 映射到用字符包围单词

mlj*_*jrg 2 vim

在我的 vimrc 文件中,我有以下条目用“+”包围单词:

:nnoremap <silent> q+ wbi+<ESC>ea+<Esc>
Run Code Online (Sandbox Code Playgroud)

我想更改此设置以用任何其他符号(例如引号)包围单词,但我不想使用另一个插件或插入另一个地图。我想在我的 vimrc 中添加这样的内容:

:nnoremap <silent> qX wbiX<ESC>eaX<Esc>
Run Code Online (Sandbox Code Playgroud)

其中 X 是放置在单词周围的字符。

在 VIM 中如何做到这一点?

谢谢

ste*_*fen 5

总体思路:

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

但我认为这不是q一个好的选择,特别是对于带引号的示例,因为从 vimq启动了极其方便的录制功能。普通q命令还需要第二个字符(记录目标寄存器),并且实际上可以是"。当你在另一台计算机上或者其他人正在使用你的 vim 时,这会让你感到非常困惑。你应该为 预先准备一个领导者q。与领导者:

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

默认领导者值为\,但可以更改。请注意,必须在定义映射之前更改它。您可以查看当前配置的领导者let mapleader(如果没有配置领导者,则会打印错误消息)。有了这些声明,

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

您可以键入,q+将您的单词用+和括起来,q",以便将您的单词用 括起来"


顺便说一句:如果您的光标位于该行的最后一个字符上,您的映射将不起作用。将映射更改为:

:nnoremap <leader>q :let c=nr2char(getchar())\|:exec "normal viwo\ei".c."\eea".c."\e"<CR>
Run Code Online (Sandbox Code Playgroud)