Kopieren und Einfügen von Inhalten im vi-Editor


165

Ich habe versucht, Ctrl+ Vzum Einfügen von Inhalten in ein vi-Editor-Dokument zu verwenden, aber Ctrl+ Vwird nicht als Paste interpretiert.


16
Nur ein Hinweis, der Hauptgrund für die Verwendung von Vi ist, dass Vim nicht installiert ist. Wenn Sie Vim installiert haben, lohnt es sich wahrscheinlich, dies stattdessen zu verwenden. Außerdem hat Vi nicht wirklich den Vorteil, dass es bereits in jeder Unix-Installation vorhanden ist. Der beste Weg, um Vim zu lernen, besteht meiner Meinung nach darin, Ihren Terminal-Emulator (nicht aus Vim heraus) zu öffnen und einzugeben. vimtutorIn etwa 45 Minuten sind Sie so auf dem Laufenden, wo es für Sie brauchbar ist.
Ben Mordecai

1
+1 @BenMordecai - Ich war bereits mit vi (aus alter Zeit) vertraut, einschließlich seiner praktischen Sub-Shell-Fähigkeit, benötigte aber diese Aktualisierung. Tolles bisschen Nachhilfe. Ging durch wie eine Brise. Vielen Dank.
Cbhihe

Antworten:


192

Stellen Sie zunächst sicher, dass Sie sich im Bearbeitungsmodus befinden (drücken Sie i). Dann können Sie mit Ctrl+ Shift+ einfügen V, wenn Sie sich in einem Terminal-Emulator wie gnome-terminal(oder wählen Sie "Einfügen" aus dem Kontextmenü).

Sie können auch :set pastevim vor dem Einfügen eingeben, um das automatische Einrücken usw. zu deaktivieren. Anschließend können :set nopasteSie den Inhalt einfügen.

Überprüfen Sie auch diese Frage auf stackoverflow.com für weitere Informationen.

Wenn Sie Zeilen kopieren / einfügen möchten vim(im Gegensatz zum Einfügen von Inhalten aus der Zwischenablage), müssen Sie den Befehl yank auschecken . Hier ist ein Spickzettel , der helfen könnte.


1
Ich denke, wenn Sie einen Mauszeiger haben, können Sie ihn nicht mit Strg + Umschalt + V einfügen.
Alvin Wong

14
Nur eine Anmerkung, die IGroß- und Kleinschreibung ist wichtig. Die Kleinschreibung iist die normale Art, in den Einfügemodus zu wechseln. Großbuchstaben Ibringen den Cursor an den Anfang der Zeile und rufen dann den Einfügemodus auf.
Ben Mordecai

64

Vi (und Vim) funktionieren ganz anders als ein normaler Texteditor wie Gedit. Es hat auch eine ziemlich steile Lernkurve. Wenn Sie einige grundlegende Befehle erlernen möchten, beginnen Sie mit diesem interaktiven Lernprogramm .

Um Ihre Frage zu beantworten. Auf den Inhalt der Systemzwischenablage kann über das Plus-Register zugegriffen werden. Um also etwas aus der System-Zwischenablage einzufügen, können Sie im normalen Modus Folgendes drücken: "+p(Nicht gleichzeitig, sondern nacheinander).


3
Dies ist etwas, was ich bis jetzt nicht wusste. Außerdem +1 für das Verknüpfen eines weiteren fantastischen vim-Tutorials.
Attila O.

19
Apropos Lernkurven für Redakteure: Es gibt die "klassischen Lernkurven für einige gängige Redakteure", blog.thilelli.net/public/store/attached/curves.jpg .
hlovdal

In GNOME Terminal lauten die Verknüpfungen zum Kopieren und Einfügen Strg-Umschalt-C bzw. Strg-Umschalt-V.
Flimm

1
Ich habe versucht, nacheinander <kbd> "</ kbd>, <kbd> + </ kbd> und <kbd> p </ kbd> sowie <kbd>" </ kbd> und <kbd> p <zu drücken / kbd> und nichts ist passiert. Was habe ich falsch gemacht? Ich benutze vinichtvim
user907860

1
Das ist die richtige Antwort. Verwenden Sie zB. Strg-Umschalt-v funktioniert nur mit den einfachsten Inhalten (Zeilenumbrüche und Einrückungen können wirklich falsch sein, wenn Sie sich im Terminal befinden und die Verwendung vergessen haben set :paste).
Rsenna

