在 VIM 中在单词的开头和结尾添加一个字符

时间:2021-02-09 12:09:22

标签: vim

在给定的字符中“包裹”一个单词或字符串是我在 VIM 中执行次数最多的操作之一。

最常见的字符组合(分别添加在开头和结尾):<>, (), '', "", **, __,--, etc...

在 VIM 中是否有一种本地方式可以做到这一点?如果没有,我们如何为此设置一个宏?

2 个答案:

答案 0 :(得分:2)

用给定的字符对包围一个单词的最“原生”方式是:

  1. ciw改变单词(单词默认放入寄存器"),
  2. 插入开始字符,
  3. "插入寄存器<C-r>"的内容,
  4. 插入结束符,
  5. 使用 <Esc> 返回正常模式。

简而言之:

ciw(<C-r>")<Esc>

这是您无需进行自定义映射或安装 SurroundSandwich 等插件即可获得的最高效的方法。

答案 1 :(得分:1)

您可以创建一个抽象所有 chang 内部词的函数:

if !exists('*AddSingleQuotes')
    function! AddSingleQuotes()
        exec "normal! ciw''\<Esc>P"
    endfunction
endif
nmap <Leader>q :call AddSingleQuotes()<CR>

并且还修改添加双引号:

if !exists('*AddDoubleQuotes')
    function! AddDoubleQuotes()
        exec "normal! ciw\"\"\<Esc>P"
    endfunction
endif
nmap <Leader>q :call AddDoubleQuotes()<CR>

注意:if !exists 部分确保 vim 不会多次加载该函数,即使您重新加载 vimrc。