问题标签 [vim-macros]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
524 浏览

vim - vim 动态生成代码模板

我必须编写包含重复代码的测试用例。

  1. 方法的名称应该是用_分隔的ClassName 例如:class_name_test
  2. 对象名称应为 classNameObj,模拟方法应采用 ClassName.class
  3. genericObj.call 语句对所有方法都是通用的 sayHello 应该绑定到 classNameObj 剩下的结果是通用的
  4. commonMethods 对所有对象都是通用的

而不是复制粘贴和更改 ClassName 和 classNameObj,我有兴趣使用 Vim 自动执行此操作。是否可以这样做,如果我传递类名,其余的应该生成?

方法模板如下所述。

0 投票
0 回答
276 浏览

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

在此处输入图像描述

行号7显示我录制的宏的粘贴。当我复制/粘贴它时,我得到以下 4 行。我知道我们可以^[使用 替换字符<ESC>,但这不仅仅是一个,^M在很多地方也有 & 。这似乎不是一种可扩展的方式来完成工作。我觉得有比手动替换特殊字符更好的方法来处理这个问题。如果有人知道更好的解决方案,请提出建议?

0 投票
1 回答
24 浏览

vim - vim:在所有选定行中播放宏失败

我有一个这样的文本块:

我想在列表的所有对象成员中添加一个“lastName”项,它们应该变成这样:

我的宏是这个

并且可以在一行中正常工作,或者如果我j在末尾附加 a 以向下移动并像14@l.

我不能做的是用 视觉选择所有行V,然后输入:normal @l,因为它只适用于选择的第一行(无论j最后是否附加了 a )。如何使它在所有选定的行中工作?

0 投票
1 回答
97 浏览

vim - 将关键字参数映射到谷歌文档字符串的宏

我正在尝试编写我的第一个 vim 宏。目标是将包含关键字的行映射到谷歌文档字符串格式。

所以输入是:

期望的输出是:

所以我认为最简单的方法是定义一个宏。在控制台模式下,我wdwwD从行首成功删除了关键字周围的所有内容。但是将其绑定到宏(另外添加j0以获取新行)会产生以下输出:keyword' : value

我也尝试过f'r f'Dj0,但结果相同。所以看起来我做错了什么,但重复序列会产生我想要的输出,但即使那是它应该做的,也没有将它绑定到宏,对吧?

我的例子是

0 投票
2 回答
48 浏览

vim - 如何创建一个重新排序行的 vim 宏?

让我们从文字开始

然后假设您想使用宏重复将第一行作为最后一行。也就是说,这是 1 次运行后的目标状态

用例:我想第一次应用更长的宏,第二次快速等。

天真的方法只工作一次:q11Gdd8Gpq

@1 <- 这行得通

@1 <- 这打破了

重复时会中断。我尝试了其他避免 dd 的方法(例如,在第一行 d1j 上方创建一个新行,返回到第 8 行,粘贴,J 加入行)。我尝试的一切都在运行一次时起作用,但是在此运行期间有些东西正在改变宏缓冲区。

你如何制作一个可以多次运行的宏?

0 投票
1 回答
82 浏览

macos - 如何在 vim 中存储 golang 模板宏

我想将以下代码永久存储在 .vimrc 文件中。谁能提供我这样做的代码?

0 投票
1 回答
75 浏览

vim - 如何在不支持剪贴板的情况下将 Vim 宏复制到另一个 Vim 实例(即,没有 `+` 寄存器)?

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

寄存器l包含以下内容:

通过以下方式创建它:

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

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

如果 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 宏

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

0 投票
1 回答
57 浏览

vim - @a=" 之间的区别0" 和@a=@0

我已将以下文本复制到"0寄存器中

  1. 如果我想将寄存器的内容复制"0"a我做的寄存器

    然后,如果我粘贴"a我获得的寄存器内容

  2. "0现在,将寄存器的内容粘贴到"a我做的寄存器中

    然后<C-r>0,结果是这样的

    然后我粘贴"a寄存器("ap)的内容,我得到

为什么结果不相等?

具体来说,为什么换行符是按字面写的,而不是在第二种情况下解释?

0 投票
0 回答
34 浏览

vim - 如何将点运算符的内容复制到寄存器中?

我有一个 vim 中的最后一个命令,它可以被“点”操作符复制。但是,我现在希望执行另一个操作,然后返回并执行上一个命令。当我执行我的新命令时,“点”运算符将被新命令覆盖。如何将“点”运算符的内容复制到寄存器中以便稍后执行?

或者,是否有另一个 vim 操作可以更自然地实现这一点?

0 投票
2 回答
53 浏览

vim - vim,将整行复制到每行的末尾?

如何将当前行内容复制到整个文件的每行末尾?例如: