gpt4 book ai didi

shell - zsh 在将行添加到行缓冲区之前清除 RPS1

转载 作者:行者123 更新时间:2023-12-01 16:20:30 26 4
gpt4 key购买 nike

我是 vim 用户,最近才开始玩 zsh 以便能够在 shell 中使用 vi 模式(由于缺少插入/命令模式指示器,这在 bash 中不实用)。在阅读了一些示例后,我设置了以下函数来相应地更新行(我选择了颜色方案来匹配我也使用的 vim-powerline):

vim_ins_mode="%{$fg[white]%}%{$fg_bold[blue]$bg[white]%} INSERT %{$reset_color%}"
vim_cmd_mode="%{$fg[green]%}%{$fg_bold[black]$bg[green]%} COMMAND %{$reset_color%}"
vim_mode=$vim_ins_mode
function zle-line-init zle-keymap-select {
RPS1="${${KEYMAP/vicmd/${vim_cmd_mode}}/(main|viins)/${vim_ins_mode}}"
RPS2=$RPS1
zle reset-prompt
}
zle -N zle-line-init
zle -N zle-keymap-select

它工作得很好,除了当我运行更多命令时,来自先前命令的 RPS1 将输出到屏幕。可以想象,在我的终端上放置多个明亮的盒子会让人分心:
here is an example

我希望在它作为上一个命令转储到行缓冲区之前以某种方式清除该字段,但到目前为止,我查看的示例和 zsh 主题都没有打扰这样做。在我的旧 .bashrc 文件中,我有一个陷阱设置来重置我的命令的颜色,以便输出颜色不受影响,我想知道这里是否有类似的东西?或者,也许 zsh 有更清洁的方法?

最佳答案

试试下面的代码:

function _-accept-line()
{
emulate -L zsh
local SAVEDRPS1="$RPS1"
RPS1=""
zle reset-prompt
RPS1="$SAVEDRPS1"
zle .accept-line
}
zle -N accept-line _-accept-line

忘记这个代码。 Zsh 可以选择您想要的行为:
setopt transientrprompt

Remove any right prompt from display when accepting a command line. This may be useful with terminals with other cut/paste methods.

关于shell - zsh 在将行添加到行缓冲区之前清除 RPS1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14316463/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com