【问题标题】:Zsh shift+control+arrowszsh shift+control+箭头
【发布时间】:2014-07-23 13:33:17
【问题描述】:

我正在拼命寻找一种在 zsh shell 中启用经典导航和选择的方法.. 意思是,我希望能够: - 在 zsh 中使用 shift+left/right 选择 char by char - 使用 control+left/right 在 zsh 中逐字移动 - 在 zsh 中使用 ctrl+shift+left/right 逐字选择

我已经能够使用我在不同相关主题上找到的一些愚蠢的技巧和解决方案来完成我列表中的前 2 点,但我无法找到一个简单的解决方案来使我的第 3 点正常工作...... 有谁知道如何做到这一点?我正在使用 gnome-terminal,但如果需要它来做我想做的事,我不介意切换到另一个,只要新的允许我使用鼠标复制/粘贴/滚动即可。

希望你能解决我的问题=)

【问题讨论】:

  • 你能分享一下你已经拥有的吗?在第三种情况下到底什么不起作用?此外,您是要模拟鼠标选择(这将是终端的一个功能)还是为 zsh 区域创建更方便的绑定 (set-mark-command)?
  • 这能回答你的问题吗? Zsh zle shift selection

标签: shell zsh archlinux


【解决方案1】:

好的,这就是我目前在我的 .zshrc 中用于控制键绑定的内容:

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 ';6D' select-word-left ## not working yet                                                                                                                                                                                                                               
bindkey ';6C' select-word-right ## not working yet                                                                                                                                                                                                                              
bindkey ';2D' select-char-left   # assuming xterm                                                                                                                                                                                                                               
bindkey ';2C' select-char-right  # assuming xterm                                                                                                                                                                                                                               
bindkey ';5D' backward-word
bindkey ';5C' forward-word
bindkey '^[[3~' delete-char

有了这个,我可以:

  • 使用控件逐字移动

  • 使用 shift 选择要删除的区域(唯一的问题,我在标记的区域上看不到)

  • 一个有效的删除键

抱歉,我目前在 xterm 终端上(刚刚将我的桌面环境更改为 xfce4)

我仍然想使用 ctrl+shift+arrows 标记要杀死的区域,但我还不能这样做,因为我不知道如何使用前进/后退字移动字符数。 . 在一个更美好的世界中,我还希望有一个突出显示的标记区域...... =) 任何的想法?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    • 2012-04-01
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    相关资源
    最近更新 更多