Zsh смещают выбор

Как использовать сдвиг для выбора части командной строки (как во многих текстовых редакторах)?

5
задан 24.03.2011, 01:06

1 ответ

Один способ сделать это к

  1. определите новые виджеты, которые активируют маркировку на смещенных ключах движения,
  2. переопределите все виджеты действия для работы на регион (если существует один), и
  3. переопределите все виджеты движения по умолчанию для деактивации маркировки.

Вот подтверждение концепции (для xterm), работа для:

  • Shift-Left и Shift-Right: начните выбирать к слева/справа, соответственно,
  • Left, Right: выбор отмены и перемещение слева/справа, соответственно,
  • Delete: удалите выбор, если существует один, иначе символ под курсором.

Обычные правовые оговорки применяются (могут быть другие и лучшие пути, Ваша кошка может съесть Ваш тостер, и т.д.).

bindkey -e

function zle-line-init {
    marking=0
}
zle -N zle-line-init

function select-char-right {
    if (( $marking != 1 )) 
    then
        marking=1
        zle set-mark-command
    fi
    zle .forward-char
}
zle -N select-char-right

function select-char-left {
    if (( $marking != 1 )) 
    then
        marking=1
        zle set-mark-command
    fi
    zle .backward-char
}
zle -N select-char-left

function forward-char {
    if (( $marking == 1 ))
    then
        marking=0
        NUMERIC=-1 zle set-mark-command
    fi
    zle .forward-char
}
zle -N forward-char

function backward-char {
    if (( $marking == 1 ))
    then
        marking=0
        NUMERIC=-1 zle set-mark-command
    fi
    zle .backward-char
}
zle -N backward-char

function delete-char {
    if (( $marking == 1 ))
    then
        zle kill-region
        marking=0
    else
        zle .delete-char
    fi
}
zle -N delete-char

bindkey '^[[1;2D' select-char-left   # assuming xterm
bindkey '^[[1;2C' select-char-right  # assuming xterm
4
ответ дан 07.12.2019, 18:02

Теги

Похожие вопросы