bản sao tmux xclip không còn hoạt động


8

Trên mu Ubuntu 12.04 thiết lập các lệnh sao chép và dán clipboard tmux của tôi được thiết lập như sau:

set -g prefix M-a
unbind C-b
bind C-c run "tmux save-buffer - | xclip -i -sel clipboard"
bind C-v run "tmux set-buffer \"$(xclip -o -sel clipboard)\"; tmux paste-buffer"

Điều này hoạt động rất tốt trong thời gian dài nhất cho đến một tháng trước, khi tôi nghi ngờ một số thay đổi cấu hình hoặc thay đổi gói đã được thực hiện đã phá vỡ điều trên. Trong thiết bị đầu cuối Gnome, dán vẫn hoạt động tốt với cả prefix+ ctrl-vctrl-shift-v.

Tuy nhiên, xcliplệnh sao chép không còn hoạt động cho dù tôi có làm gì và tôi đã thử loại bỏ ràng buộc tiền tố tùy chỉnh ở trên, sử dụng -selectthay vì -sel, không sử dụng, clipboardv.v ... Đây là một công cụ chặn hiển thị cho người dùng GVim như tôi, vì tôi không ' thậm chí còn có cách giải quyết thiết bị đầu cuối Gnome ctrl-shift-cvới tmux tiếp quản vỏ. Tôi chuyển sang chế độ sao chép, chọn văn bản có dấu space+ movementvà khi tôi thực thi prefix+ ctrl-choàn toàn không có gì xảy ra. Trước khi điều này bị phá vỡ, tmux sẽ hiển thị thông báo xác nhận trong phần thông báo ở phía dưới.

Có ai có đề xuất như cách người ta có thể gỡ lỗi này không? Đây là một năng suất khá lớn. Bây giờ tôi có thể sử dụng thủ thuật giải quyết tập tin tạm thời , nhưng thật tuyệt khi biết điều gì đã xảy ra xclip.


Xclip có thực sự có sẵn? Đầu ra của là type xclipgì?
Chris Xuống

Đầu ra là: "xclip là / usr / bin / xclip". Như tôi đã đề cập, dán qua xclip chỉ hoạt động tốt vì bất kỳ lý do gì.
Alexandr Kurilin

1
Bạn có cùng một vấn đề với xsel -b?
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles, xsel -i -bdường như không làm nên chuyện!
Alexandr Kurilin

Heh. Tôi không biết tại sao nó hoạt động, tôi nghĩ xsel -bxclip -selection clipboardsẽ làm điều tương tự!
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:


9

Các xseltiện ích tương tự xclip, nhưng thực hiện một chút khác nhau. Thông thường tôi sẽ mong họ cư xử theo cùng một cách, nhưng họ không thực hiện chính xác cùng một cuộc gọi thư viện X, vì vậy có thể trong một số trường hợp góc xselsẽ hoạt động nhưng không xclip, hoặc ngược lại. Thử:

bind C-c run "tmux save-buffer - | xsel -ib"
bind C-v run "tmux set-buffer \"$(xsel -ob)\"; tmux paste-buffer"

Kết quả tương tự - không hoạt động đối với tôi - hoạt động như một lệnh độc lập nhưng trả về chuỗi rỗng từ liên kết đó; Ubuntu 14.04, xsel 1.2.0, tmux 1.8-5
Vitaly Zdanevich

6

Thêm -bvào run-shell(hoặc run) lệnh đã khắc phục sự cố. Với -blệnh shell được chạy trong nền.

bind C-c run-shell -b "tmux save-buffer - | xclip -i -sel clipboard"


2

Mặc dù tôi không thể tái tạo nó nữa nhưng đây là câu trả lời kỹ thuật những gì có thể xảy ra trong trường hợp của bạn.

Trước tiên, bạn cần hiểu cách hoạt động của bảng tạm X11. Bạn có thể đọc bài luận của jwz về điều này: http://www.jwz.org/doc/x-cut-and-paste.html

Nói tóm lại, ứng dụng chứa nội dung của clipboard cần chạy cho đến khi ứng dụng khác khẳng định quyền sở hữu. Vì vậy, khi bạn chạy xclip -i <<< testthì bạn có thể thấy xclip chạy trong nền cho đến khi bạn thực hiện lựa chọn khác:

$ xclip -i <<< test
$ ps
  PID TTY          TIME CMD
10166 pts/8    00:00:00 xclip
10171 pts/8    00:00:00 ps
19345 pts/8    00:00:00 bash

