Я использую последнюю версию tmux (из репозитория git) и xclip (0.12), и я хотел бы иметь возможность использовать привязки клавиатуры, подобные Emacs, для перемещения по тексту copy-mode
, M-w
выборки copy ( ) в буфер обмена и paste ( C-y
) из / в буфер копирования в буфер обмена.
До сих пор я мог вставлять текст C-y
и перемещаться copy-mode
с помощью Emacs-подобных привязок клавиатуры, но я все еще не могу скопировать текст из буфера tmux (например, в copy-mode
)
Я нашел этот поток для копирования всего буфера в буфер обмена (и наоборот), но, похоже, он не работает для меня.
Также в 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
?)
В любом случае, я хотел бы сделать следующее:
Копирование:
- Войдите в режим копирования
- Перейти к тексту , который я хочу , чтобы скопировать с помощью команд навигации Emacs (т.е.
C-f
,C-b
,M-f
,M-b
,C-a
, иC-e
т.д. , чтобы переместить курсор). Нет префикса для любого из них. - Скопируйте выделенный текст в буфер обмена с помощью:
M-w
( без префикса )
Приклеивание:
- Я хотел бы иметь возможность набирать
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
При всем этом, как я могу скопировать выделение из режима копирования в буфер обмена?
run-shell
вместоrun
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Обратите внимание, что в Tmux 2.4 (после этой фиксации ) синтаксис привязки изменился. Я перефразирую этот комментарий Github, чтобы кратко описать изменения:
-t
на-T
vi-<name>
на<name>-mode-vi
send-keys -X
Я имел:
который мне нужно было изменить на:
Из журнала изменений :
источник
Это
-temacs-copy
не опечатка. Начальная черта означает, что это опцияbind-keys
команды (вместе с аргументом для опции). Это эквивалентно-t emacs-copy
, если вам это нравится больше.В режиме копирования используется другой набор привязок и команд 1, чем в «обычном режиме».
copy-pipe
Команда доступна только в альтернативных «режиме» привязки таблиц. Когдаmode-keys
естьemacs
, режим копирования будет использоватьemacs-copy
таблицу, поэтому вам нужно привязать Mw кcopy-pipe
этой таблице.Будьте осторожны, делая слишком много привязок «без префиксов». Они затруднят ввод этих связанных ключей в программу, выполняющуюся внутри tmux (например, когда вы хотите ввести Cy для экземпляра tma-режима Emacs, работающего внутри tmux ). Вы всегда можете (префикс) связать какой-то ключ, который делает
send-keys C-y
, но это может сделать его более громоздким для ввода, если вам это нужно достаточно часто.1 Доступны только команды перемещения и редактирования. За исключением того
copy-pipe
, что эти команды не принимают никаких аргументов (это означает, что на странице руководства написано «Одна команда принимает аргумент»; «in», вероятно, является опечаткой или ошибкой редактирования).источник
Хотя другие ответы могут помочь, вот как я делаю то же самое:
источник