从终端转储当前 .zshrc

Ezo*_*Ezo 1 linux terminal zsh arch-linux

我想在 .zshrc 中进行快速编辑,但是 vim 说它不能写什么的。所以我退出了,用 :q! 。然后我想重新打开这个文件......它是空的。

我仍然打开了可以使用以前配置的终端。如何从中恢复完整的 .zshrc(或接近完整)?我已经用 'alias' 命令保存了我的别名。

Ada*_*hon 6

首先,无法~/.zshrc从正在运行的 shell 会话中获取实际值。这主要是因为它~/.zshrc本质上是一个 shell 脚本,并且只有它确实进入 shell 会话的设置,而不是设置背后的逻辑。

尽管如此,您实际上可以从正在运行的 shell 会话中获取一些信息,这可能有助于您重新创建丢失的 .zshrc 中的一些设置:

  • 正如您已经注意到的,您可以从 shell builtin 获取别名alias。随着alias -L你实际上可以得到调用列表alias,你可以把你的新~/.zshrc只是原样。
  • 调用setopt会为您提供未设置为默认值的 shell 选项列表。
  • set将打印所有参数及其值的列表。其中很多可能没有在您的配置中明确设置,但其中一些是。像提示设置(PROMPTPROMPT2PROMPT3PROMPT4RPROMPTRPROMPT2),历史(HISTSIZESAVEHISTHISTFILE等),默认的编辑器(EDITOR)和寻呼机(PAGER)可以在那里找到,所以在看看可能是值得的。
  • autoload至少会给出一些指示加载了哪些模块。您可以忽略任何以下划线开头的函数声明,因为它们很可能是由完成系统加载的。尽管其余部分可能不一定已显式加载,但它至少会给出一些指示。
  • zstyle -L将打印使用命令列表进行的设置zstyle列表(就像alias -L)。
  • bindkey -L将您当前的键盘映射打印为命令列表。如果列表很长并且没有(很多)以vi-您的 shell开头的命令,则可能在 emacs 模式下运行,在这种情况下,bindkey -e放入您的新命令zshrc可能会恢复大多数设置。对于其余部分,您可以比较bindkey -L正在运行的和新的 shell 中的输出。如果您使用该vicmd模式,则可以使用 检索这些设置bindkey -aL
  • functions为您提供会话中定义的函数列表。同样,并非所有这些实际上都已在您的配置中设置,但这是一个起点。