Кращий спосіб прочитати рядок введення користувача в zsh? (наприклад, з zle?)


11

Zsh це readз якої - то причини echo'ing ^M«и замість того , щоб прийняти їх як <Enter>натискання клавіш. (Якщо -dце встановлено, вони розпізнаються як <Enter>'s, але все ще перегукуються.) Він також не підтримує таких основ, як ключ назад.

Я можу обійти це шляхом взлому / бігу bash,

> a=$(bash -c 'read -e -p "What would you like to do?: " tmp; echo $tmp')
What would you like to do?: eat cake
> echo $a                                                                
eat cake

але мені цікаво, чи є більш чистий спосіб.


Неможливо підтвердити при встановленні zsh4.3.10; % read aдобре працює тут.
користувач1686

Для цього використовується iterm в OS X; readпрацює на машинах Linux.
Ніколас Тунг

Відповіді:


19

Щоб зручно ввести рядок тексту під zsh, використовуйте vared. Використання varedзамість readвикликає ZLE , який є еквівалентом переходу -eв БАШЕЄВ , щоб викликати Readline.

vared -p 'What would you like to do?: ' -c tmp

Поведінка, яку ви описуєте простою, readсхоже на неправильно налаштований термінал, а не на проблему оболонки. Запустіть, stty -aщоб показати свої настройки терміналу, і переконайтеся, що eolвстановлено ^Mта eraseвстановлено те, що Backspaceнадсилає ваш ключ. Залежно від операційної системи та способів її налаштування та терміналу, Backspaceнадсилає ^Hабо ^?. Налаштування зворотної області зазвичай виходить з ладу через певний файл конфігурації, який намагається встановити його вручну, тому перше, що вам слід зробити, - це відстежувати та видаляти будь-яку таку неправильну конфігурацію. Якщо ви не знайдете жодного, перегляньте налаштування емулятора термінала, щоб перевірити, чи він не встановлений у історичному режимі сумісності. Якщо все інше не вдається, додайте щось подібне до свого ~/.zshrc:

if [[ $(ps -o comm= $PPID) = iterm ]]; then
  stty erase '^?'
fi

1
vared -p 'Що б ти хотів зробити ?:' -c tmp
zzapper

Так кльово! Не знав про varedвбудований. Виходить, zshzleсторінка man, безумовно, варта принаймні проглядати.
ratijas
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.