Creo que bash está tropezando con algunas anomalías en cómo se manejan los caracteres acentuados. Es posible que desee tomar algunas palomitas de maíz, porque esto se volverá técnico por un momento ...
Unicode permite que algunos caracteres acentuados se representen de varias maneras diferentes: 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, "ä" podría representarse como precompuesto como U + 00E4 (UTF-8 0xc3a4, letra pequeña latina 1 con diéresis) o descomponerse como U + 0061 U + 0308 (UTF-8 0x61cc88, letra pequeña latina a + diéresis combinada )
El sistema de archivos HFS + de OS X requiere que todos los nombres de archivo 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 escribe "Näyttökuva.png" en la línea de comando, está "escribiendo" los caracteres en forma precompuesta. Cuando se crea el archivo, el sistema de archivos descompone los caracteres para su almacenamiento. Todo está bien hasta ahora. Pero cuando intenta utilizar la finalización de tabulación comenzando con "Nä", creo que bash no puede descomponer la "ä" antes de buscar coincidencias y, por supuesto, no encuentra ninguna.
Para ilustrar la diferencia, aquí hay un ejemplo de qué codificación se usa cuando solo escribo "Näyttökuva.png" en la línea de comando, frente a lo que se usa cuando lo almaceno como un nombre de archivo y uso la finalización de tabulación para completarlo:
$ 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 pestaña, sospecho que está estrechamente relacionado. Específicamente, creo que bash está "eliminando" un punto de código por cada pulsación de la tecla Eliminar, pero borrando un carácter de la ventana Terminal por cada pulsación. Debido a que uno de los caracteres eliminados ("ö" esta vez) constaba de dos puntos de código, pero solo un carácter, la pantalla del Terminal se desincroniza. Intente completar con pestañas el nombre de archivo completo, eliminándolo de nuevo a "Näytt", luego vuelva a completar con pestañas: bash parece pensar que solo se eliminó la diéresis combinada, no toda la "ö", por lo que vuelve a agregar la diéresis combinada , pero esta vez se une a la "t":
$ echo Näytẗkuva.png
Näyttökuva.png
Tenga en cuenta que cuando presiono Intro, bash en realidad tiene el nombre de archivo completo allí; Es solo la pantalla de la Terminal la que estaba confundida.
TL; DR bash tiene algunos errores que manejan caracteres acentuados descomponibles.
EDITAR: después de reflexionar un poco, creo que la única solución completa es arreglar bash (/ esperar a que sus desarrolladores lo arreglen). 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. Como el Finder obtiene el nombre de archivo del sistema de archivos, ya está descompuesto, por lo que simplemente funciona.
En realidad, puede 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, eso no será muy útil ...
No he probado esto, pero si vincula la pestaña al menú completo en lugar de completar, debería permitirle pasar por posibles coincidencias para que pueda seleccionar la que desee, incluso si no puede escribir la siguiente letra. (O bien, puede vincularlo a una combinación de teclas diferente, por lo que puede usarlo solo cuando lo necesite).
Para solucionar el problema de la sincronización de la pantalla del Terminal, puede vincular algo a redraw-current-line : no evitará que ocurra el problema, pero le dará una forma de resincronizar la pantalla.
$ echo -e "N\xC3\xA4*" | ls
(el eco daNä*
) resultadosNäyttökuva.png
. El problema también existe con los otros shells en Mac OS; y con, por ejemplo, zshls N
se completa automáticamente parals Na<0308>ytto<0308>kuva.png
ls Nä*
en bash en Xubuntu y funcionó correctamente, por lo que falla en algún lugar entre el teclado y OS X y Terminal. También probé eso dentro de la partición Bootcamp, pero el problema persiste (es decir, no ocurre solo con archivos HFS +).Na
funciona, peroNay
no lo hace (aunque es comprensible porque en realidad existe¨
entre ela
yy
. En Xubuntuls Na*
no funciona (aunqueNä*
funciona, así que realmente no es un problema). reemplazarä
&ö
cona?
yo?
por ejemplo, porls Na?y*
supuesto, esto aumenta la ambigüedad, pero puede ser útil en algunos casosls N* | xxd
en Xubuntu, ¿da caracteres compuestos o descompuestos?touch $'Na\xcc\x88ytto\xcc\x88kuva.png'
y vea qué sucede; supongo que creará un nuevo archivo con un nombre muy muy similar.Esta es una vieja pregunta, y no hay una respuesta definitiva. Solo soluciones alternativas.
Sin embargo, combiné información de esta antigua guía, y como sugerí e instruí aquí :
Instalé una nueva fiesta en mi Snow Leopard. Después de instalarlo, la finalización de bash funciona correctamente. (Snow Leopard se envió con 3.2.48 (1) y MacPorts instalado 4.2.45_1). Recuerde hacer los cambios en
/etc/shells
funcionamientochsh
.Además, debido a algunas otras instrucciones, tengo en
.inputrc
:No estoy seguro de si son necesarios o no para un funcionamiento adecuado.
fuente
Nä
(dondeä
está precompuesto)Näyttökuva.png
pero bash 3.2 no.iconv
es la solución, eso funcionó para mí:ver /programming//a/23226449/1909531
fuente