Как переместить позицию курсора в определении виджета Zsh

У меня есть этот фрагмент:

insert_sudo () { zle beginning-of-line; zle -U "sudo "; zle end-of-line; }
zle -N insert-sudo insert_sudo
bindkey "\es" insert-sudo

Но \es только добавляет "sudo" к концу строки, а не к началу строки, как я ожидал. Пожалуйста помоги!

1 ответ

Решение

Попробуйте следующее:

insert_sudo() { BUFFER="sudo $BUFFER"; zle end-of-line; }

Это напрямую изменяет специальный $BUFFER переменная, содержащая содержимое командной строки путем добавления sudo  и затем поместите курсор в конец строки.

Проблема с zle -U является то, что он вступает в силу только после завершения виджета. От zsh руководство:

После того как виджет завершит выполнение в настоящий момент, ZLE будет вести себя так, как если бы символы в строке были набраны пользователем.

Другие вопросы по тегам