Kopieren von Text von einem tmux-Bereich in einen anderen (mit vim)


133

Ich habe zwei Dateien in vim geöffnet, jede in einem TMUX-Fenster. Ich möchte 10 Zeilen von einer Datei in eine andere kopieren.

Wie kann ich das erreichen, ohne die Maus zu benutzen Copy-> Paste?


2
Sie könnten tmux einbeziehen , aber es gibt im Allgemeinen einfachere Möglichkeiten. Befinden sich beide Vim-Instanzen auf demselben (lokalen?) Computer? Normalerweise würde ich nur eine temporäre Datei dafür verwenden (dh die Zeilen visuell auswählen :w /tmp/lines, dann :r /tmp/linesin der anderen Instanz). Wenn Ihr Vim weiß, wie er mit der Systemablage kommuniziert, können Sie die temporäre Datei mit den Registern +oder *umgehen.
Chris Johnsen

Antworten:


193

Sie müssen tmux-Verknüpfungen verwenden. Angenommen, Ihre tmux-Befehlsverknüpfung ist die Standardeinstellung: Ctrl+ b, dann:

  1. Ctrl+ b, [Kopiermodus aktivieren (?).

  2. Zum Anfang / Ende des hervorzuhebenden Texts bewegen.

  3. Ctrlspace

    Markieren Sie Text (unter Arch Linux). Wenn ich unter OSX und anderen Linux- SpaceBetriebssystemen tmux aus dem Quellcode kompiliert habe, funktioniert das normalerweise nur für sich. Der ausgewählte Text ändert die Farben, sodass Sie wissen, ob der Befehl funktioniert hat.

  4. Zum Kopieren an das andere Ende des Textes verschieben.

  5. Alt+ wKopiert den ausgewählten Text in die Zwischenablage von tmux. (Auf Mac Esc+ verwenden w.)

  6. Bewegen Sie den Cursor in das gegenüberliegende TMUX-Fenster oder in ein völlig anderes TMUX-Fenster. Setzen Sie den Cursor an die Stelle, an der Sie den gerade kopierten Text einfügen möchten.

  7. Ctrl+ b, ]Kopierten text aus der tmux zwischenablage einfügen.

tmux ist ziemlich gut darin, Befehle benutzerdefinierten Tastaturkürzeln zuzuordnen.

Siehe Ctrl+ b, ?für die vollständige Liste der eingestellten Tastaturkürzel.


4
Vielen Dank. Nur eine Randnotiz: Das Alt + w funktionierte nicht auf dem Mac. Alt wurde standardmäßig Esc zugeordnet. Daher ist es Esc + w.
Karan

11
Wenn Sie screenVerknüpfungen verwenden: Ctrl + A [(Kopiermodus aktivieren), Space(Hervorheben starten), Enter(Hervorheben beenden), Ctrl + A ](Einfügen).
jfs

11
Bemerkenswert ist, dass "Enter" für mich funktioniert, während Alt + W dies nicht tut.
Elijah Lynn

3
Wie in awhan.wordpress.com/2010/06/20/copy-paste-in-tmux erwähnt , sollte Schritt 5 durch EnterSchlüssel ersetzt werden, wenn Sie über vi- Tastenzuordnungen verfügen .
Ying Xiong

3
Was passiert, wenn ich in einen Texteditor kopieren und einfügen muss? Aus irgendeinem Grund scheint der ausgewählte Text auch nach dem Drücken der Eingabetaste nach Auswahl des Texts nicht übernommen zu werden.
5.

34

Leider kann ich zu Alex Leachs Antwort noch keinen Kommentar hinzufügen. Daher werde ich hier einen Nachtrag für Mac OS X-Benutzer einfügen:

  1. Enter Kopiert den ausgewählten Text

1
Vielen Dank! Ich bin auf Ubuntu Xenial, benutze byobu/ tmuxmit allen Standardeinstellungen, dies hat funktioniert, Alt + w nicht.
Andrea Zonca

