it-swarm.com.de

Wie kann ich mit dem aktuellen Einfügepuffer ein Wort in Vim ändern?

Ich habe Text in meinem Einfügepuffer, z. Ich habe ein yw (yank Word) gemacht und jetzt habe ich 'foo' in meinem Puffer.

Ich gehe jetzt zur Word-Leiste und möchte sie durch meinen Einfügepuffer ersetzen.

Um den Text manuell zu ersetzen, könnte ich cw ausführen und dann das neue Wort eingeben.

Wie kann ich ein Wort ändern, aber den Inhalt meines Einfügepuffers verwenden, anstatt das Ersatzwort manuell einzugeben?

Die beste Option, die ich derzeit habe, ist, zum Anfang des Wortes zu gehen, das ich ersetzen möchte, und dw (Word löschen) auszuführen, an die andere Stelle zu gehen und yw (ruckeln) auszuführen Wort). Gehen Sie dann zurück zum Ersatzbereich und führen Sie p (Einfügen) aus, was etwas ungeschickt ist, insbesondere wenn sie sich nicht auf demselben Bildschirm befinden.

102
Michael Durrant

Option 1

Sie können dazu Register verwenden und eine Tastenkombination für den Prozess erstellen.

Ziehen Sie das Wort, durch das Sie ersetzen möchten yw.

Das gezogene Wort steht im 0 Register, das Sie sehen können, indem Sie :registers.

Gehen Sie zu dem Wort, das Sie ersetzen möchten, und tun Sie es cw. Tun Ctrl+r gefolgt von  um das 0 registrieren.

Die Karte dafür würde ungefähr so ​​aussehen (vorausgesetzt Ctrl+j als unsere Schlüsselkombination):

:map <C-j> cw<C-r>0<ESC>

Option 2 (einfacher)

Bewegen Sie den Mauszeiger über das Wort, das Sie ersetzen möchten viwp. Welches ist visuell wählen Sie inneres Wort und fügen Sie ein.

Mit freundlicher Genehmigung von @tlo in den Kommentaren: Sie könnten auch einfach tun vep. Ein Zeichen kürzer. Der Nachteil muss den Cursor am Anfang von Word positionieren und (wie bei mir) den Puffer ändern.

Kommentar (von Michael):

Das ist gut. Zusätzlicher Hinweis: Die zweite Methode ist zwar einfacher, funktioniert aber wie sie ist nur für EINE Ersetzung, da der Puffer nach jeder Ersetzung in das Feld geändert wird, das ersetzt wurde (alter Text). Die erste Methode ist etwas schwieriger zu verwenden, hat jedoch den Vorteil, dass der Puffer 0 unverändert bleibt, sodass Sie mit dieser Methode mehr als eine Ersetzung desselben Textes durchführen können.

145
jmathew

Der VIM Weg besteht darin zu lernen, wie man absichtlich den Ruck benutzt, löscht und andere Sobald Sie diese kennen, finden Sie leicht Ihre eigenen Schlüsselsequenzen, um dies zu tun.

Register "0 Ist das Ruckregister. Alles, was Sie ziehen, wird hier abgelegt, aber weder Löschen noch Ändern von Entfernungen berühren jemals das Register "0.

In Ihrem Beispiel haben Sie also gerade ein Wort gerissen. Um ein Wort durch das zu ersetzen, was Sie gerade gezogen haben, nutzen Sie Löschvorgänge, die niemals das Ruckregister berühren. Gehen Sie also zum Zielwort, löschen Sie es mit dw und fügen Sie es dann mit "0p Oder besser noch mit cw und dann ^R0 (Was auch immer) aus Ihrem Ruckregister ein ist wiederholbar).

Die Kehrseite des Ruckregisters ist das kleine Löschregister "-. Jedes kleine Löschen oder Entfernen von Änderungen wird hier eingefügt, aber Amis berühren niemals "-. Eine Löschung gilt als klein, wenn sie weniger als eine vollständige Zeile enthält.

Register "1 - "9 Sind die großen Löschverlaufsregister. Mit "1, Das die letzte große Löschung oder Entfernung von Änderungen enthält, und "9, Das die älteste große Löschung oder Entfernung von Änderungen enthält. Nur Löschungen, die nicht klein sind, d. H. Löschungen einer vollständigen Zeile oder mehr, werden auf "1 - "9 Übertragen.

