Come menzionato @muru nel commento , potresti usare una classe di equivalenza (descritta in :help /[[
) che sembra essere un'espressione di classe di caratteri valutata come un insieme di caratteri simili (cioè sono gli stessi una volta rimosso qualsiasi accento / diacritico).
Ad esempio, per cercare kočička
e kocicka
con lo stesso modello, è possibile utilizzare questo:
ko[[=c=]]i[[=c=]]ka
dove [[=c=]]
è la classe di equivalenza per il c
personaggio.
Per inserire automaticamente questa classe di caratteri ogni volta che si colpisce c
durante l'esecuzione di una ricerca, è possibile utilizzare questo mapping:
cnoremap <expr> c getcmdtype() =~ '[?/]' ? '[[=c=]]' : 'c'
che può essere scomposto in questo modo:
<expr>
digitare la valutazione di un'espressione
getcmdtype() =~ '[?/]'
verifica se stai scrivendo una ricerca indietro o avanti
'[[=c=]]'
restituisce la classe di equivalenza per il c
carattere se il test precedente ha avuto esito positivo
'c'
restituisce il c
personaggio altrimenti
La mappatura precedente presenta 2 svantaggi:
- copre solo il
c
personaggio
- può rendere difficile la lettura del modello
Potrebbe essere migliorato rimappando in <CR>
questo modo:
cnoremap <CR> <C-\>e getcmdtype() =~ '[?/]' ? substitute(getcmdline(), '\a', '[[=\0=]]', 'g'): getcmdline()<CR><CR>
Quando si colpisce <CR>
dopo aver scritto un modello per una ricerca, la mappatura sostituirà automaticamente tutti i caratteri alfabetici con la loro controparte della classe di equivalenza.
Il mapping per <CR>
è simile al mapping precedente per c
, tranne per il fatto che non utilizza l'argomento <expr>
ma il mapping di sistema <C-\>e
.
<expr>
consente di inserire la valutazione di un'espressione, mentre <C-\>e
consente di sostituire l'intera riga di comando con la valutazione di un'espressione.
:h [[=
e:h patterns-composing
.