Bây giờ mọi thứ đều ổn nhưng khi bạn thoát khỏi shell này thì tất cả các quy trình thuộc phiên này sẽ bị hủy theo mặc định bằng cách gửi cho chúng tín hiệu HUP. Điều này có nghĩa là xclip sẽ bị giết và bạn sẽ không thể truy cập nội dung trong bảng tạm của mình nữa.

Vì vậy, cách giải quyết được đề xuất (trong trường hợp bạn không có xsel) là bỏ qua tín hiệu HUP bằng cách sử dụng liên kết sau:

bind C-c run "tmux save-buffer - | nohup >/dev/null 2>/dev/null xclip -i -sel clipboard"

xselkhông bị ảnh hưởng bởi vấn đề này bởi vì điều đầu tiên nó xảy ra sau ngã ba () là tự tách rời khỏi thiết bị đầu cuối điều khiển để nó không nhận được tín hiệu HUP khi vỏ của nó thoát ra (thậm chí bạn sẽ không nhìn thấy nó trong ps trên đầu ra nhưng chỉ khi bạn làm a ps -e | grep xsel).


1

Tôi đang gặp một vấn đề tương tự và tập tin tạm thời sẽ không giúp ích trong trường hợp cụ thể này, tôi sợ. Điều này là do xclipdường như hành xử khác nhau khi được sinh ra bởi tmux so với khi được chạy "tương tác" và chờ đợi một ứng dụng khác có quyền sở hữu khu vực clipboard. Hãy thử sử dụng xclip -l 1để làm cho nó thoát ngay lập tức (xem trang hướng dẫn để biết chi tiết).


Dường như không thể có được công việc đó. Đây có phải là cái mà ràng buộc sẽ trông giống như: bind Cc chạy "tmux save-buffer - | xclip -l 1 -i -sel clipboard"?
Alexandr Kurilin

Có lẽ bạn có thể đăng những gì giải pháp làm việc cho bạn? Điều đó cũng khá hữu ích!
Alexandr Kurilin

Tôi đang sử dụng bind C-y run-shell "tmux save-buffer - | xclip -l 1 -i".
peterph

Vâng, vẫn không có gì đáng tiếc. Tmux không báo cáo bất cứ điều gì, cũng không xclip.
Alexandr Kurilin

Đối với tôi nó cũng không báo cáo bất cứ điều gì, nhưng nó hoạt động. Kiểm tra những gì xclipđang làm khi bạn cố gắng sao chép bộ đệm. Nếu nó vẫn treo ở đó chờ đợi một cái gì đó, việc giết nó có giúp ích gì không? Ngoài ra, bạn phải thoát khỏi chế độ lựa chọn bằng cách nhấn Enter (và do đó lưu nó vào bộ đệm) trước khi bạn cố gắng sao chép bộ đệm vào bảng tạm X.
peterph

1

Đây là một câu hỏi cũ, nhưng tôi nghi ngờ tôi có giải pháp, được lấy từ trang Tmux của wiki wiki :

xclip cũng có thể được sử dụng cho mục đích đó, không giống như xsel, nó hoạt động tốt hơn trong việc in dòng bit thô không phù hợp với ngôn ngữ hiện tại. Tuy nhiên, việc sử dụng xsel thay vì xclip sẽ gọn gàng hơn, bởi vì xclip không đóng STDOUT sau khi nó đã đọc từ bộ đệm của tmux. Như vậy, tmux không biết rằng tác vụ sao chép đã hoàn thành và tiếp tục chờ kết thúc của xclip, do đó khiến tmux không phản hồi. Cách giải quyết là chuyển hướng STDOUT của xclip sang / dev / null

Vì vậy, lệnh của bạn sẽ trở thành:

bind C-c run "tmux save-buffer - | xclip -i -sel clipboard >/dev/null"

0

Đây là một cấu hình làm việc tôi sử dụng:

# Yank to copy text with y.
bind-key -t vi-copy y copy-pipe "tmux save-buffer - | xclip -sel clipboard -i"

# Update default binding of `Enter` to also copy with this method.
unbind -t vi-copy Enter
bind-key -t vi-copy Enter copy-pipe "tmux save-buffer - | xclip -sel clipboard -i"

# Toggle rectangular copy mode.
bind-key -t vi-copy 'C-v' rectangle-toggle

# Bind ']' to paste.
bind ] run "tmux set-buffer \"$(xclip -o -sel clipboard)\" && tmux paste-buffer"

# Toggle rectangular copy mode.
bind-key -t vi-copy 'C-v' rectangle-toggle

# http://askubuntu.com/a/507215/413683
set -g set-clipboard off
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.