Bắt tmux để sao chép bộ đệm vào clipboard


118

Tôi đang cố gắng tìm ra một cách hay để sao chép những gì tôi có trong bộ đệm tmux vào clipboard của mình. Tôi đã thử một vài thứ khác nhau như

bind-key p select-pane -t 2 \; split-window 'xsel -i -b' \; paste-buffer

điều này khiến tôi khá gần gũi, tất cả những gì tôi phải làm là nhấn control-d sau khi tôi thực hiện tiền tố-p.

Tôi đã cố gắng sửa nó bằng cách làm

bind-key p select-pane -t 2 \; split-window 'xsel -i -b << HERE\; tmux paste-buffer\; echo HERE'

Nhưng điều đó không hiệu quả. Trong thực tế nếu tôi ghép cái này xuống chỉ

bind-key p select-pane -t 2 \; split-window 'xsel -i -b << HERE'

nó không làm gì cả nên tôi giả sử rằng cửa sổ chia không giống như << trong lệnh shell.

Có ý kiến ​​gì không?

Chỉnh sửa: Bạn có thể bỏ qua select-pane -t 2nếu bạn muốn, nó không thực sự quan trọng. Tôi chỉ sử dụng một bố cục cụ thể và khung 2 là cái tôi thích tách khi tôi làm một cái gì đó khác để đi vào các ràng buộc của tôi liên quan đến việc chia tách theo mặc định.


2
Hãy chắc chắn xem câu trả lời dưới đây 2014, gần đây hơn một số câu trả lời khác. Nó khuyến nghị plugin tmux yank hoạt động rất tốt.
độc quyền

Để biết câu trả lời cập nhật với Tmux 2.4 (phát hành tháng 4 năm 2017) và 2.6, hãy xem câu trả lời của tôi
Jason Axelson

Câu trả lời:


26

Ở đây các tài liệu cần dòng mới. Ví dụ: trong tập lệnh shell, bạn có thể viết

cat <<EOF >somefile; echo  done
file contents
EOF

Tôi không nghĩ rằng tmux cho phép bạn đặt các dòng mới ở đó và thậm chí nếu có, đây sẽ không phải là một cách tiếp cận tốt. Điều gì xảy ra nếu bản thân dữ liệu chứa HEREmột mình trên một dòng (ví dụ: vì bạn đang sao chép dữ liệu của mình .tmux.conf)?

Tôi đề nghị viết nội dung bộ đệm vào một tập tin tạm thời. Chưa được kiểm tra:

bind-key p save-buffer ~/.tmux-buffer \; run-shell "xsel -i -b <~/.tmux-buffer && rm ~/.tmux-buffer"

Có một điều kiện cuộc đua nếu bạn sử dụng lệnh này trong hai trường hợp tmux riêng biệt. Tôi không biết làm thế nào để giải quyết điều này.


Cảm ơn hoạt động hoàn hảo, điều kiện cuộc đua không phải là mối quan tâm đối với tôi, tôi chỉ sử dụng 1 phiên.
Quyền hạn kỹ thuật số

Để tránh tình trạng chủng tộc, tôi khuyên bạn nên sử dụng tính mktempnăng có sẵn rộng rãi
Grief

@Grief Ý kiến ​​hay. Trong trường hợp này, sử dụng bộ vi xử lý PID của quy trình tmux cũng sẽ hoạt động tốt và có thể sẽ dễ dàng sắp xếp hơn ( $PPIDtrong một vỏ được khởi chạy bởi tmux). Nhưng làm thế nào để bạn có được tên tệp biến (tuy nhiên nó được xây dựng) vào đối số của save-buffer? Tôi đoán save-buffer - | …giống như trong câu trả lời của Grauwolf , mà hoàn toàn không có một tập tin tạm thời?
Gilles

Bạn đã đúng, lỗi của tôi, điều này sẽ không thể.
Đau buồn

93

Điều này sẽ làm việc:

