Sử dụng bảng tạm hệ thống trong chế độ vi-copy trong tmux


51

Tôi đang chạy tmux 1.6 và tôi đang cố gắng định cấu hình nó để sử dụng các phím bấm kiểu vi cũng như sử dụng bảng tạm hệ thống khi sao chép ở chế độ tương tác:

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\""

Nói một cách đơn giản, tôi muốn có thể thực hiện C+ [và sau đó sử dụng vđể bắt đầu chọn văn bản để sao chép, sau đó khi yđược đẩy, sao chép lựa chọn vào lựa chọn tmux và sau đó xuất nó vào bảng tạm hệ thống bằng cách sử dụng xclip.

Thật không may, khi tôi cố gắng làm điều này, tôi thấy như sau:

.tmux.conf: 14: unknown command: copy-selection && run "tmux save-buffer | xclip -selection clipboard"

Có cách nào để làm điều này trong cấu hình tmux không?

Câu trả lời:


87

Điều này cũng đã được trả lời ở đây , nhưng tôi phải mất một thời gian để hiểu cách sử dụng nó, vì vậy tôi sẽ giải thích cho bất kỳ ai khác bị nhầm lẫn.

Về cơ bản, đây là cài đặt bạn sẽ thực hiện:

(đối với phiên bản tmux <2.5 )

bind -t vi-copy y copy-pipe 'xclip -in -selection clipboard'

(đối với phiên bản tmux > = 2.5 )

bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard'

Sau đó nhấn Ctrl+b [để vào chế độ sao chép. Sau đó nhấn Spacetheo bất kỳ phím di chuyển vi nào để tạo vùng chọn. Sau đó, thay vì nhấn Enter, nhấn yvà lựa chọn sẽ được sao chép vào bảng tạm.

Lưu ý: điều này giả sử bạn đang sử dụng các ràng buộc mặc định của tmux với các phím vi.

Tmux có các bảng ràng buộc khóa khác nhau cho các chế độ khác nhau. Vì vậy, bind-key -t vi-copy yđặt hành động cho ykhóa trong chế độ sao chép. Ban đầu, tôi đã bối rối vì tôi đã quen với việc đánh Entersau khi lựa chọn. Enterthực sự chỉ là ràng buộc khóa mặc định cho copy-selectionlệnh (khi ở chế độ sao chép). Các copy-pipelệnh cho phép chúng tôi để ràng buộc một chìa khóa mới để ống sự lựa chọn cho một lệnh, mà trong trường hợp này là xclip.

Bạn có thể thấy tất cả các ràng buộc chính cho chế độ sao chép bằng cách chạy list-keys -t vi-copy.


Cảm ơn rất nhiều, tôi đã phải tải xuống và biên dịch tmux 1.9a, nhưng nó không quá khó và bây giờ nó chỉ hoạt động ™!
Naftuli Kay

3
Nếu nó không hoạt động, chỉ cần kiểm tra hai lần xclipthực sự được cài đặt trong hệ thống của bạn (nó không được cài đặt theo mặc định trên Ubuntu, bạn cần phải sudo apt-get install xcliplấy nó)
ecerulm

3
Đối với OSX, thay thế xclipbằng pbcopy. Đối với Cygwin trên Windows, thay thế nó bằng putclip(từ cygutils-extragói).
Ngáy ngủ

5
Các ràng buộc sau từ mục blog này cũng hoạt động rất tốt trên Tmux 2.6 và không có nhược điểm là đưa các ký tự dường như ngẫu nhiên lên màn hình khi sao chép:bind -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "xclip -i -f -selection primary | xclip -i -selection clipboard"
Matthias Braun

1
Điều này không hiệu quả với tôi cho đến khi tôi xóa dòng này khỏi .tmux.conf : set -g mouse on. Điều này được cho là để bật "chế độ chuột" nhưng ngay cả sau khi gỡ bỏ mọi thứ liên quan đến chuột của tôi vẫn hoạt động tốt (bánh xe cuộn hoạt động, lựa chọn chuột hoạt động) ...
ndemou

11

Phiên bản cập nhật cho câu trả lời của Ben Davis

tương thích với tmux 2.4

bind -T copy-mode-vi y send -X copy-pipe "xclip -selection c"

4
Tôi thấy nó hoạt động tốt hơn một chút với copy-pipe-and-cancelhơn copy-pipe. Đây là trên tmux 2.5
wreckgar23

6

Bạn đang gặp phải một số vấn đề về kỹ thuật:
Các chế độ đặc biệt của chế độ gắn kết (ví dụ vi-copy)

  1. sử dụng một nhóm lệnh khác (tức là run-shellaka runkhông có sẵn) và
  2. không có khả năng để ràng buộc nhiều lệnh (mà thường có thể được ngăn cách bởi ;-the của vỏ &&tách lệnh không có sẵn).

tmux 1.8 có copy-pipe, có thể giúp:

bind-key -t vi-copy y copy-pipe 'xclip -selection clipboard >/dev/null'

(Có một ràng buộc như thế này được liệt kê trong Câu hỏi thường gặp .)


1
Tôi có tmux 1.8 và điều này dường như không hoạt động. (chỉnh sửa) Ugh, tôi ghét các đầu vào textarea gửi trên Enter. Dù sao, tôi đã thêm ràng buộc khóa này, nhưng khi tôi thực hiện <tiền tố> -y và nhấn [dấu cách], nội dung sẽ không được sao chép vào bảng tạm.
Ben Davis

Chỉ cần tìm ra nó. Tôi không hiểu bảng keybinding "vi-copy" hoạt động như thế nào.
Ben Davis


2

Đối với macOS, bạn có thể thêm dòng này vào .tmux.conf

bind -t vi-copy y copy-pipe 'pbcopy'


người dùng macOS, với tmux> = 2,5:bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'pbcopy'
Đại

1

Đây là những gì tôi đã làm việc với tmux 2.2 và đã cài đặt xclip. Để sao chép kiểu Vim, hãy thêm đoạn sau vào .tmux.conf

bind Escape copy-mode
bind -t vi-copy 'v' begin-selection
bind -t vi-copy 'y' copy-selection
# Vim style copy to clipboard
bind-key -t vi-copy y copy-pipe "xclip -selection c > /dev/null"
bind-key p run "xclip -o -sel clip | tmux load-buffer - ; tmux paste-buffer"

Ở đây khi ở chế độ sao chép, PREFIX v bắt đầu lựa chọn và PREFIX y bản sao vào bảng tạm. PREFIX p có thể được sử dụng để dán trong thiết bị đầu cuối.

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.