Використовуйте системний буфер обміну в режимі vi-copy у tmux


50

Я працюю 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?

Відповіді:


86

На це також відповіли тут , але мені знадобилося певний час, щоб зрозуміти, як його використовувати, тому я поясню для всіх, хто був плутаний.

Це в основному налаштування, для якого ви збираєтеся:

(для версій 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переміщення за будь-якими клавішами руху, щоб зробити вибір. Потім, замість того, щоб натиснути 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, але це було не так складно і зараз він просто працює ™!
Нафтулі Кей

3
Якщо це не працює лише двічі перевірити, що xclipфактично встановлено у вашій системі (вона не встановлена ​​за замовчуванням на Ubuntu, вам потрібно sudo apt-get install xclipїї отримати)
ecerulm

3
Для OSX замініть xclipна pbcopy. Для Cygwin в Windows замініть його на putclipcygutils-extraпакета).
ХропінняFrog

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"
Маттіас Браун

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".
Бен Девіс

5

Погляньте на плагін tmux-yank для tmux. https://github.com/tmux-plugins/tmux-yank

Він забезпечує автоматизований спосіб копіювання / вставки з tmux в буфер обміну системи. Він працює в системах OSX / Linux / Cygwin.


Це добре працювало для мене, дякую за посилання!
Брайан Генрі

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'
Дай

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.