多线命令上的zsh bug:删除混乱的字符

时间:2016-09-10 06:38:13

标签: zsh

如果我输入一个多行命令,并运行它,一切正常。 当我按向上箭头,并想要删除一些字符时,我看到删除发生。如果我运行修改后的命令,我可以看到删除都是错误的。

通常删除/插入在一个方向上移位一个位置的字符。

示例:

$ sort file | uniq | grep -v 'some pattern' |less

我想删除file这个词,并将其替换为other_file。这就是我所看到的

$ sort other_file | uniq | grep -v 'pattern' |less

这就是实际运行的内容

$ sort fother_file | uniq | grep -v 'pattern' |less

注意名称'fother_file'。这真的很烦人,并且使修改历史基本上不可能。我最终将代码复制粘贴到zsh中。

这是我的〜/ .zshrc文件

HISTFILE=~/.zshhistfile
HISTSIZE=40000
SAVEHIST=1000
bindkey -v
zstyle :compinstall filename '/home/shefuto/.zshrc'

autoload -Uz compinit
compinit

if [ -f ~/.aliases ]; then
    . ~/.aliases
fi

export PS1="%{%F{yellow}%}%T]%{%F{green}%}%n%{%F{yellow}%} %~ %{$%f%} "

export WORKON_HOME=~/ve
source /usr/share/virtualenvwrapper/virtualenvwrapper.sh
workon tmp2

if [[ -e /etc/bash_completion.d/git-prompt ]]; then
    . /etc/bash_completion.d/git-prompt
fi
setopt PROMPT_SUBST ;
export RPROMPT='%{%F{red}%}$(__git_ps1 2>/dev/null)'

bindkey "^?" backward-delete-char

bindkey -e 

有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

PS1="...%{$%f%} "告诉zsh $没有推进光标,因此zsh无法准确了解提示长度是多少。你也不需要%{...%}来绕过zsh自己的逃脱,因为它知道他们不会移动光标。尝试

PS1="%F{yellow}%T]%F{green}%n%F{yellow} %~ $%f "

%{...%}用于封闭一个明确的转义字符序列,如\e[32m,这是用于打开绿色文本的ANSI CSI序列。 zsh为此使用自己的终端无关序列%F{green}

PS1=$'%{\e[33m%}%T]%{\e[32m\%}%n%{\e[33m%} %~ $%{\e[0m} '