我从 Vim 外部复制文本。 ⌘其他应用程序中的 V 粘贴文本没有问题。在 MacVim 中,它不起作用。
在插入模式下,什么也没有出现。在正常模式下,我得到E353: Nothing in register +
。发生这种情况时set clipboard=unnamed
开启或关闭。
奇怪的是,这之前是有效的。怎么了?
如果您正在使用tmux有时你最初启动MacVim通过mvim
命令行程序,那么您可能会遇到促使我编写以下内容的问题reattach-to-user-namespace command https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard.
我的猜测是剪贴板访问在之前的情况下有效,因为您碰巧启动了MacVim通过“正常”GUI 方法(例如扩展坞、Finder、聚光灯等)。在您退出先前的实例后,剪贴板后来变得无法访问MacVim并通过(例如)重新启动它mvim
从里面一个tmux会议。
核心问题是在某些上下文中启动的程序(即在tmux会话)最终会遇到一个拒绝他们访问某些服务(例如 OS X 粘贴板)的环境。
The initiallaunch 是这里最重要的一项。新窗口启动于mvim
-in-tmux(即使没有上面链接的包装程序)只要能够访问剪贴板MacVim之前是“通过 GUI”启动的(也许还有一些MacVim窗户打开,或者也许你有MacVim配置为即使没有打开窗口也能保持运行)。相应地,要重新访问剪贴板,您需要关闭所有现有的MacVimWindows,退出应用程序,然后以可以访问剪贴板的方式重新启动它(例如,通过 GUI 或包装器“内部”)。
一旦安装了上面链接的包装程序(也可以通过 MacPorts 和 Homebrew 获得),您可以使用如下命令reattach-to-user-namespace mvim
为了保证if它最终开始一个新的MacVim实例,那么该新实例将有权访问剪贴板。您可以使用别名、shell 函数或脚本来确保始终“换行”mvim
.
其他几个命令也受益于“包装”(pbpaste
, pbcopy
, nohup
, launchctl
(取决于您使用的子命令)),因此您可能想要“包装”整个 shell 而不是单个命令。 “包装器”修改的进程环境部分由子进程继承,因此“包装”您的 shell 将影响您从中运行的大多数命令。如果您正在使用tmux,你可以配置你的default-command
自动“包装”您的默认值tmux shells:
set-option -g default-command "reattach-to-user-namespace -l zsh"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)