Wie kann man in Vim suchen und ersetzen, ohne das ursprüngliche Wort eingeben zu müssen?

53

Ich möchte meinen Workflow zum Suchen und Ersetzen in Vim optimieren. Das ist etwas, was ich oft mache, wie ich mir sicher bin, dass die meisten von Ihnen es auch tun. Normalerweise kopieren Sie einen Block und ändern den Namen einer Variablen an einigen Stellen. Ich weiß, ich weiß, das löst wahrscheinlich deinen Reflex "Warum kopierst du und fügst du Code ein" aus, aber lass uns diesen Weg nicht beschreiten ... Es gibt viele gültige Anwendungsfälle :)

Ich bin mir der Befehle zum Suchen und Ersetzen sehr wohl bewusst: :soder :%saber ich mag sie nicht. Es zwingt mich, sowohl den vollständigen Variablennamen, den ich suche, als auch den Namen einzugeben, in den ich ihn ändere. Vielleicht gibt es eine bessere Möglichkeit, die Anzahl der Tippvorgänge zu korrigieren :%s? Ich verwende oft lange beschreibende Variablennamen, so dass das für mich wirklich ein Deal Breaker ist. Ich mag es auch nicht, dass das Herausschreiben eines Variablennamens von Grund auf für Tippfehler anfällig ist und Zeit und Nerven kostet, um Tippfehler aufzuspüren. Ich bevorzuge es, es einmal zu tippen und dann zu kopieren und einzufügen, um dies nach Möglichkeit ganz zu vermeiden.

