【问题标题】:How to delete until (and not including) the last char on the line如何删除直到(不包括)行上的最后一个字符
【发布时间】:2020-12-19 09:10:51
【问题描述】:

我想删除一个以大量括号结尾的序列,而不是计算括号的确切数量来执行 d[count]f),我想删除一行中的最后一个字符。

我尝试了 dt$ 但没有成功。

编辑:最终,我们可以排除更多字符吗?

【问题讨论】:

  • 您的问题不清楚。您在这里所说的“句子”到底是什么意思?这是否与:h sentence 或其他内容相同?
  • 我的问题并不特定于 vim 中定义的文本对象。我想删除到行尾,除了我要保留的最后一个字符。最后一个字符不一定像句号、问号或感叹号那样特别。他甚至可能出现在我要删除的行中。我必须输入删除命令吗?或者有没有办法告诉 vim,我想在正常模式下删除最多 [count] 个字符 before 行?
  • 那么您能否重新编写您的问题,这样您的问题最终变得清晰了吗?不是“动”,也不是“一句话”。据我现在理解,它是“删除直到(不包括)最后一个字符”。
  • 顺序比句子清晰吗?我删除了两句话,以使其他观众的问题更短。我也添加了一个问题,因为接下来要问的问题似乎是合乎逻辑的。
  • 我猜会的。在排除几个字符时,我认为最好不要弄乱一些复杂的文本对象,而只需在可视模式下进行,例如 v$hh...d 或类似的东西。

标签: vim shortcut


【解决方案1】:

您可以使用marks 或视觉选择。例如带有标记:

ma$d`a

拆分命令:

ma Mark the current cursor position with mark a
$ Go to the last character in the line
d`a Delete back to the mark a

如果您需要在行尾保留几个字符,请在$ 之后添加Nh。例如:

ma$3hd`a

视觉选择:

v$3hx

用一个必需的参数定义一个命令:

function! DelToEOL(n)
    execute 'normal v$' . string(a:n + 1) . 'hx'
endfunction

command -nargs=1 DelToEOL :call DelToEOL(<args>)

+ 1 是必需的,因为视觉选择会选择应排除的当前字符。

【讨论】:

  • 这对我来说几乎没问题。我避免对要删除的内容使用标记,因为它可能会删除以前的标记,并且我喜欢保留部分代码的助记别名的字符(m 代表 main,通常是函数、方法或名称的第一个字母)我通常跳到的班级)。像v$hd 这样的视觉选择对我来说就足够了。我怎样才能把它变成一个带有计数器的命令?
  • 谢谢,这很好用。很抱歉,由于我的标题令人困惑,我导致您遇到的问题被误解了。我很遗憾不能接受多个答案以致相应地感谢您,因为您在编辑之前确实按照声明回答了我的问题。
【解决方案2】:

所以我看到真正的问题是“如何删除直到(不包括)最后一个字符。

答案是:dv$。请参阅:h exclusive:h o_v

【讨论】:

  • 我喜欢这很简单,但它在 vs 代码中不起作用:(
猜你喜欢
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多