Sao chép / dán các lựa chọn văn bản giữa tmux và clipboard


15

Tôi đang chạy phiên bản mới nhất của tmux (từ kho git) và xclip (0.12) và tôi muốn có thể sử dụng các ràng buộc bàn phím giống như Emacs để di chuyển xung quanh văn bản trong các lựa chọn copy-modesao chép ( M-w) vào bảng tạm và dán ( C-y) từ / vào bộ đệm sao chép vào bảng tạm.

Cho đến nay tôi đã có thể dán văn bản C-yvà di chuyển xung quanh copy-modebằng các ràng buộc bàn phím giống như Emacs, nhưng tôi vẫn không thể sao chép văn bản từ bộ đệm tmux (ví dụ: trong copy-mode)

Tôi tìm thấy chủ đề này để sao chép toàn bộ bộ đệm vào bảng tạm (và viceversa), nhưng dường như nó không hoạt động với tôi.

Ngoài ra, trong tmux-usersdanh sách thư tôi đã nói rằng các phiên bản gần đây của tmux (chỉ trong git repo) cung cấp một lệnh được gọi copy-pipe. Trang người đàn ông nói như sau về lệnh này:

Một lệnh trong chấp nhận một đối số, copy-pipe, sao chép vùng chọn và đặt nó vào một lệnh. Ví dụ: phần sau đây sẽ liên kết 'C-q' để sao chép vùng chọn vào / tmp cũng như bộ đệm dán:

       bind-key -temacs-copy C-q copy-pipe "cat >/tmp/out"

Có vẻ như copy-pipenó được sử dụng một phần để chuyển sự lựa chọn sang một lệnh khác. Dường như cũng có một số lỗi chính tả trong mô tả này và trong lệnh (là temacs-copygì?)

Dù bằng cách nào, điều tôi muốn làm là:

Đang sao chép:

  1. Vào chế độ sao chép
  2. Di chuyển đến văn bản tôi muốn sao chép sử dụng lệnh chuyển hướng Emacs (tức là C-f, C-b, M-f, M-b, C-a, C-evv để di chuyển con trỏ). Không có tiền tố cho bất kỳ trong số này.
  3. Sao chép văn bản đã chọn vào bảng tạm với: M-w(cũng không có tiền tố )

Dán:

  1. Tôi muốn có thể nhập C-y( mà không phải nhập copy-mode) để dán văn bản trong thiết bị đầu cuối (cũng không có tiền tố )

Tôi đã thử cách sau để sao chép mà không gặp may:

bind-key -n M-w run "tmux save-buffer - | xclip -i -selection clipboard" 

Tuy nhiên, dán hoạt động tuyệt vời:

bind-key -n C-y run "xclip -o | tmux load-buffer - ; tmux paste-buffer"

Điều kỳ lạ là tôi biết rằng phần " xclip -i -selection clipboard" của lệnh sao chép ở trên hoạt động tốt, vì tôi có thể sao chép mọi thứ vào bảng tạm trong dòng lệnh, ví dụ:

echo "Hello world. How are you?" | xclip -i -selection clipboard

Với tất cả điều này, làm thế nào tôi có thể sao chép một lựa chọn từ chế độ sao chép vào bảng tạm?

Câu trả lời:


19

