如何在zsh中为无扩展名的文件创建后缀别名?
zsh 后缀别名不支持直接绑定无扩展名的文件
zsh 的alias -s后缀别名设计初衷就是匹配文件的扩展名部分,没有扩展名的文件不存在可匹配的后缀项,你测试的alias -s {}=nano写法中{}展开后为空,相当于没有指定任何要绑定的后缀,所以完全不会生效,自然会触发command not found错误。
替代实现方案
可以通过 zsh 自带的command_not_found_handler钩子实现需求:当你输入的内容找不到对应命令时,会自动触发这个函数,我们在函数中添加判断逻辑即可:
command_not_found_handler() { # 首先判断输入的内容是否是当前目录下存在的普通文件 if [[ -f "$1" ]]; then # 判断文件名是否不包含.,也就是没有扩展名 if [[ "$1" != *.* ]]; then # 匹配到无扩展名的文件,用nano打开 nano "$1" return 0 fi fi # 不匹配上述条件的场景,保留原本的命令不存在报错 print -u2 "zsh: command not found: $1" return 127 }
把以上代码添加到你的~/.zshrc配置文件中,执行source ~/.zshrc生效后,再直接输入无扩展名的文件名就会自动用nano打开了。
如果需要排除本身有可执行权限的文件(避免你想执行二进制文件的时候被误打开),可以把第一个判断条件改成[[ -f "$1" && ! -x "$1" ]]即可。
内容的提问来源于stack exchange,提问作者Saaru Lindestøkke
相关产品推荐
相关产品推荐

