Você está digitando as teclas, mas não as ligações da linha de leitura , isso pode explicar as diferenças no comportamento observado (tente bind -p
).
A única maneira que posso pensar para fazer exatamente o que você pede é usar uma função de conclusão personalizada que salva o estado do buffer e uma ligação de chave separada que invoca uma função de shell complementar para restaurá-lo .
Além da excelente sugestão do @Mark Plotnick para usar menu-complete
, outras opções readline / bash são:
-
shell-backward-kill-word
remove uma "palavra shell" que, no caso de um arquivo ou caminho expandido, será o nome completo do arquivo ou caminho -
backward-kill-word
remove uma "palavra readline", que, no caso de um arquivo ou caminho, será um componente de nome de arquivo ou diretório, incluindo o% arrastado/
-
undo
, que desfaz cada mudança atomicamente, mas isso quase certamente requer várias tentativas para remover completamente uma expansão completa, isso é quase certamente a função que você ligou para ctrl - _ (bash padrão) -
set-mark
ekill-region
são recursos readline menos usados,set-mark
marca a posição atual do cursor ekill-region
exclui da marca para o cursor. Isso requer que você invoqueset-mark
(padrão meta - espaço ) para que você possa usar mais tardekill-region
para excluir de volta (sem ligação padrão) -
possible-completions
(ligado a meta - = ) que lista as completações sem modificando o buffer de comando
Você também pode escrever sua própria função para modificar o buffer de entrada e vinculá-lo a uma função (aqui um que fiz anteriormente ) mas não vejo como isso seria muito melhor que backward-kill-word
neste caso.
Você pode testar as ligações dinamicamente sem usar .inputrc
usando o comando bind
do bash, por exemplo:
bind "\C-o: backward-kill-word"
bind "\C-o: shell-backward-kill-word"
backward-kill-word
é o melhor ajuste, a ligação padrão é meta ctrl - h . set-mark
/ kill-region
seria melhor, mas não consigo pensar em uma maneira simples de automatizar o uso disso.