1
Dies funktioniert unter OS X Yosemite mit tmux 2.0 nicht, ebenso wenig wie alt + w und esc + w :(
weberc2

Funktioniert auch unter Windows mit einem Zoc-Terminal.
JDHAO

15

Wenn Sie vim und tmux unter macOS verwenden (Getestet unter macOS 10.12.2, tmux 2.3):

(Angenommen, die Präfix-Tastenkombination von tmux lautet prefix. Das Präfix lautet standardmäßig ctrl+ b.)

  • Kopieren:
    1. Drücken Sie prefix+ [, um den Kopiermodus zu aktivieren.
    2. Verwenden Sie die Pfeiltasten, um zum Anfang / Ende der Textauswahl zu gelangen.
    3. Drücken Sie ctrl+ space(Wenn Sie ctrl+ spaceals Präfix festgelegt haben, drücken Sie stattdessen ctrl+ space+ space)
    4. Verwenden Sie die Pfeiltasten, um zur anderen Seite der Auswahl zu gelangen.
    5. Drücken Sie ctrl+ w.
  • Einfügen:
    1. Drücken Sie im Einfügemodus prefix+ ].

8

Ich verbinde mich mit meinem CentOS-Server auf einem Windows-Computer mit dem ZOC-Terminal-SSH- Client. Folgendes funktioniert bei mir:

  • Aktivieren Sie den Kopiermodus: <prefix>+[
  • Kopie starten: <Space>
  • Text kopieren: <Enter>
  • Text einfügen: <prefix>+]

2

Sie können die System-Zwischenablage mit "* y" und "* p" anstelle der normalen Zeichen "y" und "p" verwenden.


1
Um die System-Zwischenablage verwenden zu können, müssen Sie "+2yy- zwei Zeilen in die X11-Zwischenablage kopieren "+dd- eine Zeile in die X11-Zwischenablage ausschneiden - die X11-Zwischenablage "+peinfügen
Patryk

Muss ich etwas eingeben, bevor ich diese Befehle verwende?
Thomas Ahle

@ThomasAhle, nein .. sein buchstäblich die doppelten Anführungszeichen ( "), gefolgt von Plus (+) , gefolgt von 2YS (y). Stellen Sie sicher , dass Sie im normalen Modus sind. Wenn Sie im normalen Modus sind, sollen Sie in der Lage zu nutzen , h,j,k,lum Ich habe auch manchmal auf meiner Ubuntu-VM gesehen, dass das "+" - Register aus einem unbekannten Grund verschwindet. Um zu überprüfen, ob Sie das +Register haben, können Sie :reg"+
eingeben

Ja, das ist es, das ist die Antwort. Viel einfacher als die anderen vorgeschlagenen (mit tmux copy / paste), und dies beeinträchtigt die Zeilennummern nicht. Würde dies zu Problemen führen, wenn Sie standard yund pto "+yund neu zuordnen würden "+p?
Ryan

1

Wenn Sie vimgeöffnet haben, ist es besser, den vim copy paste zu verwenden, um Text zu kopieren.

Tmux Copy Paste wird funktionieren, es gibt jedoch einige Nachteile.

Wenn Sie mehrere Textzeilen kopieren, müssen Sie zunächst mehrere Zeilen auswählen. Tmux copy paste versteht normalerweise nicht, dass vimes Zeilennummern oder Markierungen in der Vim-Rinne gibt (z. B. relative Zahlen / absolute Zahlen). Infolgedessen werden auch diese kopiert.

Zweitens habe ich festgestellt, dass wenn der Text eine bestimmte sprachspezifische Formatierung hat und Sie direkt versuchen, Paste mit tmux zu vim zu kopieren, dies die Formatierung durcheinander bringt. Dies kann durch die Verwendung von vermieden werden set paste!. Dies erfordert jedoch viel mehr Arbeit.

Verwenden Sie "+yzum Kopieren und "+peinfügen

VimBietet nativ eine Methode zum Kopieren und Einfügen zwischen dem VIM-Puffer und der System-Zwischenablage. Verwenden Sie dazu entweder "+yoder "*y. Dann mit "+poder einfügen "*p. Dadurch wird vermieden, dass die relativen Zahlen in die Rinne oder andere zufällige Markierungen kopiert werden, die für vim nicht relevant sind


0

Ein paar Optionen für vim, da die tmux-Verknüpfungssequenz etwas lang ist und ich mich nur schwer erinnern kann

Wie die Antworten oben gesagt können Sie verwenden "+yund "*yzu kopieren und dann "+pund "*pjeweils einzufügen. Wenn Sie möchten, dass vim standardmäßig die Zwischenablage verwendet, können Sie diese direkt verwenden y/p.

set clipboard=unamed "sets the default copy register to be *
set clipboard=unamedplus "sets the default copy register to be +

Quelle für den Zwischenablage-Befehl: https://vi.stackexchange.com/questions/84/how-can-i-copy-text-to-the-system-clipboard-from-vim

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.