Sử dụng như sau tmux.confvới copy-pipecác phiên bản mới của 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"
  1. prefix+[ vào chế độ sao chép
  2. chọn nội dung bằng chuột (giữ)
  3. M-w để sao chép phần đó vào clipboard hệ thống
  4. C-ydán nó bên trong tmux, C-vđể dán nó vào ứng dụng thông thường khác như trình duyệt web.

Câu trả lời này xứng đáng nhận được nhiều sự ủng hộ hơn, đó là cách tốt nhất cho các thiết lập dựa trên Linux.
Louis Kottmann

Trong tmux 2.0, nó run-shellthay vìrun
sắp xếp

@LouisKottmann: tại sao chỉ dựa trên Linux?
schaiba

Tôi không thể nhận xét về các hệ thống khác, nhưng tôi tin rằng mac sử dụng bpaste thay vì xclip thường
Louis Kottmann

Trong tmux 2.8 tôi đã phải đổi chúng thành bind -Tcopy-mode M-w send-keys -X copy-pipe "xclip -i -sel p -f | xclip -i -sel c ". bind-key -n C-y run-shell "xclip -o | tmux load-buffer - ; tmux paste-buffer" theo cam kết này được đề xuất bởi starfry
azzamsa

5

Xin lưu ý rằng, với Tmux 2.4 (vì cam kết này ), cú pháp ràng buộc đã thay đổi. Tôi diễn giải bình luận Github này để tóm tắt sự thay đổi ngắn gọn:

  1. thay thế -tbằng-T
  2. thay thế vi-<name>bằng<name>-mode-vi
  3. tiền tố lệnh với send-keys -X

Tôi đã có:

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'

mà tôi cần thay đổi thành:

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ừ thay đổi :

Các bảng chính đã trải qua những thay đổi lớn. Các bảng khóa chế độ không còn tách biệt với các bảng chính. Tất cả các bảng phím chế độ đã bị xóa, cùng với cờ -t thành khóa liên kết và khóa không khóa.

Các bảng emacs-edit, vi-edit, emacs-select và vi-select đã được thay thế bằng các ràng buộc phím cố định trong dấu nhắc lệnh và chọn chế độ. Các tùy chọn phím chế độ và phím trạng thái vẫn còn.

Các bảng emacs-copy và vi-copy đã được thay thế bằng các bảng copy-mode và copy-mode-vi. Các lệnh được gửi bằng cờ -X và -N để gửi khóa. Vì vậy, sau đây:

bind -temacs-copy C-Up scroll-up
bind -temacs-copy -R5 WheelUpPane scroll-up

Trở thành:

bind -Tcopy-mode C-Up send -X scroll-up
bind -Tcopy-mode WheelUpPane send -N5 -X scroll-up

Những thay đổi này cho phép trình phân tích cú pháp lệnh đầy đủ (bao gồm các chuỗi lệnh) và tập lệnh được sử dụng - ví dụ, dấu nhắc lệnh thông thường với chỉnh sửa và lịch sử hiện được sử dụng để tìm kiếm, nhảy, v.v. thay vì tùy chỉnh. Liên kết Cr mặc định là bây giờ:

bind -Tcopy-mode C-r command-prompt -p'search up' "send -X search-backward-incremental '%%'"

Ngoài ra còn có một số lệnh mới có sẵn với send -X, chẳng hạn như sao chép-ống-và-hủy.


2

Đây -temacs-copykhông phải là một lỗi đánh máy. Dấu gạch đầu dòng có nghĩa là đây là một tùy chọn cho bind-keyslệnh (cùng với một đối số cho tùy chọn). Nó tương đương với -t emacs-copy, nếu bạn thích điều đó tốt hơn.

Chế độ sao chép sử dụng một tập hợp các ràng buộc và lệnh 1 khác với chế độ bình thường của chế độ ăn chay. Các copy-pipelệnh chỉ có sẵn trong “chế độ” cam kết ràng buộc bảng thay thế. Khi mode-keysemacs, sao chép chế độ sẽ sử dụng emacs-copybảng, vì vậy bạn cần phải ràng buộc Mw để copy-pipetrong bảng đó.

bind-key -temacs-copy M-w copy-pipe "xclip -i -selection clipboard"

Hãy cẩn thận thực hiện quá nhiều ràng buộc không có tiền tố. Chúng sẽ gây khó khăn khi nhập các khóa bị ràng buộc đó vào một chương trình chạy bên trong tmux (ví dụ: khi bạn muốn nhập Cy vào một phiên bản tty-mode của Emacs chạy bên trong tmux ). Bạn luôn có thể (tiền tố) liên kết một số khóa send-keys C-y, nhưng điều đó có thể khiến nó trở nên cồng kềnh hơn nếu bạn cần nó đủ thường xuyên.


1 Chỉ có các lệnh di chuyển và chỉnh sửa có sẵn. Ngoại trừ copy-pipe, các lệnh này không có bất kỳ đối số nào (đây là ý nghĩa của trang man với nó nói lệnh One One trong việc chấp nhận một đối số, một trong các trò chơi có thể là lỗi chính tả hoặc lỗi chỉnh sửa).


2

Trong khi các câu trả lời khác có thể giúp ích, đây là cách tôi làm tương tự:

  • Shift + chọn văn bản bằng con trỏ.
  • Ctrl + Shift + C để sao chép văn bản vào clipboard.

Đây là một câu trả lời công bằng nhưng các vấn đề bắt đầu khi bạn có hai hoặc nhiều tấm được sắp xếp theo chiều ngang.
cjauvin

Tôi hiểu rồi, hãy cho tôi biết nếu bạn tìm thấy thứ gì đó hữu ích cho việc đó.
Rishabh Agrahari
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.