29
  1. Wenn Sie Inhalte innerhalb derselben Datei einfügen möchten , verwenden Sie yankund paste.

  2. Wenn Sie Inhalte terminalübergreifend einfügen möchten, öffnen Sie die erste Datei mit dem gewünschten Text, öffnen Sie dann Ihre zweite Datei in vim (z. B. :tabnew /path/to/second/file) und drücken Sie, um sie einzufügen p.

  3. Wenn Sie Inhalte von vim in ein externes Programm kopieren möchten , müssen Sie auf die Systemzwischenablage zugreifen. Ich gehe davon aus, dass Sie Ubuntu verwenden. Die GUI-Version von Vim unterstützt immer die Zwischenablage. Wenn Sie Vim jedoch von einem Terminal aus verwenden möchten, müssen Sie die X11-Zwischenablage-Unterstützung überprüfen.

    Geben Sie an der Konsole Folgendes ein:

    $ vim --version | grep xterm
    

    Wenn Sie -xterm_clipboard finden , haben Sie zwei Möglichkeiten:

    1) Kompilieren Sie vim selbst mit eingeschaltetem xterm_clipboard-Flag

    2) Deinstallieren Sie vim und installieren Sie stattdessen gvim (vim-gtk oder vim-gnome). Sie können sich an Nicht-GUI-VIM halten, indem Sie VIM vom Terminal aus aufrufen, so wie Sie es zuvor getan haben. Wenn Sie diesmal nachsehen, sollten Sie + xterm_clipborad finden .

    Wenn Sie jetzt einen Text in das + -Register in Ihrem VIM-Editor ziehen (z. B. "+ yy"), wird dieser ebenfalls in die System-Zwischenablage kopiert, die Sie mit Ctrl+ aus Ihrem externen Programm wie gedit editor abrufen können V.

  4. Wenn Sie Inhalte aus einem externen Programm in vim einfügen möchten, kopieren Sie Ihren Text zuerst über Ctrl+ Cin die Systemzwischenablage . Klicken Sie dann im Einfügemodus des vim-Editors mit der mittleren Maustaste (normalerweise mit dem Rad) oder drücken Sie zum Einfügen Ctrl+ Shift+ V.

    Dies sind 4 grundlegende Kopier- und Einfügebedingungen für vim. Ich hoffe das hilft.


Was ist der Sinn von: tabnew / path / to / second / file? Sie können genau das Gleiche erreichen, indem Sie in der ersten Datei ziehen / kopieren / schneiden, die zweite Datei mit vi / path / to / second / file öffnen und (p / P) einfügen. Zumindest in meinem Fall ... Oder liegt es daran, dass ich die Funktion + xterm_clipboard vim aktiviert habe? Oder gibt es mehr zu tun als nur das?
Cbhihe

1
Auf Ubuntu vim-gtkhat xterm_clipboardUnterstützung und auf Fedora xvimhat es.
ICC97

18

Ich benutze immer Shift+, Insertwenn ich Text in das Terminal einfügen möchte, funktioniert in allen Terminalprogrammen.

(Das ist auch der Grund, warum ich nie einen Laptop bekomme, auf den man nicht drücken kann, Insertohne eine Sekundärtaste zu drücken.)


2
Vi/ Vim! = terminal;)
0xC0000022L

1
ok ok, aber es funktioniert immer noch :)
Magnus Jonsson

+1 für diese .. Was tun Sie sagen ausführen Ctrl+A, Ctrl+Cauch?
Arup Rakshit

Wenn ich ein Terminal in einem DE verwende, wähle ich normalerweise nur Text mit der Maus aus und kopiere ihn mit Strg + Umschalt + C.
Magnus Jonsson

Umschalt + Einfügen funktioniert auch in gvim. (Ich verwende Ubuntu 13.10, wenn das einen Unterschied macht.)
eksortso

10

Verwenden Sie die mittlere Maustaste , um Text einzufügen, den Sie an einer anderen Stelle hervorgehoben haben.

Dies ist nützlich, wenn Sie keinen Zugriff auf Ihre Systemzwischenablage haben (z. B. in einer Remote-SSH-Sitzung).

Muss für Vim im Bearbeitungs- / Einfügemodus sein.


6

Sobald Sie vi eingegeben haben, drücken Sie i, um in den Einfügemodus zu gelangen, klicken Sie mit der rechten Maustaste in das Terminal und klicken Sie auf Einfügen.


Ich dachte, es sei Kleinbuchstaben i. Was macht Großbuchstaben I?
Flimm

@Flimm das wurde schon in einem Kommentar von Ben Mordecai zu einer anderen Antwort erklärt.
Sierrasdetandil

Ich habe die Antwort so bearbeitet, dass sie Kleinbuchstaben enthält i. Großbuchstaben Ibewegen den Cursor an den Zeilenanfang, bevor Sie in den Einfügemodus wechseln, der hier nicht benötigt wird.
Flimm

5

Detaillierte Anweisungen zum Kopieren / Einfügen von Textzeilen in vi mit yankundput

(Verwenden Sie die folgenden Befehle im Befehlsmodus von vi)

Kopieren (YANK)

So kopieren Sie eine Zeile in vi:

  • Bewegen Sie den Cursor im Befehlsmodus auf die zu kopierende Zeile und geben Sie yyoder geben Sie einY

