Gibt es eine Möglichkeit, Vim anzuweisen, dass ich bei der Suche diakritische Zeichen / Akzente ignorieren möchte? Zum Beispiel möchte ich suchen können
kočička
beim Eintreten
/kocicka
Die Optionen ignorecase
und smartcase
sind sehr nützlich, scheinen aber nichts mit Diakritika / Akzenten zu tun zu haben.
:h [[=
und:h patterns-composing
.Antworten:
Wie @muru im Kommentar erwähnt hat , könnten Sie eine (in
:help /[[
) beschriebene Äquivalenzklasse verwenden , die ein Zeichenklassenausdruck zu sein scheint, der als eine Menge ähnlicher Zeichen ausgewertet wird (dh dieselben sind, wenn Sie Akzente / diakritische Zeichen entfernen).Um beispielsweise nach
kočička
undkocicka
mit demselben Muster zu suchen , können Sie Folgendes verwenden:wo
[[=c=]]
ist die Äquivalenzklasse für denc
Charakter.Um diese Zeichenklasse automatisch einzufügen, wenn Sie
c
während einer Suche auf drücken, können Sie die folgende Zuordnung verwenden:was sich so aufschlüsseln lässt:
<expr>
Geben Sie die Auswertung eines Ausdrucks eingetcmdtype() =~ '[?/]'
Testen Sie, ob Sie eine Rückwärts- oder eine Vorwärtssuche durchführen'[[=c=]]'
Gibt die Äquivalenzklasse für denc
Charakter zurück, wenn der vorherige Test erfolgreich war'c'
Liefert dasc
Zeichen ansonsten zurückDie vorherige Zuordnung weist zwei Nachteile auf:
c
Charakter abEs könnte durch Remapping
<CR>
wie folgt verbessert werden :Wenn Sie
<CR>
nach dem Schreiben eines Musters für eine Suche auf drücken, ersetzt die Zuordnung automatisch alle alphabetischen Zeichen durch das Gegenstück zur Äquivalenzklasse.Das Mapping für
<CR>
ähnelt dem vorherigen Mapping fürc
, verwendet jedoch nicht das Argument,<expr>
sondern das System-Mapping<C-\>e
.<expr>
Ermöglicht das Einfügen der Auswertung eines Ausdrucks, während<C-\>e
Sie die gesamte Befehlszeile durch die Auswertung eines Ausdrucks ersetzen können.quelle
/kočička
Streichhölzerkocicka
, können Sie'[[:lower:][:upper:]]'
statt verwenden'\a'
. Die Alternativen'[:alpha:]'
und'\I'
scheinen nicht mit Multi-Byte-Zeichen zu funktionieren. jedoch'[^[:punct:]]'
scheint zu funktionieren (obwohl ich weniger sicher bin), und ich würde vermuten , Ihre eigene Äquivalenzklasse Aufbau (zB'[А-яЁё]'
) als auch.