# move x clipboard into tmux paste buffer
bind C-p run "tmux set-buffer \"$(xclip -o)\"; tmux paste-buffer"
# move tmux copy buffer into x clipboard
bind C-y run "tmux save-buffer - | xclip -i"

1
Nó cũng vậy. Điều đó tốt hơn nhiều so với việc sử dụng một tập tin tạm thời, cảm ơn. Nó thậm chí tự động đối phó với nhiều phiên đồng thời, nhờ các TMUXbiến môi trường.
Gilles

22
Một hướng dẫn tốt hơn cho C-psẽ là: bind C-p run "xclip -o | tmux load-buffer - ; tmux paste-buffer"- không có vấn đề trích dẫn hoặc vấn đề giới hạn dòng lệnh.
docwhat

8
Có tmux có một cái móc để sao chép lựa chọn vào clipboard khi ở trong copy-modekhông?
Ehtesh Choudhury

1
xclip -otùy chọn không hiệu quả với tôi vì vậy tôi đã đổi thànhbind C-c run "tmux save-buffer - | xclip -selection c"\; display-message "Buffer copied to clipboard"
Pawka

6
Mỗi lần tôi thực hiện sao chép theo cách này, tmux sẽ ngừng phản hồi với bất kỳ phím tắt nào. Bất kỳ giải pháp cho điều đó?
skrat

41

Một giải pháp đơn giản hơn cho Mac OS-X

Điều này dựa trên câu trả lời của Alex và sử dụng những thứ không tồn tại vào thời điểm đó.

Nếu bạn đang sử dụng homebrew (và nếu bạn không, tại sao bạn không?) Thì bạn có thể làm điều này:

brew install reattach-to-user-namespace

Sau đó, trong của bạn ~/.tmux.conf:

set-option -g default-command "reattach-to-user-namespace -l zsh" # or bash...
bind C-c run "tmux save-buffer - | reattach-to-user-namespace pbcopy"
bind C-v run "reattach-to-user-namespace pbpaste | tmux load-buffer - && tmux paste-buffer"

Để sao chép bộ đệm từ tmux (bạn nên sao chép một cái gì đó bằng cách sử dụng tmux) vào bảng Mac, hãy sử dụng <tmux-key> Control-c. Bây giờ nó sẽ có sẵn cho Command-vhoặcpbpaste

Để dán một cái gì đó từ bảng Mac, sử dụng <tmux-key> Control-v.


2
Câu trả lời này là tuyệt vời. Tôi đã sử dụng tmux show-buffermà gây ra vấn đề bọc dòng tmux save-buffer -giải quyết nó.
event_jr 18/03/2016

Không những gì -vào cuối tmux save-buffer -làm gì?
hekevintran

Phát ra các save-bufferthiết bị xuất chuẩn. Bạn có thể thay thế -bằng một tên tệp và nó sẽ lưu nó ở đó. Điều này ngăn bạn viết (và phải dọn dẹp) một tập tin.
docwhat

1
Kể từ không gian tên reattach-to-user-OS của OS X 10.10 không còn cần thiết nữa. Hầu như mọi hướng dẫn và tài liệu liên quan đến tmux và OS X đều đề cập đến nó, bởi vì sao chép và dán không dễ dàng có thể một vài năm trước đây. Ngày nay, nó (hầu hết) hoạt động ra khỏi hộp.
Rafael Bugajewski

40

Các copy-pipelệnh được thêm vào như của phiên bản 1.8. Nó sao chép một lựa chọn vào bộ đệm tmux và đưa nó vào một lệnh. Bây giờ không cần ràng buộc tiền tố. Đây là một ví dụ:

bind -t vi-copy y copy-pipe "xclip"

# For OS X users:
bind -t vi-copy y copy-pipe "reattach-to-user-namespace pbcopy"

Bây giờ khi bạn có một số văn bản được chọn copy-mode, ysẽ sao chép văn bản đó vào bộ đệm tmux cũng như bảng tạm của hệ điều hành. Tuy nhiên, nó không hữu ích nếu bạn muốn lấy văn bản từ bảng ghi tạm đến bộ đệm tmux.


