Wie ersetze ich Text in () durch zuvor gezogenen Text?

9

Angenommen, ich habe den Text Fnordzuvor gezogen und mein Cursor befindet sich auf Bder Zeile:

M:mock(Baz)

Wie kann ich den Text in () mit dem zuvor gezogenen Text ändern?

Derzeit mache ich oft den Fehler, indem ich Folgendes mache:

  • di( aka "delete inside ()"
  • UMSCHALT + P.

Das lässt mich aber wieder mit dem genauen Text zurück, da der gelöschte Text in das Register verschoben wird.

Ich möchte haben:

M:mock(Fnord)
k0pernikus
quelle
1
@Rich Die bereitgestellte Frage behandelt den allgemeineren Fall des Ersetzens eines gerissenen Wortes. Ich denke, diese Frage ist etwas spezifischer und zieht nicht die gleichen Antworten an.
k0pernikus
Protip: Das 0Register enthält den zuletzt gezogenen Text. :h quote0
Peter Rincker
1
Die gleiche Idee aus der akzeptierten Antwort der genannten Frage kann hier angewendet werden. Drücken Sie einfach mit dem Cursor in den Klammern vi)p. Es ist das gleiche wie in dieser Antwort, nur mit dem i)Textobjekt anstelle des wTextobjekts,
EvergreenTree
1
@ k0pernikus Ich fürchte, wir müssen uns darauf einigen, dass wir uns nicht einig sind. Für mich ist der wichtige Teil beider Fragen das Ersetzen und nicht das Textobjekt, mit dem es angewendet wird.
Rich

Antworten:

13

Sie können die visuelle Auswahl verwenden, um den zu ersetzenden Text auszuwählen und ihn dann wie folgt einzufügen:

vi(p

vi(wählt Baz aus (weil es in Klammern steht) und pfügt Fnord darüber ein.

Dies wird Baz jedoch nach dem Einfügen in das Register ziehen, was möglicherweise nicht das ist, was Sie wollen.

Alex
quelle
10

Sofern Sie kein Register angeben, verwendet p(oder P) das zuletzt gefüllte Register. Das unbenannte Register ""enthält den zuletzt gerissenen oder gelöschten Text (sofern nicht ein anderes Register angegeben wurde, z. B. mit "ay), aber diese gelten auch "0für Amis oder "1für Löschungen / Änderungen. Siehe Register .

Wenn der letzte Text mitgerissen wurde y, können Sie ihn aus dem 0Register mit einfügen "0P. Wenn es gelöscht wurde, können Sie mit dem 2Register mit "2P( "1ist jetzt Baz) darauf zugreifen .

Alternativ können Sie vermeiden, mit Ihren Registern herumzuspielen, und das Blackhole-Register"_ löschen :

"_di(P
Steve
quelle
3

Wenn die Installation von Plugins eine Option ist, können Sie yankstack.vim verwenden . Dann können Sie Ihren aktuellen Workflow beibehalten:

Derzeit mache ich oft den Fehler, indem ich Folgendes mache:

  • di (aka "delete inside ()"
  • UMSCHALT + P.
  • Alt + p - Zyklus zum vorherigen Ruck
mMontu
quelle
1

Angenommen, "Fnord" befindet sich in Register a, das Sie ausführen können (mit dem Cursor am Zeilenanfang). f(ci(<c-r>a

Christian Brabandt
quelle