在 tmux 和剪貼板之間複製/粘貼文本選擇
我正在執行最新版本的 tmux(來自 git 儲存庫)和 xclip(0.12),我希望能夠使用類似 Emacs 的鍵盤綁定來移動文本
copy-mode
,複製(M-w
)選擇到剪貼板,並且將(C-y
) 從/到複製緩衝區粘貼到剪貼板。到目前為止,我已經能夠使用 粘貼文本
C-y
,並copy-mode
使用類似 Emacs 的鍵盤綁定移動,但我仍然無法從 tmux 緩衝區復製文本(例如在 中copy-mode
)我發現這個執行緒用於將整個緩衝區復製到剪貼板(反之亦然),但它似乎對我不起作用。
此外,在
tmux-users
郵件列表中,我被告知最近版本的 tmux(僅在 git repo 中)提供了一個名為copy-pipe
. 手冊頁對此命令進行了以下說明:一個命令接受一個參數,copy-pipe,它複製選擇並將其通過管道傳遞給命令。例如,以下將綁定“C-q”以將選擇複製到 /tmp 以及粘貼緩衝區:
bind-key -temacs-copy C-q copy-pipe "cat >/tmp/out"
它看起來像是
copy-pipe
部分用於將選擇傳遞給另一個命令。此描述和命令中似乎也有一些錯別字(什麼是temacs-copy
?)無論哪種方式,我想做的是:
複製:
- 進入複製模式
C-f
使用 Emacs 導航命令(即,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
有了這一切,我如何將選擇從複製模式複製到剪貼板?
在新版本的 tmux (1.8+) 中
tmux.conf
使用以下內容 :copy-pipe
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"
prefix+[
進入複製模式- 用滑鼠選擇內容(按住)
M-w
將該部分複製到系統剪貼板中C-y
將其粘貼到 tmux 中,C-v
以將其粘貼到其他正常應用程序(如 Web 瀏覽器)中。
請注意,使用 Tmux 2.4(自本次送出以來),綁定語法已更改。我轉述這個 Github 評論來簡要總結變化:
- 替換
-t
為-T
- 替換
vi-<name>
為<name>-mode-vi
- 在命令前加上
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-choose 和 vi-choose 表已被命令提示符和選擇模式中的固定鍵綁定替換。模式鍵和狀態鍵選項保留。
emacs-copy 和 vi-copy 表已被 copy-mode 和 copy-mode-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 還提供了一些新的命令,例如 copy-pipe-and-cancel。