如何查找所有出现的搜索字符串

时间:2019-12-09 15:42:53

标签: vim replace

使用替换,我想替换

ones(var1.size,var2.size)

使用

np.ones([var1.size,var2.size])

我尝试使用

%s/ones(\(\w\+\),\(\w\+\))/np.ones([\1,\2])/gc

基于Stack Overflow上的其他帖子,但是,Vim无法找到所有出现的搜索短语。

它能够找到ones(3,1)并将其更改为np.ones([3,1]),但是找不到ones(1,xi.size)

我要去哪里错了?

3 个答案:

答案 0 :(得分:3)

您太难了。这是我弄清楚Vim将要做什么的方法,并将其分解为更简单的步骤:

/ones(\(.\+\))

将选择括号内的内容,然后按 Return ,以便Vim记住该模式。

:%s//np.ones([\1])/

采用记住的模式并将其替换。当然,请事先根据需要调整标志。

仅匹配var1.size,var2.size

正则表达式非常强大,但也可能令人发疯,因此请使它们尽可能简单,因为随着复杂度的增加,它们做错事的可能性也会增加。

答案 1 :(得分:1)

\w\+不会与xi.size匹配,因为后者是两个单词,中间是非单词(.)。在这种情况下,您可以改用[^,]\+

答案 2 :(得分:0)

我为此使用了2个超级有用的(imo)函数:

:nnoremap <Leader>r :%s/\<<C-r><C-w>\>//g<Left><Left>

让您按leader + r启动搜索并替换光标下的单词

:noremap <C-r> "hy:%s/<C-r>h//gc<left><left><left>

让您按ctrl + r进行搜索并替换当前选择的(在可视模式下使用v)字符串