In meinem aktuellen Arbeitsablauf wird eine Kombination aus "Verschieben" / "Ziehen" / "Auswählen" / "Suchen" / "Platzieren" verwendet, um die Datei zu verschieben und einzeln zu ersetzen. Es ist nicht besonders gut, hat aber den Vorteil, dass Sie keine vollständigen Variablennamen eingeben müssen. Ich muss möglicherweise nur die ersten paar Buchstaben mit /einem anderen Bewegungsbefehl (z. B. fx) eingeben und dann vedas ganze Wort auswählen. Es macht mir auch nichts aus, dass ich das für jeden Fall wiederholen muss. Ich führe niemals einen vollständigen Ersatz durch, ohne jede Änderung zu bestätigen. Es wäre jedoch viel besser, wenn ich die Ersetzungsaktion mit einem einzigen Tastendruck wiederholen könnte (was mit dieser Methode nicht möglich ist). jeder Austausch ist in der Regel so etwas wie ndann vedann p(oder noch schlimmer "0p)

Gibt es einen schnelleren Weg?

Joel
quelle
1
.wiederholt den letzten "Befehlsblock" (der genaue Begriff ist nicht bekannt. Zum Beispiel: Verschieben + Aktion + Text. Zum Beispiel: cwtoto<Esc>(Wechsel vom Cursor zum Ende des Wortes mit "toto"), c/foo<enter>bar<Esc>(Wechsel vom Cursor zu kurz vor " foo ", und durch" bar "ersetzen. Sie können dann verschieben (mit Cursor, hjkl oder einer Zahl + hjkl (macht es n-mal), G (gehen Sie zum Ende der Datei), / etwas (gehen Sie kurz vor" etwas "), etc) und dann drücken ., um den gleichen" Befehlsblock "zu wiederholen
Olivier Dulac
Ich benutze das ziemlich oft! Es funktioniert jedoch nicht, wenn Sie ein Wort ziehen und dann an mehreren Stellen durch ein anderes Wort ersetzen möchten. Das ist der Hauptanwendungsfall, mit dem ich ein Problem habe und der ungefähr so ​​aussieht n ve "0p. Was leider nicht mit nur einem repliziert werden kann.
Joel
5
n ce ctrl-r 0 <esc> n.n.n.n.n.n.
Rich
@Joel Sie können auch ein Makro aufzeichnen (qa dann alles, was Sie wollen, dann q: erstellt Makro a) und dann: @a verwenden, um es wiederzugeben (und wie üblich 134 @a, um es 134 Mal auszuführen). Das Makro kann so aufwändig wie nötig sein (Beispiel: Finde etwas, bewege dich an die richtige Stelle, ändere dann das Wort in das, und bewege dich an die richtige Stelle, um an einer besseren Position erneut angerufen zu werden)
Olivier Dulac
1
Ich habe aus dieser Frage mehr nützliche VIM-Tricks gelernt als aus jeder anderen Frage auf der Website. Danke!
Dotancohen

Antworten:

81

Ich habe tatsächlich einen ähnlichen Arbeitsablauf wie Sie (Kopieren und Einfügen von Blöcken, die ähnlich sind, und dann :sÄndern von Variablennamen), insbesondere wenn ich viele Zeilen schreibe, die ähnlich sind, mit Ausnahme der Variablen, die sie verwenden. Aber ich mache ein paar Dinge, die Sie vielleicht nützlich finden.

Allgemeine vim Dinge

  1. Das Erste, was Ihnen helfen wird, ist zu erkennen, dass :s//foo/gder zuletzt verwendete Suchbegriff durch foo ersetzt wird . Das allein kann viel Zeit sparen, aber wenn Sie es mit dem Sternchen-Befehl (Suche nach dem Wort unter dem aktuellen Cursor) kombinieren, spart es Tonnen von Zeit. Zum Beispiel, um alle foozu ändern spam, anstatt zu tun

    :%s/foo/spam/g
    

    Um sowohl foo als auch spam (möglicherweise lange Variablen) auszutippen, navigieren Sie einfach zu foo und führen Folgendes aus:

    *:%s//spam/g
    

    Auf diese Weise können Sie schnell den Namen der Variablen ermitteln, die Sie ändern, indem Sie danach suchen. Sie müssen ihn dann nicht mehr eingeben. Dies funktioniert auch gut mit Ihrem aktuellen Arbeitsablauf, wenn Sie nviel verwenden. Es ist auch hilfreich, ein zu haben hlsearch, weil Sie dann visuell erkennen können, wo sich die Variablen befinden, die Sie ersetzen.

    (Randnotiz: Mit dem Sternchen-Befehl werden Wortgrenzen hinzugefügt, dh \<und \>um das Wort unter dem Cursor. Wenn Sie dies nicht möchten, verwenden Sie g*stattdessen.)

  2. Es wäre viel besser, wenn ich die Ersetzungsaktion mit einem einzigen Tastendruck wiederholen könnte

    Mit können Sie @:den letzten Ersatzbefehl wiederholen. Das ist schön, wenn Sie einen :sBefehl für viele Zeilen ausführen möchten , aber nicht für alle, so :%sdass dies nicht funktioniert. Eine andere Option ist das Bestätigungsflag, dh :%s///gc. Auf diese Weise können Sie bei jedem Auftreten eingeben yoder nentscheiden, ob Sie es ersetzen möchten oder nicht.

    Wie Desty betont hat , können Sie auch &den letzten Ersatzbefehl erneut ausführen. Beachten Sie jedoch, dass dadurch Ihre Flags (wie z. B. oder ) nicht beibehalten werden . Ob das gut oder schlecht ist, hängt von Ihrer persönlichen Meinung ab. Wenn Sie dies verwenden möchten, aber Ihre Flaggen auch behalten sollen, können Sie dies tunglobalconfirm

    nnoremap & :&&<cr>
    
  3. Wenn Sie jedes Vorkommen in einem Block ändern möchten, aber nicht jede Übereinstimmung in der Datei, können Sie immer eine visuelle Auswahl des Blocks verwenden, der ausgefüllt wird

    :'<,'>
    

    zu Ihrem Stellvertreter, der es auf die Zeilen beschränkt, die Sie ausgewählt haben. In Kombination mit dem Asterisk-Ansatz finde ich dies äußerst nützlich. Wenn Sie mehrere Ersatzbefehle für denselben gvZeilenblock ausführen, können Sie dieselben Zeilen auch erneut auswählen, um einen anderen Befehl auszuführen . (ob es ein :substituteoder ein normaler Befehl ist)

    Wenn Sie einen anderen Ersatz - Befehl tun, nicht wahr brauchen die gleichen Linien erneut auszuwählen, weil :'<,'> nach wie vor auf den gleichen Leitungen betrieben werden kann . Es ist jedoch bequemer zu tippen

    gv:s
    

    eher, als

    :'<,'>s
    

Plugins / Mappings gefallen mir

  1. Ich habe die folgende Zuordnung in meinem, .vimrcdie den Sternchenansatz erweitert, so dass ich nur den neuen gewünschten Namen eingeben muss:

    "(R)eplace all
    nnoremap <leader>r yiw:%s/\<<C-r>"\>//g<left><left>
    

    Um dies zu verwenden, setzen Sie einfach den Cursor auf das Wort, das Sie ändern möchten, <leader>rNewVarName<cr>und geben Sie ein, und Sie sind fertig. Beachten Sie, dass hierdurch alle Übereinstimmungen ersetzt werden, ohne dass Sie die Option erhalten, sie zu bestätigen, sodass Sie möglicherweise nicht so begeistert sind. Natürlich können Sie es auch einfach in ändern

    nnoremap <leader>r yiw:%s/\<<C-r>"\>//gc<left><left><left>
    

    Um die Bestätigungsoption zuzulassen.

    edit : Nach den beiden Antwort der Masse und rcorre Kommentar , können Sie auch diese schreiben als

    nnoremap <leader>r :%s/\<<C-r><C-w>\>//g<left><left>
    

    Das hat den Vorteil, dass Ihr unbenanntes Register gleich bleibt.

  2. Wenn Sie beispielsweise Gruppen ähnlicher Variablen gleichzeitig umbenennen, ändern Sie

    fooSuffix
    PrefixFoo
    foo1
    SHOUTINGFOO
    

    zu

    barSuffix
    PrefixBar
    bar1
    SHOUTINGBAR
    

    Es kann schwierig sein, alle einzeln zu ersetzen. Hier bietet sich tpope / vim-abolish an. Sie können all diese in einem Befehl ersetzen durch:

    :%S/foo/bar/g
    

    und es kümmert sich für Sie um die Großschreibung.

Dies sollte Ihnen viel helfen, aber lassen Sie mich wissen, wenn Sie etwas an diesen Ansätzen nicht mögen oder das Gefühl haben, dass sie fehlen. Ich spreche gerne über weitere Ansätze. :)


Literatur-Empfehlungen:

DJMcMayhem
quelle
Oh, ich habe gerade einige Dinge gelernt. Nett! Ein alternativer Ansatz, den Sie wählen könnten, ist <leader>rc(oder cr), dies /cam Ende hinzuzufügen . Außerdem habe ich set gdefaulteingestellt, weil ich fast nie ein einziges Ergebnis ersetzen möchte, also wäre es einfach yiw:%s/\<<C-r>"\>//<left><left>
Wayne Werner
2
Was für eine fantastische Antwort!
Scott Lundberg
2
Wenn Sie ctrl+r-ctrl+win der Zuordnung verwenden (wie von @Mass vorgeschlagen), sollte es das gleiche funktionieren, aber nicht mit Ihrem Yank-Register (was wünschenswert oder nicht wünschenswert sein kann)
rcorre
1
Wenn Sie mit Textblöcken arbeiten, die Sie markieren (vor dem Ausschneiden / Ruckeln usw.), sollten Sie berücksichtigen, dass Sie im normalen Modus gv eingeben können, um den zuletzt markierten Text erneut zu markieren.
1
Ich habe das Plugin github.com/hauleth/sad.vim geschrieben , das ähnlich wie Methode 2 funktioniert. Mit hovewer können Sie .weitere Ersetzungen vornehmen .
Hauleth
20

Die c_CTRL-RKartenfamilie kann Ihren Workflow erheblich verbessern:

  1. Sie müssen bei der Verwendung keine Variablennamen eingeben, sondern müssen :s/nur CTRL-R CTRL-Wdas Wort unter dem Cursor in die Befehlszeile einfügen (Warnung: Sonderzeichen werden hierdurch nicht ausgeblendet, wie dies der *Fall ist).

  2. Nachdem Sie mit eine kleine Änderung vorgenommen haben ce, können Sie mit nach dem alten Wort suchen / CTRL-R -. Dann .mit die Änderung wiederholen.

  3. Wenn Sie Änderungen am Suchmuster vornehmen müssen, CTRL-R /wird die vorhandene Suche in die Befehlszeile eingefügt.

  4. Schließlich können Sie den Inhalt jedes Registers mit setzen CTRL-R {register}

Masse
quelle
Guter Punkt! Ich vergesse immer Ctrl R. Ich werde sehen, ob ich das auch einarbeiten kann.
Joel
2
Erwähnenswert Ctrl-R /? Ich verwende dies ziemlich häufig in :sBefehlen, wenn ich einen Suchbegriff verwenden möchte, der fast, aber nicht ganz genau mit dem vorherigen übereinstimmt.
Rich
12

Es gibt noch ein paar Methoden, die (zu meiner Überraschung!) Noch nicht erwähnt wurden.

Verwenden des gnBefehls

gnFunktioniert wie der nBefehl, mit der Ausnahme, dass nicht nur zum Spiel gesprungen wird, sondern auch der visuelle Modus aufgerufen wird, bei dem das gesamte Spiel ausgewählt ist.

Wenn Sie also ein Wort ändern möchten (oder etwas, das Sie mit einem regulären Ausdruck abgleichen können!), Suchen Sie zuerst danach 1 und drücken cgnSie dann, gefolgt von dem Text, durch den Sie die Übereinstimmung ersetzen möchten, und Esckehren Sie zum normalen Modus zurück.

(Sie erwähnen, dass manchmal der Ersatztext, den Sie verwenden möchten, im "0Ruckregister gespeichert wird. Beachten Sie, dass Sie diesen schnell eingeben können, ohne ihn erneut eingeben zu müssen, indem Sie Ctrl+R0im Einfügemodus auf drücken .)

Sie können dann zum nächsten Spiel springen und die Änderung mit einem einzigen .Tastendruck wiederholen !

Wenn es Stellen gibt, an denen Sie keine Ersetzung vornehmen möchten, drücken Sie einfach un, um die Änderung rückgängig zu machen und zum nächsten Spiel zu springen.

1: Schnell, indem Sie die anderen Vorschläge auf dieser Seite verwenden, z. B. *, Ctrl+RCtrl+Wusw. Weitere Vorschläge zum erstmaligen Auffüllen Ihrer Suche finden Sie in Peter Rinckers Kommentar .

Verwenden des Auswahlmodus

( Das erfuhr ich von romainl ‚s Beitrag auf der vim subreddit . Ich weiß nicht , ob er es erfunden selbst oder vorging es nur auf.)

Der Auswahlmodus ähnelt dem visuellen Modus, außer wenn Sie mit der Eingabe beginnen, wird der ausgewählte Text sofort durch den von Ihnen eingegebenen Text ersetzt (so wie die Auswahl in den meisten anderen Editoren funktioniert).

Sie können dieses Trio von Zuordnungen verwenden, um ein sehr schnelles Suchen / Ersetzen durchzuführen, das Sie bei Bedarf in der Mitte der Datei ändern können:

nnoremap § *``gn<C-g>
inoremap § <C-o>gn<C-g>
snoremap <expr> . @.

Normalmodus-Zuordnung : Aktiviert den Auswahlmodus mit dem Wort, das dem ausgewählten Cursor am nächsten steht.

Sie können dann Ihre Ersetzung für das ausgewählte Wort eingeben und ( ohne zu drücken Esc) Folgendes verwenden:

Einfügemodus-Zuordnung : Springt zum nächsten Treffer und wechselt in den Auswahlmodus.

Sie können dann entweder eine neue Ersetzung eingeben oder auf drücken ., um Folgendes zu verwenden:

Moduszuordnung auswählen : Gibt den zuletzt eingefügten Text erneut ein - wiederholt im Wesentlichen die letzte Einfügung.

Reich
quelle
Ich habe die gnMethode gestern am Ende meiner Antwort vi.stackexchange.com/a/13696/488 erwähnt, wofür es sich lohnt! Ihre Antwort ist jedoch viel besser formatiert.
TankorSmash
1
@TankorSmash Also hast du es getan! Beachten Sie, wie ich das verpasst habe. Beachten Sie, dass die tatsächliche Methode, die ich verwende, sich von Ihrer unterscheidet (ich rufe sie nur gneinmal auf), und es ist die spezifische Methode (und nicht nur der gnBefehl), von der ich überrascht war, dass sie noch nicht erwähnt wurde.
Rich
Ich würde empfehlen, die eine Art von „visual Stern“ Plugin zu verwenden gn. Bietet Ihnen mehr Suchoptionen. Armer visuelles Sterne - Mapping: xnoremap * :<c-u>let @/=@"<cr>gvy:let [@/,@"]=[@",@/]<cr>/\V<c-r>=substitute(escape(@/,'/\'),'\n','\\n','g')<cr><cr>. Vimcasts-Folge zum Thema: Mit gn bei Suchergebnissen aktiv
Peter Rincker
1
Ich habe das Plugin sad.vim erstellt , das bei einem solchen Ablauf hilft.
Hauleth
7

Das Plugin https://github.com/terryma/vim-multiple-cursors kümmert sich zum größten Teil um dieses Problem.

Mein Arbeitsablauf sieht normalerweise folgendermaßen aus:

  1. Bewegen Sie den Cursor auf das zu ersetzende Wort.
  2. Halten Sie gedrückt, ctrl-nbis alles ausgewählt ist.
  3. Drücken Sie cund geben Sie den Ersatz ein.

Das Praktische dabei ist, dass Sie auch kompliziertere Operationen ausführen können als nur Suchen-Ersetzen. Wenn Sie dies jedoch zu weit treiben, zeigt das Plug-in einige Störungen an.

Chiel ten Brinke
quelle
4

Eine andere Möglichkeit, Dinge zu tun, die noch nicht erwähnt wurden: Sie können das Befehlszeilenfenster (geöffnet q:im normalen Modus - siehe :help q:für weitere Informationen) verwenden, in dem Sie vollen Zugriff auf die Autovervollständigungsfunktionen von Vim ( i_CTRL-N/ i_CTRL-Pund die verschiedenen i_CTRL-XSequenzen) haben unter ihnen sein).

Im Befehlszeilenfenster können Sie auch Befehle im normalen Modus zum Bearbeiten der Befehlszeile verwenden. Dies bedeutet beispielsweise, dass Sie Teile vorheriger Befehle in Ihren Befehlszeilenverlauf ziehen und einfügen können.

Beachten Sie, dass der Cursor bei der Verwendung in das Befehlszeilenfenster verschoben wird. Dies bedeutet, dass CTRL-R CTRL-Wähnliche Methoden, bei denen der Text unter dem Cursor eingefügt wird, anders als in der normalen Befehlszeile nicht funktionieren.

Slade
quelle
1
Sie können das Befehlszeilenfenster auch öffnen, wenn Sie bereits zur Hälfte mit der Eingabe Ihres :substituteBefehls fertig sind, indem Sie<ctrl-f>
Rich
2

Die Lösung dafür liegt für mich etwas zwischen den anderen Antworten:

Angenommen, Sie haben 6 identische Zeilen und möchten "Apfel" in den beiden mittleren ersetzen:

I have apples for days
I have apples for days
I have apples for days
I have apples for days
I have apples for days
I have apples for days

Was ich mache ist:

  1. Ich komme zum Anfang des Textes, den ich ersetzen möchte: "Apfel".
  2. Drücken Sie v, um in den visuellen Modus zu gelangen
  3. Gehen Sie zu dem letzten Wort, das ich ersetzen möchte, in diesem Fall ein paar Zeilen so 2j
  4. :s/<C-R><C-W>/Dies verwendet die visuelle Auswahl als Bereich für :sund fügt dann das Wort unter dem Cursor ein
  5. Ich <C-F>drücke, um dich in einen Modus zu versetzen, in dem du deinen Befehl bearbeiten kannst, als wäre es ein Puffer. Sie können also beliebige Vervollständigungen oder Plugins verwenden, um das Ersatzwort auszuwählen, und schon sind Sie fertig.

Alles in allem wäre der Fluss dafür /apples<CR>2nv/apples<CR>nn:s/<C-R><C-W/oranges<CR>aber das sieht schlimmer aus als es ist.

In Ihrem Fall, können Sie die anhängen /can den :sBefehl an diejenigen , überspringen Sie nicht wollen, wenn Ihr Angebot ein paar enthält , die Sie überspringen wollen: :s/<C-R><C-W/orange/c.

Alternativ (und vielleicht auch einfacher) können Sie nach dem gesamten Wort suchen, das Sie ersetzen möchten, ces dann ändern gnund .die Suche wiederholen und dieselbe Änderung erneut anwenden. Es sieht so aus /\<apple\><CR>viwcorange<ESC>gn.gn.gn..ngn., als würde man es bei drei wiederholen, dann eine Instanz überspringen und ein letztes Mal wiederholen.

TankorSmash
quelle
Die Methode, die Sie am Ende beschreiben, funktioniert bei mir nicht (in Vim 7.4, aufgerufen mit vim -Nu NONE). Es piept nur, wenn ich die erste drücke .. Irgendeine Idee warum das so ist? In jedem Fall wäre es einfacher, zu verwenden , ciwstatt viwund ndie stattdessen gnauf diese Weise , um Änderungen vorzunehmen.
Rich
2

Dies hängt nicht ganz mit der Frage zusammen, sollte aber dennoch bei der Auswahl des zu ersetzenden Wortes helfen.

Mit der inkrementellen Suche ( set incsearch) können Sie das Präfix des gesuchten Wortes eingeben, und vim springt automatisch zum ersten Vorkommen des Präfixes, wenn Sie mehr und mehr eingeben. Die Suche wird bestätigt, wenn Sie die Eingabetaste drücken und mit Esc verwerfen.

Die inkrementelle Suche bietet jedoch eine weitere nützliche Funktion. Wenn Sie das Präfix eines Wortes bereits eingegeben haben und sich der Cursor an der richtigen Position befindet, drücken Sie <C-L>, um Zeichen aus dem Wort unter dem Cursor in die Suchzeichenfolge einzufügen. Auf diese Weise können Sie die ersetzte Zeichenfolge fast ohne Tastendruck eingeben.

Also, wenn ich ersetzen möchten someOddVariableNamemit evenOdderVariableName, ich

  1. Typ /someOddVund kommen zum Auftreten von someOddVariableName;
  2. gedrückt halten, <C-L>bis someOddVariableNamein der Suchzeile vollständig angezeigt wird;
  3. Drücken Sie die Eingabetaste, um die Suche zu bestätigen.
  4. :%s//evenOdderVariableName/goder welcher Ersetzungsbefehl auch immer benötigt wird; Vielleicht möchten Sie hier anderen Antworten folgen.
Ivan Smirnov
quelle
2

Sie können den Variablennamen zuerst in den Puffer schreiben ( ywum ein Wort zu kopieren) und es dann :%sdurch Drücken von in den Puffer einfügen <C-r>".

vdudouyt
quelle
2

Wenn Sie eine Variable innerhalb des neuen (eingefügten) Blocks ersetzen möchten, habe ich zwei Vorschläge:

Automatisches Ersetzen

  • Gehe in die erste Zeile des neuen Blocks und drücke ma. Dies markiert einen Ort und benennt ihn a.

  • Gehe zur letzten Zeile des neuen Blocks, drücke mb. Jetzt haben Sie zwei benannte Standorte.

  • Jetzt ersetzt zwischen den beiden Linien, etwa so: :'a,'bs/oldVarName/newVarName/g.

  • Das heißt, der Ersetzungsbereich liegt zwischen Ihren beiden Markierungen.

Der manuelle Weg

  • Gehen Sie in die erste Zeile des neuen Blocks.

  • Verwenden Sie /oldVarName, um die erste Instanz von zu finden oldVarName.

  • Ändere es wie cwnewVarName<Esc>folgt:, was das Wort ändert newVarNameund Flucht schlägt.

  • Verwenden Sie n, um zur nächsten Instanz von zu wechseln oldVarName.

  • Verwenden Sie .diese Taste, um die letzte Änderung zu wiederholen (dh, um diese zu wiederholen cw).

Versteckter Gast
quelle
2

Viele der anderen Antworten befassen sich bereits mit den integrierten Möglichkeiten zur Verbesserung des Such- und Ersetzungs-Workflows, aber ich wollte abolish.vim erwähnen , ein Plugin von Tim Pope. Es werden Ersetzungen vorgenommen, bei denen Sie eine größere Bandbreite von Fällen abdecken möchten, die normalerweise durch Variationen in den einzelnen Fällen oder dadurch verursacht werden, dass Sie sich sowohl mit der Singular- als auch mit der Pluralform eines Wortes befassen müssen.

:S/child{,ren}/adult{,s}/grichtig konvertiert childnach adult, Childrennach Adultsund CHILDnach ADULT.

Wenn Sie sich mit Wörtern in Kamelschalen beschäftigen, müssen Sie die Kapitelle, in denen Sie sie benötigen, in die Original- und Ersatzwörter aufnehmen.

%:S/wordWrap/textBreak/grichtig behandelt beide wordWrapund wordwrap.

Haegin
quelle
0

Wie andere bereits gezeigt haben, können Sie, wenn Sie den Cursor über Ihrem Wort positionieren, die Befehlsfamilie Strg + r verwenden, wobei Strg + r Strg + w wahrscheinlich am besten geeignet ist.

Diese Methode funktioniert jedoch nur für das Einfügen eines Wortes (des Wortes direkt unter dem Cursor). Was ist, wenn sich mehrere Textteile im Puffer befinden, die wir verwenden möchten? Während Sie sich in der Befehlszeile befinden, können Sie den Cursor nicht bewegen. Der beste Weg, dies zu tun, besteht darin, Textteile, die Sie benötigen, in verschiedene Register zu kopieren. Dies können Sie tun, indem Sie dem Kopierer "{reg_letter} (Anführungszeichen und den Buchstaben aus dem Register) voranstellen. Auf diese Weise ist es möglich, füge später mit Strg + r {reg_letter} verschiedene Wörter in die Kommandozeile ein. Dies ist etwas umständlich, funktioniert aber.

Zurück zur vorherigen Idee, wäre es großartig, wenn wir die Cursorposition über den Puffer bewegen würden, während wir ein Muster schreiben. Auf diese Weise konnten wir mit Strg + R Strg + W Text von verschiedenen Positionen "auswählen". Deshalb habe ich ein Plugin erstellt, das genau das tut: EXtend.vim Das Plugin verfügt auch über viele andere Funktionen, um Ersetzungsoperationen durchzuführen.

Saul Axel Martinez Ortiz
quelle