答案1
这些变量将历史记录设置为合并自身而不是覆盖,并且不保存重复项:
set history=1000
set histdup=erase
set savehist=(1000 merge)
秘密武器是这一行:
alias precmd 'history -S; history -M'
这将在打印提示之前保存并合并您的历史记录 - 即在您键入的每个命令之后。
以上所有内容都应添加到您的.tcshrc文件。
答案2
此外伊丹回答,我想补充一点,这alias precmd 'history -S; history -M'
可能会弄乱历史文件,因为它还记录 SIGINT 和 EOF 信号(Ctrl+C 和 Ctrl+D)。
更好的方法是在运行命令后保存并合并当前的 shell 历史记录。
您可以通过下面的设置来实现它,因为 tcsh 不会将 SIGINT 或 EOF 识别为有效命令。
alias postcmd "history -S; history -M"
答案3
单个全局历史记录文件通常不是我们所需要的,因为它在同时处理多个选项卡时会混淆命令序列。
如果您想保留每个选项卡的历史记录,请使用以下方法:
set histfile=~/.history_`tty|sed "s#^.*/##"`
set history=1000
set savehist=(${history} merge)
alias postcmd 'history -S'
这将为每个选项卡创建单独的历史文件,具体取决于它们的 tty ID。
使用 xfce4-terminal,如果您不更改选项卡的顺序,并且不关闭除最右边的选项卡之外的选项卡,这将正确地将每个历史记录恢复到其关联的选项卡(以及路径)。由于重新排序选项卡会附带 tty ID,但 xfwm4 会话恢复将从头开始重新创建每个选项卡(分配从 0 开始的新 tty ID),因此会将历史文件恢复到“错误”选项卡(即,不是具有原始选项卡目录路径的选项卡)。我还没有找到如何跟踪这些变化的解决方案。