En árabe, como en algunos otros idiomas, existe lo que se llama diacríticos para mejorar la pronunciación. No existe una convención sobre cuántos signos diacríticos se deben escribir para una sola palabra. Algunos usan el mínimo (que prefiero) lo suficiente para desambiguar la pronunciación, mientras que otros los usan de manera superflua o solo con fines caligráficos estéticos. Por lo tanto, hay una amplia variación sobre qué y cuántos diacríticos están asociados con una palabra. Cuando lo hago isearch-forward/backward
presionando C-s/r
, surge un problema cuando lo escribo en el minibúfer de búsqueda sin signos diacríticos, no coincidirá con la misma palabra en el texto si tuviera signos diacríticos, lo que hace que la tarea de buscar esta palabra con sus signos diacríticos potenciales sea insatisfactoria.
¿Hay alguna manera de hacer que la búsqueda / búsqueda regular no sea consciente de los signos diacríticos? Espero que haya una respuesta que pueda extenderse para incluir regexp C-M-s/r
y grep
buscar que uso con bastante frecuencia en helm-projectile para buscar una palabra en proyectos de látex de varios archivos.
Actualización
Sería bueno ver que Emacs en todas sus funciones de búsqueda realiza el paso de eliminación del texto (de acentos / signos diacríticos / lo que sea) antes de que coincida con el paso como un comportamiento predeterminado que puede ser desactivado por un prefijo a pedido no importa qué idioma tengamos a mano. Por lo general, cuando busco algo que no espero que el mejor editor (Emacs) falle en este recado solo por algunos signos diacríticos o acentos que rara vez se necesitan para realizar tareas de texto mundanas.
fuente
ucs-normalize-*
funciones enlisp/international/ucs-normalize.el
. No existe un plegado de búsqueda predefinido para esos, como ocurre con el plegado de mayúsculas y minúsculas, pero al menos puede normalizar una región antes de buscarla. Una buena implementación es probablemente una tarea bastante compleja.php
implementó en : stackoverflow.com/a/25563250/1288722 - también implementado enJavascript
: stackoverflow.com/a/7193622/1288722helm-swoop
?Respuestas:
Aquí hay un comienzo difícil, basado en la lista de caracteres combinados en esta respuesta (y luego extendida). (Marcar esto como wiki de la comunidad - ¡edite y mejore esto!)
Entonces, si un búfer contiene "الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ", y lo evalúo
(arabic-search-without-diacritics "الحمد لله رب العالمين")
, encuentra el texto. También funciona de forma interactiva, comoM-x arabic-search-without-diacritics
.Enfoque alternativo:
Aquí hay un ejemplo de código completo que demuestra cómo
Mn
se pueden eliminar las marcas diacríticas y otras marcas ( propiedad) no espaciadoras de las cadenas normalizadas en las coincidencias de expresiones regulares . Funciona con los ejemplos dados y la OMI es el enfoque correcto.fuente
1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1648
: tarifa gratuita para actualizar.arabic-search-without-diacritics
funciona bien pero se rompe con algunas palabras, no sé por qué como estaالأَ
. Otra advertencia, siempre tengo que establecer el método de entrada en árabe cuando ingreso mi cadena en el mini buffer, mientras que en laisearch-forward/backward
función permanece allí.kill-marks
es el mejor enfoque para proporcionar texto sin complicaciones listo para todo tipo de búsqueda. Lo que no está claro para mí es cómo implementar eso en un búfer completo y luego en múltiples archivos.isearch-forward/backward
resalte todos los sucesos y el actual de manera diferente y al invocars
avanzará yr
retrocederá?