Vim 命令需要一点解释

Vim 命令需要一点解释

我一直在使用 Vimgolf 来提高自己的专业水平。

这个特定的任务最好的解决方案之一是以下命令。

<C-V>Gg?ZZ

我的理解ZZ是保存并退出 - 并且 control-v 进入可视模式,但Gg?对我来说这看起来像是巫术。

谷歌的搜索功能让我有点失望 - 尤其是因为它似乎?在谷歌和 vim 中都超载了...有人能帮我解决这个问题吗?g?在 vim 中的任何给定行上看起来它都会旋转一些字符... :s

答案1

任务是对第一列字母进行 rot13 处理,使其与后面的单词匹配for;由此可以明显看出,顶级解决方案在某种程度上与 rot13 执行的效果相同。如果我们忽略所有与 rot13 无关的内容,或者至少忽略更改文本……我们还剩下什么?

我们将命令分解成几个小块:

(<C-V>)(G)(g?)(ZZ)
  • \1是视觉块模式,与 rot13 或更改文本无关。

  • \2将可视块选择扩展到缓冲区的最后一行,同样,与 rot13 或更改文本无关。

  • \3是什么?

  • \4写入并关闭缓冲区,同样,与 rot13 或更改文本无关。

毕竟,g?(剩余的块)是该命令中我们唯一不知道的部分,可能与更改文本或 rot13 有关。鉴于解决方案的高等级和令人难以置信的简洁性g?,它精确执行所要求的操作 rot13 的概率是非常高的。

或者是?

为了确保我们走在正确的轨道上,让我们问一下 Vim:

:h g?

Vim 用通常的声音回应:

Rot13 编码 {motion} 文本。

没有谷歌,没有互联网。只有灰质和 Vim;无敌组合!

答案2

G表示“转到最后一行”。因此,如果你在文件开头并按

<C-V>G

你最终会标记每一行的第一列。现在

g?

意思是做rot13加密。这包括将字母沿字母表向下旋转 13 个点。这种极其脆弱的加密用于在线论坛,以隐藏攻击性语言、剧透和其他你不想让人们阅读的内容,除非他们真的想读。

相关内容