Làm thế nào để sao chép vào khay nhớ tạm thời của hệ thống từ đầu ra tmux sau khi chọn chuột?


82

Bây giờ để sao chép vào khay nhớ tạm thời của hệ thống, tôi phải chọn thông qua văn bản chuột trong cửa sổ tmux bằng Shiftphím. Và sau đó tôi phải chạy lệnh này:

tmux save-buffer - | reattach-to-user-namespace pbcopy

Có cơ hội nào để lưu vào khay nhớ tạm thời của hệ thống dễ dàng hơn không? Key bind hoặc tốt hơn làm điều đó tự động sau khi phát hành Shift.

Cấu hình tmux của tôi: https://gist.github.com/3641580


Đây là câu hỏi và đáp tương tự trên unix.stackexchange .
crw

2
Bất kỳ công việc nào trong số này hoạt động trên MacOS, cụ thể là Sierra? Hay đúng hơn, không ai trong số họ làm, có ai biết điều gì sẽ xảy ra không? Câu hỏi này được gắn thẻ với osx, nhưng câu trả lời đang nói về trái và trung bình nhấp chuột ...
dwanderson

Câu trả lời:


191

Nếu bạn đang sử dụng iTerm2, bạn có thể sao chép văn bản trong phiên Tmux, giữ Optionphím trong khi kéo chuột để lựa chọn.

Sau đó, có thể dán văn bản vào bất kỳ đâu với dấu Cmd+ Vnhư bình thường. Tìm thấy nó ở đây: http://web.archive.org/web/20131226003700/http://ootput.wordpress.com/2013/08/02/copy-and-paste-in-tmux-with-mouse/


26
Không giúp đỡ với tấm tmux
Jak S

41
Nếu bạn có các ngăn, bạn có thể thực hiện lựa chọn hình chữ nhật bằng cách sử dụng <alt> + <cmd> + lựa chọn chuột.
jomuller

6
Lựa chọn hình chữ nhật không cung cấp cùng chức năng cho các ngăn vì vùng chọn có thể bắt đầu và kết thúc ở bất kỳ cột nào. Giải pháp này không liên quan đến tmux mà liên quan đến chính thiết bị đầu cuối. Panes là một tính năng cốt lõi của tmux.
Betamos

6
Tiền tố @JakS + Z phóng to ngăn hiện tại. Sau đó, bạn sẽ không có vấn đề đó. Trừ khi bạn cũng đang ở trong một chia vim :)
dgmora

10
Trong Terminal, bạn có thể chọn văn bản bằng cách giữ phím "fn". Bạn có thể sao chép văn bản đã chọn bằng "Cmd + C".
fbessho

58

Nếu bạn sử dụng iTerm2 3.x, bạn có thể sao chép / dán hoạt động bằng cách bật Applications in terminal may access clipboard:

nhập mô tả hình ảnh ở đây

Chỉ cần đánh dấu văn bản bằng chuột của bạn để sao chép nó vào khay nhớ tạm thời OS X! Không cần phải nhấn Optionnhư được đề xuất trong câu trả lời của người chấp nhận.

Bạn cũng có thể dán từ khay nhớ tạm OS X vào tmux với dấu Cmd+ thông thường V.


1
Tất cả các reattach-to-user-namespacecách tiếp cận dựa trên không phù hợp với tôi, bởi vì tôi thường ssh vào các máy linux. Giải pháp này, tuy nhiên, hoạt động tuyệt vời! Cảm ơn bạn!
jdg

Câu trả lời chính xác. Tôi vẫn sử dụng <kbd> Option </kbd> khi ở trong vim và không muốn chuột kích hoạt lựa chọn vim.
Chad Skeeters

Điều này hoạt động tuyệt vời. Không cần thay đổi bất kỳ cấu hình nào. Cảm ơn.
muammar

điều này hoạt động tuyệt vời chỉ với tmux, nhưng bây giờ làm thế nào để gửi vim yanks chạy trong tmux đó đến iterm và bảng tạm hệ thống ??
schlow

@schlow này có lẽ nên được một câu hỏi Vim + tmux StackOverflow riêng biệt nhưng tôi xảy ra để sử dụng Vim quá và tôi đã thêm set clipboard=unnamedtrong vimrc của tôi cho mục đích đó
Jerome Dalbert

28

Có một câu hỏi tương tự được trả lời ở đây: /unix/15715/getting-tmux-to-copy-a-buffer-to-the-clipboard

