zsh中未保留历史记录


16

每当我打开终端的新实例时,历史记录都是空的。这是为什么?我需要设置一些东西吗?不过,在bash中不需要这样做。


不确定zsh,但是默认情况下会bash退出时写入其历史记录文件,这意味着,如果您以前从未使用过它并打开了一些shell,它们将全部显示历史记录,直到至少一个注销,从而写入其历史记录文件。
DopeGhoti

Answers:


24

Bash和zsh具有不同的默认值。默认情况下,Zsh不会将历史记录保存到文件中。

在没有配置文件的情况下运行zsh时,它将显示一个配置界面。在此配置界面中,选择

(1)  Configure settings for history, i.e. command lines remembered
     and saved by the shell.  (Recommended.)

然后查看建议的设置并选择

# (0)  Remember edits and return to main menu (does not save file yet)

对其他子菜单重复上述步骤,以完成(2),(3)键盘绑定和(4)选项,然后选择

(0)  Exit, saving the new settings.  They will take effect immediately.

从主菜单。

推荐的与历史记录相关的设置是

HISTFILE=~/.histfile
HISTSIZE=1000
SAVEHIST=1000
setopt appendhistory

我将为历史记录文件使用其他名称,以表明它是zsh的历史记录文件。在现代系统上可以增加1000条线路。

HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
setopt appendhistory

~/.zshrc顺便说一下,这些行进入。


8

尽管现有答案是正确的,但我认为可能值得补充的是,比appendhistory保存您的历史记录更好的选择是,这是SHARE_HISTORY

从文档SHARE_HISTORY“两者都从历史记录文件中导入新命令,并且还会使您键入的命令附加到历史记录文件中”。这意味着壳也可以知道彼此的历史,而不必关闭当前的壳或打开新的壳。

因此,一起将其设置为:

HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=1000
setopt SHARE_HISTORY

1
+1并欢迎使用U / L,但我个人更喜欢INC_APPEND_HISTORY_TIME,它会如上所述从所有终端写入历史记录,但是该历史记录“不会立即从使用相同历史记录文件的其他Shell实例中获得”。这对我来说更有意义,因为这样我就可以独立地遍历每个终端的历史记录,但是仍然被记录下来。
Sparhawk

2
谢谢!是的,这很公平,我完全INC_APPEND_HISTORY_TIME可以理解为什么可能更合乎逻辑。我可能不应该说“更好”,我想这只是个人喜好问题!
伯特

0

当您第一次从bash切换到zsh时,您的bash历史记录不会保留下来。因此,您在bash中拥有的所有历史记录仍在bash的历史记录文件中。zsh从开始将其用作外壳程序开始就开始捕获历史记录。

如果未将其设置为捕获历史记录,则可以重新运行配置向导,并告诉zsh保存多少历史记录。更改〜/ .zshrc的名称或将其删除以在向导中获取新照片。


0

如果它不起作用,并且您已经准备好所有这些,请尝试:

fc -W

这会将当前历史记录写入历史记录文件。如果您得到:

zsh: locking failed for /home/username/.zsh_history: permission denied

然后是时候检查文件父目录的权限了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.