function foo(bar) {
return bar + 1;
}
我使用
cw
将第一个bar
更改为baz
,如何跳转到下一个匹配的bar
,以便可以使用我不能使用
.
,因为它会在光标下搜索当前单词,而且我愚蠢地没有第一次搜索*
,所以bar
不会没用。是否有一种简单的方法来搜索单词在更改前的下一个出现?
我不想进行搜索并替换,因为或者我的文件中还有其他不想更改的
n
出现,或者因为只有两个bar
实例,并且在开始之前我忘记了bar
,而要更改唯一的qq太多了剩余实例。#1 楼
您刚刚用cw
更改的文本被剪切到未命名的寄存器中,因此您可以将其重用:变化。
#2 楼
要将romainl扩展为完整的工作流程...如果您更想执行这种编辑,然后意识到需要对段落/函数应用相同的编辑,则可以使用
"
和.
寄存器。在您的示例中,您可以执行参数的初始编辑。如果您进入可视模式(我将使用Visual Line来确保您正确选择了所有内容),然后应用查找并替换。
。
:-由于处于可视模式,因此变为
:'<,'>
s /-查找
CTRL +“-最后一次取消/删除项目(示例中的栏)
/-并替换
CTRL +。-最后插入(示例中的baz)
由于需要使用该模式,因此需要花费一些时间,大多数情况下,您只想将find和replace应用于包括参数在内的整个函数,但这是一种不错的方法不要执行反模式“做吧,意识到您应该做得更好,正确地撤消和重做。”
#3 楼
如果您不介意按不同于cw
的组合键,那么我相信您可以通过定义快捷方式轻松获得所需的内容。您可以做的是将以下nmap <leader>a "1yiw:let @/=@1^Mciw
放入
.vimrc
文件中。请注意,^M
是返回键的捕获,而不是字符^
和M
。您可以通过在插入模式下按Ctrl + V,然后按Enter来获取它。现在,在定义好之后,按<leader>a
将与cw
相同,但是现在单词(更改之前)将在您的“最后搜索寄存器”(即/
寄存器)中,因此在完成后按n更改并返回到普通模式将使您再次出现。同样,按N也可以转到上一个出现的地方。快捷方式当然可以选择不同于
<leader>a
的快捷方式,但是我只是发现这是一个非常易于使用的快捷方式。我个人将<leader>
设置为,
,因此我只需要按,然后按a,但这是因为我不使用美式键盘,所以我的\被隐藏了一些(我相信\是默认的<leader>
)。 br /> 解释这个想法真的很简单。将光标下方的单词插入搜索寄存器
/
,然后执行cw
。因此,nmap <leader>a "/yciw
是我的目标,但是不幸的是,我认为您不能将其拉至搜索寄存器,因此解决方法是将光标下方的单词拉至1
寄存器,然后将/
寄存器设置为与之相等,并且然后做cw
。因此,"1yiw
是将光标下的内部单词移至寄存器1
的部分。如果您不了解内部单词,可以查看:help iw
。然后,:let @/=@1
后面是Enter的捕获,将1
寄存器的内容放入/
中。此时,n和N充当光标下的单词的下一个和上一个出现,然后执行ciw
以便删除光标下的单词并将Vim置于插入模式。单词与内部单词之间的冲突我只是意识到,我认为您希望整个单词都在光标下,而不仅仅是从光标的角度出发。这就是为什么我到处都使用
iw
而不是w
的原因。如果不是这种情况,则应改为使用nmap <leader>a "1yw:let @/=@1^Mcw
。如果光标位于单词的第一个字母上,则没有任何区别。
免责声明如果您尝试在包含字母以外内容的东西上使用它,则此解决方案可能无法很好地工作。通过将光标放在
\
上,或将iw
替换为iW
,ib
,is
或ip
或类似的东西(尽管我不知道为什么您希望整个句子都使用此功能)
评论
这并不完全符合您描述的工作流程,但vim-oblique改进了*搜索。尤其是*无需移动光标即可直观地选择当前单词。安装完成后,您可以执行* ciw将旧单词放入搜索寄存器并更改单词。然后可以使用n和..按n将使您移至下一个出现的上一个搜索模式。为什么不尝试呢?
...因为我没有搜索到第一次出现的情况,所以n将无法工作。