Ich habe einen Fehler-Überprüfung Ein-Liner-Vim-Befehl, der wie folgt aussieht. Es ist nicht direkt Teil der Frage, sondern arbeitet als Beispiel, so fühlen sich frei, es zu ignorieren:vim: Verhindern: Exe von Beenden nach Fehler
:'<,'>g/foo{.*}/exe "norm! mxf{lvt}y/\\(foo{\\)\\@!\<C-R>\"\<enter>yy'xP"
Hier ist eine Erklärung:
:'<,'>g/foo{.*}/
- Führen Sie den folgenden Befehl auf allen Linien markiert mitfoo{...}
exe "norm!
- Start in jeder Zeile Normalmodus Befehle ausführenmx
- Notieren Sie die aktuelle Zeilef{lvt}y
- Kopieren Sie alles in geschweiften Klammern vonfoo{...}
/\\(foo{\\)\\@!\<C-R>\"\<enter>
- Vorwärtssuche auf eine Instanz, wo die Zeichenfolge innerhalb der geschweiften Klammern vonfoo{...}
ist nicht innenfoo
yy'xP"
- diese Zeile kopieren, gehen Sie zurück zux
, und fügen Sie es oben ein. Diese
ist im Grunde eine Fehlerprüfung Befehl, um zu sehen, dass jedes Mal, wenn ein Begriff, der von foo{
gewickelt ist, ist es immer von foo gewickelt. exe
wird jedoch im ersten Fall beendet, in dem /
(Vorwärtssuche) nichts findet. Ich möchte nicht, dass das passiert.
Wie mache ich exe
und :g
fortfahren sogar mit Fehlern innerhalb der exe
Befehl? Ich habe versucht :silent
, aber das speichert es nicht.
Ich würde lieber dies als One-Liner, aber Funktionen sind eine zweite Option, die ich in Ordnung bin.
Sie scheinen überhaupt nicht '' execute' 'zu benötigen. – romainl
Danke @romainl, weißt du wie ich das ohne ': exe' machen könnte? Ich bin verloren ... – Miles
Nur 'normal! ... ' – romainl