Dynamicznie aktualizuj listę ukończeń w Zsh

13

Uważam, że listy wyników zsh do Tabukończenia są całkiem przydatne, ale chciałbym trochę poprawić ich zachowanie:

Powinny się one pojawiać, gdy Tabpo raz pierwszy, a następnie dynamicznie aktualizują się przy każdym dodaniu nowej litery. Domyślne zachowanie polega na tym, że sugestie są ponownie oceniane tylko wtedy, gdy Tabponownie chcę zapisać to powtarzające się naciśnięcie klawisza. ( Aktualizacja: Ale tylko listę możliwych uzupełnień, nie powinna automatycznie modyfikować mojej faktycznej linii poleceń, nawet jeśli pozostała tylko jedna opcja).

Czy jest jakiś sposób na osiągnięcie takiego zachowania?

F30
źródło
Możesz wniknąć głęboko w zshzachowanie użytkownika. Co powinno się stać dokładnie? W tej chwili pytanie brzmi, jakbyś chciał, aby opcje były wyświetlane dla każdego naciśnięcia klawisza po początkowym TAB, ale tak naprawdę to niczego nie dokona. Czy każde naciśnięcie klawisza powinno zachowywać się tak, jakby po nim następował TAB? Pamiętaj, że oznaczałoby to sporo cofania się w przypadku niezamierzonych uzupełnień.
peth
@ user112553 Pierwsza opcja: w tym sensie tak naprawdę nie powinna zachowywać się jak powtarzająca się TAB. Chcę tylko, aby lista sugestii dynamicznie dostosowywała się.
F30

Odpowiedzi:

2

Jednym ze sposobów, który może zaoferować pożądane rozwiązanie, jest incremental-complete-word:

zle -N incremental-complete-word
bindkey '^Xi' incremental-complete-word

Spowoduje to załadowanie funkcji i powiązanie jej z Ctrl- X i. Teraz możesz spróbować:

> k^Xi
incremental (complete): -no prefix-

W tym przykładzie litera kzostała wpisana, a następnie Control-X i.

> kil
incremental (complete): kill       

Pisałem na maszynie, ila teraz możliwe było jedno zakończenie ( kill). Można to zaakceptować i nacisnąć enter.

> kill^D
incremental (complete): -no prefix-
- external command -
kill      killall   killall5

Wpisując Ctrl- Dzsh pokazuje możliwe uzupełnienia.

Od zshcontrib(1):

incremental-complete-word
Umożliwia przyrostowe uzupełnianie słowa. Po uruchomieniu tego polecenia po każdym wpisanym znaku może zostać wyświetlona lista opcji uzupełniania, które można usunąć za pomocą ^Hlub DEL. Naciśnięcie klawisza Return akceptuje zakończenie do tej pory i powoduje powrót do normalnej edycji (tzn. Linia poleceń nie jest natychmiast wykonywana). Możesz nacisnąć, TABaby wykonać normalne zakończenie, ^G przerwać z powrotem do stanu, kiedy zacząłeś, i ^Dwyświetlić listę meczów.

qbi
źródło