限制 z​​sh 中的 hist_verify

限制 z​​sh 中的 hist_verify

是否可以绕过hist_verify特定的历史命令?例如,我很少需要验证!$!!,但我发现验证对于更复杂的历史扩展来说是一个有用的功能。是否可以将选定的历史操作符排除在历史验证之外?

答案1

也许是这样的:

accept-line() {
  if [[ ${BUFFER//![\$!]} = *!* ]]; then
    set -o histverify
  else
    set +o histverify
  fi
  zle .$WIDGET
}
zle -N accept-line

添加到您的~/.zshrc作为启发式。也就是说,重新定义accept-line小部件(当您按 时调用Enter),以便仅当当前行中histverify存在后跟不是和!的字符时才设置该选项。!$

echo '!e' !!对于像or 这样的命令行来说,这很愚蠢,\!!rm但似乎它应该是一个可以接受的限制。

就我个人而言,我添加set +o banghist到我的~/.zshrc并更喜欢依赖history-search-backward(在模式下默认绑定在Alt+上)或(我绑定在)上,这可以节省一些打字,并且在接受命令之前总是给我一个视觉反馈。pemacshistory-beginning-search-backwardPageUp

相关内容