本文介绍了zsh zle 移位选择的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

How to use shift to select part of the commandline (like in many text editors) ?

推荐答案

shift-arrow() {
  ((REGION_ACTIVE)) || zle set-mark-command
  zle $1
}
shift-left()  shift-arrow backward-char
shift-right() shift-arrow forward-char
shift-up()    shift-arrow up-line-or-history
shift-down()  shift-arrow down-line-or-history
zle -N shift-left
zle -N shift-right
zle -N shift-up
zle -N shift-down

bindkey $terminfo[kLFT] shift-left
bindkey $terminfo[kRIT] shift-right
bindkey $terminfo[kri]  shift-up
bindkey $terminfo[kind] shift-down

假设您的终端在 上发送的转义序列与在 上发送的不同,并且您的 terminfo 数据库已正确填充相应的 kLFT 和 kRIT 功能,并且您使用的是 emacs 样式的键绑定.

That assumes your terminal sends a different escape sequence upon from the one sent upon and that your terminfo database is properly populated with corresponding kLFT and kRIT capabilities, and that you're using emacs style key binding.

或者,稍微分解代码:

shift-arrow() {
  ((REGION_ACTIVE)) || zle set-mark-command
  zle $1
}
for key  kcap seq        widget (
    left  LFT $'\e[1;2D' backward-char
    right RIT $'\e[1;2C' forward-char
    up    ri  $'\e[1;2A' up-line-or-history
    down  ind $'\e[1;2B' down-line-or-history
  ) {
  functions[shift-$key]="shift-arrow $widget"
  zle -N shift-$key
  bindkey ${terminfo[k$kcap]-$seq} shift-$key
}

以上,在 terminfo 数据库没有信息的情况下硬编码的序列(使用 xterm 序列).

Above, hardcoded sequences for cases where the terminfo database doesn't have the information (using xterm sequences).

这篇关于zsh zle 移位选择的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-01 15:47