假设我有以下代码:
bool myCopiedFunc() {
Some code that I've written;
The cursor is on this line; <<<<<<<<<<<<<<
if (something) {
bool aValue;
some of this is inside braces;
return aValue;
}
if (somethingElse) {
this is also inside braces;
bool anotherValue;
{
more braces;
}
return anotherValue;
}
return false;
}
我决定重写函数的剩余部分,从光标所在行开始。
要替换同一行上到某个字符为止的内容,可以使用ct<char>
,例如ct;
要替换同一行上到某个字符及其本身的内容,可以使用cf<char>
,例如cf;
要替换跨越多行的某个字符串的内容,则可以使用c/<string>
,例如c/return false
要替换跨越多行的某个字符串及其本身的内容,则可以使用... ?? 例如 ??
不能只搜索分号,因为光标和函数结尾之间有未知数量的分号,而计算它们会很慢。
也不能只搜索闭合括号,因为光标和函数结尾之间有多个块,而计算所有闭合括号会很慢。
通过代码高亮,我可以轻松看到我可以搜索的唯一字符串是return false
。
是否有一种优雅的方法来删除或更改到某个字符串模式的内容(包括它本身)?
我已经查看了几个相关的问题。
使Vim将正向搜索视为“包括”有一个被接受的答案,但它并没有回答我的问题。
在我的情况下,我选择删除到搜索字符串,然后分别删除到分号,但感觉效率低下,最好直接用鼠标解决。 #第一世界的问题
return
)。我在 Eclipse 中使用 Vrapper,所以 :h 不起作用,但是当我尝试实际使用 vim 时,它给出了页面未找到的错误。我安装了 vim-doc 包,但仍然找不到,但这是另一个完全不同的问题... - M_M/e
匹配整个字符串的结尾。因此,我问题中粗体的那一行应该写成:**要替换跨越多行的字符串(包括该字符串本身),可以使用c/<string>/e
,例如c/return false/e
**。这个答案提供了这个信息,所以我已经将其标记为接受的答案,但我不确定是否要将这一行重新加入问题中,使其成为一个更有用的资源。foo
的例子并没有展示出/e
如何处理多个单词而不需要数字参数,与命令模式中的e
不同。 - M_M>>>>>cursor
行到return false;
行(包括这两行)删除吗?为什么/e
偏移量对您无效?您是指您的文件中有多个return false;
语句吗? - Kent/e
偏移对我也起作用。唯一的问题是是否更新问题,在适当的位置包含答案。 - M_M