如果您通过reattach-to-user-namespace
包装器启动您的 shell(正如我在包装器文档中所描述的那样),它们的所有子级都将附加到用户引导命名空间,因此您不必在对 (eg)pbcopy
和pbpaste
.
或者,您可以通过包装器只运行您的 Vim 实例,以使其(及其子级)访问引导命名空间。那样的话,你应该可以使用*
寄存器(如果你有使用该+clipboard
特性编译的 Vim 7.3,即除了 OS X 附带的之外几乎任何版本的 Vim)。
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或来使用它"aF3(即带有寄存器前缀,就像任何其他使用寄存器的正常模式命令一样)。