Используйте системный буфер обмена в режиме vi-copy в tmux

51

Я использую tmux 1.6 и пытаюсь настроить его на использование сочетаний клавиш в стиле vi, а также использовать системный буфер обмена при копировании в интерактивном режиме:

set-window-option -g mode-keys vi

bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' "copy-selection && run \"tmux save-buffer | xclip -selection clipboard\""

Проще говоря, я хотел бы иметь возможность сделать C+, [а затем использовать, vчтобы начать выделение текста для копирования, затем, когда yнажата, скопировать выделение в выделение tmux и затем экспортировать его в системный буфер обмена с помощью xclip.

К сожалению, когда я пытаюсь это сделать, я вижу следующее:

.tmux.conf: 14: unknown command: copy-selection && run "tmux save-buffer | xclip -selection clipboard"

Есть ли способ сделать это в конфигурации Tmux?

Нафтули Кей
источник

Ответы:

87

Это также был дан ответ здесь , но мне потребовалось некоторое время , чтобы понять , как использовать его, поэтому я объясню , для кого -то еще , что было спутать.

Это в основном настройки, для которых вы собираетесь:

(для версий tmux <2.5 )

bind -t vi-copy y copy-pipe 'xclip -in -selection clipboard'

(для версий tmux > = 2.5 )

bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard'

Затем нажмите, Ctrl+b [чтобы войти в режим копирования. Затем нажмите, Spaceа затем нажмите клавиши перемещения vi, чтобы сделать выбор. Затем, вместо того, чтобы нажать Enter, нажмите yи выделение будет скопировано в буфер обмена.

Примечание: предполагается, что вы используете привязки tmux по умолчанию с ключами vi.

Tmux имеет разные таблицы привязки клавиш для разных режимов. Итак, bind-key -t vi-copy yзадает действие для yключа в режиме копирования. Сначала я был смущен, потому что привык делать удары Enterпосле выбора. Enterна самом деле это просто связывание ключей по умолчанию для copy-selectionкоманды (в режиме копирования). Команда copy-pipeпозволяет нам связать новый ключ, чтобы передать выбор команде, которая в этом случае xclip.

Вы можете увидеть все привязки клавиш для режима копирования, запустив list-keys -t vi-copy.

Бен Дэвис
источник
Большое спасибо, мне пришлось скачать и скомпилировать tmux 1.9a, но это было не так сложно, и теперь это просто работает ™!
Нафтули Кей
4
Если это не сработает, просто дважды проверьте, что xclipна самом деле установлено в вашей системе (это не установлено по умолчанию в Ubuntu, вам нужно sudo apt-get install xclipего получить)
ecerulm
4
Для OSX замените xclipна pbcopy. Для Cygwin в Windows замените его на putclip(из cygutils-extraпакета).
SnoringFrog
5
Следующая привязка из этой записи блога также прекрасно работает на Tmux 2.6 и не имеет недостатка в том, что при копировании на экране bind -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "xclip -i -f -selection primary | xclip -i -selection clipboard"
Matthias Braun
1
Это не работает для меня , пока я не убрал эту линию от .tmux.conf: set -g mouse on. Предполагается, что это разрешит «режим мыши», но даже после его удаления все, что касается моей мыши, работает нормально (колесо прокрутки работает, выбор мыши работает) ...
ndemou
11

Обновленная версия для ответа Бен Дэвис

совместим с tmux 2.4

bind -T copy-mode-vi y send -X copy-pipe "xclip -selection c"
jruz
источник
4
Я считаю, что это работает немного лучше copy-pipe-and-cancel, чем copy-pipe. Это на tmux 2.5
wreckgar23
6

Вы столкнулись с парой технических проблем:
привязки «специального режима» (например vi-copy)…

  1. использовать другой набор команд (т.е. run-shellон runнедоступен), и
  2. не имеют возможности связывать несколько команд (которые обычно могут быть разделены ;- &&разделитель команд оболочки недоступен).

tmux 1.8 имеет copy-pipe, что может помочь, хотя:

bind-key -t vi-copy y copy-pipe 'xclip -selection clipboard >/dev/null'

(Существует такая привязка, перечисленная в FAQ .)

Крис Джонсен
источник
1
У меня есть tmux 1.8, и это не похоже на работу. (править) Тьфу, я ненавижу ввод текста, который отправляется на Enter. В любом случае, я добавил эту привязку клавиш, но когда я нажимаю <prefix> -y и нажимаю [пробел], содержимое не копируется в буфер обмена.
Бен Дэвис
Просто разобрался. Я не понял, как работала таблица привязки клавиш vi-copy.
Бен Дэвис
5

Взгляните на плагин tmux-yank для tmux. https://github.com/tmux-plugins/tmux-yank

Он обеспечивает автоматический способ копирования / вставки из tmux в системный буфер обмена. Работает на системах OSX / Linux / Cygwin.

bergercookie
источник
Это отлично сработало, спасибо за ссылку!
Брайан Генри
2

Для macOS вы можете добавить эту строку в .tmux.conf

bind -t vi-copy y copy-pipe 'pbcopy'

bumaociyuan
источник
пользователи macOS, для tmux> = 2.5:bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'pbcopy'
Dai
1

Это то, что в итоге помогло мне использовать tmux 2.2 и установить xclip. Для копирования в стиле Vim добавьте следующее .tmux.conf

bind Escape copy-mode
bind -t vi-copy 'v' begin-selection
bind -t vi-copy 'y' copy-selection
# Vim style copy to clipboard
bind-key -t vi-copy y copy-pipe "xclip -selection c > /dev/null"
bind-key p run "xclip -o -sel clip | tmux load-buffer - ; tmux paste-buffer"

Здесь, когда в режиме копирования PREFIX v начинает выделение, а PREFIX y копирует в буфер обмена. PREFIX p можно использовать для вставки в терминал.

OrigamiEye
источник