我已经使用vim一段时间了,但直到最近才开始学习如何真正使用它。我对什么看似令人费解的行为有一些疑问。
为什么2>
不意味着缩进2级而不是缩进2行?>2j
已经达到了同样的目的,缩进2个级别似乎是更直观的行为。
另一个类似的问题是,为什么"G"表示跳到最后一行,而"10G"表示从缓冲区的顶部而不是从缓冲区底部跳到第10行。
如何正确解决这些问题?
我应该吗 改变行为会破坏插件吗?
注意:我想提一下,我知道如何获得我想要的功能,即。用于多级缩进的:>>
和用于跳到底部的第n行的:$-10
。
2>>
您所描述的行为是由于{count}
如何与行命令配合使用:它不执行命令{count}
次,而是将{count}
视为要执行的行数。
您可以通过执行2:
来了解Vim是如何做到这一点的,这是您应该在命令行中得到的:
:.,.+1
因此,执行2>>
相当于:
:.,.+1>
"将这一行和下面的一行缩进一级"。
在正常模式下,只需点击>>
将当前行缩进一级,然后重复,直到达到正确的级别。
如果希望2>
缩进两个级别,则必须首先从视觉上选择行:V2>
或v2>
。
如果要"修复"当前行的缩进,使其与周围行的缩进匹配(这是此类任务最常见的情况),请单击==
。
10G
CCD_ 17期望CCD_。如果没有{count}
,则默认跳到最后一行:您可以将其视为{lines in buffer}G
的一个方便快捷方式。
所以你把事情颠倒了一点:G
不是"跳到最后一行",而是"跳到第{count}
行,但没有{count}
,所以我们走最后一行吧"。
--开始编辑--
让我们对G
进行逆向工程以获得乐趣:
CCD_ 25首先被认为是CCD_。
决定使用
{count}
机制来代替G23
,因此我们有了23G
。G
不是运算符:它不等待目标。但是,如果没有
{count}
,我们用G
该怎么办?通常,缓冲区有两个"特殊"行:第一行和最后一行。也许我们可以决定
G
的默认目的地是什么?为什么不呢?我们讨厌浪费的钥匙!G
并不比1G
短多少,但它更短,所以让G
跳到第一行可能是个好主意。但是最后一行呢?当我们知道缓冲区中有12行时,
12G
是可以的,但1257行呢?那么数量未知的线路呢?查询号码并键入2431G
有效率吗?不,在这一点上,我们还不如做:$<CR>
。那么,我们为什么不在这里使用G
呢?它比任何其他到达最后一行的方式都短得多,也快得多。
(这纯粹是猜测,当然,我不知道Bill Joy在设计G
时的想法。)
--Endedit--
修复Vim
一般来说,Vim不需要"固定"。相反,你必须学习它是如何运作的,以及如何利用它的力量。大部分都很有道理:当你"得到"的时候,回报将是巨大的。
此外,everything的行为在:help
中有解释:如果你认真使用Vim,学习如何使用它是你必须培养的首要技能。