Ame*_*ina 18 terminal tmux clipboard
我运行的是最新版本的TMUX的(从git仓库)和XCLIP(0.12),并且我希望能够使用类Emacs键盘绑定在文本内到处移动copy-mode
,复制(M-w
)选择到剪贴板,将 ( C-y
) 从/到复制缓冲区粘贴到剪贴板。
到目前为止,我已经能够粘贴文本C-y
,并copy-mode
使用类似 Emacs 的键盘绑定移动,但我仍然无法从 tmux 缓冲区复制文本(例如在copy-mode
)
我发现这个线程用于将整个缓冲区复制到剪贴板(反之亦然),但它似乎对我不起作用。
此外,在tmux-users
邮件列表中,我被告知最近版本的 tmux(仅在 git 存储库中)提供了一个名为copy-pipe
. 手册页说明了有关此命令的以下内容:
一个命令接受一个参数,copy-pipe,它复制选择并将其通过管道传递给命令。例如,以下将绑定 'C-q' 以将选择复制到 /tmp 以及粘贴缓冲区:
Run Code Online (Sandbox Code Playgroud)bind-key -temacs-copy C-q copy-pipe "cat >/tmp/out"
看起来copy-pipe
部分地用于将选择通过管道传递给另一个命令。此描述和命令中似乎也有一些拼写错误(什么是temacs-copy
?)
无论哪种方式,我想做的是:
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"
Run Code Online (Sandbox Code Playgroud)
但是,粘贴效果很好:
bind-key -n C-y run "xclip -o | tmux load-buffer - ; tmux paste-buffer"
Run Code Online (Sandbox Code Playgroud)
奇怪的是,我知道xclip -i -selection clipboard
上面复制命令的“ ”部分运行良好,因为我可以在命令行中将内容复制到剪贴板,例如:
echo "Hello world. How are you?" | xclip -i -selection clipboard
Run Code Online (Sandbox Code Playgroud)
有了这一切,如何将选择从复制模式复制到剪贴板?
Jos*_*osh 22
使用以下 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"
Run Code Online (Sandbox Code Playgroud)
prefix+[
进入复制模式M-w
将该部分复制到系统剪贴板中C-y
将其粘贴到 tmux 中,C-v
将其粘贴到其他常规应用程序(如 Web 浏览器)中。sta*_*fry 10
请注意,使用 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'
Run Code Online (Sandbox Code Playgroud)
我需要更改为:
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'
Run Code Online (Sandbox Code Playgroud)
从变更日志:
关键表发生了重大变化。模式键表不再与主键表分开。所有模式密钥表都已被删除,以及用于 bind-key 和 unbind-key 的 -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
Run Code Online (Sandbox Code Playgroud)
变成:
bind -Tcopy-mode C-Up send -X scroll-up
bind -Tcopy-mode WheelUpPane send -N5 -X scroll-up
Run Code Online (Sandbox Code Playgroud)
这些更改允许使用完整的命令解析器(包括命令序列)和命令集 - 例如,带有编辑和历史记录的普通命令提示符现在用于搜索、跳转等,而不是自定义的。默认的 Cr 绑定现在是:
bind -Tcopy-mode C-r command-prompt -p'search up' "send -X search-backward-incremental '%%'"
Run Code Online (Sandbox Code Playgroud)
还有一些新命令可用于 send -X,例如 copy-pipe-and-cancel。
虽然其他答案可能会有所帮助,但我也是这样做的: