ZSH:在每张cd后自动运行ls
所以我现在让ZSH做了所有这些很酷的事情,但如果我每次调用“cd”后都能让它隐式运行“ls-a”,那将是非常棒的。我想这必须放在.zlogin文件或.alias文件中,我只是不确定最好的解决方案是什么。思想?标准物质?将下列物质放入.zshrc中: 编辑: 在查看文档(ZSH:在每张cd后自动运行ls,zsh,Zsh,所以我现在让ZSH做了所有这些很酷的事情,但如果我每次调用“cd”后都能让它隐式运行“ls-a”,那将是非常棒的。我想这必须放在.zlogin文件或.alias文件中,我只是不确定最好的解决方案是什么。思想?标准物质?将下列物质放入.zshrc中: 编辑: 在查看文档(zshbuiltins,cdbuiltin的描述或)之后,我找到了一个更好的方法:使用chpwd函数: function chpwd() { emulate -L zsh ls -a } 或使用chpwd_函
zshbuiltins
,cd
builtin的描述或)之后,我找到了一个更好的方法:使用chpwd
函数:
function chpwd() {
emulate -L zsh
ls -a
}
或使用chpwd_函数
数组:
function list_all() {
emulate -L zsh
ls -a
}
chpwd_functions=(${chpwd_functions[@]} "list_all")
简短版本
autoload -U add-zsh-hook
add-zsh-hook -Uz chpwd (){ ls -a; }
快速解释这里发生了什么
autoload -U add-zsh-hook
这一行基本上只加载贡献的函数addzsh hook
add-zsh-hook -Uz chpwd (){ ls -a; }
每个函数都有一个函数数组,当该函数被触发时(如通过更改目录)将被调用。此行向该数组添加一个函数。要打破它
add-zsh-hook -Uz chpwd
本部分规定我们将向chpwd
特殊函数添加一个新函数。-Uz
通常是推荐的参数,它们被传递给用于函数参数的自动加载(即下一位)
第二部分是功能。它通常被称为匿名函数。这是一个尚未指定名称的函数。它不需要名称,因为它只是在一个数组中运行。我不知道为什么会出现这种情况,或者这是否更好,但我发现在.zshrc中也适用。看起来比大多数答案都要短,虽然可能是遗漏了一些我不明白的东西
chpwd()ls-a
这非常有效,我忘了提到我已经打开了自动cd,所以这只在我显式调用“cd”时有效。有没有办法让它在我更改目录时以这种方式运行?什么是emulate-LR zsh
for?@mooman zshbuiltins
。重置一些选项(此处:在当前函数的持续时间内),此处不是真正需要的,但最好在每个函数的开始处放置emulate zsh
/emulate-L zsh
,以便您知道此函数不会因用户设置的任何内容而中断-R
是一种过度使用,它会重置所有选项。这对我来说很有效,我想继续使用它,但我的一台计算机速度非常慢,所以我不想这样做。如果我从另一个点文件source
d它,如何覆盖它?我假设我只是将函数复制到特定于主机的.zshrc
并删除ls-a
。最后一个选项的缺点是每次source.zshrc
时都将list\u all
附加到chpwd\u函数中,从而导致对ls-a
的额外调用被触发!这是可行的,但它太脏了,我花了几个小时挖掘手册页来理解。根据zsh文档,第二行应该分配一个函数体ls-a
多个名称:添加zsh hook
、-Uz
和chpwd
(它有效地做到了这一点)。但同时,它确实使用所有这些参数执行原始的addzshhook
。为什么?注意,与下面使用chpwd相比,这种方法的优点是,它允许您将任意数量的新函数添加到一个特殊函数中。除了这里提到的ls
之外,我还可以设置终端标题和检查本地历史文件。
add-zsh-hook -Uz chpwd
(){ ls -a; }