gpt4 book ai didi

vim - 为什么 Vim 的 U 命令在行更改和删除时的工作方式不同?

转载 作者:行者123 更新时间:2023-12-04 13:50:49 25 4
gpt4 key购买 nike

我试图了解 U Vim 中的命令。我的理解是它会撤消所有仅影响最近更改的行的更改。但是,如果我从以下文件开始:

abc
def
ghi
jxx向下导航并删除两个字符:
abc
f
ghi
kgU2j将整个文档设置为大写:
ABC
F
GHI
现在, U给出了这个结果:
ABC
def
GHI
如果我用过 kd2j删除整个文档而不是更改其大小写, U不会有任何影响。我想知道为什么 d被视为影响多行的命令,但 gU似乎被忽略了。
有没有一种直观的方法来理解这种行为,或者这只是 Vim 的一个奇怪的边缘情况?

最佳答案

为了理解这种行为,我决定深入研究源代码和我发现的东西:

  • 修改单行后我们store that line number in variable .当我们一次触摸多条线时,它不会受到影响。

  • 在您的情况下,您从第二行中删除了一个字母。 当前行 (以及更改前的 状态 )已更新。当你删除下一个字符时,你是在已经存储的行中删除的,所以 当前行 也不是 状态已更新。下一个更改涉及 3 行 - 没有更新。 U已恢复 当前行 保存 状态 .请注意 gUG最后一行只会触及它,以便更改更新 当前行 状态在引擎盖下。
  • 更改文档结构(添加/删除行)后,that variable is cleared

  • 这个可以动 当前行 向上(删除)或向下(添加)。清除它而不是处理移动它的逻辑要容易得多,这就是我猜它为什么这样做的原因。
    请注意,删除部分行(例如使用 d$)将更新 当前行 状态正如预期的那样。开行与 o并输入一些文本( 当前行 是该行, 状态 是空行)也有效。但是,当您在输入过程中按 Enter 键时(因此影响多于一行), 当前行 被清除。

    关于vim - 为什么 Vim 的 U 命令在行更改和删除时的工作方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69611381/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com