使用vim中的block select从行末尾删除
当我试图在vim中使用块选择从行的末尾删除时,我得到了一个不寻常的行为 假设我有这样一个文本:使用vim中的block select从行末尾删除,vim,Vim,当我试图在vim中使用块选择从行的末尾删除时,我得到了一个不寻常的行为 假设我有这样一个文本: delete this char:x and this:x also this:x and then this:x lastly this:x 如果我想将y附加到每一行,我可以: 使用C-v开始块选择 用4j 使用$ 开始添加A 键入所需文本y 为了获得: delete this char:xy and this:xy also this:xy and then this:xy lastly t
delete this char:x
and this:x
also this:x
and then this:x
lastly this:x
如果我想将y
附加到每一行,我可以:
- 使用C-v开始块选择
- 用
4j
- 使用
$
- 开始添加
A
- 键入所需文本
y
delete this char:xy
and this:xy
also this:xy
and then this:xy
lastly this:xy
但是如果我在最后一步中尝试删除x
,而不是追加,我希望得到:
delete this char:
and this:
also this:
and then this:
lastly this:
虽然我最终得到了:
delete this char:
and this:x:
also this:x:
and then this:x:
lastly this:x:
据我所知,它将第一行中的最后一个字符附加到所有其他行(在本例中为:
),而不是删除缺少的行(在本例中为x
)
我可以用宏或替代品来实现这一点,但我不太理解这种行为背后的原理。有没有一种方法可以通过块选择来实现这一点?
$
C-v
4j
x
$
C-v
4j
x
qa
$
x
j向下移动一行
q
现在应用我们的宏:
20@a
-将执行与录制宏时相同的操作,20x。如果我有少量行,通常会执行BackspaceEsc。然后重复做j。直到完成。不是最快的方法,但很容易记住
对于大量的线,我通常通过V视觉选择线,然后在范围内执行替换或正常命令
:'<,'>s/.$//
:'<,'>norm $x
正如你自己所说,要实现你的目标,还有其他的方法,事实上更好的方法<代码>:s或
q(宏)
或:g/../norm$x
:s/$//g
非常简单
Ctrl-V不适合此工作。至于它的名字:VisualBLOCK。如果要删除最后一个x,则它们(仅x)不在块中
然而,如果你真的想坚持使用ctrl-v,你必须做一些额外的工作,使那些“x”在一个块中。如果已安装Align插件,则可以:
选择(V
)要执行此操作的所有行
<leader>t:
Ctrl-V
要删除x,您应该知道如何操作
然后
要删除“:”之前的填充空格,请执行以下操作
但是我认为这不是一个好办法。你试过
:{range}normal
?这应该起作用:
:'<,'>normal $x
:“这是可行的,但我需要一些可以处理任意缩进的东西。我已经相应地编辑了这个问题。宏解决方案的问题是我必须计算需要修改的行数。我不了解您描述的行为。第一个x
被删除,但没有添加任何内容。@Romaill您是否使用问题中相同的示例?如果您使用的是删除此字符:x
和deletex
,它会添加尾随空格,这可能很容易丢失..不,我可以看到尾随空格,但没有。在此上下文中,{movement}$A
,并不是在选择中的每一行都删除字符。只有添加字符才有效。如果你想听听我的意见的话,这有点短视,但它就是这样设计的。删除一系列行末尾的x
通常是通过完成的:“这些都很好,但没有一个比视觉块更直观。在放弃之前,我想先把这个问题留一段时间,因为我仍然觉得没有理由阻止实现这样一个功能。如果你把它做成一个宏,你可以重复任意次数,例如10@
,而不是j.j.j.j.j.j.j.j.j.
(4次击键而不是20次,再加上录制宏所需的3次额外击键(q
…q
))。我想解释一下它对上述解决方案的作用会很好。我试图在中编辑一次,但被拒绝。{range}
在帮助文件中是非常常见的Vim语言。normal
是一个命令,它输入以下内容,就像您在正常模式下键入它们一样。因此,该命令对每行都起作用:转到行尾,然后删除光标下的字符。注意:您需要先使用ctrl+V
来选择视觉块。
delete this char : x
and this : x
also this : x
and then this : x
lastly this : x
:%s/ *:/:/g
:'<,'>normal $x