我不喜欢将尾随换行符添加到我的历史记录中,因此我经常需要在输入之前输入退格键。我想知道有没有办法自动执行此操作(删除尾随换行符)。
我也不想禁用括号内的粘贴,因为有时我需要在提交之前编辑粘贴的命令。
复制:
三击下面的代码块,然后您将选择整行,包括尾随换行符。
cd /tmp
将其复制并粘贴到您的 ZSH,除非您禁用括号粘贴,否则它不会被执行。现在查看历史文件
cat $HISTFILE | tail -3
你会看到这样的东西:
: 1646582294:0;cd /tmp\
: 1646582296:0;cat $HISTFILE | tail -3
如果按 UP 键,您将看到换行符已被保留。
可以找到我的zshrc文件这里。如果我错过了什么,我很抱歉。
答案1
您始终可以重新定义bracketed-paste
zle 小部件,以便它从粘贴的文本中删除尾随换行符(如果有):
bracketed-paste() {
zle .$WIDGET && LBUFFER=${LBUFFER%$'\n'}
}
zle -N bracketed-paste
答案2
我不是 zsh 用户,但尝试将其放入您的 .zshrc
zshaddhistory() {
setopt LOCAL_OPTIONS
setopt EXTENDED_GLOB
print -sr -- "${1%%$'\n'##}"
fc -p "$HISTFILE"
return 1
}
这应该删除所有尾随换行符。如果需要的话进行修改以实现您想要的。窍门就在zshaddhistory
钩。