2013-06-22 30 views
19

ENV :: Tôi đang chạy tmux trong putty, trên một cửa sổ 7 máy tính xách tay. Tôi làm ssh để hệ thống Linux trong khi làm việc.Làm thế nào để sao chép từ tmux chạy trong putty để windows clipbard

Tôi phải giải quyết hai trục trặc với tmux, trước khi sử dụng nó cho tất cả các nhu cầu của tôi.

  1. Tôi phải sao chép một số văn bản vào notepad cửa sổ từ vim hoặc thiết bị đầu cuối tmux. Tôi đã kích hoạt hỗ trợ chuột cho cả vim và putty.

    Tôi đã thử "*y"+y nhưng cả hai đều không hoạt động. Nếu tôi sử dụng khả năng của putty cho bản sao thì nó cũng sao chép nội dung của các lưới liền kề.

  2. Tôi phải sao chép một số nội dung từ tệp vim trong một ngăn sang tệp vim được mở trong ngăn khác. Có bất kỳ mẹo vim nào cho việc này không. Tôi không muốn sử dụng <C-b>[ cách làm việc đó.

Vấn đề 1 được ám ảnh tôi nhiều hơn, bởi vì có một w/A cho vấn đề 2.

Trả lời

5

PuTTY chỉ là một giả lập thiết bị đầu cuối; các thanh ghi Vim *+ quan tâm đến lựa chọn X và khay nhớ tạm; không có sự trùng lặp.

PuTTY chỉ cho phép bạn sao chép nội dung đầu cuối đã chọn vào khay nhớ tạm của Windows; khi bạn chạy tmux, chắc chắn sẽ bao gồm bố cục cửa sổ.

Bạn cần chuyển từ PuTTY thành thứ gì đó cho phép tích hợp thực, như Máy chủ Cygwin XWin, máy chủ X thực sự tích hợp khay nhớ tạm X với khay nhớ tạm của Windows. Thay vì bên trong phiên PuTTY, bạn muốn ssh -X vào máy chủ của mình và khởi chạy Vim trong thiết bị đầu cuối Linux hoặc trực tiếp với GVIM. Sau đó, yanking qua "+y sẽ hoạt động như bạn mong đợi.

Hoặc, nếu bạn muốn tiếp tục sử dụng PuTTY, bạn phải sử dụng một số giải pháp thay thế, chẳng hạn như :write nhập lựa chọn vào tệp cục bộ và chuyển giao tệp đó sang Windows qua scp.

+7

Câu trả lời này là sai. Islab mô tả nó tốt nhất dưới đây. Nó là cả hai có thể và rắc rối miễn phí. Câu trả lời đơn giản là kích hoạt chuột và giữ phím Shift và bạn có thể sử dụng chuột để sao chép văn bản vào khay nhớ tạm của Windows. Tôi làm điều này hàng ngày với Win7 và tmux chạy trong Putty. Tôi đã không thử chuột để dán. Đối với tôi, tôi dán bất kỳ văn bản nào tôi có trong clipboard của Windows vào thiết bị đầu cuối putty (thường vào thứ tôi đang chỉnh sửa trong Vim) bằng cách sử dụng Shift + Insert. – Alnilam

+1

@FooBar: Bạn làm việc cho văn bản hiện tại, câu trả lời của tôi liên quan đến trường hợp chung sao chép số lượng tùy ý (tức là cũng vô hình) của văn bản. –

+1

@IngoKarkat: Sau khi cẩn thận đọc lại OP, tôi đã sửa chữa và xin lỗi. Tôi đã xem qua bài viết này bởi vì tôi cần phải chỉ cần sao chép văn bản ra khỏi một cửa sổ duy nhất trong Tmux đến một cái gì đó trong Windows. Phím shift và chế độ con chuột giải quyết cho điều đó. OP là phàn nàn vì điều này không làm việc cho văn bản trong Vim trong một cửa sổ nhân (chia theo chiều dọc) bởi vì con chuột làm nổi bật kéo dài chảo. Một giải pháp có thể là sử dụng tính năng phóng to khung và sau đó dịch chuyển làm nổi bật văn bản. Số dòng phải được tắt trong Vim hoặc bạn cũng yank những số đó. Những gì bạn sẽ xem xét như là một ví dụ về văn bản "vô hình", mặc dù? – Alnilam

77

Tôi sử dụng putty v0.62 và tmux v1.8.

tmux config: setw -g chế độ chuột trên

Tôi muốn sao chép một số văn bản từ tmux vào hệ thống vào clipboard, tôi bấm và giữ phím SHIFT và chọn văn bản bằng chuột, sau đó nhấp vào nút trái của chuột.

Tôi muốn dán một số văn bản vào tmux, nhấn SHIFT và nhấp chuột phải vào nút.

+5

Bạn cũng cần phải có "Shift ghi đè việc sử dụng chuột của ứng dụng" được chọn trong cấu hình PuTTY trong 'Window> Selection' – sparticvs

+0

Điều này giúp tôi rất nhiều! – wukong

+7

Đây là câu trả lời đúng – GoldRoger

13

Điều này là hoàn toàn có thể. Tất cả các dòng cấu hình bên dưới được sao chép từ các máy trong các khay tmux khác nhau trở lại máy tính Windows của tôi. Có, tôi putty vào một máy và tmux và ssh từ đó cho người khác và có thể di chuyển vim yanks của tôi để bất kỳ máy tính, bao gồm cả trình duyệt Windows của tôi.

Tôi chạy một máy chủ X trên Windows (không cần phải có trên Windows, nhưng bạn cần một nơi nào đó).

thành phần thiết yếu:

  • putty 0,62 (trên Windows)
  • tmux 1,8 (trên một máy Linux)
  • xclip (trên máy Linux)
  • MobaXterm (trên Windows cho máy chủ x họ)

Thiết lập mạng của bạn có thể khác một chút, đặc biệt là trên X server hiển thị cấu hình nhưng ở đây nó đi:

tmux

# allow mouse to select panes 
setw -g mode-mouse on 
set-option -g mouse-select-pane on 

# allow yank into system clipboard 
#bind C-y run "tmux save-buffer - | xclip -i" 
bind C-y run-shell -b "tmux show-buffer | xclip -selection clipboard -i" 
# move x clipboard into tmux paste buffer 
bind C-p run-shell -b "xclip -o -selection clipboard | tmux load-buffer - ; tmux paste-buffer" 

vim

" get some autoselect interaction with the system clipboard 
set guioptions=aA 

MobaXterm

tôi tiếp tục chạy này nhưng không bao giờ phải chạy tmux trong một xterm shell. Đảm bảo rằng khay nhớ tạm được chia sẻ được chọn trong cài đặt X11. Tôi cho rằng xming sẽ hoạt động nhưng các thiết lập cho các nhu cầu khác của tôi dường như không bao giờ có tác dụng. MobaXterm có goodies khác tôi thích anyway (trình duyệt tập tin vv).

Tôi cho rằng tôi có thể chạy phiên ssh với tmux trong MobaXterm nhưng tôi thích cửa sổ putty nơi tôi có solarized color palette.

putty

ssh vào máy với tmux. Tại thời điểm này, tôi đặt biến môi trường DISPLAY và đặt nó trong một tệp env có nguồn gốc từ bash. Bằng cách này, mọi cửa sổ tiếp theo được tạo sẽ được thiết lập. Đặt nó trên các máy khác mà tôi hy vọng từ máy tmux là một bài tập hoàn toàn riêng biệt.

Trong bất kỳ máy nào sẽ chia sẻ khay nhớ tạm, hãy đảm bảo bạn đã đặt đúng bộ $DISPLAY. Bạn sẽ có thể chạy xeyes và xem nó trên máy cục bộ của bạn.

Mọi người sẽ chia sẻ khay nhớ tạm. vim sẽ sao chép vào clipboard khi bạn giật. Để dán trong một cửa sổ tmux khác, hãy sử dụng khóa liên kết ctrl-p (ctrl-a ctrl-p cho tôi).

Nếu nó không hoạt động, bạn luôn có thể thử xclip -o -selection clipboard để xem những gì nên dán. bạn cũng sẽ có thể di chuyển bất kỳ văn bản "tmux được chọn" (chuột hoặc bind-key [) vào khay nhớ tạm (và do đó đến cửa sổ cửa sổ thông thường) với bind-key ctrl-y (ví dụ: tmux yank).

2

Với một số thủ thuật, có thể lấy bộ đệm tmux trở lại thông qua PuTTY và trên máy khách. Tôi thực hiện điều này bằng cách sử dụng mã thoát ANSI cho cổng "AUX" (máy in nối tiếp).

Dưới đây chỉ là một việc thực hiện các phương pháp mà chuyển nhượng:

1) Trong server-side tmux.conf, thêm:

# Send the tmux copy buffer to a file. The file is read for ANSI printing by "t" alias in .bashrc 
bind -t vi-copy y copy-pipe 'cat > ~/.tmux-buffer' 

2) Trong server-side .bashrc, thêm:

