如何在Vim中快速引用/取消引用单词并更改引用(例如从“到”)?我知道环绕的事。vim插件,但我想只使用vim。


当前回答

宏观的方式!

按q和q记录到q寄存器(我们用“q”作为快捷键来记住“引号”)。 按shift + b移动光标到当前单词的前面 按I输入'(单引号) 按esc键,然后按e键移动到单词的末尾 按a,然后再按',用引号包围单词。 按esc键进入正常模式。 最后按q将其记录到q寄存器中。

如何使用

移动光标到所需的单词。 按@q将单词用引号括起来。 如果你想把它重复成另一个单词,请按@@。

你可以修改步骤4任何你喜欢的{一行,一个词,直到找到一些字符,等等}。

使记录的宏持久

打开. vimrc 转到文件末尾 切换到插入模式。输入这个使它持久:

let @q='ctrl + r ctrl + r q'

保存并退出 打开你的文件,翻到一些单词 现在按@q

如果你做得正确,神奇的东西应该出现在你的话语中。

您可以将此应用于您喜欢的其他宏。

其他回答

这里有一些地图可能会有所帮助:

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

如果您没有更改mapleader变量,那么使用\q" \q'或\qd激活映射。它们分别在光标下的单词周围添加双引号,在光标下的单词周围添加单引号,在光标下的单词周围删除任何引号。

宏观的方式!

按q和q记录到q寄存器(我们用“q”作为快捷键来记住“引号”)。 按shift + b移动光标到当前单词的前面 按I输入'(单引号) 按esc键,然后按e键移动到单词的末尾 按a,然后再按',用引号包围单词。 按esc键进入正常模式。 最后按q将其记录到q寄存器中。

如何使用

移动光标到所需的单词。 按@q将单词用引号括起来。 如果你想把它重复成另一个单词,请按@@。

你可以修改步骤4任何你喜欢的{一行,一个词,直到找到一些字符,等等}。

使记录的宏持久

打开. vimrc 转到文件末尾 切换到插入模式。输入这个使它持久:

let @q='ctrl + r ctrl + r q'

保存并退出 打开你的文件,翻到一些单词 现在按@q

如果你做得正确,神奇的东西应该出现在你的话语中。

您可以将此应用于您喜欢的其他宏。

用引号括住所有单词:

s/\(\w\+\)/"\1"/g

之前:

aaa,bbb,ccc

后:

"aaa","bbb","ccc"

我写了一个这样的脚本:

function! WrapSelect (front)
    "puts characters around the selected text.
    let l:front = a:front
    if (a:front == '[')
        let l:back = ']'
    elseif (a:front == '(')
        let l:back = ')'
    elseif (a:front == '{')
        let l:back = '}'
    elseif (a:front == '<')
        let l:back = '>'
    elseif (a:front =~ " ")
        let l:split = split(a:front)
        let l:back = l:split[1]
        let l:front = l:split[0]
    else
        let l:back = a:front
    endif
    "execute: concat all these strings. '.' means "concat without spaces"
    "norm means "run in normal mode and also be able to use \<C-x> characters"
    "gv means "get the previous visual selection back up"
    "c means "cut visual selection and go to insert mode"
    "\<C-R> means "insert the contents of a register. in this case, the
    "default register"
    execute 'norm! gvc' . l:front. "\<C-R>\""  . l:back
endfunction
vnoremap <C-l> :<C-u>call WrapSelect(input('Wrapping? Give both (space separated) or just the first one: '))<cr>

要使用,只需要突出显示一些东西,按ctrl l,然后键入一个字符。如果它是函数所知道的字符之一,它将提供正确的结束字符。如果不是,它将在两边插入相同的字符。

环绕。Vim可以做的不仅仅是这些,但是这已经足够满足我的需求了。

对于VSCodeVim、Neovim和Macvim的用户,可以这样做

vwS"

你可以用你想用的任何东西来代替“”。 你可以用任何其他选择运算符替换w