使用替换,我想替换
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)
。
我要去哪里错了?
答案 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)字符串