t() { 
    # Configure a PuTTY profile to send "t" as the "Remote command". This 
    # function will automatically reattach to an existing tmux session if one 
    # exists, or start a new one. This function also repeatedly sends our 
    # homemade tmux clipboard back to the PuTTY client in the form of an ANSI 
    # printer escape sequence. The contents of the homemade clipboard are 
    # populated by `bind -t vi-copy y copy-pipe 'cat > ~/.tmux-buffer'` in 
    # tmux.conf. It is expected that the PuTTY client will be configured to 
    # print to a "Microsoft XPS Document Writer" which saves the printer output 
    # to a file. The file is subsequently read by an AutoHotkey macro, and the 
    # contents are made available for paste. 
    [[ "$TERM" == "xterm" ]] || return 0 # This prevents recursive runs, in case t() is called after tmux is started. 
    { while :; do tput mc5; cat ~/.tmux-buffer; tput mc4; sleep 5; done } & 
    tmux attach || tmux 
} 

3) Trên máy khách (Microsoft Windows), tạo máy in mới:

  • Thêm một máy in
  • Tạo một cổng mới> Local Cảng
  • Nhập tên cổng> "PuTTY_Printer_File"
  • Driver> Microsoft XPS Document Writer
  • tên Printer> "PuTTY Printer"
  • Tùy chọn: In trang thử nghiệm và đảm bảo trang hiển thị trong nội dung của tệp @ "%USERPROFILE%\Documents\PuTTY_Printer_File"

