Eu acho que o bash está tropeçando em algumas anomalias na maneira como os caracteres acentuados são tratados. Você pode pegar um pouco de pipoca, porque isso será técnico por um tempo ...
O Unicode permite que alguns caracteres acentuados sejam representados de várias maneiras diferentes: como um "ponto de código" representando o caractere acentuado ou como uma série de pontos de código representando a versão não acentuada do caractere, seguida pelo (s) acento (s). Por exemplo, "ä" pode ser representado pré-composto como U + 00E4 (UTF-8 0xc3a4, letra minúscula latina 1 com diérese) ou decomposto como U + 0061 U + 0308 (UTF-8 0x61cc88, letra minúscula latina a + diaeresis combinada )
O sistema de arquivos HFS + do OS X exige que todos os nomes de arquivos sejam armazenados na representação UTF-8 de sua forma totalmente decomposta . Em um nome de arquivo HFS +, "ä" DEVE ser codificado como 0x61cc88 e "ö" DEVE ser codificado como 0x6fcc88.
Tenho certeza de que o que está acontecendo aqui é que, quando você digita "Näyttökuva.png" na linha de comando, está "digitando" os caracteres na forma pré-composta. Quando o arquivo é criado, o sistema de arquivos decompõe os caracteres para armazenamento. Está tudo bem até agora. Mas quando você tenta usar o preenchimento de tabulação começando com "Nä", acho que o bash está falhando em decompor o "ä" antes de procurar por correspondências e, é claro, não encontra nenhuma.
Para ilustrar a diferença, aqui está um exemplo de qual codificação é usada quando eu apenas digito "Näyttökuva.png" na linha de comando, vs.
$ 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
Agora, quanto à questão de os personagens se perderem ao excluir e refazer a tabulação, suspeito que isso esteja intimamente relacionado. Especificamente, acho que o bash está "excluindo" um ponto de código por pressionamento da tecla delete, mas apagando um caractere da janela Terminal por pressionamento. Como um dos caracteres excluídos ("ö" desta vez) consistia em dois pontos de código, mas apenas um caractere, a tela do Terminal fica fora de sincronia. Tente completar com tabulação o nome do arquivo inteiro, excluindo-o de volta para "Näytt" e, em seguida, preenchendo novamente a tabulação: o bash parece pensar que apenas a diérese combinada foi excluída, e não o "ö" inteiro, por isso, adiciona novamente a diátese combinada , mas desta vez anexa ao "t":
$ echo Näytẗkuva.png
Näyttökuva.png
Observe que, quando pressiono return, o bash realmente tem o nome do arquivo inteiro; é apenas a tela do Terminal que estava confusa.
O TL; DR bash possui alguns bugs que lidam com caracteres acentuados decomponíveis.
EDIT: após algumas ponderações, acho que a única solução completa é corrigir o bash (/ aguarde seus desenvolvedores corrigi-lo). Também pode haver uma maneira de inserir caracteres em forma decomposta, mas não tenho idéia do que seria. Mas encontrei algumas soluções parciais:
Arraste e solte um arquivo das pastas do Finder em sua forma correta. Como o Finder obtém o nome do arquivo do sistema de arquivos, ele já está decomposto, então funciona.
Você pode realmente tab-complete o próprio personagem acentuado. Por exemplo, se você digitar "Na" e depois tab, corresponderá a "Näyttökuva.png" porque a decomposição canônica de "ä" começa com "a". Mas se você tiver um arquivo chamado "Narwal.gif" no mesmo diretório, isso não será muito útil ...
Eu não testei isso, mas se você vincular a guia ao menu completo em vez de completo, deverá permitir a seleção de possíveis correspondências para que você possa selecionar o que deseja, mesmo que não possa digitar a próxima letra. (Ou você pode vinculá-lo a um pressionamento de tecla diferente, para poder usá-lo apenas quando precisar.)
Para corrigir o problema com a exibição do Terminal fora de sincronia, você pode vincular algo à redesenho da linha atual - isso não impedirá que o problema aconteça, mas permitirá que você ressincronize a exibição.
$ echo -e "N\xC3\xA4*" | ls
(o eco dáNä*
) resultadosNäyttökuva.png
. O problema existe também com os outros shells no Mac OS; e com, por exemplo, o zshls N
é auto-completado em #ls Na<0308>ytto<0308>kuva.png