2017-07-29 6 views
1

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 mit foo{...}
  • exe "norm! - Start in jeder Zeile Normalmodus Befehle ausführen
  • mx - Notieren Sie die aktuelle Zeile
  • f{lvt}y - Kopieren Sie alles in geschweiften Klammern von foo{...}
  • /\\(foo{\\)\\@!\<C-R>\"\<enter> - Vorwärtssuche auf eine Instanz, wo die Zeichenfolge innerhalb der geschweiften Klammern von foo{...} ist nicht innen foo
  • yy'xP" - diese Zeile kopieren, gehen Sie zurück zu x, 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.

+0

Sie scheinen überhaupt nicht '' execute' 'zu benötigen. – romainl

+0

Danke @romainl, weißt du wie ich das ohne ': exe' machen könnte? Ich bin verloren ... – Miles

+1

Nur 'normal! ... ' – romainl

Antwort

3

:silent allein ist nicht genug. Sie müssen :silent! verwenden. Von :help :silent (Hervorhebung von mir):

Wenn hinzugefügt wird, werden Fehlermeldungen auch sein übersprungen und Befehle und Zuordnungen werden nicht abgebrochen werden, wenn ein Fehler erkannt wird [!].

+0

Danke, das hat es geschafft! – Miles

Verwandte Themen