Kopieren, löschen und dann in Vim einfügen

15

Ich habe gestern gerade mit Vim angefangen und habe Probleme, Copy & Paste zu verstehen. Ich verstehe zu kopieren, ich gehe in den visuellen Modus, hebe hervor und ziehe dann. Ich gehe dann zu der Zeile, in die ich einfügen möchte, aber in den meisten Fällen muss ich keinen Text aus dieser Zeile löschen. Ich mache das mit xoder dw. Dies führt dann dazu, dass meine Originalkopie überschrieben wird ( xund dwzu schneiden scheint). Wie komme ich darum herum?

Um es in ein Beispiel zu fassen

$foo = $this->foo->property;
thislineuses($foo);

Also mit dem obigen Code, den ich kopiere $this->foo->property, möchte ich dann in Zeile 2 gehen, löschen $foound einfügen. Ich habe das Problem, wenn ich $fooaus Zeile 2 lösche , wird dies stattdessen eingefügt $this->foo->property.

Kazark
quelle

Antworten:

16

Schauen Sie sich an :h copy-move. Der Standardwert für "Ziehen" oder "Löschen" wird in einem Bereich gespeichert, der als "Register" (ein Register mit dem Namen ") bezeichnet wird. Wenn Sie vor dem Einfügen Text löschen müssen, müssen Sie das Überschreiben von Register x vermeiden, wie Sie festgestellt haben. Glücklicherweise können Sie einen anderen Buchstaben oder eine andere Zahl verwenden, um ein anderes Register zu benennen.

  • "ayy(Ziehe eine Linie ins Register a)
  • x, ddEtc. (etwas Text in das unbenannte Register löschen, ")
  • "ap(fügen Sie den Text aus dem Register ein a)
Kristo
quelle
9

Wenn das Problem ist, dass Sie nur einige textdurch einige ersetzen müssen text2, dann markieren Sie und ziehen Sie text2. Markieren textund drücken Sie poder, Pum text2anstelle von einzufügen text.

Eine weitere Kurzanleitung für einige gebräuchliche vim-Befehle ist http://www.catswhocode.com/blog/100-vim-commands-every-programmer-should-know

Genießen!

Bearbeiten: Beachten Sie, dass pText nach dem Cursor und Pvor dem Cursor eingefügt wird.


quelle
Das ist schön, weil Sie nicht über Zwischenregister nachdenken müssen, in die Sie reißen können. es funktioniert einfach.
Jon Schoning
7

Sie können in ein benanntes Register kopieren "ayw, löschen und dann aus dem benannten Register einfügen "ap.

Normalerweise ist es jedoch einfacher, die Reihenfolge zu ändern, in der Sie die Dinge erledigen. Führen Sie das Einfügen und dann das Löschen durch, oder löschen Sie und führen Sie das Kopieren / Einfügen durch.

Alternativ können Sie auch in das Black-Hole-Register löschen "_d. Siehe /programming//q/54255/70863

Eric Bock
quelle
3

Sie haben verschiedene Register, in denen Sie verschiedene Textwerte speichern können. Wenn Sie Text in einem anderen Register als dem Speicherort des gelöschten Texts speichern möchten (z. B. mit xoder d w), verwenden Sie Folgendes:

So speichern Sie Text im Register a:

  • drücke " a[ruck und bewegung befehl] (speichert text in register a)
  • Gehen Sie zu der Stelle, an der Sie den Text einfügen möchten
  • drücken " a p(Text aus dem Register einfügen a)

Sie können für jeden Buchstaben auf der Tastatur und für jede Zahl ein Register verwenden. Wenn Sie Text löschen, werden diese Register nicht verwendet, sodass der Text im Register verbleibt, bis Sie Ihre Sitzung beenden oder manuell etwas anderes hinzufügen.

Jason Down
quelle
0

Sie müssen nicht die gesamte Zeile markieren, wenn Sie v(im Gegensatz zu V) den visuellen Modus verwenden. Wenn Sie danach fragen.

Wenn Sie kopierten Text ändern möchten, müssen Sie zuerst die Teile kopieren und löschen.

Und wenn du kopieren willst, dann ändere das Original und füge es dann ein. Dann kannst du in ein anderes Register ziehen. Wie "2y, dann ändern, dann woanders hingehen und "2p.

Michael Krelin - Hacker
quelle