作者:混事珊远_692 | 来源:互联网 | 2023-01-15 13:40
我用Google搜索了这个,但无法找到任何明确的解释.
很多人都称赞Vim是一种内部一致的语言,但我没有看到它的一致性.
由于hjkl
左下:
dh
就像"删除左"一样,删除光标左侧的字符,到目前为止是有意义的.
dl
就像"删除权限"但删除了...当前字符?
dj
就像"删除"一样,我假设这只是删除下面的行,但它实际上也删除了当前行!
'dk'就像是"删除",同样我希望它只是清除上面的行,而是清除当前行和它上面的行.
谁能解释这里的逻辑是什么?我可以在同一行删除+左右处理字符,并删除+上下处理行,但为什么行为如此不一致?我在这里缺少什么逻辑?
或者它真的更像是"这里没有一致的逻辑,只是记住它"的事情?
1> Doktor OSwal..:
这是一致的.将其视为文本游标,而不是块游标,例如:
abc
^
你在这里用光标.对于删除命令,它实际上是这样的:
a|bc
Vim始终适用于范围.如果你没有指定一个范围,只有一个目标,那么范围的第一个点总是光标位置:所以dh
从这里删除h
,其h
位置如下:
|abc
所以你告诉vim删除a|bc
,|abc
因此删除了光标位置之间的所有内容.
dl
从去另一个方向a|bc
来ab|c
> - a|b|c
因此,只有b
将被删除.
在j
与k
运动,它是基于行的,但基本上是相同的.
因此,如果您按下dk
以下情况:
abc
abc
^
你告诉vim删除每一行,直到你到达以下位置:
abc
^
abc
这与vim中的所有其他命令一致,并且是使vim如此强大的一部分.想想搜索/
命令,例如:
abc
a|bc
abc
dfe
dfe
dfe
如果你按d/dfe
它不会只删除dfe
,它将删除,直到dfe
.所以你将有两个光标位置:
abc
a|bc
abc
|dfe
dfe
dfe
介于两者之间的所有内容都将被删除,您将最终得到:
abc
a
dfe
dfe
dfe
每个其他运动都是这种情况.