我想创建一个样式命令/宏来粘贴我当前未命名的yank寄存器(如果必须的话,还是特定的一个)到外部命令。
我目前的用例是将线路发送到剪贴板。虽然将来我想使用相同的技术将文本发送到其他程序。
对于剪贴板,作为Mac用户,我通常只会将*
添加到我的剪贴板,但我也是Tmux用户,所以这不起作用。我必须使用reattach-to-user-namespace
命令。我想要发生的是将yank注册号输出到reattach-to-user-namespace -l bash -c pbcopy
。
答案 0 :(得分:0)
如romainl所述,通过将命令空间命令放在tmux.conf中,您不需要执行此操作,但如果您确实希望将寄存器的内容通过管道传输到外部命令,则可以使用{{1}检索其内容并getreg()
执行命令。例如......
exe
答案 1 :(得分:0)
如果你通过reattach-to-user-namespace
包装器启动shell(正如我在包装器的文档中所描述的那样),他们所有的孩子都将被附加到用户引导程序命名空间,因此你不必在你的shell中使用它个人致电(例如)pbcopy
和pbpaste
。
或者,您可以通过包装器运行Vim的实例,以使其(及其子级)访问引导程序命名空间。这样,您应该能够使用*
寄存器(如果您使用+clipboard
功能编译Vim 7.3,即除了OS X附带的Vim之外几乎任何Vim版本。)< / p>
reattach-to-user-namespace vim …
# use "* inside Vim to access the OS X clipboard.
如果你真的想避免运行包装器,除了需要它的最终进程(例如pbcopy
),那么你可以使用Vim的system()
函数。这也是您通常将一些内部到Vim数据发送到任何(非交互式)外部命令的方式:
:call system('reattach-to-user-namespace pbcopy', getreg(''))
您可能希望将其打包为新命令(以便您可以更轻松地将其用于不同的寄存器):
command -bar -register Pbcopy call system('reattach-to-user-namespace pbcopy', getreg(<q-reg>))
这个新命令可以像这样使用(参数是寄存器名称):
:Pbcopy "
:Pbcopy a
您可以更进一步,制作一个调用命令的映射:
nnoremap <F3> :<C-u>execute 'Pbcopy ' . v:register<CR>
您可以通过键入 F3 或“ a F3 来使用它(即使用寄存器前缀,如任何其他寄存器使用,普通模式命令。)