2013-06-22 4 views
19
kopieren

ENV :: Ich tmux in Kitt laufen, auf einem Windows 7 Laptop. Ich ssh Linux-Systeme während der Arbeit.Wie von tmux in kitty zu Windows Clipbard

Ich muss zwei Störungen mit tmux lösen, bevor ich es für alle meine Bedürfnisse benutze.

  1. Ich muss etwas Text in den Windows-Editor von Vim oder dem tmux-Terminal kopieren. Ich habe die Mausunterstützung für Vim und Putty aktiviert.

    Ich habe versucht "*y und "+y, aber beide funktionieren nicht. Wenn ich die Fähigkeit von Putty zum Kopieren verwende, kopiert es auch den Inhalt benachbarter Raster.

  2. Ich muss einige Inhalte aus VIM-Datei in einem Fenster in VIM-Datei in einem anderen Fenster geöffnet kopieren. Gibt es dafür einen Trick? Ich möchte nicht <C-b>[ Weise es zu tun.

Problem 1 wird verfolgt mich mehr, weil es ein Problem w/a für ist 2.

Antwort

5

PuTTY ist nur ein Terminal-Emulator; die Vim-Register * und + sind besorgt über die X-Auswahl und die Zwischenablage; es gibt keine Überlappung.

PuTTY ermöglicht nur das Kopieren des ausgewählten Terminal-Inhalts in die Windows-Zwischenablage; Wenn Sie tmux ausführen, wird dies zwangsläufig das Fensterlayout enthalten.

Sie müssen von PuTTY zu etwas, das echte Integration ermöglicht, wie die Cygwin XWin Server, die eine echte X Server ist, die die X-Zwischenablage mit der Windows-Zwischenablage integriert. Statt in der PuTTY-Sitzung würden Sie ssh -X in Ihren Server eingeben und Vim in einem Linux-Terminal oder GVIM direkt starten. Dann funktioniert das Ruckeln über "+y wie erwartet.

Wenn Sie PuTTY weiterhin verwenden möchten, müssen Sie eine Problemumgehung verwenden, z. B. :write die Auswahl in eine lokale Datei übernehmen und diese beispielsweise an Windows über scp übertragen.

+7

Diese Antwort ist falsch. Islab beschreibt es am besten unten. Es ist sowohl möglich als auch stressfrei. Die einfache Antwort ist, die Maus zu aktivieren und Shift gedrückt zu halten, und Sie können Ihre Maus verwenden, um Text in Ihre Windows-Zwischenablage zu kopieren. Ich mache das täglich mit Win7 und tmux läuft in Putty. Ich habe nicht versucht, die Maus einzufügen. Für mich füge ich den Text, den ich in der Windows-Zwischenablage habe, in das Putty-Terminal ein (normalerweise in etwas, das ich in Vim bearbeite), indem ich Shift + Insert drücke. – Alnilam

+1

@FooBar: Ihr arbeitet für den augenblicklich sichtbaren Text, meine Antwort betrifft den allgemeinen Fall des Kopierens beliebiger Beträge (d. H. Auch unsichtbar) von Text. –

+1

@IngoKarkat: Nach dem sorgfältigen Lesen der OP, stehe ich korrigiert und entschuldige mich. Ich bin auf diesen Beitrag gestoßen, weil ich einfach Text aus einem einzelnen Fenster in Tmux in etwas in Windows kopieren musste. Die Umschalttaste und Modus-Maus löst dafür. Das OP beschwert sich, weil dies nicht für Text in Vim in einem Multipane-Fenster funktioniert (vertikal geteilt), weil die Maushervorhebung über die Fenster hinausgeht. Eine mögliche Lösung wäre, den Zoombereich zu verwenden und dann den Text zu markieren. Zeilennummern müssen in Vim aus sein oder Sie ziehen diese auch. Was würden Sie als Beispiel für "unsichtbaren" Text betrachten? – Alnilam

77

Ich benutze Putty v0.62 und tmux v1.8.

tmux config: setw -g-Modus-Maus auf

Ich möchte einen Text von tmux zu System-Zwischenablage kopieren, ich drücken und SHIFT halten und den Text mit der Maus auswählen und anschließend auf der linken Taste der Maus.

Ich möchte etwas Text in tmux einfügen, drücken Sie UMSCHALTTASTE und klicken Sie mit der rechten Maustaste.

+5

Sie müssen auch "Shift überschreibt die Verwendung der Anwendung der Maus" in der PuTTY-Konfiguration unter 'Window> Selection' überprüft – sparticvs

+0

Das hilft mir sehr! – wukong

+7

Dies sollte die richtige Antwort sein – GoldRoger

13

Dies ist absolut möglich. Alle folgenden Konfigurationszeilen wurden von Maschinen in verschiedenen tmux-Bereichen auf meine Windows-Maschine kopiert. Ja, ich putte in eine Maschine und tmux und ssh von dort zu anderen und kann meine vim yanks zu jeder Maschine, einschließlich meines Windows-Browsers, bewegen.

Ich habe einen X-Server unter Windows (muss nicht auf Windows sein, aber Sie brauchen einen irgendwo).

Wesentliche Bestandteile:

  • putty 0,62 (unter Windows)
  • tmux 1,8 (auf einer Linux-Maschine)
  • xclip (auf Linux-Rechnern)
  • MobaXterm (unter Windows für ihren x-Server)

Ihre Netzwerkeinstellungen können abweichen ein bisschen, vor allem auf dem Display Config-X-Server, aber hier geht es:

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

ich diese am Laufen zu halten aber mach niemals tmux in einem Xterm-Shell. Stellen Sie sicher, dass die gemeinsame Zwischenablage in den X11-Einstellungen ausgewählt ist. Ich nehme an, dass xming funktionieren sollte, aber die Einstellungen für meine anderen Bedürfnisse schienen nie zu funktionieren. MobaXterm hat andere Leckereien, die ich sowieso mag (Dateibrowser usw.).

Ich könnte ich ssh-Sitzung mit tmux in MobaXterm ausführen, aber ich bevorzuge das Putty-Fenster, wo ich meine solarized color palette habe.

Kitt

ssh auf der Maschine mit tmux. An diesem Punkt setze ich die Umgebungsvariable DISPLAY und lege sie in eine env-Datei, die von bash stammt. Auf diese Weise wird jedes nachfolgende Fenster eingerichtet. Die Einstellung auf anderen Rechnern, auf die ich von der tmux-Maschine hopfe, ist eine separate Übung.

In jedem Computer, der die Zwischenablage freigeben wird, stellen Sie sicher, dass Sie den richtigen $DISPLAY festgelegt haben. Sie sollten xeyes ausführen und auf Ihrem lokalen Computer sehen können.

Jeder wird die Zwischenablage freigeben. vim wird in die Zwischenablage kopiert, wenn Sie zerren. Um in einen anderen tmux-Bereich einzufügen, benutze den Bind-Schlüssel ctrl-p (ctrl-a ctrl-p für mich).

Wenn es nicht funktioniert, können Sie immer versuchen, xclip -o -selection clipboard zu sehen, was eingefügt werden sollte. Sie können auch jeden "tmux selected" -Text (Maus oder bind-key [) in die Zwischenablage (und damit in ein normales Windows-Fenster) mit bind-key ctrl-y (d. h. tmux yank) verschieben.

2

Mit ein paar Tricks ist es möglich, den tmux Puffer durch PuTTY und auf den Client zurück zu bekommen. Ich habe dies mit ANSI-Escape-Codes für den "AUX" -Port (serieller Drucker) erreicht.Hier

ist nur eine Anwendung dieser Methode der Übertragung:

1) in serverseitigen tmux.conf hinzufügen:

# 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) in serverseitigen .bashrc hinzufügen:

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) Erstellen Sie auf der Clientseite (Microsoft Windows) einen neuen Drucker:

  • Drucker hinzufügen
  • einen neuen Anschluss erstellen> Local Port
  • einen Portnamen eingeben> "PuTTY_Printer_File"
  • Driver> Microsoft XPS Document Writer
  • Druckername> "PuTTY Printer"
  • Optional: Drucken Sie eine Testseite und stellen Sie sicher, dass sie im Dateiinhalt angezeigt wird. @)

