我想要将yanked文本粘贴到Vim的命令行中。这可能吗?


当前回答

如果你有两个值被插入到两个不同的寄存器(例如寄存器a和寄存器b),那么你可以简单地设置一个变量c并对其进行操作。

例如:set c = str2float(@a) + str2float(@b),然后你可以将c的内容粘贴到任何地方。

例如,在插入模式下,按CTRL + R,然后输入=进入表达式寄存器,在等号后输入c,然后按enter。现在你应该有了a和b寄存器的总数。

所有这些都可以记录在一个宏和重复!

如果使用浮点数,则使用str2float函数;如果不使用浮点数,则使用整数。

我不确定这是否是惯用的,但它适用于我的情况下,我需要在一行中添加2个数字,并重复500多行。

其他回答

OS X

如果你在Mac OS X上使用Vim,不幸的是它带有旧版本,并且不符合剪贴板选项。幸运的是,Homebrew可以轻松解决这个问题。

安装Vim:

编译安装vim——with-lua——with-override-system-vi

安装Vim的GUI版本:

安装macvim -with-lua -with-override-system-vi

重启终端生效。

将下面的行追加到~/.vimrc 设置剪贴板=不知名的

现在你可以用yy在Vim中复制这一行,并在系统范围内粘贴它。

还值得注意的是,yank寄存器与宏缓冲区是相同的。换句话说,您可以简单地在文档中写出整个命令(包括粘贴的代码片段),然后“通过将它拉到b寄存器,然后使用@b运行它”。

要将系统剪贴板中的内容粘贴到Vim命令行(“命令模式”),请使用Ctrl+R后跟+。对我来说,至少在Ubuntu上,Shift+Ins不起作用。

PS:我不确定为什么按Ctrl+R加*,理论上与按Ctrl+R加+一样,似乎并不总是有效。我搜索并发现了+版本,它似乎总是工作,至少在我的盒子。

我也遇到过类似的问题。我希望选择的文本以命令结尾,而不是依赖于粘贴它。下面是我试图为之写映射的命令:

:call VimuxRunCommand("python")

这个插件的文档只显示使用字符串文字。如果你试图选择包含双引号的文本,下面将会中断:

vnoremap y:call VimuxRunCommand("<c-r>"")<cr>

为了解决这个问题,你只需要使用@引用宏的内容:

vnoremap y:call VimuxRunCommand(@")<cr>

将未命名寄存器的内容传递进来,并使用双引号和多行边格。

要粘贴系统剪贴板中的内容,可以使用SHIFT - INS。

它在Windows中工作,但我猜它在Linux中也工作得很好。