为什么"2>"意味着在vim上缩进2级?

qtw*_*trt 3 vim

我一直在使用vim,但最近才开始学习如何真正使用它.我对一些令人费解的行为有些疑问.

为什么2>不意味着缩进2级而不是缩进2行?>2j已经服务于同一目的,缩进2级似乎更直观的行为.

另一个类似的问题是为什么'G'意味着跳到最后一行,但'10G'意味着从缓冲区顶部而不是从缓冲区底部跳到第10行.

如何正确修复这些问题?

我是不是该?可以改变行为打破插件或任何东西?


注意:我想提一下,我知道如何获得我想要的功能,即. :>>用于多级缩进和:$-10跳转到第n行的底部.

rom*_*inl 14

2>>

您描述的行为是由于如何{count}使用行式命令:它不执行命令{count}时间,但考虑{count}作为行动的行数.

你可以瞥见Vim如何做它的事情2:,这是你应该在命令行中得到的:

:.,.+1
Run Code Online (Sandbox Code Playgroud)

这样做2>>是这样的等效的:

:.,.+1>
Run Code Online (Sandbox Code Playgroud)

"将此行和下面的行缩进一级".

在正常模式下,只需>>按住当前行缩进一级并重复直到您处于正确的级别.

如果要2>缩进两个级别,则必须首先在视觉上选择该行:V2>v2>.

如果你想"修复"当前行的缩进以使其与周围行的缩进(这种任务的最常见场景)相匹配,请点击==.

10G

G期望a {count}跳转到相应的行.没有{count}它默认跳转到最后一行:你可以看到它作为一个方便的快捷方式{lines in buffer}G.

所以你要稍微颠倒一下:G不是"跳到最后一行",它是"跳到线{count}但没有{count}那么让我们去最后一行".

- 开始 -

让我们进行逆向工程G以获得乐趣:

  1. G首先被认为是正常模式的等价物:number<CR>.

  2. 我们决定使用G23这种{count}机制,而不是这样做23G.G不是运营商:它不等待目标.

  3. 但是我们做什么G,没有{count}

  4. 通常,缓冲区有两条"特殊"行:第一行和最后一行.也许我们可以决定默认目的地G是什么?为什么不?我们讨厌浪费钥匙!

  5. G并不短,1G但它更短,所以G跳到第一行可能是一个好主意.

  6. 但最后一行怎么样?12G当我们知道缓冲区中有12条线但是1257条线的情况时,还可以吗?那不知道的线数怎么样?查找数字和类型2431G是否有效?不,那时,我们不妨这样做:$<CR>.好吧,我们为什么不在G这里使用?它比任何其他方式更短,更快到达最后一行.

(这是纯粹的推测,当然,我不知道Bill Joy在设计时会想到什么G.)

- Endedit -

修复Vim

通常,Vim不需要"固定".相反,你必须了解它是如何工作的以及如何利用它的力量.大部分内容都很有意义:当你"得到它"时,奖励将是巨大的.

此外,所有内容的行为:help以下内容中解释:如果您认真使用Vim,学习如何使用它是必须增长的头号技能.