vim und systemzwischenablage

9

Ich kann eine Datei katzen, Text kopieren und mit der mittleren Taste einfügen oder bei gedrückter Umschalttaste einfügen.

Wie kann ich Text in vim kopieren und aus der System-Zwischenablage einfügen?

Grantbow
quelle
Manchmal drucke ich die sed -n5,10pZeilen 5-10, damit ich leichter kopieren und einfügen kann, ohne dass vim auf die Maus reagiert.
Grantbow
tatsächlich sieht der Befehl von innen so aus:!sed -n 5,10p %
Grantbow
Vielen Dank für alle Kommentare und Antworten. xclip ist manchmal nützlich, danke @ sergiy-kolodyazhnyy. Wenn ich auf verschiedenen Computern arbeite, habe ich manchmal keine Kontrolle darüber, welches vim installiert ist, aber es ist hilfreich, die Anweisungen zum Überprüfen der Antwort von @muru zu haben, danke @ ashutosh-tripathy. Ich muss die vim register-Befehle häufiger verwenden, um sie mir zu merken, wenn ich sie brauche. Wie ich in der obigen Frage erwähnt habe, sieht der Befehl in vim so aus, wenn ich es schnell machen möchte und die Datei klein ist:!cat %
grantbow

Antworten:

12

Sie müssen sich mit der Vim haben clipboardund xtermclipboardFunktionen in. In Ubuntu zusammengestellt, sind diese nur mit den vim GUI - Paketen zur Verfügung ( vim-gnome, vim-gtk, vim-athena, etc.).

Sobald Sie eines davon installiert haben, können Sie es in die Zwischenablage-Register ( *und +) kopieren (und aus diesen einfügen ). Aus diesem sehr informativen Beitrag zu Vi und Vim :

Für X11- basierte Systeme (dh Linux und die meisten anderen UNIX- ähnlichen Systeme) gibt es zwei voneinander unabhängige Zwischenablagen:

  • PRIMARY - Dies ist Copy-on-Select und kann mit der mittleren Maustaste eingefügt werden.
  • CLIPBOARD - Dies wird (normalerweise) kopiert ^Cund eingefügt ^V(es ist wie bei MS Windows).

Vim hat 2 spezielle Register, die diesen Zwischenablagen entsprechen:

  • *verwendet PRIMARY; mnemonic: s tar ist s (für Copy-on- wählen s elect)
  • +verwendet CLIPBOARD; Mnemonik: STRG + C (für die allgemeine Tastenkombination)

Um in ein Register zu kopieren, müssen Sie dem Kopierbefehl ( y) "den Namen des Registers ( *zum Beispiel) voranstellen . "*yKlicken Sie dann mit der mittleren Maustaste, um sie einzufügen, oder "+yund, ShiftInsertum sie einzufügen.

muru
quelle
3

Eine recht interessante Lösung ergibt sich aus dieser Frage. Installieren Sie xclip, leiten Sie die Ausgabe eines Befehls an xclip weiter ( cat file | xclip -selection clipboardzum Beispiel) und fügen Sie ihn an einer beliebigen Stelle ein (falls dies im Terminal verwendet wird Ctrl ShiftV ). Nun stellt sich heraus, dass Sie diesen Befehl tatsächlich auf kürzen können xclip -sel clip, was aus dem Lesen der Manpage oder der dortigen Beispiele nicht genau ersichtlich ist.

Sergiy Kolodyazhnyy
quelle
2
Ein anderer Ausweg ist, wenn Sie zusammen mit diesem Plugin screen oder tmux verwenden . In jedem Fall muss etwas installiert werden.
Muru
Was ist die eigentliche Zwischenablage, die in x Server verwendet wird? Ich habe nichts gefunden /dev, aber der Text wird immer noch irgendwo gespeichert, oder?
Sergiy Kolodyazhnyy
Ich habe immer angenommen, dass es in Erinnerung bleiben würde. Das scheint jedoch eine schöne Frage für Unix & Linux zu sein .
Muru
3

Ich hatte ein Problem, weil mein vim die Zwischenablage nicht unterstützte :

vim --version | grep clip
-clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      -mouseshape      +startuptime     -xterm_clipboard

Ich habe vim-gnome (das die Zwischenablage unterstützt) installiert und dann erneut überprüft:

vim --version | grep clipboard
+clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      +mouseshape      +startuptime     +xterm_clipboard

Jetzt kann ich mit "+ y" und "+ p" kopieren und einfügen.

Ashutosh Tripathy
quelle