4) Trong PuTT phía khách hàng cấu hình Y:

  • Set ga> "Máy in để gửi ra máy in ANSI để:" để vừa được tạo ra máy in có tên là "PuTTY Printer"
  • Set Kết nối> SSH> "Remote lệnh:" thành "t" (tham khảo .bashrc chức năng ở trên)

tại thời điểm này bạn có thể gửi nội dung của tmux đệm cho khách hàng PuTTY của bạn bằng cách làm nổi bật một số văn bản trong bản sao chế độ tmux, và nhấn y. Văn bản đã chọn sẽ kết thúc ở trên %USERPROFILE%\Documents\PuTTY_Printer_File trở lại trên máy khách. Nếu bạn muốn tiến thêm một bước và mô phỏng "dán" ra khỏi tệp này, bạn có thể sử dụng chuỗi phím nóng để đọc nội dung của tệp và chèn nó. Dưới đây là một ví dụ thúc đẩy AutoHotKey, nhưng có thể bạn sẽ đạt được kết quả tương tự trong PowerShell nếu bạn thích.


5) Client-side AutoHotkey vĩ mô:

;### Get contents of PuTTY ANSI printer device output and paste it 
#v:: ;Winkey + v 
FileRead, PuTTYPrinter, %USERPROFILE%\Documents\PuTTY_Printer_File 
SendInput %PuTTYPrinter% 
PuTTYPrinter = ; Free up memory 
return 

6) Hoàn thành thủ tục sử dụng:

  • Kết nối với máy chủ với PuTTY và được thả vào tmux bởi t function().
  • Khi đã sẵn sàng để chọn văn bản cho sao chép, sử dụng tmux hotkey cho copy-mode (Ctrl + b, [)
  • Di chuyển con trỏ với các phím mũi tên
  • Bắt đầu lựa chọn với spacebar
  • lựa chọn End và sao chép nó với y
  • Quay lại phía khách hàng đang chạy PuTTY, WindowsKey + v sẽ dán lựa chọn

Vì hình ảnh đáng giá 1.000 từ, đây là tổng quan về những gì đang xảy ra: https://media.licdn.com/mpr/mpr/AAEAAQAAAAAAAAfiAAAAJDYzM2RmMzYzLTk1NmQtNGQxMi1iN2YyLTQ4NGUxNjExMmVlOA.png