当我在 OSX 上登录终端应用程序时,我的默认 shell 是/bin/bash
。输入echo $HISTFILE
指向/Users/monkeybrain/.bash_history
并head $(echo $HISTFILE)
显示该文件包含历史记录条目。
如果我随后键入zsh
切换 shell,则会发生一些奇怪的事情。首先,即使我的提示发生了变化(因此看起来我在新的 shell 中),我的$SHELL
环境变量仍然指向/bin/bash
。该$HISTFILE
变量现在为空,并且没有这样的文件~/.zsh_history
。此外,我无法使用Ctrl-A
或Ctrl-E
在命令行中移动。
这里发生了什么事?
非常感谢,
MB
答案1
环境
SHELL
变量通常不会被 shell 修改。它通常包含当前用户登录 shell 的完整路径,不是当前正在运行的 shell。大多数情况下,SHELL
应在 shell 启动前设置。zsh
不会更改的值SHELL
,如果未设置bash
,则将其设置回登录 shell 。SHELL
默认情况下
HISTFILE
未设置zsh
。如果您想保存历史记录,则必须将其设置为要用于此目的的文件:HISTFILE="${HOME}/.zsh_history"
您还需要设置
SAVEHIST
为正整数值来指示zsh
要保存多少行HISTFILE
,默认值为0
(谢谢猴脑提示)。您可能还想提高HISTSIZE
,这表示 shell 会话中有多少行历史记录可用。其默认值仅为30
。例如:HISTSIZE=2000 SAVEHIST=2000
这通常在配置文件中完成
~/.zshrc
。zsh
EDITOR
通过检查和环境变量来猜测您的按键绑定偏好VISUAL
。如果其中一个包含字符串“vi”,zsh
则将使用viins
输入模式。默认情况下, Ctrl+A和Ctrl+E均不绑定在此模式下。如果您想使用emacs
输入模式(默认为bash
),只需运行bindkey -e
这也可以在
~/.zshrc
总的来说,您似乎正在zsh
使用默认配置运行。如果还没有~/.zshrc
,您可以创建它并添加必要的设置。