Используйте системный буфер обмена в режиме 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"

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.
Бен Дэвис


2

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

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


пользователи 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 можно использовать для вставки в терминал.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.