Entry tags:
zshell kbd binding function
function __switch_sudo () {
local sudo="sudo "
if [[ $LBUFFER == $sudo* ]]; then
LBUFFER="$LBUFFER[$[$#sudo+1],-1]"
else
LBUFFER="$sudo$LBUFFER"
fi
}
zle -N switch-sudo __switch_sudo
bindkey "\es" switch-sudo
привязывает функцию
__switch_sudo
к клавиатурному шорткату <ESC-s>. Результат:
# ls -l /lost+found<ESC-s> →
# sudo ls -l /lost+found<ESC-s> →
# ls -l /lost+found
как это работает:
- определяется функция
__switch_sudo
, которая манипулирует zle-переменнойLBUFFER
,
представляюшую собой часть zle-буфера, в котором хранится левая часть (от начала входного буфера до курсора) текущей строки редактирования. она проверяет, начинается ли она сsudo
или нет, и либо вставляет тудаsudo
, либо удаляет. - связывает эту функцию с zle-widget
switch-sudo
(после этого данную функцию можно использовать внутри zle). - связывает виджет
switch-sudo
с клавиатурной комбинацией <ESC-s> - теперь можно использовать комбинацию <ESC-s> для быстрой вставки/удаления команды sudo в текущем буфере редактирования.
- замечание: данный виджет сохраняет позицию курсора относительно старой команды в обоих случаях.
- замечание2: не проверяет наличие опций у команды sudo
- man zshzle