zsh_history 存储具有奇怪编码的非 ASCII 字符

Ome*_*let 7 zsh zshrc

当我打开 .zsh_history 文件时,我发现历史记录中的一些非 ASCII 字符具有奇怪的编码或类似的内容。

\n

这是一个最小的例子:

\n

首先,.zshrc

\n
# zshrc\nHISTSIZE=10000\nSAVEHIST=10000\nHISTFILE=~/.zsh_history\n
Run Code Online (Sandbox Code Playgroud)\n

我用汉字输入了一些命令,exec zsh以保存历史记录并读取.zsh_history文件。

\n
# zshrc\nHISTSIZE=10000\nSAVEHIST=10000\nHISTFILE=~/.zsh_history\n
Run Code Online (Sandbox Code Playgroud)\n

结果被一些随机的奇怪字符替换。

\n
echo \xe5\xad\x83\xe4\xb8\xb2\xe6\xb8\xac\xe8\xa9\xa6 \xe4\xb8\x80\xe4\xba\x83\xe4\xb8\x83\nexec zsh\n
Run Code Online (Sandbox Code Playgroud)\n

图片

\n

另外,当我使用 vim 或任何文本编辑器打开此文件时,它会使用latin1编码打开此文件并显示以下内容:

\n
echo \xc3\xa5\xc2\xad\xc2\xb7\xc3\xa4\xc2\xb8\xc2\xb2\xc3\xa6\xc2\xb8\xc2\xac\xc3\xa8\xc2\xa9\xc2\xa6 \xc3\xa4\xc2\xb8\xc3\xa4\xc2\xba\xc2\xac\xc3\xa4\xc2\xb8\xc2\xa9\nexec zsh\n
Run Code Online (Sandbox Code Playgroud)\n

图片

\n

我找不到解决此问题的选项,我猜这是一个编码问题。\n如何强制 zsh 以 utf-8 编码保存历史记录,或者还有其他方法可以解决此问题?

\n

Ome*_*let 4

我发现这个https://www.zsh.org/mla/users/2011/msg00154.html 似乎这种行为是有意的。

回复说

这不是一个错误,历史文件以元格式保存。如果您想在 zsh 之外打印它,您可以使用这个简单的程序。

...(一个简单的 C 程序)

我想在 zsh shell 中浏览历史记录的更好方法是fc -l -i 1 | vim -。(也许man zshbuiltins有更多选择)