Giải pháp được tìm thấy ở đó:

# 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 show-buffer | xclip -i"

Kiểm tra thêm: http://awhan.wordpress.com/2012/04/18/tmux-copy-paste-with-mouse/

nếu bạn đã đặt các tùy chọn sau:

ngăn chọn chuột

chuột-chọn-cửa sổ

bạn sẽ nhận thấy rằng bạn hoàn toàn không thể chọn văn bản.

giải pháp là sử dụng phím shift.

hold down the shift key and then left click and drag across the target text. you must also hold down the shift key and then middle click in order to paste the text.

4
với iterm, hãy sử dụng phím tùy chọn thay vì phím shift. [như đã đề cập ở đây: awhan.wordpress.com/2012/04/18/tmux-copy-paste-with-mouse ]
gatoatigrado

2
Đối với MacOS, xclip -o=> pbpaste, xclip -i=> pbcopy.
Gingi

23

Đối với hệ điều hành x, Nếu bạn sử dụng ứng dụng "Thiết bị đầu cuối". Bạn có thể tắt cuộn chuột và sử dụng các chức năng sao chép / dán thông thường (cmd + c / cmd + v):

set-option -g mouse-select-pane off
set-option -g mouse-resize-pane off
set-option -g mouse-select-window off
set-window-option -g mode-mouse off

hoặc bạn có thể sử dụng cuộn chuột và chọn văn bản bằng "phím fn":

set-window-option -g mode-mouse on

16
các fnmũi chính là một cuộc sống tiết kiệm! nhiều người đề nghị sử dụng ALTnhưng nó không hoạt động trên Mac OS x mới nhất
AK_ 13/07/17

1
Tốt hơn - kết hợp fntùy chọn để chọn bằng chế độ cột!
Fletch

Có cách nào để thay đổi phím fn không? Sử dụng bàn phím ngoài không có phím fn!
CentAu

@CentAu Hãy thử sử dụng phím "Cửa sổ" thay thế
Piotrek Zatorski

17

Trên OSX sử dụng tmux phiên bản 2.2 trở lên, hãy thêm phần sau vào tệp tmux.conf của bạn:

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

Đối với tmux phiên bản 2.4, vì họ vui lòng quyết định thay đổi cú pháp lệnh, bạn nên sử dụng:

bind-key -T copy-mode MouseDragEnd1Pane send -X copy-pipe-and-cancel "pbcopy"

Lưu ý rằng bạn cũng có thể cần sử dụng reattach-to-user-namespace pbcopythay vì đơn giản pbcopy.


Ngoài ra trên Ubuntu 16.04, điều này không còn là vấn đề trên tmux 2.1. Tôi chỉ có thể sử dụng các phương pháp dán sao chép mặc định của thiết bị đầu cuối.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Không hiểu tại sao điều này lại rất thấp trong danh sách, đây là câu trả lời đúng!
shawkinaw

11

Đưa cái này vào tệp ~ / .tmux.conf của tôi phù hợp với tôi:

bind y run-shell "reattach-to-user-namespace -l zsh -c 'tmux show-buffer | pbcopy'"

Tất cả các giải pháp tiềm năng khác mà tôi tìm thấy là sao chép một số loại nội dung trống vào khay nhớ tạm OSX.

Vấn đề duy nhất là điều này dường như đặt một ký tự xuống dòng ở cuối nội dung đã dán.


3
Điều này hoạt động, nhưng vẫn yêu cầu bạn nhấn PREFIX + y sau khi bạn thực hiện lựa chọn. Có cách nào để sao chép văn bản từ phiên tmux trong OS X chỉ bằng cách chọn nó giống như trong một thiết bị đầu cuối Linux không?
Rafael Bugajewski

6

nhấn nút chuột trái và giữ nó, chọn văn bản trong ngăn và vẫn giữ nút. sau đó nhấn "y" để lưu lựa chọn trong khay nhớ tạm và thoát khỏi chế độ chọn / sao chép.

hoạt động ở đây với iTerm 3.1.beta.5, tmux 2.5 và cấu hình sau:

### copy & paste -------------------------------------------------------
# Use vim keybindings in copy mode
setw -g mode-keys vi
# Setup 'v' to begin selection as in Vim
bind-key -T copy-mode-vi v send -X begin-selection
bind-key -T copy-mode-vi y send -X copy-pipe-and-cancel "reattach-to-user-namespace pbcopy"
# Update default binding of `Enter` to also use copy-pipe
unbind -T copy-mode-vi Enter
bind-key -T copy-mode-vi Enter send -X copy-pipe-and-cancel "reattach-to-user-namespace pbcopy"

