Como @muru mencionó en el comentario , podría usar una clase de equivalencia (descrita en :help /[[
) que parece ser una expresión de clase de caracteres evaluada como un conjunto de caracteres similares (es decir, son los mismos una vez que elimina cualquier acento / signo diacrítico).
Por ejemplo, para buscar kočička
y kocicka
con el mismo patrón, puede usar esto:
ko[[=c=]]i[[=c=]]ka
donde [[=c=]]
es la clase de equivalencia para el c
personaje.
Para insertar automáticamente esta clase de caracteres cada vez que presiona c
mientras realiza una búsqueda, puede usar esta asignación:
cnoremap <expr> c getcmdtype() =~ '[?/]' ? '[[=c=]]' : 'c'
que puede desglosarse así:
<expr>
escriba la evaluación de una expresión
getcmdtype() =~ '[?/]'
prueba si estás escribiendo una búsqueda hacia atrás o hacia adelante
'[[=c=]]'
devolver la clase de equivalencia para el c
personaje si la prueba anterior tuvo éxito
'c'
devolver el c
personaje de lo contrario
El mapeo anterior tiene 2 inconvenientes:
- solo cubre el
c
personaje
- puede hacer que el patrón sea difícil de leer
Podría mejorarse reasignando <CR>
así:
cnoremap <CR> <C-\>e getcmdtype() =~ '[?/]' ? substitute(getcmdline(), '\a', '[[=\0=]]', 'g'): getcmdline()<CR><CR>
Cuando presiona <CR>
después de escribir un patrón para una búsqueda, la asignación reemplazará automáticamente todos los caracteres alfabéticos por su contraparte de clase de equivalencia.
La asignación para <CR>
es similar a la asignación anterior para c
, excepto que no usa el argumento <expr>
sino la asignación del sistema <C-\>e
.
<expr>
le permite insertar la evaluación de una expresión, mientras <C-\>e
que le permite reemplazar toda la línea de comando con la evaluación de una expresión.
:h [[=
y:h patterns-composing
.