Creo que bash está analizando algunas anomalías en la forma en que se manejan los caracteres acentuados. Es posible que desee tomar algunas palomitas de maíz, porque esto va a ser un poco técnico ...
Unicode permite que algunos caracteres acentuados se representen de diferentes maneras: como un "punto de código" que representa el carácter acentuado, o como una serie de puntos de código que representan la versión no acentuada del personaje, seguido del acento (s). Por ejemplo, "ä" se puede representar precompuesto como U + 00E4 (UTF-8 0xc3a4, letra latina en minúscula 1 con diéresis) o descompuesto como U + 0061 U + 0308 (UTF-8 0x61cc88, minúscula latina a + diéresis combinada ).
El sistema de archivos HFS + de OS X requiere que todos los nombres de archivos se almacenen en la representación UTF-8 de su forma completamente descompuesta . En un nombre de archivo HFS +, "ä" DEBE codificarse como 0x61cc88, y "ö" DEBE codificarse como 0x6fcc88.
Estoy bastante seguro de que lo que está sucediendo aquí es que cuando escribes "Näyttökuva.png" en la línea de comandos, es "escribir" los caracteres en forma precompuesta. Cuando se crea el archivo, el sistema de archivos descompone los caracteres para el almacenamiento. Todo está bien hasta ahora. Pero cuando intentas usar la tabulación que comienza con "Nä", creo que bash no puede descomponer la "ä" antes de buscar coincidencias y, por supuesto, no encuentra ninguna.
Para ilustrar la diferencia, este es un ejemplo de la codificación que se usa cuando escribo "Näyttökuva.png" en la línea de comandos, en comparación con lo que se usa cuando lo almaceno como un nombre de archivo y uso la finalización de tabulación para completar:
$ printf Näyttökuva.png | xxd # This time I pasted the it in from this web page
0000000: 4ec3 a479 7474 c3b6 6b75 7661 2e70 6e67 N..ytt..kuva.png
$ touch Näyttökuva.png # Also pasted from the web
$ printf Näyttökuva.png | xxd # This time I tab-completed it after N
0000000: 4e61 cc88 7974 746f cc88 6b75 7661 2e70 Na..ytto..kuva.p
0000010: 6e67 ng
Ahora, en cuanto a la cuestión de los caracteres que se pierden al eliminar y volver a completar la tabulación, sospecho que está estrechamente relacionado. Específicamente, creo que bash está "eliminando" un punto de código por pulsación de la tecla de borrado, pero borrando un carácter de la ventana de Terminal por pulsación. Debido a que uno de los caracteres eliminados ("ö" esta vez) consistía en dos puntos de código, pero solo un carácter, la pantalla del terminal pierde la sincronización. Intente completar el nombre completo de la pestaña, eliminarlo de nuevo en "Näytt", luego volver a completar la pestaña: bash parece pensar que solo se eliminó la diéresis combinada, no toda la "ö", por lo que se vuelve a agregar la diéresis combinada , pero esta vez se adjunta a la "t":
$ echo Näytẗkuva.png
Näyttökuva.png
Tenga en cuenta que cuando presiono regresar, bash tiene el nombre completo allí; es solo la pantalla del terminal que se confundió.
TL; DR bash tiene algunos errores que manejan caracteres acentuados descomponibles.
EDIT: después de algunas reflexiones, creo que la única solución completa es corregir el bash (/ esperar a que los desarrolladores lo solucionen). También podría haber una forma de ingresar caracteres en forma descompuesta, pero no tengo idea de lo que sería. Pero encontré algunas soluciones parciales:
-
Arrastrar y soltar un archivo desde el Finder pega en su forma correcta. Dado que el Finder obtiene el nombre de archivo del sistema de archivos, ya está descompuesto, por lo que simplemente funciona.
-
En realidad puedes completar con tabulación el propio carácter acentuado. Por ejemplo, si escribe "Na" y luego la pestaña, coincidirá con "Näyttökuva.png" porque la descomposición canónica de "ä" comienza con "a". Pero si tiene un archivo llamado "Narwal.gif" en el mismo directorio, no será de mucha ayuda ...
-
No he probado esto, pero si enlaza la pestaña con menu-complete en lugar de completo, debería permitirle revisar posibles coincidencias para que pueda seleccionar la que desea, incluso si no puede escribir la siguiente letra. (O puede vincularlo a una pulsación de tecla diferente, de modo que solo puede usarlo cuando lo necesite).
-
Para solucionar el problema con el hecho de que la pantalla de la Terminal no está sincronizada, puede enlazar algo con redraw-current-line : no evitará que ocurra el problema, pero le dará una forma de volver a sincronizar la pantalla.