Wie kopiere ich über Terminals?


11

Ich benutze ein Linux-System. Zwei Vims werden in zwei Terminals geöffnet. Jetzt möchte ich Text von A nach B kopieren. Eine Möglichkeit, dies zu tun, besteht darin, Text in A auszuwählen, mit der Maus zu kopieren und dann zu B zu wechseln. Im Einfügemodus fügt der Befehl <c-r>+den Text ein.

Gibt es überhaupt eine Möglichkeit, es ohne Maus auszuführen? wie "+yyin A, wenn auf B umgeschaltet wird o<c-r>+? Ich habe einige Kombinationen vergeblich untersucht. Und ich suchte nach "Kopieren über Terminals", fand aber nichts.

user @statox schlägt eine Lösung im visuellen Modus vor, dh v$"+yin A, wenn zu B gewechselt wird o<c-r>+.

Gibt es eine einfache Möglichkeit, den Text in A zu kopieren, ohne in den v-Modus zu wechseln? Zugegeben, der Eintritt in den V-Modus erfordert nicht zu viele Schlüsselschläge. Fragen Sie sich nur, ob es einen besseren Weg gibt. Z.B. Befindet sich der Cursor in der Mitte einer Zeile, wird yydie gesamte Zeile kopiert (um sich zu registrieren "), während 0v$ydas Gleiche mit einem zusätzlichen Tastendruck ausgeführt wird.

Oder meine Frage kann darauf reduziert werden, ob es eine Möglichkeit mit weniger Tastenanschlägen als 0v$"+ybeim Kopieren gibt , die ich <alt-tab>o<c-r>+zum Einfügen verwenden kann.


Was ist Ihr genaues Problem? Sie scheinen die Lösung zu haben: Wählen Sie Ihren Text im visuellen Modus aus (warum sollte die Maus verwendet werden?), Legen Sie ihn in das Zwischenablage-Register "+yund in die andere vim-Instanz in das Zwischenablage-Register "+p. Oder ein Duplikat davon ?
Statox

Sie müssen nicht in den visuellen Modus wechseln, um etwas zu ziehen. Sie können ymit einer Bewegung ( :help motion.txt) oder einem Objekt ( :help object-select) folgen . Wenn Sie häufig über Vim-Instanzen ziehen und einfügen, ist diese Einstellung möglicherweise clipboardenthalten unnamedoder unnamedplusnützlich. Siehe :help 'clipboard'. Dann sollte das Kopieren zwischen Instanzen einfach funktionieren.
Garyjohn

1
Der Punkt meines Kommentars war nicht der visuelle Modus, eigentlich habe ich Probleme, Ihr Problem zu verstehen: Zuerst dachte ich, es sei die Tatsache, Text von einem Terminal auf ein anderes zu kopieren, jetzt scheint es, dass es darum geht, so wenige Tastenanschläge wie möglich zu verwenden möglich, in das Register der Zwischenablage zu ziehen. Wenn dies der zweite Fall ist, ist der Kommentar von Garyjohn relevant.
Statox

1
0v$ist das gleiche wie V. Und es ist einfach, ein Mapping zu erstellen für "+y: :nnoremap <Leader>y "+y. Das reduziert es also auf V\y.
Martin Tournoij

@Carpetsmoker Ihre Lösung ist gut. Ich würde es gerne als optimale Lösung betrachten, wenn Sie es in den Antwortbereich einfügen. Es scheint, dass ohne Key Map das Beste, was wir für die Kopie in meiner Frage tun können V"+y, 4 Tastenanschläge sind.
user3813057

Antworten:


9

Sie können überprüfen, ob Vim mit Unterstützung für die Zwischenablage erstellt wurde:

:echo has('clipboard')

Wenn die Ausgabe ist 1, sollte Folgendes ausreichen, um Ihr Ziel zu erreichen:

"*y    in source Vim
"*p    in destination Vim

Sie können alles viel nahtloser gestalten, indem Sie das Zwischenablage-Register und das Standardregister mit dieser Einstellung in Ihrem vimrc:

set clipboard^=unnamed

Wenn die Ausgabe von :echo has('clipboard')is 0ist, sollten Sie ein geeignetes Vim wie vim-gtkoder installieren vim-gnome(der Name des Pakets kann von Distribution zu Distribution unterschiedlich sein).


1

Ich denke, die Lösung, die Sie bereits in Ihrer Frage erwähnt haben, ist die richtige. Wenn Sie die Anzahl der Tastenanschläge reduzieren möchten, können Sie einfach eine Karte erstellen, z

vmap <leader>y "+y
vmap <leader>d "+d
nmap <leader>p "+p
nmap <leader>P "+P
vmap <leader>p "+p
vmap <leader>P "+P

Siehe den zweiten Eintrag hier .


1

Um die Antwort von @ romainl zu erweitern (mit Unterstützung für die Zwischenablage), können Sie Register verwenden, die für die systemweite Zwischenablage freigegeben sind.

"+y    To yank/copy from a vim-terminal
"+p    To paste in destination vim-terminal

"*y    To yank/copy from a vim-terminal
"*p    To paste in destination vim-terminal

Durch diese Befehle ausführen, sind Sie y Anking / Kopieren / Speicher ausgewählte Inhalte in den Registern, und p asting sie zum Ziel Vim-terminal. Diese beiden speziellen Register +und *werden mit dem systemweite Zwischenablage geteilt (und damit auch vielen anderen Programmen wie Web - Browser, gedit usw.). Register +ist dem Kopier- / Einfügepuffer zugeordnet und *ist dem Auswahlpuffer zugeordnet (einer, der eine Kopie der Auswahl mit einem mittleren Klick auf ein Textfeld in beispielsweise Ubuntu einfügt) und kann mit ctrl + v( ctrl + shift + vauf dem Gnome-Terminal) eingefügt werden .


1

1) Unter Fedora verwende ich das folgende Setup:

dnf install vim-X11

vim-X11 wird in der Zwischenablage unterstützt - möglicherweise ist es in anderen Distributionen ähnlich.

2) Legen Sie einen Alias ​​in meinem .bashrc fest

alias vim="vimx"

3) In .vimrc:

set clipboard=unnamedplus

Jetzt wird der in Vim übliche Ruck in die System-Zwischenablage verschoben und jedes Strg-C außerhalb von Vim kann in Vim eingefügt werden.


0

Wenn Sie einen Mac (OSX) verwenden, können Sie bpcopy installieren ( weitere Informationen finden Sie unter Brew Install pbcopy - siehe http://brew.sh/ ). Führen Sie dann Folgendes aus (gerade Befehlszeile), ohne die Maus zu berühren:

BEISPIEL:

1) In TERMINAL # 001 :

cat /tmp/stuff.txt | pbcopy

2) Sie können zu Terminal Nr. 002 wechseln (ohne die Maus zu verwenden), indem Sie die in der Terminalanwendung von OSX integrierten Hotkeys verwenden: command+i

3) In TERMINAL # 002 : Öffnen Sie die neue Datei in vim

vi newfile

4) Versetzen Sie vim in den Einfügemodus miti

5) Fügen Sie den Text mit command+ Vaus der Zwischenablage ein (um ihn auf einem Mac aus der Zwischenablage einzufügen).

6) Genieße den Rest deines Tages!

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.