Atualizar dinamicamente a lista de conclusão no zsh

13

Acho as listas de resultados do zsh para Tabconclusão bastante úteis, no entanto, gostaria de ajustar um pouco o comportamento deles:

Eles devem aparecer quando eu Tabpela primeira vez e depois atualizar dinamicamente a cada nova letra adicionada. O comportamento padrão é que as sugestões só são reavaliadas quando você Tabnovamente, quero salvar esse pressionamento de tecla repetido. ( Atualização: mas liste apenas as conclusões possíveis, ele não deve modificar automaticamente minha linha de prompt real, mesmo se houver apenas uma opção.)

Existe alguma maneira de alcançar esse comportamento?

F30
fonte
Você pode se aprofundar no zshcomportamento do customizing . O que deveria acontecer exatamente? No momento, esta pergunta parece que você deseja que as opções sejam listadas para cada pressionamento de tecla após o TAB inicial, mas isso não será realmente concluído. Cada pressionamento de tecla deve se comportar como se fosse seguido por um TAB? Lembre-se de que isso significaria bastante retrocesso para conclusões não intencionais.
peth 5/03/12
@ user112553 A primeira opção: nesse sentido, ele não deve realmente se comportar como um TAB repetido. Eu só quero que a lista de sugestões se ajuste dinamicamente.
F30

Respostas:

2

Uma maneira de oferecer a solução desejada é incremental-complete-word:

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

Isso carrega a função e a vincula a Ctrl- X i. Agora você pode tentar:

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

Neste exemplo, a letra kfoi digitada, seguida pelo Control-X i.

> kil
incremental (complete): kill       

Digitei ile agora havia uma conclusão possível ( kill). Pode-se aceitar isso e pressionar enter.

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

Digitando Ctrl- Do zsh mostra possíveis conclusões.

De zshcontrib(1):

incremental-complete-word
Isso permite a conclusão incremental de uma palavra. Após iniciar este comando, uma lista de opções de conclusão pode ser mostrada após cada caractere digitado, que você pode excluir com ^Hou DEL. Pressionar return aceita a conclusão até o momento e retorna à edição normal (ou seja, a linha de comando não é executada imediatamente). Você pode pressionar TABpara concluir normalmente, ^G abortar de volta ao estado quando você iniciou e ^Dlistar as correspondências.

qbi
fonte