2013-05-17 39 views
11

我從Vim外部複製文本。 ⌘V在其他應用程序粘貼文本沒有問題。在MacVim中,它不起作用。無法粘貼到MacVim中

在插入模式下,不顯示任何內容。在正常模式下,我得到E353: Nothing in register +。當set clipboard=unnamed打開或關閉時會發生這種情況。

奇怪的是,這是工作之前。怎麼了?

+1

你平時啓動*的MacVim *通過GUI(如碼頭,*搜索* Spotlight,一些啓動器應用程序),還是通過命令行?如果您通常使用命令行(例如'mvim'),如果您退出(不只是關閉所有窗口,例如Command-Q),然後重新啓動「通過GUI」,是否恢復剪貼板訪問?您推出的環境有什麼特別的* MacVim *?例如。 ''mvim'從一個* tmux *窗格里面沒有使用類似我的['reattach-to-user-namespace'程序](https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard)。 –

+0

@ChrisJohnsen這可能是問題所在。我馬上去看看。謝謝! –

+0

@ChrisJohnsen謝謝! 'reattach-to-user-namespace'非常好。你節省了很多像我這樣的書呆子。 –

回答

28

如果您正在使用TMUX有時您最初通過mvim命令行程序啓動的MacVim,那麼你可能會遇到促使我寫reattach-to-user-namespace command問題。

我的猜測是,剪貼板訪問工作在之前的場合,因爲你碰巧已經通過「正常」的GUI方法啓動的MacVim(例如碼頭,搜索,射燈等)。在您退出之前的MacVim實例並在tmux會話中通過(例如)mvim重新啓動剪貼板後,剪貼板將無法訪問。

核心問題是,在某些環境下(即在一個會話中)啓動的程序最終會導致拒絕他們訪問某些服務(例如OS X粘貼板)的環境。

初始發射是這裏重要的一個。新的窗口由mvim -in- TMUX(即使沒有上述聯包裝程序)啓動應該有機會到剪貼板只要的MacVim「通過圖形用戶界面」之前開始(也許還存在一些的MacVim窗口打開,或者您可能已配置爲即使在沒有窗口打開的情況下也能保持運行的MacVim)。相應地,要重新獲得剪貼板的訪問權限,您需要關閉所有現有的窗口,退出應用程序,然後以可訪問剪貼板的方式重新啓動它(例如通過GUI或「包裝」內部) 。

一旦你安裝了上述聯包裝程序(它也可以通過使用MacPorts和自制),你可以使用如下命令reattach-to-user-namespace mvim確保如果它結束了開始一個新的的MacVim實例,那麼該新實例將有權訪問剪貼板。您可以使用別名,shell函數或腳本來確保始終「包裝」mvim

其他幾個命令也從「包裝」中受益(pbpastepbcopynohuplaunchctl(取決於哪個子命令使用的是)),所以你可能會想「包裝」你的整個外殼,而不是單獨的命令。 「包裝器」修改的進程環境位由子進程繼承,因此「包裝」你的shell會影響你從中運行的大多數命令。如果您正在使用TMUX,你可以配置你的default-command自動「包裝」默認TMUX彈:

set-option -g default-command "reattach-to-user-namespace -l zsh" 
+0

我將如何去包裹整個外殼? –

+1

如果你已經啓動了一個shell,你可以像這樣手動啓動一個新的「包裝」shell:'exec reattach-to-user-namespace zsh'(你可以在沒有'exec'的情況下執行它(例如,爲了調試目的) ,但是你最終會得到一層額外的shell)。要自動完成它,你將需要重新配置啓動你的shell的任何東西(例如* tmux *)來代替使​​用wrapper(例如通過'default-command');即基本上,只需將'reattach-to-user-namespace'添加爲前綴即可。 –