Autocomplete 在zsh中的不同目录中完成文件
输入某些字符时,ZSH的compadd命令是否不支持完成 我有一个名为“index_for_test.js”的可执行文件,我向.zshrc添加了一个shell脚本 $PATH:Autocomplete 在zsh中的不同目录中完成文件,autocomplete,zsh,tab-completion,Autocomplete,Zsh,Tab Completion,输入某些字符时,ZSH的compadd命令是否不支持完成 我有一个名为“index_for_test.js”的可执行文件,我向.zshrc添加了一个shell脚本 $PATH: /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/hanqing/Development/compadd test ./ ├── dir1 │ ├── a.js │ └── b.js ├── dir2 │ ├── a.ts │ └── b.ts └──
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/hanqing/Development/compadd test
./
├── dir1
│ ├── a.js
│ └── b.js
├── dir2
│ ├── a.ts
│ └── b.ts
└── index_for_test.js
total 24
drwxr-xr-x 6 hanqing staff 192 11 4 13:45 .
drwxr-xr-x 10 hanqing staff 320 11 4 13:42 ..
-rw-r--r--@ 1 hanqing staff 6148 11 4 14:04 .DS_Store
drwxr-xr-x 4 hanqing staff 128 11 4 13:43 dir1
drwxr-xr-x 4 hanqing staff 128 11 4 13:43 dir2
-rwxr-xr-x 1 hanqing staff 155 11 4 13:50 index_for_test.js
/Users/hanqing/Development/compadd test
./
├── dir1
│ ├── a.js
│ └── b.js
├── dir2
│ ├── a.ts
│ └── b.ts
└── index_for_test.js
total 24
drwxr-xr-x 6 hanqing staff 192 11 4 13:45 .
drwxr-xr-x 10 hanqing staff 320 11 4 13:42 ..
-rw-r--r--@ 1 hanqing staff 6148 11 4 14:04 .DS_Store
drwxr-xr-x 4 hanqing staff 128 11 4 13:43 dir1
drwxr-xr-x 4 hanqing staff 128 11 4 13:43 dir2
-rwxr-xr-x 1 hanqing staff 155 11 4 13:50 index_for_test.js
//index\u for\u test.js
#! /usr/bin/env节点
常量fs=require('fs')
const path=require('路径')
const files=fs.readdirSync(path.join(process.cwd()))
console.log(files.join('\n'))
将脚本添加到.zshrc:
\u测试的索引\u完成(){
本地abc=(`index\u for_test.js`)
回显'\nabc:\n'
echo$abc'\n'
康帕德--$abc
}
compdef_index_for_test_completion index_for_test.js
当输入index\u for_test.js
后再输入空格,然后按tab
,它可以工作查找。但当输入index\u for_test.js../
后按tab
时,即使compadd
接受参数,它也不会显示完成列表
图片:
期待
如果这是我的错误,请告诉我原因,谢谢
另外,如果行为是正确的,我想知道如何实现像cd
命令这样的完成;
index\u for_test.js
仅打印当前目录中的文件名。当前目录中的文件名不能以。/
开头,因此不能以。/
开头
如果要完成目录中的文件,需要将此目录传递给完成脚本,并使其在该目录中工作
此外,如果所有目录都可能包含感兴趣的文件,则应在zsh中填写目录名。如果只允许某些目录,请让脚本完成目录
此外,当文件名包含空格时,脚本将被破坏。使用空字节作为分隔符:文件名不能包含空字节
未经测试的代码。可能需要一些调整
#/usr/bin/env节点
常数fs=要求('fs');
const path=require('path');
const files=fs.readdirSync(process.argv[2]);
console.log(files.join('\0'))
\u测试的索引\u完成(){
本地目录=$words[当前]文件
如果[[!-d$dir]];那么dir=$dir:h;fi
文件=(${(ps:\0:)$(索引\u for_test.js$dir))
打印-lr''abc:$文件
如果[[$dir!=$words[CURRENT]]];则dir+=“/”fi
compadd--$^dir$文件
}
compdef_index_for_test_completion index_for_test.js
index\u for_test.js
仅打印当前目录中的文件名。当前目录中的文件名不能以。/
开头,因此不能以开头完成
如果要完成目录中的文件,需要将此目录传递给完成脚本,并使其在该目录中工作
此外,如果所有目录都可能包含感兴趣的文件,则应在zsh中填写目录名。如果只允许某些目录,请让脚本填写完整的目录
此外,当文件名包含空格时,脚本将被破坏。请使用空字节作为分隔符:文件名不能包含空字节
未测试的代码。可能需要一些调整
#!/usr/bin/env节点
常数fs=要求('fs');
const path=require('path');
const files=fs.readdirSync(process.argv[2]);
console.log(files.join('\0'))
\u测试的索引\u完成(){
本地目录=$words[当前]文件
如果[[!-d$dir]];那么dir=$dir:h;fi
文件=(${(ps:\0:)$(索引\u for_test.js$dir))
打印-lr''abc:$文件
如果[[$dir!=$words[CURRENT]]];则dir+=“/”fi
compadd--$^dir$文件
}
compdef_index_for_test_completion index_for_test.js
谢谢你的回答。我是zsh编程新手,我错误地认为compadd
只是显示了我提供的单词列表。否则,我只理解你给出的shell脚本的一部分,但从中得到了一些注意点,所以我尝试了很长时间,然后将-d
和-S
参数组合在一起使用compadd
和nodejs
来实现它。请冒昧地问一下,您能介绍一个可以系统地学习shell的地方或网站吗?谢谢您的回答。我是zsh编程新手,我错误地认为compadd
只是显示了我提供的单词列表。否则,我就不知道了Derstain是您给出的shell脚本的一部分,但从中获得了一些值得注意的要点,因此我尝试了很长时间,然后将-d
和-S
的compadd
参数与nodejs
结合起来实现它。请冒昧询问,您能介绍一个可以学习shell sys的地方或网站吗临时地?