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
und kocicka
mit demselben Muster zu suchen , können Sie Folgendes verwenden:
ko[[=c=]]i[[=c=]]ka
wo [[=c=]]
ist die Äquivalenzklasse für den c
Charakter.
Um diese Zeichenklasse automatisch einzufügen, wenn Sie c
während einer Suche auf drücken, können Sie die folgende Zuordnung verwenden:
cnoremap <expr> c getcmdtype() =~ '[?/]' ? '[[=c=]]' : 'c'
was sich so aufschlüsseln lässt:
<expr>
Geben Sie die Auswertung eines Ausdrucks ein
getcmdtype() =~ '[?/]'
Testen Sie, ob Sie eine Rückwärts- oder eine Vorwärtssuche durchführen
'[[=c=]]'
Gibt die Äquivalenzklasse für den c
Charakter zurück, wenn der vorherige Test erfolgreich war
'c'
Liefert das c
Zeichen ansonsten zurück
Die vorherige Zuordnung weist zwei Nachteile auf:
- es deckt nur den
c
Charakter ab
- Dies kann das Lesen des Musters erschweren
Es könnte durch Remapping <CR>
wie folgt verbessert werden :
cnoremap <CR> <C-\>e getcmdtype() =~ '[?/]' ? substitute(getcmdline(), '\a', '[[=\0=]]', 'g'): getcmdline()<CR><CR>
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ür c
, 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.
:h [[=
und:h patterns-composing
.