Как переместить позицию курсора в определении виджета 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 будет вести себя так, как если бы символы в строке были набраны пользователем.