Скопіюйте / вставте текстові виділення між tmux та буфером обміну


15

У мене запущена остання версія tmux (із сховища git) та xclip (0,12), і я хотів би мати можливість використовувати прив’язки клавіатури до Emacs для переміщення тексту в тексті copy-mode, копіювання ( M-w) виділення до буфера обміну та вставити ( C-y) з / в буфер для копіювання до буфера обміну.

Поки що мені вдалося вставити текст C-yі переміщатися за copy-modeдопомогою прив’язок клавіатури до Emacs, але я все ще не можу скопіювати текст із буфера tmux (наприклад, у copy-mode)

Я знайшов цей потік для копіювання всього буфера до буфера обміну (і viceversa), але він, здається, не працює для мене.

Також у списку tmux-usersпошти мені сказали, що останні версії tmux (лише у git repo) містять команду, яку називають copy-pipe. Сторінка man говорить про цю команду:

Одна команда приймає аргумент, copy-pipe, який копіює виділення і передає його команді. Наприклад, наступне буде прив'язувати "C-q" для копіювання виділення в / tmp, а також буфера вставлення:

       bind-key -temacs-copy C-q copy-pipe "cat >/tmp/out"

Схоже, copy-pipeце призначене частково використовувати для передачі вибору іншій команді. У цьому описі та в команді також здається, що є помилки (що це temacs-copy?)

У будь-якому випадку, що я хотів би зробити:

Копіювання:

  1. Введіть режим копіювання
  2. Перейти до тексту , який я хочу , щоб скопіювати з допомогою команд навігації Emacs (тобто C-f, C-b, M-f, M-b, C-a, і C-eт.д. , щоб перемістити курсор). Ніякого префікса для жодного з них
  3. Скопіюйте вибраний текст у буфер обміну за допомогою: M-w( жодного префіксу немає )

Вставка:

  1. Я хотів би мати можливість C-y( без введення copy-mode) вставляти текст у термінал (також немає префіксу )

Я спробував скопіювати наступне без удачі:

bind-key -n M-w run "tmux save-buffer - | xclip -i -selection clipboard" 

Однак обклеювання чудово працює:

bind-key -n C-y run "xclip -o | tmux load-buffer - ; tmux paste-buffer"

Дивно те, що я знаю, що " xclip -i -selection clipboard" команда копіювання вище "" працює добре, оскільки я можу скопіювати речі в буфер обміну в командному рядку, наприклад:

echo "Hello world. How are you?" | xclip -i -selection clipboard

З усього цього, як я можу скопіювати виділення з режиму копіювання до буфера обміну?

Відповіді:


19

Використовуйте наступні tmux.confз copy-pipeв нових версіях tmux (1.8+):

set -g mouse on
# To copy:
bind-key -n -t emacs-copy M-w copy-pipe "xclip -i -sel p -f | xclip -i -sel c "

