我正在运行 tmux 1.6,并尝试将其配置为使用 vi 样式的键绑定以及在交互模式下复制时使用系统剪贴板:
set-window-option -g mode-keys vi
bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' "copy-selection && run \"tmux save-buffer | xclip -selection clipboard\""
Run Code Online (Sandbox Code Playgroud)
简而言之,我希望能够执行C+[然后使用v开始选择要复制的文本,然后在y推送时,将选择复制到 tmux 选择,然后使用xclip
.
不幸的是,当我尝试这样做时,我看到以下内容:
.tmux.conf: 14: unknown command: copy-selection && run "tmux save-buffer | xclip -selection clipboard"
Run Code Online (Sandbox Code Playgroud)
有没有办法在 tmux 配置中做到这一点?
Ben*_*vis 121
这也在这里回答,但我花了一段时间才理解如何使用它,所以我会为其他任何感到困惑的人解释。
这基本上是您要进行的设置:
(对于 tmux版本 <2.5)
bind -t vi-copy y copy-pipe 'xclip -in -selection clipboard'
Run Code Online (Sandbox Code Playgroud)
(对于 tmux版本 >=2.5)
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard'
Run Code Online (Sandbox Code Playgroud)
然后点击Ctrl+b
[
进入复制模式。然后Space
按任意 vi 移动键进行选择。然后,而不是Enter
hit , hity
并且选择将被复制到剪贴板。
注意:这假设您使用 tmux 的默认绑定与 vi 键。
Tmux 针对不同的模式有不同的键绑定表。因此,在复制模式下bind-key -t vi-copy y
设置y
密钥的操作。最初,我很困惑,因为我习惯Enter
了选择后击球。Enter
实际上只是copy-selection
命令的默认键绑定(在复制模式下)。该copy-pipe
命令允许我们绑定一个新键以将选择通过管道传递给一个命令,在本例中为xclip
.
您可以通过运行查看复制模式的所有键绑定list-keys -t vi-copy
。
小智 15
本戴维斯回答的更新版本
与 tmux 2.4 兼容
bind -T copy-mode-vi y send -X copy-pipe "xclip -selection c"
Run Code Online (Sandbox Code Playgroud)
小智 7
查看 tmux 的 tmux-yank 插件。 https://github.com/tmux-plugins/tmux-yank
它提供了一种从 tmux 复制/粘贴到系统剪贴板的自动化方法。它适用于 OSX/Linux/Cygwin 系统。
小智 7
我在这里和那里尝试了很多东西,但这就是我在我的~/.tmux.conf
文件中使用的方法我使用的是 Ubuntu 20 LTS 和 tmux3.0a
#for copying to sys clipboard
bind -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "xclip -i -f -selection primary | xclip -i -selection clipboard"
bind -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -i -f -selection primary | xclip -i -selection clipboard"
bind -T copy-mode-vi C-j send-keys -X copy-pipe-and-cancel "xclip -i -f -selection primary | xclip -i -selection clipboard"
#general other stuff
set -g default-terminal "xterm-256color"
set -g mouse on
set-window-option -g mode-keys vi
Run Code Online (Sandbox Code Playgroud)
您遇到了几个技术问题:
“特殊模式”绑定(例如vi-copy
)……
run-shell
akarun
不可用),以及;
——shell 的&&
命令分隔符不可用来分隔)。tmux 1.8 有copy-pipe
,这可能会有所帮助:
bind-key -t vi-copy y copy-pipe 'xclip -selection clipboard >/dev/null'
Run Code Online (Sandbox Code Playgroud)
(常见问题解答中列出了这样的绑定。)
xclip
在 Wayland 上,最好使用wl-clipboard 包的wl-copy
/来代替。wl-paste
这对我有用:
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"
Run Code Online (Sandbox Code Playgroud)
更新:由于我在 X11、Wayland 和 Cygwin 上使用相同的tmux.conf,所以我最终得到了以下配置:
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'"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
80173 次 |
最近记录: |