ocehb: (Default)
ocehb ([personal profile] ocehb) wrote2015-12-28 10:12 am
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


как это работает:

  1. определяется функция __switch_sudo, которая манипулирует zle-переменной LBUFFER,
    представляюшую собой часть zle-буфера, в котором хранится левая часть (от начала входного буфера до курсора) текущей строки редактирования. она проверяет, начинается ли она с sudo или нет, и либо вставляет туда sudo , либо удаляет.

  2. связывает эту функцию с zle-widget switch-sudo (после этого данную функцию можно использовать внутри zle).

  3. связывает виджет switch-sudo с клавиатурной комбинацией <ESC-s>

  4. теперь можно использовать комбинацию <ESC-s> для быстрой вставки/удаления команды sudo в текущем буфере редактирования.

  5. замечание: данный виджет сохраняет позицию курсора относительно старой команды в обоих случаях.

  6. замечание2: не проверяет наличие опций у команды sudo

  7. man zshzle






Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org