# To paste:
bind-key -n C-y run "xclip -o | tmux load-buffer - ; tmux paste-buffer"
  1. prefix+[ в режим копіювання
  2. виберіть вміст за допомогою миші (утримуйте)
  3. M-w скопіювати цю частину в буфер обміну
  4. C-yвставити його всередину tmux, C-vщоб вставити його в інший звичайний додаток, наприклад веб-браузер.

Ця відповідь заслуговує на більшу інформацію, вона найкраща для налаштувань на базі Linux.
Луї Котманн

У tmux 2.0 це run-shellзамістьrun
вручити

@LouisKottmann: чому просто на базі Linux?
schaiba

Я не можу коментувати інші системи, але я вважаю, що mac використовує bpaste замість xclip зазвичай
Louis Kottmann

У tmux 2.8 мені довелося їх змінити bind -Tcopy-mode M-w send-keys -X copy-pipe "xclip -i -sel p -f | xclip -i -sel c ". bind-key -n C-y run-shell "xclip -o | tmux load-buffer - ; tmux paste-buffer" відповідно до цього зобов'язання, запропонованого starfry
azzamsa

6

Зверніть увагу, що з Tmux 2.4 (з моменту цього виконання ) синтаксис прив'язки змінився. Перефразовуючи цей коментар Github, щоб коротко підсумувати зміни:

  1. замінити -tна-T
  2. замінити vi-<name>на<name>-mode-vi
  3. префікс команди з send-keys -X

Я мав:

bind-key -n -t vi-copy Enter copy-pipe 'xclip -i -sel p -f | xclip -i -sel c'
bind-key -n -t vi-copy MouseDragEnd1Pane copy-pipe 'xclip -i -sel p -f | xclip -i -sel c'

що мені потрібно було змінити на:

bind-key -n -T copy-mode-vi Enter send-keys -X copy-pipe 'xclip -i -sel p -f | xclip -i -sel c'
bind-key -n -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe 'xclip -i -sel p -f | xclip -i -sel c'

З журналу змін :

Ключові таблиці зазнали великих змін. Клавіатурні таблиці режимів більше не відокремлюються від основних клавішних таблиць. Усі таблиці клавіш в режимі видалено, разом з -t прапором для прив'язки-ключа та відключення ключа.

Таблиці emacs-edit, vi-edit, emacs-select та vi-select були замінені фіксованими прив'язками клавіш у командному рядку та вибору режимів. Параметри клавіш режиму та клавіш стану залишаються.

Таблиці emacs-copy та vi-copy були замінені таблицями режиму копіювання та режиму копіювання-vi. Команди надсилаються за допомогою прапорців -X та -N для передачі-клавіш. Отже, наступне:

bind -temacs-copy C-Up scroll-up
bind -temacs-copy -R5 WheelUpPane scroll-up

Стає:

bind -Tcopy-mode C-Up send -X scroll-up
bind -Tcopy-mode WheelUpPane send -N5 -X scroll-up

Ці зміни дозволяють використовувати повний аналізатор команд (включаючи послідовності команд) та набір команд - наприклад, звичайний командний рядок з редагуванням та історією тепер використовується для пошуку, стрибків тощо, замість спеціального. Типова прив'язка Cr тепер:

bind -Tcopy-mode C-r command-prompt -p'search up' "send -X search-backward-incremental '%%'"

Також є кілька нових команд, доступних із функцією send -X, наприклад, копіювати трубу-скасувати.


2

Це -temacs-copyне друкарня. Провідний тире означає, що це варіант для bind-keysкоманди (разом з аргументом для параметра). Це рівнозначно -t emacs-copy, якщо вам це подобається краще.

У режимі копіювання використовується інший набір прив’язок та команд 1, ніж у «звичайному режимі». copy-pipeКоманда доступна тільки в альтернативних «режимі» прив'язки таблиць. Коли mode-keysце так emacs, режим копіювання використовуватиме emacs-copyтаблицю, тому вам потрібно прив’язати Mw до copy-pipeцієї таблиці.

bind-key -temacs-copy M-w copy-pipe "xclip -i -selection clipboard"

Будьте обережні, роблячи занадто багато прив’язок "без префіксу". Їм буде важко набрати ці пов'язані ключі до програми, що працює всередині tmux (наприклад, коли ви хочете ввести Cy в екземпляр режиму tty в режимі Emacs, що працює всередині tmux ). Ви завжди можете (префікс) прив’язати якийсь ключ, який є send-keys C-y, але це може зробити його більш громіздким введення, якщо вам це потрібно досить часто.


1 Доступні лише команди руху та редагування. За винятком copy-pipeцих команд, не беруть жодних аргументів (це означає, що підручна сторінка означає, що одна команда приймає аргумент; "в", мабуть, помилка друку чи редагування).


2

Хоча інші відповіді можуть допомогти, ось як я це роблю:

  • Shift + виберіть текст курсором.
  • Ctrl + Shift + C, щоб скопіювати текст у буфер обміну.

Це справедлива відповідь, але проблеми починаються, коли у вас дві або більше панелей, розташованих горизонтально.
cjauvin

Я бачу, дайте мені знати, якщо ви знайдете для цього щось корисне.
Рішабх Аграхарі

prefix+ zзбільшує зображення на вибраній панелі, щоб горизонтальні розщеплення не були проблемою при обходженні вибору копії tmux, утримуючи її shift.
joelostblom
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.