Es gibt ein paar "Wie invertiere ich Regexp-Fragen" hier in Stack Overflow, aber ich kann keinen für vim finden (wenn es existiert, fehlt mein Google-fu heute).
Im Wesentlichen möchte ich alle nicht druckbaren Zeichen zusammenbringen und sie löschen. Ich könnte ein kurzes Skript schreiben oder auf eine Shell schreiben und tr oder etwas ähnliches zum Löschen verwenden, aber eine vim-Lösung wäre dandy: -)
Vim hat das atom \p
, um druckbare Zeichen zu finden, jedoch versuche ich :s/[^\p]//g
zu machen, um die Inverse zu finden, was fehlgeschlagen ist, und habe mich einfach mit jedem 'p' in der Datei belassen. Ich habe die Sequenz (?!xxx)
in anderen Fragen gesehen, und vim scheint diese Sequenz nicht zu erkennen. Ich habe kein Atom für nicht druckbare Zeichen gefunden.
In der Zwischenzeit werde ich auf externe Tools zurückgreifen, aber wenn jemand irgendwelche Tricks im Ärmel hat, um dies zu tun, wäre es willkommen: -)
Ta!
Leider kannst du \p
nicht in Zeichenklassen einfügen, obwohl das ein nettes Feature wäre. Sie können jedoch die Negativ-Lookahead-Funktion \@!
verwenden, um Ihre Suche zu erstellen:
Dies stellt zuerst sicher, dass .
nur dann übereinstimmen kann, wenn es kein \p
-Zeichen ist.
Wenn Sie die Datei mit Unicode-Zeichen (nur wenn fileencoding = utf-8) filtern möchten, können Sie dies in drei Schritten tun: Markieren Sie alle druckbaren Zeichen mit dem nicht verwendeten UTF-8-Symbol (zB mit nr2char(0xFFFF)
), lösche alle Zeichen, denen dieses Symbol nicht folgt und lösche schließlich dieses Symbol:
Hier müssen Sie <ffff>
durch das tatsächliche Zeichen ersetzen (wenn Sie dies anstelle von <ffff>
type <C-r>=nr2char(0xFFFF)<CR>
eingeben).
Wenn Sie nicht mit Unicode arbeiten, verwenden Sie die Antwort von dsummersl.