4

我已经使用 vim 一段时间了,但直到最近才开始学习如何真正使用它。我对看似令人费解的行为有一些疑问。

为什么2>不意味着缩进 2 级而不是缩进 2 行?>2j已经达到了相同的目的,缩进 2 个级别似乎是更直观的行为。

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

如何正确解决这些问题?

我是不是该?改变行为会破坏插件或任何东西吗?


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

4

1 回答 1

14

2>>

您描述的行为是由于如何{count}使用逐行命令:它不执行命令{count}时间,而是考虑执行{count}操作的行数。

你可以通过做来了解 Vim 是如何做的2:,这是你应该在命令行中得到的:

:.,.+1

因此, Doing2>>相当于:

:.,.+1>

“将此行和下面的行缩进一级”。

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

如果要2>缩进两级,必须首先直观地选择行:V2>v2>

如果要“修复”当前行的缩进,使其与周围行的缩进匹配(此类任务最常见的情况),请点击==.

10G

G期望 a{count}跳转到相应的行。没有 a{count}它默认跳到最后一行:您可以将其视为{lines in buffer}G.

所以你有点颠倒了:G不是“跳到最后一行”,而是“跳到行{count}但没有{count}所以让我们去最后一行”。

-- 开始编辑 --

G让我们为了好玩而进行逆向工程:

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

  2. 决定,而不是做G23,使用{count}机制,所以我们有23GG不是操作员:它不等待目标。

  3. G但是,如果没有 ,我们该怎么办{count}

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

  5. G不比它短很多,但它更短,因此跳转到第一行1G可能是个好主意。G

  6. 但是最后一行呢?12G当我们知道缓冲区中有 12 行时可以,但是 1257 行呢?行数未知怎么办?查找数字和类型有效率2431G吗?不,到那时,我们不妨这样做:$<CR>。那么,我们为什么不在G这里使用 , 呢?它比任何其他方式到达最后一行要短得多,也快得多。

(这纯属猜测,当然,我不知道比尔乔伊设计时的想法G。)

-- 完结 --

修复 Vim

通常,Vim 不需要“固定”。相反,您必须了解它的工作原理以及如何利用它的力量。其中大部分都很有意义:当你“得到它”时,奖励将是巨大的。

此外,所有事物的行为在以下内容中进行了解释:help:如果您认真使用 Vim,那么学习如何使用它是您必须提高的第一技能。

于 2013-06-24T05:41:50.310 回答