1
Hoạt động hoàn hảo và là giải pháp đơn giản nhất của bó.
Naseer

2
Không hoạt động với tôi trong Linux, nhưng cái này thì không: unix.stackexchange.com/a/131074/13601
Sebastian Blask

1
Kể từ OS X 10.10, nó không xuất hiện reattach-to-user-namespace.
Chris

hoạt động trên el capitan
olleh

2
Điều này không còn hoạt động cho Tmux 2.4 được phát hành vào ngày 20 tháng 4 năm 2017. Thay vào đó, bạn cần sử dụng bind-key -T copy-mode-vi y send-keys -X copy-pipe "xclip"và cho OS X:bind-key -T copy-mode-vi y send-keys -X copy-pipe "reattach-to-user-namespace pbcopy"
Jason Axelson

16

Bạn có thể muốn thử plugin tmux-yank . Nó cho phép sao chép thẳng vào bảng tạm hệ thống (OS X và Linux) và một số tính năng khác như kéo theo dòng vỏ hiện tại.


7
Đây là một giải pháp tuyệt vời, sạch sẽ và cần được xem xét nhiều hơn vì đây là câu trả lời gần đây hơn nhiều so với các giải pháp khác. Cám ơn vì đã chia sẻ!
độc quyền

9

Sau khi thử giải pháp khác nhau, đây là thiết lập cuối cùng của tôi:

# move x clipboard into tmux paste buffer
bind C-p run "xclip -o | tmux load-buffer -
# move tmux copy buffer into x clipboard
bind C-y run "tmux save-buffer - | xclip -i -selection clipboard"

sử dụng bộ đệm lưu thay vì bộ đệm hiển thị sẽ cung cấp dữ liệu thực mà không có dữ liệu như hiển thị với ngắt dòng khi bạn đang phân tách.

Tôi cũng sử dụng điều này để bắt đầu lựa chọn / sao chép trong chế độ sao chép tmux:

bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' copy-selection

Tôi đoán có thể hợp nhất lựa chọn sao chép với phím 'y' VÀ di chuyển nó vào bảng tạm x.


Tôi đã cố gắng hợp nhất cả hai lệnh như bạn đã đề cập nhưng không thành công. Bất kỳ ý tưởng về làm thế nào để làm điều đó?
Rafael Vega

9

Đây là một nỗ lực tại một câu trả lời toàn diện.

Đầu tiên một chút lịch sử

Khi câu hỏi này lần đầu tiên được hỏi (tháng 6 năm 2011), sao chép văn bản từ Tmux vào bảng tạm phải là một quá trình gồm hai bước, trước tiên hãy sao chép văn bản đã chọn vào bộ đệm của Tmux, sau đó sao chép văn bản từ bộ đệm của Tmux vào bảng tạm của hệ thống.

Trong 1.8 (tháng 3 năm 2013), copy-pipelệnh đã được thêm vào cho phép bạn sao chép văn bản đã chọn thẳng vào bảng tạm hệ thống (hoặc đích khác).

Sau đó vào ngày 2.4 (tháng 4 năm 2017), các bảng chính đã được thay đổi đáng kể khiến nhiều câu trả lời trên trang này bị lỗi thời.

Trả lời câu hỏi ban đầu

Linux :

bind-key C-y run-shell "tmux save-buffer - | xclip -i -r > /dev/null" \; display-message "Copied tmux buffer to selection"
bind-key C-Y run-shell "tmux save-buffer - | xclip -i -r -selection clipboard > /dev/null" \; display-message "Copied tmux buffer to clipboard"
bind-key C-p run-shell "xclip -o | tmux load-buffer - ; tmux paste-buffer"

Mac :

Nếu bạn đang sử dụng homebrew thì bạn nên cài đặt reattach-to-user-namespacebằng cách chạy lệnh sau trong terminal:

brew install reattach-to-user-namespace

Sau đó, trong ~ / .tmux.conf của bạn:

