Penso che bash stia inciampando su alcune anomalie nel modo in cui vengono gestiti i personaggi accentati. Potresti prendere dei popcorn, perché questo diventerà tecnico per un po '...
Unicode consente di rappresentare alcuni caratteri accentati in diversi modi: come un "punto di codice" che rappresenta il carattere accentato o come una serie di punti di codice che rappresentano la versione non accentata del carattere, seguita dall'accento / i. Ad esempio, "ä" potrebbe essere rappresentato precomposto come U + 00E4 (UTF-8 0xc3a4, lettera minuscola latina 1 con diaeresi) o scomposto come U + 0061 U + 0308 (UTF-8 0x61cc88, lettera minuscola latina a + combinando diaeresi ).
Il filesystem HFS + di OS X richiede che tutti i nomi dei file siano archiviati nella rappresentazione UTF-8 della loro forma completamente decomposta . In un nome file HFS +, "ä" DEVE essere codificato come 0x61cc88 e "ö" DEVE essere codificato come 0x6fcc88.
Sono abbastanza sicuro che ciò che sta accadendo qui è che quando si digita "Näyttökuva.png" alla riga di comando, si sta "digitando" i caratteri in forma precomposta. Quando viene creato il file, il filesystem decompone i caratteri per l'archiviazione. Finora tutto bene. Ma quando provi a usare il completamento della scheda a partire da "Nä", penso che bash non riesca a scomporre "ä" prima di cercare le corrispondenze, e ovviamente non ne trova.
Per illustrare la differenza, ecco un esempio di quale codifica viene utilizzata quando digito semplicemente "Näyttökuva.png" nella riga di comando, rispetto a ciò che viene utilizzato quando lo memorizzo come nome file e utilizzo il completamento della scheda per compilarlo:
$ 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
Ora, per quanto riguarda la questione dei personaggi che si perdono quando si eliminano e si ri-completano le schede, sospetto che sia strettamente correlato. In particolare, penso che bash stia "cancellando" un punto di codice per pressione del tasto Elimina, ma cancellando un carattere dalla finestra Terminale per stampa. Poiché uno dei caratteri eliminati ("ö" questa volta) consisteva in due punti di codice, ma solo un carattere, il display del Terminale non è più sincronizzato. Prova a completare con tabulazione l'intero nome del file, eliminandolo di nuovo in "Näytt", quindi ripeti il completamento del tab: bash sembra pensare che sia stata eliminata solo la diaeresi combinata, non l'intero "ö", quindi aggiunge nuovamente la diaeresi combinata , ma questa volta si attacca alla "t":
$ echo Näytẗkuva.png
Näyttökuva.png
Nota che quando premo return, bash ha effettivamente l'intero nome file lì; è solo il display del Terminale che era confuso.
TL; DR bash ha alcuni bug che gestiscono caratteri accentati scomponibili.
EDIT: dopo alcuni rimuginare, penso che l'unica soluzione completa sia riparare bash (/ attendere che i suoi sviluppatori lo risolvano). Potrebbe esserci anche un modo per inserire caratteri in forma scomposta, ma non ho idea di cosa sarebbe. Ma ho trovato alcune soluzioni parziali:
Trascina e rilascia un file dalle paste del Finder nella sua forma corretta. Poiché il Finder ottiene il nome file dal filesystem, è già decomposto, quindi funziona.
Puoi effettivamente completare il tab con il carattere accentato stesso. Ad esempio, se digiti "Na" e quindi tab, corrisponderà a "Näyttökuva.png" perché la decomposizione canonica di "ä" inizia con "a". Ma se hai un file chiamato "Narwal.gif" nella stessa directory, non sarà molto utile ...
Non l'ho provato, ma se si lega la scheda al menu completo anziché a quello completo, dovrebbe consentire di scorrere le possibili corrispondenze in modo da poter selezionare quella desiderata anche se non è possibile digitare la lettera successiva. (Oppure potresti associarlo a una diversa pressione dei tasti, quindi puoi usarlo solo quando è necessario.)
Per risolvere il problema con la visualizzazione del Terminale fuori sincronia, è possibile associare qualcosa a ridisegnare la linea corrente - non impedirà che si verifichi il problema, ma ti darà un modo per risincronizzare il display.
$ echo -e "N\xC3\xA4*" | ls
(l'eco dàNä*
) risultatiNäyttökuva.png
. Il problema esiste anche con le altre shell in Mac OS; e con ad esempio zshls N
viene completato automaticamentels Na<0308>ytto<0308>kuva.png