So kopieren Sie 2 Zeilen in vi:

  • Bewegen Sie den Cursor im Befehlsmodus in die erste Zeile, die kopiert werden muss, und geben Sie 2yyoder geben Sie ein2Y

(Ebenso können beliebig viele Zeilen kopiert werden)

So kopieren Sie alle Zeilen vom aktuellen Speicherort bis zum Ende der Datei:

  • Bewegen Sie den Cursor im Befehlsmodus in die erste Zeile, die kopiert werden muss, und geben Sie Folgendes ein yG

So kopieren Sie den gesamten Text von der aktuellen Position bis zum Ende des aktuellen Wortes:

  • Bewegen Sie den Cursor im Befehlsmodus an die Stelle, an der der Text kopiert und eingegeben werden muss yw

So kopieren Sie den gesamten Text von der aktuellen Position bis zum Zeilenende:

  • Bewegen Sie den Cursor im Befehlsmodus an die Stelle, an der der Text kopiert und eingegeben werden muss y$

Einfügen (PUT)

So fügen Sie Text in die Zwischenablage ein - nach der Position des Cursors:

  • Geben Sie im Befehlsmodus Folgendes ein p

So fügen Sie Text in die Zwischenablage ein - vor der Position des Cursors:

  • Geben Sie im Befehlsmodus Folgendes ein P

1

Ich hatte ein Problem, weil meine Vim-Installation 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 noch einmal ü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.


Das hat mein Problem behoben!
Astrojuanlu

1

Mit Vim 8+ unter Linux oder Mac können Sie jetzt einfach die native Paste des Betriebssystems verwenden ( ctrl+shift+Vunter Linux und cmd+VMac). Drücken Sie nicht ifür den Einfügemodus.

Der Inhalt der Zwischenablage Ihres Betriebssystems wird eingefügt, die Leerzeichen und Tabulatoren bleiben erhalten, ohne dass ein automatischer Einzug hinzugefügt wird. Es ist gleichbedeutend mit dem alten :set paste, i, ctrl+shift+V, esc, :set nopasteMethode.

Sie müssen nicht einmal die +clipboardoder +xterm_clipboardvim-Funktionen mehr installieren. Diese Funktion wird als "Einfügen in Klammern" bezeichnet. Weitere Informationen finden Sie unter https://stackoverflow.com/questions/2514445/turning-off-auto-indent-when-pasting-text-into-vim/56781763#56781763


Das ist die Antwort, nach der ich suche. Da Vim in GNU / Linux-Distributionen nicht standardmäßig installiert ist, muss es auch in Ubuntu installiert werden. Darüber hinaus funktionieren die Auf-Ab-Tasten von Vi nicht auf Ubuntu und weisen keine Hervorhebungen auf.
itsnotmyrealname

0

Wenn du root bist : Ctrl+ Shift+V

Wenn Sie nicht als Root angemeldet sind : Klicken Sie mit der mittleren Maustaste.


0

Ich wollte nur darauf hinweisen, dass Sie mit Vim über Git Bash unter Windows nur pdie Maus verwenden oder mit der mittleren Maustaste klicken können, ohne sich im Einfügemodus zu befinden. Mit Vim über PuTTY können Sie einfach mit der rechten Maustaste klicken. Und das Markieren macht das Kopieren.

Ich habe dies bemerkt, weil ich hier nicht gesehen habe, dass dies SE für Ubuntu ist.

Andere hilfreiche Befehle:

  • yy(Anzahl der Zeilen) - Ruck (Kopie)
  • dd(Anzahl der Zeilen) - löschen
  • p - Zeile unterhalb der aktuellen Zeile einfügen
  • Shift+ p- Zeile oberhalb der aktuellen Zeile einfügen
  • u - rückgängig machen
  • r - wiederholen
  • i - Einfügemodus
  • v - visueller Modus

Das hat bei mir unter Windows Git Bash nicht funktioniert. Welche Konsole verwenden Sie, Mintty oder Windows Cmd?
wisbucky

Ich glaube, es war Minze.
Tyler Christian

0

Sie könnten verwenden Ctrl+ Shift+ Vin Terminalversion vim einzufügen, aber für die GUI - Version vim wie Neovim-Qt, Einfügen von Text aus der Zwischenablage mit Ctrl+ Shift+ Vwird einfach nicht funktionieren. Sie müssen auf die Zwischenablage "+oder "*den VIM-Editor zugreifen .

Durch Hinzufügen einer neuen Tastenkombination .vimrcwerden einfach die Befehle zum Kopieren / Einfügen ausgeführt:

" paste from system clipboard, align indentation with surroundings
noremap <Leader>p "*]p:set nopaste<CR>
" copy a sentence into system clipboard
noremap <Leader>y "+y)
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.