我想要删除 Zsh 历史记录中的特定条目。
Zsh 的 fc
和 history
没有删除条目的选项。我已经尝试查找 ~/.zhistory
,但文件不存在。我该如何查找历史记录文件的位置并删除条目?
~/.zsh_history
而不是~/.zhistory
。要查看你的历史记录保存在哪个文件中:echo $HISTFILE
删除:
rm $HISTFILE
rm $HISTFILE
之后,您需要注销并重新登录以查看更改。虽然这并没有回答问题,但它不是关于删除整个历史记录(history -c
),而是关于删除特定行(history -d [offset]
)。 - Two-Bit Alchemistzsh
吗?如果我在 bash 和 zsh 下执行 echo $HISTFILE
,我会得到不同的结果。 - Two-Bit Alchemistecho $HISTFILE
指向我的bash历史记录文件。 - Sten Kin在Unix系统上清除zsh历史记录。
echo "" > ~/.zsh_history & exec $SHELL -l
vim ~/.zsh_history
- 使用nano: nano ~/.zsh_history
nano ~/.zsh_history
vim ~/.zsh_history
open ~/.zsh_history
然后您可以手动删除要删除的行并保存文件。
如果您的 zsh_history 列表太长,为了方便使用,请按照以下步骤进行操作:
.vimrc
中,在 Vim
环境中启用鼠标移动和行编号:.vimrc
文件:vim ~/.vimrc
.vimrc
中并保存(按ESC键,输入":",输入wq,按Enter键)::set number set mouse=a
Vim
,在 zsh_history
中轻松滚动。Vim
中启用复制功能,需按住键盘上的 Shift 键。~/.zshrc
add the following line
alias clear_history='echo "" > ~/.zsh_history & exec $SHELL -l'
Save and close the file
zsh
clear_history
之前的所有答案都很好,但这是对我有效的解决方案。
这个函数可以从你的Zsh历史记录中删除任何一行,不会询问任何问题:
# Accepts one history line number as argument.
# Alternatively, you can do `dc -1` to remove the last line.
dc () {
# Prevent the specified history line from being saved.
local HISTORY_IGNORE="${(b)$(fc -ln $1 $1)}"
# Write out history to file, excluding lines that match `$HISTORY_IGNORE`.
fc -W
# Dispose of the current history and read the new history from file.
fc -p $HISTFILE $HISTSIZE $SAVEHIST
# TA-DA!
print -r "Deleted '$HISTORY_IGNORE' from history."
}
dc
命令被写入历史记录,可以在你的~/.zshrc
文件中添加以下内容。zshaddhistory() {
[[ $1 != 'dc '* ]]
}
或者,如果需要一种全面的开箱即用的解决方案,请使用我的Zsh Hist插件。
简而言之:
cat /dev/null > ~/.zsh_history
vim
可以轻松删除最后n
行,操作如下:
vim ~/.zsh_history
G
V
-> 使用箭头键向上移动d
:wq
dd
删除任何特定行。fc -W
将历史记录写入历史文件 $HISTFILE
。
使用任选编辑器编辑 $HISTFILE
,或使用就地 sed
命令将不喜欢的行替换为其他内容或空行。
fc -R
从 $HISTFILE
中读取历史记录。
未来的提示:
.zshrc
文件中设置setopt HIST_IGNORE_SPACE
。有了这个选项,以空格开头的命令将不会首先出现在历史记录中。只需用一个空格作为敏感命令的前缀。.zshrc
文件中设置setopt INC_APPEND_HISTORY
,然后zsh将立即将新命令写入历史文件。这就像在每个新命令之前调用fc -W
,但更高效(它不会写入整个历史记录,而是只在文件末尾添加一行)。这样历史文件始终反映当前历史记录,你可以直接编辑,然后调用fc -R
。请注意,你随时可以在其他zsh实例(例如另一个终端)中调用fc -IR
,并立即使用相同的历史记录(轻松同步历史记录的好方法)。setopt SHARE_HISTORY
,它具有与INC_APPEND_HISTORY
相同的效果,不过每次命令之后还会调用fc -R
,因此基本上没有内存中的历史记录,历史记录始终写入和从文件读取,并且在所有实例中共享,因此所有zsh实例始终共享完全相同的历史记录,并且编辑历史记录文件还会立即编辑所有zsh实例的历史记录。
history
替换为omz_history
。 - jezmck