【问题标题】:Why doesn't '2>' mean indent 2 levels on vim?为什么'2>'不意味着在vim上缩进2级?
【发布时间】:2013-06-24 04:30:44
【问题描述】:

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

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

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

如何正确解决这些问题?

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


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

【问题讨论】:

  • If you want 2> 缩进两次只需按 v 进入可视模式,如果您将其设置为使用空格,它会插入两个制表符或空格

标签: vim


【解决方案1】:

2>>

您描述的行为是由于{count} 如何与逐行命令一起工作:它不会执行命令{count} 次,而是将{count} 视为行数采取什么行动。

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

:.,.+1

因此,执行2>> 相当于:

:.,.+1>

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

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

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

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

10G

G 期望 {count} 跳转到相应的行。如果没有{count},它会默认跳转到最后一行:您可以将其视为{lines in buffer}G 的便捷快捷方式。

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

-- 开始编辑--

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

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

  2. 决定不使用G23,而是使用{count} 机制,因此我们有23GG 不是运算符:它不等待目标。

  3. 但是如果没有{count},我们如何处理G

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

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

  6. 但是最后一行呢?当我们知道缓冲区中有 12 行时,12G 是可以的,但是 1257 行呢?行数未知怎么办?查找号码并输入2431G 有效率吗?不,到那时,我们还不如:$<CR>。好吧,我们为什么不在这里使用G?到达最后一行的时间比任何其他方式都要短得多。

(这纯属猜测,当然,我不知道 Bill Joy 设计G时的想法。)

-- 结束编辑--

修复 Vim

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

此外,:help 中解释了一切的行为:如果您认真使用 Vim,学习如何使用它是您必须提高的第一技能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 2016-07-28
    • 2023-03-10
    • 1970-01-01
    • 2011-09-07
    相关资源
    最近更新 更多