+1 Cuối cùng, một giải pháp cập nhật hoạt động. Cảm ơn. - Có vẻ như bạn chỉ cần ghi đè Enter mà không cần ghi trước unbind.
ThomasH

Tmux phiên bản 3 trở lên sử dụng copy-mode-vitrong khi phiên bản cũ hơn sử dụng copy-mode.
MutantMahesh


3

Tôi đã có thể giải quyết vấn đề này với CMD+ Csau khi chọn văn bản có FN+ mouse drag with left button downtừ tmuxcửa sổ trong Terminalứng dụng của macOS High Sierra.


1

Hôm nay tôi đã tạo một phiên bản sử dụng netcat khá đơn giản.

https://github.com/base698/tmux-copy-paste-mac-osx

Đây là tmux.conf:

bind -t vi-copy 'v' begin-selection
bind -t vi-copy 'y' copy-pipe 'nc localhost 5682'
bind p run-shell 'nc localhost 5683; nc localhost 5683 | tmux load-buffer -' \; paste-buffer

Hoạt động với chuột trong 1.8


1

Đây là giải pháp tôi đang sử dụng cho tmuxphiên bản 2.8, macOS Mojave 10.14.1 và Terminal.app.

Sau khi nhả nút chuột, thao tác này sẽ xóa lựa chọn trong khi sao chép vào khay nhớ tạm của hệ thống (cũng như tmuxbộ đệm):

bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "pbcopy"

0

Một giải pháp mạnh mẽ hoạt động với bất kỳ sự kết hợp nào của mosh + tmux + vim + phiên lồng nhau

Sau nhiều ngày giải quyết vấn đề này, cho đến nay giải pháp mạnh mẽ nhất mà tôi đã khám phá ra là giải pháp đã đăng của Suraj N. Kurapati . Giải pháp hoạt động cục bộ với (và không) tmux v3.2 và / hoặc vim, cũng như từ xa với (và không) tmux và / hoặc vim , sử dụng cả phím chế độ sao chép và lựa chọn chuột đơn giản.

Nếu được kết hợp với yêu cầu kéo (hiện đang mở) của Mike Gulick , tất cả các kết hợp này cũng hoạt động với mosh .

Cho đến khi giải pháp của Mike được hợp nhất vào mosh, bạn có thể kéo các thay đổi của anh ấy và xây dựng cục bộ bằng cách sử dụng:

Ubuntu:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key C99B11DEB97541F0 \
&& sudo apt-add-repository https://cli.github.com/packages \
&& sudo apt update \
&& sudo apt install -y gh autoconf automake perl protobuf-compiler libprotobuf-dev libncurses-dev zlib1g-dev libutempter-dev libssl-dev pkg-config \
&& mkdir -p ~/tmp/mosh \
&& git clone https://github.com/mobile-shell/mosh ~/tmp/mosh \
&& cd ~/tmp/mosh \
&& gh pr checkout 1104 \
&& ./autogen.sh \
&& ./configure \
&& make \
&& sudo make install

hệ điều hành Mac:

Tôi nghĩ bạn cần cài đặt Công cụ dòng lệnh Xcode / Developer của Apple trước (IIRC, hiện có thể được thực hiện bằng cách đơn giản chạy gccvà thoát), sau đó chạy:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" \
&& brew install gh autoconf automake
&& mkdir -p ~/tmp/mosh \
&& git clone https://github.com/mobile-shell/mosh ~/tmp/mosh \
&& cd ~/tmp/mosh \
&& gh pr checkout 1104 \
&& ./autogen.sh \
&& ./configure \
&& make \
&& sudo make install

Với những cập nhật này, chén thánh clipboard cuối cùng đã đạt được!

Tuy nhiên, đây là thông tin rất mới, do đó bài viết này của tôi có nhiều biến động. Vì thế:

Vui lòng sửa đổi bài viết của tôi nếu:

  1. Tôi thiếu phần phụ thuộc, v.v. hoặc
  2. Việc thực hiện một gh pr checkout 1104trong các thay đổi của Mike không còn cần thiết nữa vì nó đã được hợp nhất vào mosh hoặc
  3. Việc xây dựng từ nguồn không còn cần thiết vì các thay đổi đã hợp nhất đã được đẩy cho các trình quản lý gói brew / apt / etc.
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.