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