bind-key C-y run-shell "tmux save-buffer - | reattach-to-user-namespace pbcopy" \; display-message "Copied tmux buffer to clipboard"
bind-key C-p run-shell "reattach-to-user-namespace pbpaste | tmux load-buffer - ; tmux paste-buffer"

Phương pháp ngắn hơn (sao chép và dán một lựa chọn trực tiếp từ và vào bảng tạm cho tmux> 2.4)

Lưu ý: có hai phiên bản dành cho Linux vì Linux có bảng tạm chính và phụ (còn được gọi là lựa chọn).

Linux :

bind-key -T copy-mode-vi y send-keys -X copy-pipe "xclip -r" \; display-message "Copied to selection"
bind-key -T copy-mode-vi Y send-keys -X copy-pipe "xclip -r -selection clipboard" \; display-message "Copied to clipboard"
bind-key C-p run-shell "xclip -o | tmux load-buffer - && tmux paste-buffer"

Mac :

bind-key -T copy-mode-vi y send-keys -X copy-pipe "reattach-to-user-namespace pbcopy" \; display-message "Copied to clipboard"

Tùy chỉnh các lệnh này

  • Nếu bạn không muốn lệnh cho bạn biết những gì nó đã làm trong dòng trạng thái thì chỉ cần loại bỏ display-message(cũng như lệnh \;đi trước nó).

  • Nếu bạn đang sử dụng chế độ sao chép kiểu Emacs thay vì vi thì hãy thay thế bất kỳ trường hợp nào copy-mode-vibằng chỉcopy-mode

  • Nếu bạn đang chạy Linux và bạn muốn sử dụng xselthay vì xclipthay thế xclip -rbằng xsel -i -pxclip -obằngxsel -o -p

  • Các -rtrong xclip -rlà không bắt buộc, nó loại bỏ các newline ngoái. Nó rất hữu ích để sao chép các lệnh, sau đó khi bạn dán chúng, chúng sẽ không được thực thi ngay lập tức.

  • Nếu bạn đang tạo đường hầm qua SSH thì bạn nên tham khảo https://unix.stackexchange.com/a3534581/14252

Người giới thiệu:


Là lệnh này bind-key C-p run-shell "xclip -o | tmux load-buffer - ; tmux paste-buffer", vẫn còn hiệu lực? chotmux>2.4
alpha_989

7

Tôi không thích có thêm phím bấm, vì vậy tôi muốn một cái gì đó tham vọng hơn. Nhập chế độ sao chép bằng [, tô sáng văn bản bên phải, rồi nhấn] để sao chép văn bản vào bảng tạm.

Ngoài ra, tmux thích bao gồm các dòng mới trong các biểu thức bao bọc (và kỳ lạ là những dòng mới đó ở sai vị trí! Chúng không phải là nơi biểu thức được bọc trên màn hình). Vì vậy, tôi muốn C-] sao chép biểu thức loại bỏ các dòng mới.

Trên tmux 1.6 tôi đã thử điều này:

bind [ copy-mode
bind -t vi-copy ] run "tmux send-keys Enter; tmux show-buffer | xclip -i -selection clipboard;"
bind -t vi-copy C-] run "tmux send-keys Enter; tmux show-buffer | perl -pe 's/\n//' | xclip -i -selection clipboard;"

nhưng điều đó không hiệu quả vì tmux dường như không vui khi liên kết những thứ phức tạp vào bảng vi-copy. Vì vậy, tôi đã kết thúc việc này thay vào đó:

bind [ copy-mode \;                                                        \
    bind -n ] run                                                          \
    "tmux send-keys Enter;                                                 \
     tmux show-buffer | xclip -i -selection clipboard;                     \
     tmux unbind -n C-];                                                   \
     tmux unbind -n ]" \;                                                  \
    bind -n C-] run                                                        \
    "tmux send-keys Enter;                                                 \
     tmux show-buffer | perl -pe 's/\n//' | xclip -i -selection clipboard; \
     tmux unbind -n C-];                                                   \
     tmux unbind -n ]"

