Lepszy sposób na odczytanie linii wprowadzanych przez użytkownika w Zsh? (np. z Zle?)

11

Zsh z readjakiegoś powodu to echo ^Mzamiast akceptować je jako <Enter>naciśnięcia klawiszy. (Jeśli -djest ustawiony, to są one rozpoznawane jako <Enter>„ale”, ale nadal są powtarzane). Nie obsługuje również podstaw takich jak klawisz Backspace.

Mogę obejść ten problem, hakując / biegając 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

ale zastanawiam się, czy istnieje lepszy sposób.

Nicholas Tung
źródło
Nie można potwierdzić przy nowej zshinstalacji 4.3.10; % read adziała dobrze tutaj.
user1686
To używa iterm w OS X; readdziała na komputerach z systemem Linux.
Nicholas Tung

Odpowiedzi:

19

Aby wygodnie wpisać wiersz tekstu pod Zsh, użyj vared. Używając varedzamiast readwywołuje ZLE , który jest równoważny do przechodzenia -ebash na wywołanie readline.

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

Zachowanie, które opisujesz zwykłym, readwygląda raczej na źle skonfigurowany terminal niż na problem z powłoką. Uruchom, stty -aaby wyświetlić ustawienia terminala i upewnij się, że eoljest ustawiony na ^Mi eraseustawiony na to, co Backspacewysyła twój klucz. W zależności od systemu operacyjnego i jego konfiguracji oraz od terminala Backspacewysyła albo ^Hlub ^?. Ustawienie backspace zwykle nie działa z powodu pliku konfiguracyjnego, który próbuje ustawić go ręcznie, więc pierwszą rzeczą, którą powinieneś zrobić, to śledzić i usuwać takie błędne konfiguracje. Jeśli nie znajdziesz, przejrzyj ustawienia emulatora terminali, aby sprawdzić, czy nie jest ustawiony jakiś historyczny tryb zgodności. Jeśli wszystko inne zawiedzie, dodaj coś takiego do ~/.zshrc:

if [[ $(ps -o comm= $PPID) = iterm ]]; then
  stty erase '^?'
fi
Gilles „SO- przestań być zły”
źródło
1
vared -p 'Co chciałbyś zrobić ?:' -c tmp
zzapper
Ale fajnie! Nie wiedziałem o varedwbudowanym. Okazuje się, że zshzlestrona podręcznika jest zdecydowanie warta przynajmniej przejrzenia.
ratijas