在 OSX 10.8.5 上找不到 zsh 历史记录

Mon*_*ain 5 zsh terminal.app macos

当我登录 OSX 上的终端应用程序时,我的默认 shell 是/bin/bash. 输入echo $HISTFILE指向我/Users/monkeybrain/.bash_historyhead $(echo $HISTFILE)显示该文件包含历史条目。

如果我然后输入zsh切换 shell,就会发生一些奇怪的事情。首先,即使我的提示符发生了变化(所以看起来我在新的 shell 中),我的$SHELL环境变量仍然指向/bin/bash. 该$HISTFILE变量现在为空,并且不存在~/.zsh_history. 另外,我无法使用Ctrl-ACtrl-E通过命令行移动。

这里发生了什么事?

非常感谢,

MB

Ada*_*hon 7

  • 环境SHELL变量通常不被 shell 修改。它通常包含当前用户登录 shell 的完整路径,而不是当前运行的 shell。大多数情况下SHELL应该在 shell 启动之前设置。zsh不更改 的值SHELL,如果未设置,bash则将其设置回登录 shell 。SHELL

  • 默认情况下HISTFILE在 中未设置zsh。如果你想保存历史记录,你必须将其设置为你想要使用的文件:

    HISTFILE="${HOME}/.zsh_history"
    
    Run Code Online (Sandbox Code Playgroud)

    您还需要设置SAVEHIST为正整数值来告诉zsh在 中保存多少行HISTFILE,默认值是0(感谢Monkeybrain的提示)。您可能还想提高HISTSIZE,它表示 shell 会话中有多少行历史记录可用。它的默认值仅为30. 例如:

    HISTSIZE=2000
    SAVEHIST=2000
    
    Run Code Online (Sandbox Code Playgroud)

    这通常是在~/.zshrc配置文件中完成的。

  • zsh尝试通过检查EDITORVISUAL环境变量来猜测您的按键绑定首选项。如果其中一个包含字符串“vi”zsh将使用viins输入模式。Ctrl默认情况下,+ACtrl+都不会E在此模式下绑定。如果你想使用emacs输入模式(默认bash)你只需要运行

    bindkey -e
    
    Run Code Online (Sandbox Code Playgroud)

    这也可以在~/.zshrc

总而言之,听起来您正在使用zsh默认配置运行。如果还没有~/.zshrc,您可以创建它并添加必要的设置。