什么Vim命令可以用来引用/不引用单词?

我如何在Vim中快速地引用/取消引用单词并改变引号(例如从' to " )?我知道有关surround.vim插件,但我只想使用Vim。

surround.vim将成为您最简单的答案。 如果你真的反对使用它,下面是你可以做的一些例子。 不一定是最有效的,但这就是为什么surround.vim写的。

  • 引用一个单词,用单引号
    ciw'Ctrl+r"'
    • ciw – 删除光标所在的单词,并以插入模式结束。
    • ' – 添加第一个报价。
    • Ctrl+r" – 插入"注册"的内容,也就是上一次的插入/删除。
    • ' – 添加结束报价。
  • 请用单引号括起一个单词
    di'hPl2x
    • di' – 删除单引号括起来的单词。
    • hP – 将光标向左移动一个位置(在开头引号的顶部),并将刚删除的文本放在报价之前。
    • l – 将光标向右移动一个位置(在开头引号之上)。
    • 2x – 删除两个引号。
  • 将单引号更改为双引号
    va':s/\%V'\%V/"/g
    • va' – 直观地select引用的单词和引号。
    • :s/ – 开始更换。
    • \%V'\%V – 只匹配在视觉选定区域内的单引号。
    • /"/g – 全部用双引号replace。

引用一个单词,用单引号

ciw'Ctrl+r"'

我这样做比较容易

 ciw '' Esc P 

除了其他命令之外,这将把所有单词用双引号括起来(按照你的评论)

 :s/\(\S\+\)/"\1"/ 

或者如果你想减less反斜杠的数量,你可以在模式的开头放一个\v (非常魔法)修饰符

 :s/\v(\S+)/"\1"/ 

这里有一些映射可以帮助:

 :nnoremap <Leader>q" ciw""<Esc>P :nnoremap <Leader>q' ciw''<Esc>P :nnoremap <Leader>qd daW"=substitute(@@,"'\\\|\"","","g")<CR>P 

如果你还没有改变mapleadervariables,那么用\q" \q'\qd激活映射,在光标下的单词周围加双引号,在光标下的单词周围单引号,删除周围的引号分别在光标下的字。

要包装在单引号(例如) ciw'<Cr>"'<esc>作品,但重复将无法正常工作。尝试:

 ciw'<Cr><Co>"'<esc> 

这将默认寄存器的内容“字面上”。 现在你可以按. 在任何单词包装在引号。 要了解更多信息,请参阅:h[elp] i_ctrl-r和更多关于文本对象的信息:h text-objects

资料来源: http : //vimcasts.org/episodes/pasting-from-insert-mode/

我不知道任何内置的Vim命令,但如果你站在第一个“或”上,使用r"f'r"从“改变”到r'f"r' ”和r'f"r'从“变为”工作。 命令r'r'replace你的光标下的任何字符,并且f"将你移动到下一个“。

添加行情

我开始在我的.vimrc使用这个快速而脏的函数:

 vnoremap q <esc>:call QuickWrap("'")<cr> vnoremap Q <esc>:call QuickWrap('"')<cr> function! QuickWrap(wrapper) let l:w = a:wrapper let l:inside_or_around = (&selection == 'exclusive') ? ('i') : ('a') normal `> execute "normal " . inside_or_around . escape(w, '\') normal `< execute "normal i" . escape(w, '\') normal `< endfunction 

所以,现在,我可以通过引号select我想要的任何东西(通常通过viw – 直观地select内部单词 ),然后按Qinput双引号,或按qinput单引号。

去除行情

 vnoremap s <esc>:call StripWrap()<cr> function! StripWrap() normal `>x`<x endfunction 

我使用vim-textobj引号,以便vim将引号视为文本对象。 这意味着我可以做vaq (在视觉上select引号,find最接近的引号,并在视觉上select它们)(这是可选的,你可以做一些像f"vww )然后我按s从select中删除引号。

改变行情

吻。 我删除引号,然后添加引号 。 例如,要用双引号replace单引号,我将执行以下步骤:1.删除单引号: vaqs ,2.添加新引号: vwQ


我在我的.vimrc中使用nnoremap

单引号:

 nnoremap sq :silent! normal mpea'<Esc>bi'<Esc>`pl 

删除引号(双引号也适用):

 nnoremap qs :silent! normal mpeld bhd `ph<CR> 

规则要记住:'sq'=单引号。

下面是一些简单的映射,可以用来引用和取消引用一个单词:

 " 'quote' a word nnoremap qw :silent! normal mpea'<Esc>bi'<Esc>`pl " double "quote" a word nnoremap qd :silent! normal mpea"<Esc>bi"<Esc>`pl " remove quotes from a word nnoremap wq :silent! normal mpeld bhd `ph<CR> 

macros的方式

  1. shift + b将光标移动到当前单词的前面

  2. qqlogging到q寄存器中(我们使用“q”作为记住“引号”的快捷键)。

  3. 键入' (单引号)

  4. esc键,然后按e移至词尾

  5. a,然后再按一下'用引号围住单词。

  6. 最后按q将其logging到q寄存器中。

如何使用它 :

  1. 将光标移动到所需的单词。
  2. @ q围住带引号的单词。
  3. 如果你想重复成另一个字,请按@ @

你可以用你喜欢的任何东西{一行,一个字,直到find某个字符等等}来改变step 4 。 把它放入vim variables.vimrc来重复你的幸福。

这个怎么样?

  :%s/\'/"/g