如何更改Vim中的单词(以及所有其他出现的单词)

cwdobuhd  于 2023-03-02  发布在  其他
关注(0)|答案(4)|浏览(221)

我经常使用组合c-a-w来更改Vim中的单词。
是否有任何类似的手段,通过它也可以迅速改变所有其他出现在特定文件中说的话?

ojsjcaue

ojsjcaue1#

使用gn选项来实现这个目的,在我的例子中,我有一个稍微不同的版本

" allows me to use a smarter cgn
nnoremap c* *<c-o>cgn
nnoremap c# #<C-o>cgn

现在当你必须多次改变一个单词时,只要你没有那么多,因为在这种情况下,经典的替换会更好,只需按c*,然后按“点--〉.”来改变它的下一个出现。
如果你想看看gn能给予我们带来怎样的震撼,请看:Operating on search matches using gn (vimcasts)

wz1wpwve

wz1wpwve2#

您可以尝试:

%s/<CTRL-R><CTRL-W>/NewWord/g

<CTRL-R><CTRL-W>表示按住控制键并点击RW。这会将光标下的单词复制到命令行。
参见:help c_CTRL-R_CTRL-W

camsedfj

camsedfj3#

用于替换所有出现项的主命令是:substitute。不幸的是,作为一个Ex命令,它不能很好地与正常模式下的单字替换(例如caw)集成:尽管可以使用<C-R>"将先前替换的单词插入到命令行中,但仍必须将其括在\<...\>中以强制进行全词匹配,并对单词中的任何特殊字符进行转义。
也就是说,有一些插件在这方面提供了帮助,其中之一是我的ChangeGlobally plugin,它提供了gc{motion}替代c{motion},然后将更改(或删除)应用于同一行或整个缓冲区中的其他匹配项(插件页面有替代插件的链接)。

zkure5ic

zkure5ic4#

对我来说,最好的方法是添加一个快捷方式。

nnoremap ge yiw:%s/<C-r>0//g<Left><Left>

现在,你可以悬停一个单词并按下ge,然后开始输入这个单词的新版本,然后按下enter。
为了复制单词,我们使用yiw。然后我们使用结构**%s/word/newWord/g来更改所有出现的单词。将拖动的单词粘贴到vim的命令行中。用于将光标定位在//**之间

相关问题