zshell kbd binding function

Dec 28, 2015 10:12



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 к клавиатурному шорткату . Результат:

# ls -l /lost+found →
# sudo ls -l /lost+found →
# ls -l /lost+found


как это работает:
  1. определяется функция __switch_sudo, которая манипулирует zle-переменной LBUFFER,
    представляюшую собой часть zle-буфера, в котором хранится левая часть (от начала входного буфера до курсора) текущей строки редактирования. она проверяет, начинается ли она с sudo или нет, и либо вставляет туда sudo , либо удаляет.
  2. связывает эту функцию с zle-widget switch-sudo (после этого данную функцию можно использовать внутри zle).
  3. связывает виджет switch-sudo с клавиатурной комбинацией
  4. теперь можно использовать комбинацию для быстрой вставки/удаления команды sudo в текущем буфере редактирования.
  5. замечание: данный виджет сохраняет позицию курсора относительно старой команды в обоих случаях.
  6. замечание2: не проверяет наличие опций у команды sudo
  7. man zshzle




zsh

Previous post Next post
Up