我现在已经让 ZSH 做了很酷的事情,但如果我能让它在每次调用 'cd' 后自动隐式运行 'ls -a',那就真的太棒了。我想这应该放在 .zlogin 文件或 .aliases 文件中,只是我不确定最好的解决方案是什么。你有什么想法?参考资料呢?
我现在已经让 ZSH 做了很酷的事情,但如果我能让它在每次调用 'cd' 后自动隐式运行 'ls -a',那就真的太棒了。我想这应该放在 .zlogin 文件或 .aliases 文件中,只是我不确定最好的解决方案是什么。你有什么想法?参考资料呢?
编辑:
在查看文档(zshbuiltins
,cd
内置命令的描述或钩子函数)后,我找到了更好的方法:使用chpwd
函数:
function chpwd() {
emulate -L zsh
ls -a
}
或者使用chpwd_functions
数组:
function list_all() {
emulate -L zsh
ls -a
}
chpwd_functions=(${chpwd_functions[@]} "list_all")
把以下内容放入.zshrc文件中:
function cd() { emulate -LR zsh builtin cd $@ && ls -a }
简短版本。
autoload -U add-zsh-hook
add-zsh-hook -Uz chpwd (){ ls -a; }
这里简要解释一下正在发生的事情。
autoload -U add-zsh-hook
这行代码基本上只是加载了贡献的函数add-zsh-hook
。
add-zsh-hook -Uz chpwd (){ ls -a; }
每个特殊函数都有一个函数数组,当该函数被触发时(例如更改目录),将调用该数组中的函数。此行代码将一个函数添加到该数组中。具体来说...
add-zsh-hook -Uz chpwd
这部分内容指定我们向chpwd
特殊函数添加一个新函数。 -Uz
通常是此操作的推荐参数,它们传递给用于函数参数的autoload(即下一部分)。
(){ ls -a; }
这是第二部分,即函数的部分。通常称之为匿名函数,即没有被赋予名称的函数。它不需要名称,因为它只是放在数组中。
我不知道为什么会这样,或者这是否更好,但我发现这在.zshrc中也有效。看起来比大多数答案都要短,但也许缺少了我不理解的一些东西。
chpwd() ls -a
chpwd()
和ls -a
是两个单独的命令,它们可以在命令行中一起使用。
chpwd()
在大多数shell中不是有效的命令,但在zsh
shell中,它是一个函数,每当当前工作目录更改时就会被调用。它可用于定义用户浏览到新目录时应执行的操作。
ls -a
是一个命令,用于列出目录的内容,包括隐藏文件和目录(那些以点.
开头的文件)。-a
选项告诉ls
显示所有文件,包括隐藏文件。
因此,当它们一起使用时,chpwd() ls -a
将在当前工作目录更改时执行ls -a
命令。例如,这可用于在用户导航到目录时自动列出目录的内容。但值得注意的是,chpwd()
不是标准命令,并且并非所有shell都可用,因此在某些情况下,此用法可能无效。
emulate -LR zsh
是用来做什么的? - mooman zshbuiltins
。重置一些选项(在这里:为当前函数的持续时间),这并不是必需的,但是在每个函数的开头加上emulate zsh
/emulate -L zsh
是很好的,这样您就会知道这个函数不会因为用户设置而独立崩溃。-R
是过度操作,它会重置所有选项。 - ZyX.zshrc
中并删除ls -a
即可。 - Sridhar Sarnobatsource .zshrc
都会将list_all
添加到chpwd_functions
中,导致额外调用ls -a
。 - jamehcd
到包含.git
目录的文件夹上运行git fetch --all --prune
! - javafueled