ocehb: (Default)
[personal profile] ocehb

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





Date: 2015-12-28 10:16 am (UTC)
From: [identity profile] ico.livejournal.com
"arto.homeunix.org uses an invalid security certificate."

Date: 2015-12-28 10:23 am (UTC)
From: [identity profile] ico.livejournal.com
ok :)

Profile

ocehb: (Default)
ocehb

January 2021

S M T W T F S
     12
345 6789
10111213141516
17181920212223
24252627282930
31      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 9th, 2025 11:13 am
Powered by Dreamwidth Studios