修剪 ZSH 中粘贴文本的尾随换行符

修剪 ZSH 中粘贴文本的尾随换行符

我不喜欢将尾随换行符添加到我的历史记录中,因此我经常需要在输入之前输入退格键。我想知道有没有办法自动执行此操作(删除尾随换行符)。

我也不想禁用括号内的粘贴,因为有时我需要在提交之前编辑粘贴的命令。

复制:

三击下面的代码块,然后您将选择整行,包括尾随换行符。

cd /tmp

将其复制并粘贴到您的 ZSH,除非您禁用括号粘贴,否则它不会被执行。现在查看历史文件

cat $HISTFILE | tail -3

你会看到这样的东西:

: 1646582294:0;cd /tmp\

: 1646582296:0;cat $HISTFILE | tail -3

如果按 UP 键,您将看到换行符已被保留。

可以找到我的zshrc文件这里。如果我错过了什么,我很抱歉。

答案1

您始终可以重新定义bracketed-pastezle 小部件,以便它从粘贴的文本中删除尾随换行符(如果有):

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钩。

相关内容