zsh 移位选择

Ugo*_*Ugo 5 zsh shell

如何使用 shift 选择命令行的一部分(就像在许多文本编辑器中一样)?

pet*_*eth 5

一种方法是

  1. 定义新的小部件,激活移动运动键上的标记,
  2. 重新定义所有操作小部件以在该区域上操作(如果有),并且
  3. 重新定义所有默认运动小部件以停用标记。

这是一个概念证明(针对xterm),适用于:

  • Shift-LeftShift-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
Run Code Online (Sandbox Code Playgroud)