【问题标题】:Motion to move to last of specific character on a line移动到一行中特定字符的最后一个的动作
【发布时间】:2013-11-26 18:05:41
【问题描述】:

假设我有一条如下所示的行:

(Type)obj.method());

是否有一个动作会移动到一行中特定字符的最后一个?我想做

^c (motion to ')' character) (insert text) <Esc>

并将该行转换为

obj.otherMethod());

我知道我可以使用 #f 或 #t,但我宁愿不计算括号。

【问题讨论】:

  • Motion to last character的可能重复
  • 我真的不明白为什么你需要去最后一个字符来实现这一点。 XY问题,还是我理解错了?

标签: vim


【解决方案1】:

据我了解您的问题,您不只是想转到字符的最后一个实例,您可以通过转到行尾并向后搜索来实现。您想将文本从当前插入符号位置清除到字符的最后一个实例,对吗?

当中间可能有 n 个相同字符时,我通常会使用模式搜索来完成对所需字符的动作。在您的示例中,您可以使用 c/); 从当前插入符号位置清除到最后一个 ) kbd>Enter,因为只有o 的最后一个实例后跟;。例如,如果您想选择介于两者之间的所有内容,您可以在此之前加上 v 而不是 c

使用相同的示例,您可以使用 /odEnter 移动到第三个 o .

一开始可能看起来乏味,但实际上您可能会直接查看您想要的位置,因此您已经可以看到您需要的其他字符,您只需要增加您的特异性,直到您获得匹配,只要您有set incsearch,就会立即获得视觉反馈。

注意:如果您的行末尾没有分号,您可以通过使用 )\n 搜索下一个 ) 后跟换行符来移动到最后一个括号。

【讨论】:

  • 是的,我需要一个动作来向前搜索字符的最后一个实例,类似于“f”。我没有想到我可以只使用正则表达式......
【解决方案2】:

你可以使用视觉模式:

v$F)c

但在这种情况下,您实际上只是插入一些新文本并更改大小写:

f.aotherEscl~

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-21
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 2023-02-23
    • 1970-01-01
    • 2011-01-08
    相关资源
    最近更新 更多