Вопрос по vim, tmux – Исправление Vim + Tmux yank / paste в неназванном регистре

64

При использовании vim в сеансе tmux я не могу восстановить или вставить в безымянный регистр. Переход в именованный регистр работает нормально, но безымянный никогда не работает.

Ошибка:

E353: Nothing in register *

Без tmux vim работает нормально, используя мои текущие настройки. Как я могу это исправить, чтобы я мог использоватьy затемp без ошибок и без указания реестра?

Не могли бы вы показать свой tmux.conf? Conner

Ваш Ответ

5   ответов
4

fakeclip Плагин заставляет регистр буфера обмена работать должным образом во многих терминалах и имеет поддержку tmux / screen. Вы используете это? Это может решить вашу проблему.

Кроме того, вас может заинтересовать этот совет ... Он не относится к вашему вопросу, но имеет отношение. В зависимости от типа системы / терминала, в котором вы запускаете tmux, вам могут потребоваться некоторые настройки в вашем.tmux.conf, Например, вот выдержка из моего.tmux.conf на OS X (с некоторыми инструкциями в комментариях):

# To use pbcopy and pbpaste on OS X, get this wrapper and install
#    git clone https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard.git
#    cd tmux-MacOSX-pasteboard/
#    make reattach-to-user-namespace
#    mv reattach-to-user-namespace /usr/local/bin
# After installing, the default command can be reset to use the 'reattach-to-user-namespace' 
# wrapper that was compiled/installed as descripted above.
set -g default-command "reattach-to-user-namespace -l /bin/bash"
# #Next, create Ctrl-c and Ctrl-v mappings
bind C-c run "tmux save-buffer - | reattach-to-user-namespace pbcopy"
bind C-v run "tmux set-buffer $(reattach-to-user-namespace pbpaste); tmux paste-buffer"
99

Nothing in register *), кажется, что когда вы делаете простой? pВаш экземпляр Vim использует* register вместобезымянный регистр*, Это, вероятно, потому что вашclipboard option включает в себя значениеunnamed, При такой настройке Vim будет использовать*& # xA0; регистрировать вместо безымянного регистра операции yank, delete, change и put по умолчанию (т. е. если не указан другой регистр с" префикс; например"ap положить изa& # XA0; регистр).

*The unnamed register is actually named " (double quote). It is only “unnamed” in the sense that you do not have to name it to use it (it is the default). I.e. you do not have to say ""p to put from the unnamed register, just p.

Значение по умолчаниюclipboard не содержитunnamed, так что это, вероятно, происходит от какой-то части вашей конфигурации (или плагина). Команда:verbose set clipboard? покажет вам скрипт, который устанавливает текущее значение. Если это делается в вашем файле конфигурации, то вы можете не делать этого, когда работаете вtmux, Например:

if $TMUX == ''
    set clipboard+=unnamed
endif

В качестве альтернативы, может быть какой-то способ позволить экземплярам Vim-внутри-tmux получить доступ к выбору GUI / буфера обмена (таким образом, работать с* зарегистрироваться и / илиunnamed вclipboard). Если вы используете Mac OS X, вы можете посмотреть намой обходной путь который повторно разрешает доступ к буферу обмена для процессов, выполняющихся внутриtmux сессия. Если вы используете какую-то другую ОС или графический интерфейс, вам нужно будет узнать, как Vim обычно общается с графическим интерфейсом и почему он не работает (например, неверное значение DISPLAY в X11, возможно, из-за подключения к старому сеансу, который работает оболочка, которая имеет устаревшее значение).

Должен ли я установить его с--with-wrap-pbcopy-and-pbpaste вариант заваривать?
Все остальные ответы просто случайным образом пробуют разные настройки без разума, ТОЛЬКО вы указываете почему! Благодарю.
Вы правы, у моего .vimrc была строка set clipboard = Безымянная. Я добавил условное выражение, и теперь оно корректно работает в tmux и из него. Jason
0

Чтобы добавить пару замечаний из моего опыта по OSX к принятому ответу:

  • Make sure you do set clipboard=unnamed and not set clipboard=unnamedplus
  • I had to kill my tmux server ($ killall tmux or $ tmux kill-session -a). Reloading the tmux configuration files showed that default-command was set but did not give vim access to the system clipboard.
49

Install Homebrew Install reattach-to-user-namespace: brew install reattach-to-user-namespace in .vimrc: set clipboard=unnamed Tell tmux to use the system clipboard: In .tmux.conf: set-option -g default-command "reattach-to-user-namespace -l bash"

Источник:https://coderwall.com/p/j9wnfw

заzsh пользователи конечно заменяютbash сzsh.
Обратите внимание, чтоlink-only answers are discouragedSO ответы должны быть конечной точкой поиска решения (в отличие от еще одной остановки ссылок, которая, как правило, со временем устаревает). Пожалуйста, рассмотрите возможность добавления отдельного краткого обзора здесь, сохраняя ссылку в качестве ссылки.
Третий шаг может быть опущен при использовании"+p вставить из системного буфера обмена, если вы хотите отделить регистр vim по умолчанию от системного буфера обмена (остальное мне все еще было необходимо, чтобы он работал в tmux).
Не забудьте перезапустить все сеансы входа в систему (то есть перезапустить окна iTerm / Terminal) после этого.
0

Поздний ответ, но возможно, что ваш.tmux.conf содержит следующую строку:

set -g set-clipboard off

в сочетании с.vimrc содержащий

set clipboard=unnamed

это приведет к тому, что vim попытается использовать буфер обмена, которого там нет.

Похожие вопросы