Điều này dẫn đến những điều kỳ lạ (] hoặc C-] sẽ hành động buồn cười vào lần tới khi bạn sử dụng chúng, nhưng chỉ một lần) nếu bạn thoát khỏi chế độ sao chép theo cách khác bên cạnh] hoặc C-]. Điều này có thể được sửa chữa với một số ràng buộc hơn tôi tưởng tượng, nhưng điều này làm những gì tôi muốn hầu hết thời gian.


stackoverflow.com/a/10954274/69663 lưu ý rằng có một báo cáo lỗi liên quan về các hạn chế của khóa liên kết tại sourceforge.net/tracker/
Kẻ

4

Có một giải pháp trên Arch Wiki bằng cách sử dụng xclip:

# move tmux copy buffer into x clipboard
bind-key C-y save-buffer /tmp/tmux-buffer \; run-shell "cat /tmp/tmux-buffer | xclip"

https://wiki.archlinux.org/index.php/Tmux


2
Có phải tmux tạo save-buffertập tin một cách an toàn trong một thư mục dùng chung? Nếu không thì đặt nó vào /tmplà một lỗ hổng bảo mật. Việc sử dụng vô dụng catvà việc xóa tệp tạm thời bị thiếu. Sau đó, đây là vấn đề xselso với xclip, tương đương ở đây và bạn có giải pháp (được viết không thường xuyên) của tôi.
Gilles

1
Cảm ơn Gilles. Tôi sẽ cập nhật wiki để phản ánh quan điểm của bạn.
jasonwryan

4

Một giải pháp cho Mac OS X. Thực hiện theo 2 bước sau:

  1. Sử dụng cách giải quyết của Chris Johnsen: https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard

  2. Thêm mã này vào cấu hình tmux của bạn (~ / .tmux.conf)

# paste clipboard into tmux buffer
bind v run-shell "reattach-to-user-namespace -l zsh -c 'tmux set-buffer \\"$(pbpaste)\\"; tmux paste-buffer'"
# put tmux buffer into x clipboard
bind y run-shell "reattach-to-user-namespace -l zsh -c 'tmux show-buffer | pbcopy'"


4

Một biến thể sửa đổi một chút của câu trả lời được chấp nhận, mà tôi đã nấu lên.

Tôi cũng thích sử dụng bảng tạm hệ thống (Ctrl-C, Ctrl-V) ngoài primarybảng tạm mặc định của xclip (bảng tạm bạn nhận được với lựa chọn chuột và nhấp chuột giữa). Để chọn bảng tạm hệ thống, bạn cần chuyển -selection clipboardđối số sang xclip.

Ngoài ra, trong khi sao chép bộ đệm vào bảng tạm, tôi thích khả năng chọn bộ đệm nào tôi muốn sao chép. Nó được thực hiện bằng cách sử dụng choose-buffervà sau đó chuyển bộ đệm đối số để save-buffersử dụng -b %%.

# Copy into clipboard
bind C-c choose-buffer "run \"tmux save-buffer -b %% - | xclip -i -selection clipboard\""
# Paste from clipboard
bind C-v run "xclip -o -selection clipboard | tmux load-buffer - ; tmux paste-buffer"
# Copy into primary
bind C-y choose-buffer "run \"tmux save-buffer -b %% - | xclip -i \""
# Paste from primary
bind C-p run "xclip -o | tmux load-buffer - ; tmux paste-buffer"

CẬP NHẬT: Bằng cách nào đó với tmux 1.8 và hai bản cài đặt openSUSE 12.2 của tôi, tôi thấy bị treo khi tmux run-shellđược gọi với xclipviệc đọc từ stdin qua một đường ống. Thay vào đó tôi quyết định xselthử và điều đó dường như có hiệu quả. Đây là các ràng buộc quan trọng tương đương bằng cách sử dụng xsel. Tôi cũng đã sử dụng &&để xâu chuỗi các lệnh trong dán để mạnh mẽ hơn.

