Я могу ответить только за zsh
, где это можно сделать, да.
Во-первых, уже есть несколько виджетов для пошагового завершения. Первый, по-видимому, Ю. Фуджи. Хотя его сайт на японском языке, вы можете легко понять, не говоря на этом языке, как он работает и как его использовать.
Авто-фу это расширение оригинального скрипта.
Пока что ссылки. В zsh
редактор ЗШ линии zle
отвечают за интерактивное использование командной строки. Помимо множества других переменных, предоставляемых виджетам (см. man zshzle
), они представляют интерес для вас, так как вы хотите захватить текущую командную строку:
$ BUFFER: все содержимое буфера редактирования.
$ LBUFFER: часть буфера, которая находится слева от позиции курсора.
$ RBUFFER: часть буфера, которая находится справа от позиции курсора.
Эти переменные доступны для записи, что изменит текущую командную строку!
Чтобы захватить каждое нажатие клавиши, вы можете изменить self-insert
виджета, которая выполняется (по умолчанию) для каждого нажатия клавиши, кроме LF
или CR
. Вот пример, который не делает ничего очень полезного, но добавляет при каждом нажатии клавиши точку к $RBUFFER
- просто чтобы проиллюстрировать, как это работает:
function self-insert() {
RBUFFER+="."
# execute some other command, but ensure they don't produce any output.
zle .self-insert
}
zle -N self-insert
.self-insert
является встроенным виджетом, поэтому мы не сталкиваемся с бесконечным циклом.
Таким образом, вы можете либо начать с нуля, либо начать со скрипта Fujii и изменить его. Одним из преимуществ последнего является то, что он также выполняет некоторую обработку удаления нажатий клавиш, о которой я здесь не упомянул.