Я думаю, що Баш стикається з деякими аномаліями в обробці наголошених персонажів. Ви можете захопити трохи попкорну, тому що це стане трохи технічним ...
Unicode дозволяє представити деякі наголошені символи декількома різними способами: як "кодову точку", що представляє наголошений символ, або як серію кодових точок, що представляють неакцентовану версію символу, з подальшим наголосом. Наприклад, "ä" може бути представлений як попередньо складений як U + 00E4 (UTF-8 0xc3a4, мала латинська літера 1 з діарезом), так і розкладений як U + 0061 U + 0308 (UTF-8 0x61cc88, мала латинська буква a + поєднує діарез ).
Файлова система HFS + OS X вимагає, щоб усі імена файлів зберігалися у представленні UTF-8 їх повністю розкладеної форми . У імені файлу HFS + "ä" ОБОВ'ЯЗКОВО кодується як 0x61cc88, а "ö" ОБОВ'ЯЗКОВО кодується як 0x6fcc88.
Я майже впевнений, що тут відбувається те, що коли ви вводите "Näyttökuva.png" у командному рядку, він "набирає" символів у заздалегідь складеній формі. Коли файл створений, файлова система розкладає символи для зберігання. На сьогодні все добре. Але коли ви намагаєтесь скористатися заповненням вкладок, починаючи з "Nä", я думаю, що bash не вдається розкласти "ä" перед пошуком відповідностей, і, звичайно, він не знаходить жодного.
Щоб проілюструвати різницю, ось приклад того, яке кодування використовується, коли я просто набираю "Näyttökuva.png" у командному рядку, порівняно з тим, що використовується, коли я зберігаю його як ім'я файлу та використовую заповнення вкладки для заповнення:
$ 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
Що ж стосується того, що питання персонажів втрачаються при видаленні та повторному заповненні вкладок, я підозрюю, що це тісно пов'язане. Зокрема, я думаю, що bash - це "видалення" однієї кодової точки за натискання клавіші видалення, але стирання одного символу з вікна терміналу на прес. Оскільки один з видалених символів ("ö" цього разу) складався з двох кодових точок, але лише одного символу, дисплей Терміналу виходить із синхронізації. Спробуйте доповнити вкладку всього імені файлу, видаливши його назад до "Näytt", а потім повторно заповнюючи вкладку: bash, здається, вважає, що видалений лише поєднувальний діарез, а не весь "ö", тому він знову додає поєднувальний діарез , але цього разу воно приєднується до "t":
$ echo Näytẗkuva.png
Näyttökuva.png
Зауважте, що коли я натискаю return, bash фактично має все ім'я файлу; це просто сплутаний дисплей терміналу.
TL; DR bash має деякі помилки, які обробляють символи з наголосом, що розкладаються.
EDIT: після деякого розміщення я думаю, що єдине повноцінне рішення - це виправити bash (/ чекати, коли його розробники виправлять). Також може бути спосіб введення символів у розкладеному вигляді, але я не маю уявлення, що це було б. Але я знайшов деякі часткові обходи:
Перетягування файлу із вставок Finder у правильному вигляді. Оскільки Finder отримує ім'я файлу з файлової системи, воно вже розкладається, тому воно просто працює.
Ви можете фактично заповнити сам наголошений символ. Наприклад, якщо ви введете "Na", а потім вкладку, вона відповідатиме "Näyttökuva.png", оскільки канонічне розкладання "ä" починається з "a". Але якщо у тому самому каталозі є файл з назвою "Narwal.gif", це не буде дуже корисно ...
Я цього не перевіряв, але якщо ви прив’язуєте вкладку до меню-заповнення замість повної, вона повинна переглядати можливі відповідність, щоб ви могли вибрати потрібне, навіть якщо не зможете ввести наступний лист. (Або ви можете прив'язати його до іншого натискання клавіші, тому можете використовувати його лише тоді, коли вам потрібно.)
Щоб вирішити проблему, коли дисплей термінала не синхронізувався, ви можете прив’язати щось до перемальовування поточної лінії - це не запобіжить виникненню проблеми, але це дасть вам спосіб пересинхронізувати дисплей.
$ echo -e "N\xC3\xA4*" | ls
(відлуння даєNä*
) результатиNäyttökuva.png
. Проблема існує і з іншими оболонками в Mac OS; і, наприклад, zshls N
автоматично завершується доls Na<0308>ytto<0308>kuva.png