2012-07-30 13 views
8

Mit vim möchte ich alle Zeichen bis zu einem bestimmten Zeichen durch ein anderes Zeichen ersetzen, z. B. ein Leerzeichen - ohne das Layout/Anzahl der Zeichen in der Zeile beeinflussen. Hier ein Beispiel:vim: Ersetzen aller Zeichen bis zu einem bestimmten Token

Vorher:

real(kind=R12), intent(out) :: my_var 

Nach dem Wechsel , intent(out) mit Leerzeichen (dh von , starten, und gehen bis zu )):

real(kind=R12)    :: my_var 

Ich weiß über r ein Zeichen zu ersetzen und über nr ersetzen n Zeichen, aber ich würde gerne wissen, ob ich meine Aufgabe erfüllen kann, ohne zuerst das Zeichen zählen zu müssen acters möchte ich ersetzen.

Vielen Dank für Ihre Antworten!

Antwort

20

visuellen Modus ist wahrscheinlich der kürzeste Weg hier:

vt:r 
  • v geben visuellen Modus
  • t: wählen bis :
  • r (Anmerkung Raum nach r) mit Leerzeichen ausgewählten Bereich ersetzen.
+0

Danke, das funktioniert wunderbar! – canavanin

+2

Nur zu beachten, Sie können jede Bewegung verwenden, nicht nur "t". 'f','/'usw. funktionieren alle auch. – kenny

+0

Genau das, was ich gesucht habe! Ich erinnerte mich, dass ich das versehentlich getan hatte, also wusste ich, wonach ich suchen sollte. Vielen Dank! – itmuckel

0

Hier können Sie den regulären Ausdruck verwenden (verwenden Sie (.*?), um alle Werte bis zu einem Token zu referenzieren).

Zum Beispiel:

Die Regex: (.*?)foo wird bis zu foo alles loszuwerden.

+0

In Perl vielleicht, in vim der nicht-gierige Quantifizierer ist '\ {-}'. – Thor

1

Ich kenne r ein Zeichen

zu ersetzen Wussten Sie, dass R halten Sie in diesem Modus ersetzen? So können Sie R drücken und dann Space halten, bis Sie alles, was Sie wollen, ersetzt haben.

Allerdings würde ich immer noch mit Thors Antwort gehen. Im visuellen Modus können Sie die effizienten Textnavigationsmethoden in vim verwenden, ohne Zeichen auszählen zu müssen.

Aber wenn Sie nicht zustimmen, gibt es immer EasyMotion.

0

Geben Sie im Befehlsmodus 'df?' bis zu diesem (?) Zeichen löschen. Dann 'i' zurück zum Einfügen gehen.

Zum Beispiel, wenn der folgende Satz ist aus Ihrer Sicht:

The wizard quickly jinxed the gnomes before they vaporized. 

und Sie geben dfs

Sie mit gelassen werden:

before they vaporized. 
+0

hinweis: ** dts ** wird löschen bis die s aber verlassen die s. –

Verwandte Themen