Für jede Operation, die ein Register ändert, wird auch immer eine Kopie im Standardregister a.k.a. unbenannt "" Abgelegt. Dies ist das Register, das verwendet wird, wenn Sie ein Register nicht explizit benennen.

Register "_ Ist das Schwarzlochregister und immer leer. Wenn Sie es löschen, wird in keinem Register etwas geändert, nicht einmal das Standardregister "" Oder das Schwarzlochregister selbst. Der entfernte Text ist vollständig verschwunden, abgesehen von Ihrem Rückgängig-Verlauf. Das Ziehen oder Einfügen aus dem Schwarzlochregister bewirkt im Wesentlichen nichts.

Mit dem Schwarzlochregister "_ Können Sie zuerst eine kleine Löschung und dann eine Reihe anderer Löschungen in "_ Ausführen, ohne Ihr kleines Löschregister "- Zu ändern, und dann Ihre erste einfügen kleine Streichung.

Andere Register sind das zuletzt eingefügte Register "., Die Dateinamenregister "% Und "#, Das Befehlsregister ":, Das Suchregister "/ Und Ausdrucksregister "=.

Mit dem Befehl :register Können Sie eine Liste aller dieser Register sowie deren Inhalt abrufen. Da der aktuelle Inhalt der Register angezeigt wird, ist der Befehl sehr nützlich, um zu experimentieren und zu erfahren, was wo endet.

12
00prometheus

yw, um Ihr Wort zu ziehen, bewegen Sie den Cursor dann auf das Wort, das Sie ersetzen möchten, und löschen Sie es mit "_dw. Senden Sie den Text an das Nullregister (damit der Inhalt nicht überschrieben wird des Registers ", in dem standardmäßig gezerrter/ausgeschnittener Text verwendet wird, und fügen Sie ihn dann einfach mit p ein.

Sie können die folgende Zuordnung verwenden, um die Dinge ein wenig einfacher zu machen:

nnoremap <leader>d "_d

... also können Sie im normalen Modus \dw verwenden, um ein Wort zu löschen, ohne das Register " zu beeinflussen.

12
evilsoup

Ich brauche das so oft, dass ich ein Plugin geschrieben habe, um die maximale Geschwindigkeit zu vereinfachen und zuzulassen: ReplaceWithRegister .

Dieses Plugin bietet einen Zwei-in-Eins-Befehl gr, der Text, der von einem {motion}/text-Objekt, ganzen Zeilen oder der aktuellen Auswahl abgedeckt wird, durch den Inhalt eines Registers ersetzt. Der alte Text wird in das Schwarzlochregister gelöscht, d. h. er ist verschwunden. Es behandelt transparent viele Eckfälle und ermöglicht eine schnelle Wiederholung über den Standard . Befehl. Sollte es Ihnen nicht gefallen, enthält die Seite Links zu Alternativen.

3
Ingo Karkat

Wechseln Sie durch Drücken in den visuellen Modus v um den interessanten Text zu erfassen und durch Drücken von zu kopieren y. Erfassen Sie nun den zu löschenden Text und drücken Sie p zum Einfügen.

