將選擇複製到 tmux 中的剪貼板
如果我在 macOS 上的 iTerm2 中用滑鼠在 tmux 中選擇文本,我會將所選文本複製到我的剪貼板中。我不必點擊任何額外的按鈕 - 只需選擇所需的文本即可。
我已經在 macOS 上的 terminal.app 中測試了 tmux,但它在那裡不起作用 - 我必須點擊
y
才能將選擇複製到我的剪貼板。我認為有一個滑鼠綁定(
MouseOnSelection
類似於MouseDown1Pane
),但我在網路上找不到任何有用的東西,並且man tmux
.我想知道是否有辦法在 Ubuntu 16.10 上具有類似的行為 - 最好是在 Gnome 終端中。
Tmux 2.4+ 與 vi 複製模式綁定和xclip:
set-option -g mouse on set-option -s set-clipboard off bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i"
對於較舊的 tmux 版本、emacs 複製模式綁定(預設)或非 X 平台(即沒有 xclip),請參閱下面的說明。
說明:首先我們需要啟用滑鼠選項,以便 tmux 將擷取滑鼠並讓我們綁定滑鼠事件:
set-option -g mouse on
Gnome-terminal 不支持使用 xterm 轉義序列設置剪貼板,因此我們應該確保該
set-clipboard
選項處於關閉狀態:set-option -s set-clipboard off
預設情況下,iTerm2 上可能支持並啟用此選項(請參閱
set-clipboard
tmux 手冊),這將解釋那裡的行為。然後,我們可以將複製模式
MouseDragEnd1Pane
“鍵”(即在窗格中點擊並拖動後釋放第一個滑鼠按鈕時)綁定到一個 tmux 命令,該命令採用目前的複制模式選擇(由 的預設綁定進行MouseDrag1Pane
)並管道它到 shell 命令。這個 tmux 命令copy-pipe
在 tmux 2.4 之前,並且已經更改為send-keys -X copy-pipe[-and-cancel]
. 至於 shell 命令,我們只需要一些東西來將系統剪貼板的內容設置為通過管道傳送給它的任何內容;xclip 用於在以下命令中執行此操作。"xclip -selection clipboard -i"
以下在非 X 平台上的一些等效替換是"wl-copy"
(Wayland)、"pbcopy"
(macOS)、"clip.exe"
(Windows、WSL) 和"cat /dev/clipboard"
(Cygwin、MinGW)。Tmux 2.4+:
# For vi copy mode bindings bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i" # For emacs copy mode bindings bind-key -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i"
Tmux 2.2 到 2.4:
# For vi copy mode bindings bind-key -t vi-copy MouseDragEnd1Pane copy-pipe "xclip -selection clipboard -i" # For emacs copy mode bindings bind-key -t emacs-copy MouseDragEnd1Pane copy-pipe "xclip -selection clipboard -i"
在 tmux 2.2 之前:
滑鼠拖動後複製支持最初是在 Tmux 1.3 中通過將新
mode-mouse
選項設置為on
. Tmux 2.1 將滑鼠支持更改為熟悉的滑鼠鍵綁定,但沒有DragEnd
綁定,這是在 2.2 中引入的。因此,在 2.2 之前,我相信在滑鼠拖動時設置系統剪貼板的唯一方法是通過內置使用 xterm 轉義序列(set-clipboard
選項)。這意味著必須至少更新到 tmux 2.2 才能獲得不支持的終端的拖放行為set-clipboard
,例如 GNOME 終端。