1

有一个宏,其中视觉选择的文本将成为降价链接,一旦宏执行,它就会使 Vim 处于 INSERT 模式:

|  - VISUAL selection
i  - cursor position in INSERT mode
@l - invoke macro in "l" register

Some |text| saying stuff.   = @l => Some [text]() saying stuff.
                                                i

寄存器l包含以下内容:

:registers l
Type Name Content
  c  "l   S]%a()^Ohq<80>kb

通过以下方式创建它:

  1. 直观地选择一些文本
  2. q然后l
  3. S然后]S是一个视觉选择命令vim-surround
    ^ - normal mode cursor position
    
    |text|  =S]=>  [text]
                   ^
    
  4. %(跳转到右括号)
  5. a然后输入()
  6. CTRL-O
  7. h
  8. CTRL-O然后q(完成宏但保持在 INSERT 模式)

所以我用鼠标选择了这个定义(即*注册),并let @l = "S]%a()^Ohq<80>kb"在另一个 Vim 实例中做了,导致

Some |text| saying stuff.   = @l => Some [text]()^Ohq<80>kb saying stuff.
                                                           i

如果 Vim 是用剪贴板支持构建的(:let @+ = @l在一个 Vim 实例中,:let @l = @+在另一个实例中),它就可以工作,但我想学习破译这些表示的基础知识。

更新:录制和剪贴板复制的宏的 Vim 表示与手动粘贴的宏之间存在细微差别:序列^O<80>在前一种情况下突出显示为特殊,但字符串在后一种情况下以统一颜色显示.

l是原始录制的宏,由+创建:let @+ = @lc内容已逐字输入:

在此处输入图像描述


找到了其他几个具有类似前提的 Stackoverflow 线程,但它们没有帮助:

VIM 宏编辑

试图将其转换为^O<C-O>但它没有用,并且不知道是什么<80>kb

根据上面的创建步骤,我本来希望得到类似的东西,S]%a()^Oh^Oq而不是S]%a()^Ohq<80>kb无论如何。

复制/粘贴 Vim 宏的可靠解决方案

没有回复,根据我的理解,它不适用于我的情况。

保存 vim 宏

仔细阅读答案和评论,但没有快乐。

4

1 回答 1

2

那个神秘的东西是一个录音制品:你在录音过程中的某个时刻<80>kb按下了,这就是 Vim 在内部表示它的方式。<Backspace>

录制真的会记录您键入的所有内容,无论它是否有意义,无论您是否希望它在您的宏中。所以这<80>kb是一个肮脏的小秘密:宏不仅仅是文本,这使得它们不像人们想象的那样便携。至少不是没有一点工作。

使宏可移植的唯一方法是手动清理它们……</p>

  1. 将寄存器的内容插入l缓冲区:

    :new
    "lp
    
  2. 使用您通常的编辑魔法编辑掉所有杂乱无章的东西。

  3. 将其拉回所需的寄存器:

    0"+y$
    
  4. 摆脱那个缓冲区:

    :bw!
    
于 2021-03-11T16:47:10.650 回答