【问题标题】:How does Vim display macros in registers?Vim 如何在寄存器中显示宏?
【发布时间】:2012-07-17 18:37:07
【问题描述】:

我发现能够在 Vim 中使用宏是多么方便。特别是使用q 进行录制,但我对如何读取我正在录制的寄存器中存储的内容感到困惑。

举一个具体的例子,我经常使用 Vim 来编写 LaTeX 文档,为此我制作了一个宏,在当前行的开头放置了一个 %,因此这段代码被注释掉了。我通过如下记录来做到这一点。我按下了键quHomei%Escq。现在按@u 我可以播放那个宏,因为我经常使用那个宏,所以我决定把它放在我的.vimrc 文件中。我查看了主题,发现我必须使用 Ctrl+V 来获取我使用的击键,例如转义键。我

let @u='^[OHi%^['

我用 Ctrl+V Home^[Ctrl+^OH kbd>V Esc。现在当我启动 Vim 时,寄存器u 的内容应该是^[OHi%^[,但如果我只是用q 记录宏,那么寄存器会读取

<80>khi%^[

我试图理解这意味着什么。它做同样的事情,但是如果我在查阅 Vim 中的一些帮助页面后尝试使用 Ctrl+V 编写类似的东西(更准确地说是:help key-notation,@987654339 @ 和:help i_CTRL-V_digit),但我还是不明白。

我想了解这一点的动机是我希望能够阅读我录制的宏的作用。如果我了解寄存器的内容是如何产生的,那么我可能能够通过产生类似的结果来理解它。例如,如果我记录的宏遵循与使用 Ctrl+V 时相同的语法,那么我可以检查 Ctrl+V 加上最有可能产生的击键,看看哪一个匹配。

【问题讨论】:

  • 不是您问题的答案,但您应该尝试使用 0 而不是 &lt;home&gt;。这将为您节省 ctrl-v
  • 虽然很荣幸自己尝试一下:我认为Nerd Commenter也支持LaTeX:vim.org/scripts/script.php?script_id=1218

标签: vim macros keyboard


【解决方案1】:

我不认为宏是适合这项工作的工具,我认为你现在真的应该关注$ vimtutor&lt;Home&gt;i%&lt;Esc&gt; 不是在开头插入% 的正确方法行。

nnoremap <leader>% I%<Esc>

似乎是一个更好、更正确的解决方案。

&lt;80&gt;xx 是 Vim 内部用来表示特殊键的控制字符。有关可能值的列表,请参阅 $ man termcap

【讨论】:

  • 我作为一个 Vim 用户没有经验,所以我不知道宏是否不是最好的方法,但我使用宏的原因是它允许我键入:'&lt;,'&gt;normal @u,然后将% 放在视觉中每行的开头。除此之外,我实际上是从I%&lt;Esc&gt; 解决方案开始的,但是如果您的行以多个&lt;Tab&gt; 开头,那么%&lt;Tab&gt; 之后的位置,我想避免这种情况。是否可以自己制作这个控制字符?
  • :'&lt;,'&gt;norm I% 也可以工作,或者 :'&lt;,'&gt;norm 0i% 如果你在第 1 列看到你的 %。整个宏观业务在这里毫无用处,IMO。我不知道您如何输入 &lt;80&gt;kc 符号。也许您可以将此&lt;80&gt; 保存在寄存器中,并将其粘贴在您要模拟的密钥的正确 termcap 符号之前。我觉得经历所有这些并不是很有用。
  • 我猜你是对的。我想我会放弃尝试找出如何生产这些。我不需要它。如果我想解码我录制的宏,可以咨询$ man termcap。并感谢有关使用 norm 的提示。当我意识到这样的事情时,我意识到我是多么喜欢使用 Vim。它绝对是由知道文本编辑程序应该如何工作的人制作的。
  • 确实如此。 Check this out 如果您还没有 (slightly older text version)。
猜你喜欢
  • 2021-03-09
  • 2013-03-29
  • 2010-12-02
  • 2010-12-10
  • 2020-10-03
  • 2023-03-07
  • 1970-01-01
  • 2013-10-26
  • 1970-01-01
相关资源
最近更新 更多