4) In Client-Seite PuTT Y-Konfiguration:

  • Set-Terminal> "Drucker ANSI Druckausgabe senden:" neu Drucker "PuTTY Printer"
  • Set Connection> SSH> "Remote-Befehl:" named erstellt "t" (Referenzierung des Bashrc Funktion oben)

an dieser Stelle können Sie den Inhalt der schicken tmux zu Ihrem PuTTY Client-Puffer durch einen Text in tmux Kopie-Modus Hervorhebungen und y drücken. Der ausgewählte Text endet in %USERPROFILE%\Documents\PuTTY_Printer_File zurück auf dem Client. Wenn Sie einen Schritt weiter gehen und "Einfügen" aus dieser Datei emulieren möchten, können Sie eine Hotkey-Sequenz verwenden, um den Inhalt der Datei zu lesen und einzufügen. Hier ist ein Beispiel, das AutoHotKey nutzt, aber es ist wahrscheinlich möglich, das gleiche Ergebnis in PowerShell zu erzielen, wenn Sie bevorzugen.


5) Clientseitige AutoHotKey Makro:

;### 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) Vollständige Nutzung Verfahren:

  • eine Verbindung zum Server mit PuTTY und fiel in tmux von t() Funktion erhalten.
  • Wenn Sie bereit für Text kopieren auswählen, tmux Hotkey für Copy-Modus (Ctrl + b, [)
  • Cursor mit den Pfeiltasten
  • Auswahl Beginne mit spacebar
  • End Auswahl und kopieren Sie sie mit y
  • Zurück auf Client-Seite PuTTY ausgeführt wird, wird WindowsKey + v die Auswahl einfügen

Da Bilder im wert von 1.000 Worte sind, hier ein Überblick was passiert: https://media.licdn.com/mpr/mpr/AAEAAQAAAAAAAAfiAAAAJDYzM2RmMzYzLTk1NmQtNGQxMi1iN2YyLTQ4NGUxNjExMmVlOA.png