¿Hay alguna forma de indicarle a Vim que quiero ignorar los signos diacríticos / acentos al buscar? Por ejemplo, me gustaría poder buscar
kočička
por entrar
/kocicka
Las opciones ignorecase
y smartcase
son muy útiles, pero no parecen tener nada que ver con diacríticos / acentos.
:h [[=
y:h patterns-composing
.Respuestas:
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
ykocicka
con el mismo patrón, puede usar esto:donde
[[=c=]]
es la clase de equivalencia para elc
personaje.Para insertar automáticamente esta clase de caracteres cada vez que presiona
c
mientras realiza una búsqueda, puede usar esta asignación:que puede desglosarse así:
<expr>
escriba la evaluación de una expresióngetcmdtype() =~ '[?/]'
prueba si estás escribiendo una búsqueda hacia atrás o hacia adelante'[[=c=]]'
devolver la clase de equivalencia para elc
personaje si la prueba anterior tuvo éxito'c'
devolver elc
personaje de lo contrarioEl mapeo anterior tiene 2 inconvenientes:
c
personajePodría mejorarse reasignando
<CR>
así: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 parac
, 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.fuente
/kočička
coincidenciaskocicka
, puede usar en'[[:lower:][:upper:]]'
lugar de'\a'
. Las alternativas'[:alpha:]'
y'\I'
no parecen funcionar con caracteres de varios bytes; sin embargo,'[^[:punct:]]'
parece funcionar (aunque estoy menos seguro), y supongo que también construirá su propia clase de equivalencia (por ejemplo,'[А-яЁё]'
).