(Replacing text in Vim

2
Purkhalo Alex

m das Einfügen zu wiederholen, verwenden Sie den Befehl change.

cw^RESC (^ R = Strg + R; 0 für Register 0)

ersetzt das Wort durch den Inhalt von reg. 0 und lassen Sie es uns wiederholen mit .

Das ist toll für cgn (VIM 7.4), um Suchmuster zu ersetzen:

  • Erste Suche mit / oder *
  • cgn^RESC
  • . beim nächsten Spiel wiederholen oder n zu überspringen
2
laktak

Ich benutze normalerweise Folgendes: yw um foo zu ziehen und dann bar mit zu löschen dwund als letzten Schritt foo aus dem Register 0, das zerrte Text mit enthält "0p. Wiederholen Sie das Setzen mit Punkt (.) wie benötigt.

Auch anstelle von yw und dwkönnen Sie verwenden yiw und diw (Beachten Sie das Extra i - es bedeutet innen). Damit können Sie Word von jedem Ort aus ziehen oder löschen innerhalb es, nicht nur am Anfang von Word.

1
Nino

Da es noch nicht enthalten ist, ersetzen Sie normalerweise Zeichenfolgen durch :%s/.../.../ und Sie können dies auch mit dem Wort unter Ihrem Cursor tun.

  1. Sie geben den ersten Teil des Befehls ein, nach dem Sie suchen: :s/find/
  2. Dann klicken Sie auf <ctrl-r> und wählen Sie mit dem Cursor das Wort aus, durch das Sie es ersetzen möchten.
  3. Dann klicken Sie auf <ctrl-w> (kleines "Wort") oder <ctrl-a> (großes "Wort"), um das Wort unter dem Cursor in die Befehlszeile einzufügen
  4. Dann beenden Sie den Befehl.

Siehe den Link zur Verwendung von Cursor in der Befehlszeile .

1
erikbwork

Zu den anderen besseren Antworten hinzufügen. Ein bisschen zu offensichtlich, aber Sie können es einfach einfügen, bevor Sie es löschen. ’Yw’ dann gehen Sie zu dem Wort, das Sie ersetzen möchten, ’pldw’ (einfügen, ein Zeichen nach rechts verschieben, Word löschen.

1
Ali Almoullim

Navigieren Sie zunächst zum Anfang des Wortes, das Sie ziehen möchten. Wenn Sie sich mitten im Wort befinden, führen Sie einfach b aus, um zum Anfang zurückzukehren. Führen Sie dann ye aus, um das gesamte Wort zu ziehen, ohne nachgestellte Leerzeichen (yank bis end). Wechseln Sie schließlich zu dem Wort, das Sie ersetzen möchten - möglicherweise indem Sie einige Male w ausführen - und führen Sie ein vep aus, um den visuellen Auswahlmodus v aufzurufen, und wählen Sie end des Wortes und paste den zuletzt gerissenen Inhalt.

(Wenn jemand wissen möchte, warum ich die akzeptierte Antwort nicht einfach kommentiert habe, für die kleine Änderung der Verwendung von ye anstelle von yw, dann deshalb, weil mein Ruf auf diesem Stapel immer noch zu niedrig ist .)

0
Anomaly

Ich verwende die folgende Tastenbelegung, um das aktuelle Word durch kopiertes Word zu ersetzen.
" replace with Register 0
map <leader>rr ciw<C-r>0<Esc>

yiw Kopieren Sie ein Wort. Navigieren Sie zu einem Wort. ,rr Ersetzen Sie das Wort.
Der Leitschlüssel ist die Zuordnung zu ,.

0
Fisher
  1. verwenden Sie yw, um die Welt zu zerreißen und zu der Welt zu gehen, die Sie ändern möchten.
  2. verwenden Sie v, um die Welt auszuwählen, ve oder vw, je nach Ihrer Situation.
  3. geben Sie p ein, um die Welt zu kopieren, die Sie kopiert haben, um den ausgewählten Block zu ersetzen
0
ramwin

Mein Tipp/Vorschlag: vim-exchange plugin . es hilft, Wörter wie folgt auszutauschen:

Markieren Sie das erste Wort für den Austausch -> cxiw und drücken Sie dann Punkt ..

Wenn Sie vim-plug verwenden, verwenden Sie einfach:

Plug 'tommcdo/vim-exchange'

Dann

:PlugInstall

Befolgen Sie bei anderen Plugin-Managern die Dokumentation

0
SergioAraujo

Ich benutze dieses Plugin zum Erweitern des Auswahlbereichs: https://github.com/terryma/vim-expand-region

Meine Kombination zum Ändern eines Wortes lautet also: vvp an einer beliebigen Stelle eines Wortes.

Ich habe auch einen Hack zum Speichern von unbenannten Registerinhalten nach dem Einfügen, damit ich dies wiederholen kann.

vnoremap p p:let @"[email protected] <CR>
vnoremap P P:let @"[email protected] <CR>

(Meine Zwischenablage ist automatisch ausgewählt)

0
user2656799