7

在 vim 中,我经常发现自己想在我的源代码中为标识符附加一个后缀,然后使用 '.' 在其他标识符上重复它。

即转换:

foo bar baz faz

至:

foo_old bar_old baz_old faz_old

我希望能够做到:

ea_old<ESC>w.w.w.

代替:

ea_old<ESC>wea_old<ESC>wea_old<ESC>wea_old<ESC>

换句话说,我希望将文本附加到单词的末尾,以在历史记录中显示为可重复的命令。有人知道怎么做吗?

我可以:

nmap <C-a> ea

创建一种更方便的方式来附加在单词的末尾,但它只重复“a”。理想情况下,我希望能够重复整个“eaarbitrarytext”序列。

我安装了 repeat.vim 插件并做了一些修改,但我真的不知道我在 vimscript 中做什么。

澄清要求:我希望能够使用任意移动命令来跳转,直到我的光标位于标识符上的某个位置,然后点击“。” 重复附加后缀。上面的例子是一个特例。

4

3 回答 3

9

ea_oldESCe.e.e.应该为你工作。

另一种可能的解决方案是c在搜索和替换命令上使用标志:

:.s/\<[[:alnum:]]\+\>/&_old/gc

然后您所要做的就是按y确认每次更换。如果您有很多替换要做并且想要手动确认每个替换,这会更快。另一方面,如果您想添加_old到一行中的每个单词,您可以删除c

:.s/\<[[:alnum:]]\+\>/&_old/g
于 2012-05-19T17:23:35.923 回答
9

我的猜测是,OP 举了一个非常简单的例子来说明一个更通用的问题,可以将其重新表述为“我想很容易地重复任意大的命令序列”。

为此,有q命令。选择你最喜欢的寄存器进行录音,说“q”,然后:

qq-- 开始录音

(在这里做任何复杂的动作......)

q-- 停止记录

@q-- 回放录音

由于我自己在编程时经常使用它,我最终将上面的操作分别映射到F2F3F4键盘上。这允许在真正的 1 次击键中重复您的一组操作。在 .vimrc 中:

nmap <F2> qq
nmap <F3> q
nmap <F4> @q
于 2012-05-20T09:42:10.630 回答
1

对于这种特定情况,您可以使用搜索和替换:s/ /_old /g

于 2012-05-20T09:53:25.713 回答