Не удается вставить в MacVim

Я копирую текст извне Vim. ⌘V в других приложениях вставляет текст без проблем. В MacVim это не работает.

В режиме ввода ничего не отображается. В нормальном режиме я получаю E353: Nothing in register +. Это происходит, когда set clipboard=unnamed включен или выключен.

Как ни странно, это работало раньше. Что не так?

Ответ 1

Если вы используете tmux, и иногда вы сначала запускаете MacVim через программу командной строки mvim, то вы можете столкнуться с проблемой, которая побудила меня написать reattach-to-user-namespace команда.

Моя догадка заключается в том, что доступ к буферам обмена работал в предыдущих случаях, потому что вы случайно запустили MacVim с помощью "обычного" GUI-метода (например, док-станции, Finder, Spotlight и т.д.). Позднее буфер обмена стал недоступен после того, как вы покинули предыдущий экземпляр MacVim и перезапустили его (например,) mvim изнутри сеанса tmux.

Основная проблема заключается в том, что программы, запущенные в определенных контекстах (т.е. внутри сеанса tmux), заканчиваются средой, которая запрещает им доступ к определенным службам (например, картотеке OS X).

Первоначальный запуск является важным здесь. Новые окна, начинающиеся с mvim -in-tmux (даже без вышеперечисленной программы-обертки), должны иметь доступ к буферу, пока MacVim ранее был запущен "через графический интерфейс" (возможно, все еще есть окна MacVim, открытые или возможно, у вас MacVim настроен на работу даже при отсутствии открытых окон). Соответственно, чтобы восстановить доступ к буферу, вам нужно закрыть все существующие окна MacVim, выйти из приложения, а затем перезапустить его таким образом, чтобы иметь доступ к буферу (например, через графический интерфейс или "внутри" обертки).

Как только у вас установлена ​​вышеописанная программа-оболочка (она также доступна через MacPorts и Homebrew), вы можете использовать команду типа reattach-to-user-namespace mvim, чтобы гарантировать, что , если она запускает новый MacVim, то этот новый экземпляр будет иметь доступ к буферу. Вы можете использовать псевдоним, функцию оболочки или script, чтобы убедиться, что вы всегда "обертываете" mvim.

Несколько других команд также выигрывают от "wrapping" (pbpaste, pbcopy, nohup, launchctl (в зависимости от используемой вами подкоманды)), поэтому вы можете "обернуть" всю вашу оболочку вместо отдельных команд. Бит среды процесса, которую модифицирует "обертка", наследуется дочерними процессами, поэтому "упаковка" вашей оболочки будет влиять на большинство команд, которые вы запускаете из нее. Если вы используете tmux, вы можете настроить default-command на автоматическое "обертывание" ваших стандартных оболочек tmux:

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