首页 > 解决方案 > zsh 在 vi​​ 模式下;如何更改配色方案?

问题描述

我最近使用自定义配置文件从 bash 切换到 zsh,并使用 vim 模式。一切正常,但我真的不喜欢选择(标记)模式的配色方案。

我想要这样的东西:https ://imgur.com/YMQhrol

而我现在的情况是这样的:

  1. [正常] ( https://imgur.com/DZjV3cD )
  2. [视觉模式开启] ( https://imgur.com/FEZFF29 )
  3. [选择] ( https://imgur.com/6UN6TDL )

如您所见,选择块与背景颜色相同,因此很难区分,顶部只有一点点特征。我试图搜索要编辑的文件以更改配色方案,但我只找到主题和模组的链接。

任何帮助解决这个烦恼将不胜感激。

标签: zsh

解决方案


您需要设置zle_highlight数组。以下内容接近您的示例。您可能希望在数组中设置其他键,例如 default: 和 paste:。许多 zsh 文档使用 emacs 术语region

zle_highlight=( region:bg=229,fg=235 )

光标颜色是为您的终端仿真器配置的,而不是在 zsh 的控制下。值得关注与光标的交互。光标位置始终是 vim 模式中选择的一部分,因此如果光标和选择都应用反向视频,则效果无用。添加一个钩子是一个好主意,它可以zle-keymap-select()在块和条之间交换光标以用于正常与插入模式。转义序列可能取决于您的终端仿真器,但类似于:

zle-keymap-select() {
  if [[ $KEYMAP = vicmd ]]; then
    print -n '\e[2 q'
  else
    print -n '\e[5 q'
  fi
}
zle-line-init() {
  print -n '\e[5 q'
}
zle -N zle-keymap-select
zle -N zle-line-init
preexec() {
  print -n $'\e[2 q'
}

不幸的是,很难捕捉到视觉模式已启用但未选择文本。键盘映射永远不会“visual选择”,因为它是覆盖在vicmd.


推荐阅读