# Copy into clipboard
bind C-c choose-buffer "run \"tmux save-buffer -b '%%' - | xsel -i -b\""
# Paste from clipboard
bind C-v run "xsel -o -b | tmux load-buffer - && tmux paste-buffer"
# Copy into primary
bind C-y choose-buffer "run \"tmux save-buffer -b '%%' - | xsel -i\""
# Paste from primary
bind C-p run "xsel -o | tmux load-buffer - && tmux paste-buffer"

4

Đây là câu trả lời khá dài của tôi nên khắc phục hai vấn đề lớn khi sử dụng xclip để sao chép bộ đệm từ phiên tmux (ssh) từ xa:

1. Xclip vô trách nhiệm

Đối với tôi @ Grauwolf của câu trả lời với xclipđã không làm việc (renders tmux pane hoàn toàn irresponsive). Tôi đã tìm hiểu tại sao trong trang Tmux của Arch 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, sẽ gọn gàng hơn khi sử dụng xsel thay vì xclip, 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, các ràng buộc nên là:

bind-key C-y run "tmux save-buffer - | xclip -i -sel clip > /dev/null"

Bây giờ, điều này sẽ hoạt động nếu phiên tmux của bạn là cục bộ.

2. xclip không thể kết nối với X

Nếu bạn đang sử dụng tmux trên ssh -X , có nhiều khả năng điều này sẽ không hoạt động trực tiếp.

Đó là bởi vì biến shell $DISPLAYcần được đặt đúng.

Giải pháp hoàn chỉnh

Vì vậy, đối với tôi, giải pháp làm việc hoàn chỉnh là đặt các dòng sau vào ~/.tmux.conf:

set-option -g update-environment "DISPLAY"
bind-key C-y run "export DISPLAY=`tmux show-env | sed -n 's/^DISPLAY=//p'`; tmux save-buffer - | xclip -i -selection clipboard >/dev/null"
# Or more concise:
bind-key C-y run "tmux save-buffer - | xclip -i -selection clipboard -d `tmux show-env | sed -n 's/^DISPLAY=//p'` >/dev/null

Để dán từ chính:

bind-key C-p run "xclip -d `tmux show-env | sed -n s/^DISPLAY=//p` -o | tmux load-buffer - && tmux paste-buffer"

Tôi hoàn toàn không hiểu tại sao $DISPLAYkhông được đặt chính xác trong khi tìm nguồn cung ứng .tmux.conf, vì vậy đây là lý do tại sao tôi phải giải nén nó với tmux show-envsed.

Nếu bạn có tmux> = 1.8, bạn có thể điều chỉnh lệnh này bằng copy-pipe:

bind-key -t vi-copy y copy-pipe 'xclip -in -selection clipboard -d `tmux show-env | sed -n s/^DISPLAY=//p` >/dev/null'

/home/linux/.tmux.conf:11: invalid or unknown command: bind-key C-y run "tmux save-buffer - | xclip -i -selection clipboard -d `tmux show-env | sed -n 's[0/0] PLAY=//p'` >/dev/null
người dùng

@user sedlệnh bạn hiển thị không giống với lệnh tôi đã viết ... Đây có phải là những gì bạn đã viết trong của bạn .tmux.conf?
PlasmaBinturong

Tôi chỉ sao chép và dán mã của bạn.
người dùng

@user, lạ. Có thể có nhiều nguồn lỗi. Kiểm tra đầu tiên rằng trích dẫn của bạn là ổn. Sau đó, bạn có quen thuộc sedkhông? Lệnh nên là : sed -n s/^DISPLAY=//p. Ngoài ra, bạn có thể sử dụng cut: tmux show-env DISPLAY | cut -d'=' -f2. Nó cũng có thể đáng để kiểm tra phiên bản tmux của bạn.
PlasmaBinturong

3

Tôi đang cố gắng tìm ra một cách hay để sao chép những gì tôi có trong bộ đệm tmux vào clipboard của mình. Tôi đã thử một vài thứ khác nhau như

