我可以编写一个vim映射,允许我在下一个[count]行上以可链接的方式执行编辑重复吗?

时间:2015-01-31 08:16:20

标签: vim

Vim的点.重复功能是其最强大的功能之一,其功能的根源不在于能力,而在于如何轻松快速它。

实际上有点受限。例如,我经常希望它可以做的事情是"记录"再来一点。例如,我在bash脚本中有一个很长的行,我想缩短它来清理脚本。

注意:我用来演示Vim光标位置的方括号

[y]um -y install autoconf automake binutils bison flex gcc gcc-c++ gettext libtool make patch ftp pkgconfig man ncurses-devel zlib-devel bzip2-devel openssl-devel sqlite-devel readline-devel wget git mercurial ruby ruby-devel libcurl curl-devel perl-devel perl-ExtUtils-Embed subversion swig bind-utils inotify-tools lsof nmap strace expect mc unzip

现在假设Vim确实会以这样的方式包装它,我必须附加5个反斜杠才能不破坏脚本。

我真的希望能够通过键入 Vgq k A \ 来完成这项工作↑ ESC 4

但这不起作用,因为.不记得箭头键的移动,我必须输入: Vgq k A \ ESC ķ ķ ķ ķ

或者,只有在我的任务有点复杂且体积更大的情况下才有用,因为这需要执行更多的智力... Vgq qq ķ A \ ESC 4 @ q

现在我想要的可能是绑定另一个密钥,让我们说,,在应用最后一个变更单位时自动推进该行,以使操作在数字上可链接。然后我可以很自然地以这种方式完成我的任务: Vgw A \ Esc 4,

这将覆盖90%的我想录制宏的情况,但无法证明实际上这样做是因为它的仍然不那么痛苦地将垃圾邮件发送出去了移动键和.几次。

这样的装订会是什么样的?

1 个答案:

答案 0 :(得分:1)

一旦我开始考虑它就相当容易,在写这个问题的过程中我不得不这样做。就是这样:

nnoremap , :normal .j<CR>

这确实是一个痛苦简单的解决方案。

由于我已经,绑定到@q以便于进行宏录制,并且因为在使用.时始终向下扫描对我来说大概是正确的,所以我想实际绑定这到.本身。

为此,使用!来避免E169: Command too recursive堆栈溢出非常重要。

nnoremap . :normal! .j<CR>

现在,撤销将j放在前面的顺序可能会使我的移动更好地适应我所呈现的情况,但这会对新.的使用产生负面影响对于其他典型任务,例如手动迭代重命名许多变量名称。

因此,我可以这样做: Vgw A \ Esc j 4