【问题标题】:Delete specific line from Zsh history从 Zsh 历史记录中删除特定行
【发布时间】:2022-03-22 01:20:32
【问题描述】:

我想删除 Zsh 历史记录中的特定条目。

Zsh 的fchistory 没有任何删除条目的选项。我试过寻找~/.zhistory,但那不存在。我怎样才能找到历史文件的位置并删除条目?

【问题讨论】:

  • stackoverflow.com/questions/7243983/… 的副本。 Oh-My-Zsh 只是 Zsh 的一个附加组件。它不会改变 Zsh 的历史运作方式。
  • omz 确实通过别名将 history 替换为 omz_history

标签: macos zsh


【解决方案1】:

您正在查找错误的文件。看~/.zsh_history不是~/.zhistory 查看你的历史保存在哪个文件中

echo $HISTFILE

rm $HISTFILE

【讨论】:

  • 请注意,您必须在rm $HISTFILE 之后注销并重新登录才能看到更改。但这并不能回答问题。这不是删除整个历史记录 (history -c),而是删除特定行 (history -d [offset])。
  • echo $HISTFILE 进入我的 bash 历史记录。 ~/.zsh_history 似乎没有我要删除的条目,还能在哪里?
  • 你在使用zsh吗?如果我在 bash 和 zsh 下echo $HISTFILE,我会得到不同的结果。
  • 是的,我正在使用带有 oh-my-zsh 的 zsh,但看起来 echo $HISTFILE 指向我的 bash 历史文件。
  • 这是一个严重的错误...我应该能够从历史记录中删除特定条目恕我直言。
【解决方案2】:

清除 Zsh 历史记录(oh-my-zsh)


  • 关闭、退出并重新打开 iTerm
  • 运行nano .zsh_history
  • 使用arrow keys 导航到您要删除的历史记录部分。
  • 使用delete 键删除所有不需要的历史记录。
  • 删除所有要删除的内容后,选择control XExit
  • 系统会提示您Save 所做的更改。如果您对所做的更改感到满意,请点击 shift Y
  • 系统会询问您要将更改保存在哪里。选择control T保存to File
  • 使用您的arrow keys 导航到您的.zsh_profile,然后按Enter。
  • 退出并重新启动 iTerm。
  • 键入history 以确认删除。
  • 您已成功清除 Zsh 历史记录。

【讨论】:

  • 还有 vi 和 /thing 来查找。我不知道这是否也适用于 nano。
【解决方案3】:

清除 unix 系统上的 zsh 历史记录。

 echo "" > ~/.zsh_history & exec $SHELL -l

【讨论】:

    【解决方案4】:
    1. 打开~/.zshrc
    2. 添加以下行

      alias clear_history='echo "" > ~/.zsh_history & exec $SHELL -l'
      
    3. 保存并关闭文件

    4. 关闭控制台或输入zsh
      如果您直接查看结果,但这会在旧的中打开另一个 zsh shell
    5. 现在您可以清除控制台输入clear_history

    前面所有的答案都很好,这只是对我有用的解决方案。

    【讨论】:

    • 非常方便和有用的答案。
    【解决方案5】:

    TL;DR

    cat /dev/null > ~/.zsh_history

    【讨论】:

      【解决方案6】:

      您可以使用这些命令打开 ZSH 命令的历史记录(当您在 home 或 ~ 目录时)并假设您知道如何使用 vimnano

      nano ~/.zsh_history
      vim ~/.zsh_history
      open ~/.zsh_history
      

      然后您可以手动删除所需的行并保存文件。

      【讨论】:

        【解决方案7】:
        1. 在 zsh 命令行中键入并运行,打开 ~/.zsh_history(这会在我的 Mac 上打开 TextEdit。)
        2. 删除文件中的所有行
        3. 保存并关闭文件
        4. 完全关闭/退出 Zsh 并重新启动 Zsh(这一步很重要!)
        5. 现在,打开 zsh,history 命令不会显示您删除的行

        【讨论】:

          【解决方案8】:

          如需全面的开箱即用解决方案,请使用我的Zsh Hist plugin

          否则,此功能将从 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 the 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 "Deleted '$HISTORY_IGNORE' from history."
          }
          

          如果您还想阻止所有 dc 命令写入历史记录,请在您的 ~/.zshrc 文件中添加以下内容:

          zshaddhistory() {
           [[ $1 != 'dc '* ]]
          }
          

          【讨论】:

          • 这是OP问题的正确答案
          【解决方案9】:

          例如使用vim,您可以像这样轻松删除最后的n 行:

          1. 打开文件:vim ~/.zsh_history
          2. 转到文件底部:G
          3. 标记行:V -> 使用箭头键向上移动
          4. 删除:d
          5. 写入并退出::wq

          或者您可以使用光标导航并使用 dd 删除任何特定行

          【讨论】:

            【解决方案10】:

            使用您喜欢的编辑器打开.zsh_history 并保存击键。

            例如subl .zsh_history 将在 Sublime 编辑器中打开历史记录,然后删除您想要的任何内容。 您也可以使用 TextEdit 或其他编辑器。

            【讨论】:

              【解决方案11】:

              这对我有用: LC_ALL=C sed -i '' '/line/d' $HISTFILE

              将“行”替换为您要删除的内容。

              从这个答案: https://stackoverflow.com/posts/13661794/revisions

              【讨论】:

                【解决方案12】:

                对于 ZSH

                要查找历史文件,请执行以下操作:

                echo $HISTFILE
                
                • 然后只需编辑文件并删除您希望删除的所有行,就像使用 history -d id 一样。
                • 保存文件。
                • 打开一个新终端,您应该会看到没有什么可看的了!

                但我很惊讶history -d 不存在。如果确实存在,则隐藏得很好。

                【讨论】:

                  猜你喜欢
                  • 2015-03-15
                  • 2021-04-12
                  • 1970-01-01
                  • 2011-03-31
                  • 1970-01-01
                  • 2021-05-09
                  • 1970-01-01
                  • 2021-01-04
                  • 2013-06-09
                  相关资源
                  最近更新 更多