Đối với các ràng buộc kiểu emacs có một vài lựa chọn khác nhau. (Kiểu Vi có giống nhau không?) Liên kết điển hình để thực hiện "chọn sao chép" trong emacs là Mw, vì vậy sẽ rất thuận tiện khi có cùng ràng buộc trong tmux.

1 - Sẽ là lý tưởng, nhưng không hoạt động (do giới hạn tmux?)

unbind-key -t emacs-copy M-w
bind-key -t emacs-copy M-w copy-selection\; \
  run-shell "tmux save-buffer - | xsel --input --clipboard"

2 - Thỏa hiệp phù hợp với tôi : Chấp nhận sử dụng một liên kết phím khác cho bản sao emacs trong tmux. Sử dụng ví dụ CMw. (Ràng buộc này sẽ được xác định là "toàn cầu" - không chỉ trong chế độ sao chép - mà chỉ hữu ích trong chế độ sao chép)

bind-key -n C-M-w send-keys M-w\; \
 run-shell "tmux save-buffer - | xsel --input --clipboard" 

3

Nhiều câu trả lời trong số này không hoạt động cho Ubuntu 14.04 của tôi trên zsh. Không chắc chắn vỏ của tôi có liên quan gì đến nó không, nhưng đây là phiên bản làm việc của tôi về việc sử dụng chiến lược này để sao chép và chiến lược này để dán.

    bind-key -t vi-copy 'v' begin-selection
    bind-key -t vi-copy 'y' copy-pipe "xclip -sel clip -i"
    bind-key ] run-shell "xclip -sel clip -o | tmux load-buffer - ; tmux paste-buffer" 

Một số lưu ý:

  • đối với copy-pipe, tôi cần chỉ định clipboard của mình với -sel clip -i. Dòng đó kết hợp bộ đệm yank với tmux và gửi nó đến xclip.
  • để thực sự dán nó, tôi cần phải xác định lại clipboard nào với -sel clip -o

Điều này hoạt động rất tốt bây giờ cho thiết lập vim / zsh / tmux của tôi.


cảm ơn bạn! -sel clip -igiải quyết vấn đề Mặc dù, tôi không hiểu tại sao bạn cần chỉ định lại bảng tạm để dán nó (tiêu chuẩn ]hoạt động với tôi)
melekes

1

Và phiên bản cải tiến của câu trả lời @Leif có thể là:

tmux bind-key '[' run "tmux copy-mode;
tmux bind-key -n ']' run \"tmux send-keys Enter; tmux save-buffer - | xclip -i -selection clipboard;
tmux unbind-key -n ']'\";
tmux bind-key -n q run \"tmux unbind -n ']'; tmux send-keys q\";
tmux bind-key -n C-c run \"tmux unbind -n ']'; tmux send-keys C-c\""

Cách này không có hậu quả nếu bạn thoát khỏi chế độ sao chép theo cách khác], đoạn mã trên được gói trong tundle / tmux-yank một plugin tmux để sao chép văn bản tmux vào bảng tạm hệ thống, nó nhắm mục tiêu tmux> = 1.6 trên OS X và Linux.


1

Trên OS-X với tmux phiên bản 2.2 trở lên, các thao tác sau sẽ hoạt động:

bind-key -t emacs-copy MouseDragEnd1Pane copy-pipe "pbcopy"
bind-key -t vi-copy MouseDragEnd1Pane copy-pipe "pbcopy"

1

Tôi sử dụng copyqmột trình quản lý clipboard đa dòng. (Nó hoạt động với Windows, OSX, Linux.)

  • Thêm các dòng sau vào ~/.tmux.conf:

    set-window-option -g mode-keys vi
    bind C-y run 'out=`tmux save-buffer - ` && copyq add "$out"'
    
  • cygwinnhu cầu copyq.exevị trí trong ~/.bashrc:

    export PATH="$PATH:/cygdrive/c/Program Files (x86)/CopyQ"
    
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.