Используйте системный буфер обмена в режиме vi-копии в tmux

zip -rj $folder $folder

Удалит каталоги при добавлении файлов к архиву. с info-zip.

53
19.05.2014, 22:27
8 ответов
[1172222] Здесь тоже был ответ [1172580] [1172581], но мне потребовалось некоторое время, чтобы понять, как им пользоваться, поэтому я объясню всем, кто был в замешательстве.

В основном это настройка, которую вы собираетесь использовать:

(для tmux [1172913] версий <2.5[1172914])

(для tmux [1172915] версий >=2.5[1172916])

Затем нажмите [1172586]Ctrl+b[1172587] [1172588][[1172589], чтобы войти в режим копирования. Затем нажмите [1172590] пробел[1172591], а затем любые клавиши перемещения vi для выбора. Затем, вместо нажатия [1172592]Enter[1172593], нажмите [1172594]y[1172595] и выбор будет скопирован в буфер обмена.

Примечание: это предполагает, что вы используете стандартную привязку tmux с клавишами vi.

Tmux имеет разные таблицы привязки клавиш для разных режимов. Так, [1172596]bind-key -t vi-copy y[1172597] устанавливает действие для [1172598]y[1172599] ключа в режиме копирования. Изначально я был сбит с толку, потому что после выбора я привык нажимать [1172600]Enter[1172601]. [1172602]Enter[1172603] на самом деле является просто привязкой клавиши по умолчанию для команды [1172604] копирования-выбора [1172605] (в режиме копирования). Копия [1172606] -команда pipe[1172607] позволяет привязать новый ключ для передачи выбора к команде, которой в данном случае является [1172608]xclip[1172609].

Все привязки клавиш для режима копирования можно посмотреть, запустив [1172610]список клавиш -t vi-copy[1172611].[1172237].

92
27.01.2020, 19:33
[1133290] Вы сталкиваетесь с парой технических проблем: [1133653]. В связках "специального режима" (например, [1133654]vi-copy[1133655]) ...

используется другой набор команд (т.е. [1134022]run-shell[1134023] a.k.a. [1134024] run[1134025] недоступен), и

  1. не имеют возможности связывать несколько команд (которые обычно могут быть разделены [1134026];[1134027] - разделитель команд оболочки [1134028]&&[1134029] недоступен).

  2. tmux[1133661] 1.8 имеет [1133662]копировальную трубку [1133663], что могло бы помочь, однако:

(Подобная привязка перечислена в [1133664]FAQ[1133665])[1133297].

6
27.01.2020, 19:33

Посмотрите на плагин tmux-yank для tmux. https://github.com/tmux-plugins/tmux-yank

Он предоставляет автоматизированный способ копирования/вставки из tmux в системный буфер обмена. Он работает в системах OSX/Linux/Cygwin.

6
27.01.2020, 19:33

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

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

2
27.01.2020, 19:33

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

1
27.01.2020, 19:33

Обновленная версия ответа Бена Дэвиса

, совместимая с tmux 2.4

bind -T copy-mode-vi y send -X copy-pipe "xclip -selection c"
15
27.01.2020, 19:33

На Wayland вместо xclipлучше использовать wl-copy/ wl-pasteпакета буфера обмена wl -. Это работает для меня:

set-window-option -g mode-keys vi
bind-key -T copy-mode-vi 'v' send-keys -X begin-selection
bind-key -T copy-mode-vi 'y' send-keys -X copy-pipe-and-cancel "wl-copy"
bind C-p run "wl-paste --no-newline | tmux load-buffer - ; tmux paste-buffer"

обновление :, так как я использую один и тот же tmux.conf на X11, Wayland и Cygwin, я остановился на этой конфигурации:

bind-key -T copy-mode-vi v send -X begin-selection

if-shell -b 'echo $XDG_SESSION_TYPE | grep -q x11' "\
    bind-key -T copy-mode-vi 'y' send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard > /dev/null'; \
    bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard > /dev/null'; \
    bind-key C-p run 'xclip -out -selection clipboard | tmux load-buffer - ; tmux paste-buffer'"

if-shell -b 'echo $XDG_SESSION_TYPE | grep -q wayland' "\
    bind-key -T copy-mode-vi 'y' send-keys -X copy-pipe-and-cancel 'wl-copy'; \
    bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel 'wl-copy'; \
    bind-key C-p run 'wl-paste --no-newline | tmux load-buffer - ; tmux paste-buffer'" "\
    \
    bind-key -T copy-mode-vi 'y' send-keys -X copy-pipe-and-cancel 'cat - >/dev/clipboard'; \
    bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel 'cat - >/dev/clipboard'; \
    bind-key C-p run 'cat /dev/clipboard | tmux load-buffer - ; tmux paste-buffer'"
4
27.01.2020, 19:33

macOS Big Sur (2021 )и Tmux v3.1c:

Я могу засвидетельствовать, что приведенное ниже успешно. То есть после неудачной попытки многих из вышеперечисленных.

# Use vim keybindings in copy mode
setw -g mode-keys vi

# Setup 'v' to begin selection as in Vim
unbind -T copy-mode-vi 'v'
unbind -T copy-mode-vi 'y'
unbind -T copy-mode-vi MouseDragEnd1Pane
unbind -T copy-mode-vi Enter   #this is the default binding for copy (but not to system clipboard)

#(many tried, only this worked)
bind-key -T copy-mode-vi 'v' send-keys -X begin-selection
bind-key -T copy-mode-vi 'y' send-keys -X copy-pipe-and-cancel 'pbcopy'
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel 'pbcopy'
bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel 'pbcopy'
0
16.04.2021, 00:58

Теги

Похожие вопросы