当寻找的路径,可执行文件或检查,如果你在Unix shell中输入命令的名称会发生什么,有不同的公用事业过多(which,type,command,whence,where,whereis,whatis,hash,等)。
我们经常听说which应该避免。为什么?我们应该用什么来代替?
在之前针对 bash 的问题中,我问如何在命令行中扩展相对路径并使用制表符补全?
我喜欢 @Mikel 的答案,其中提到使用Ctrl+ Alt+e来扩展所有变量,并且我经常使用它。
从那时起,我已经切换到,zsh虽然我可以键入$PWD并按Tab以展开当前目录的路径,但如果我键入类似的内容$PWD/.profile并按Tab它不会展开。
我已经阅读了类似的问题,并且看到了有关扩展别名的答案,以及如何通过键入变量并按来扩展变量,但没有什么与在 中按+ +Tab相同 。CtrlAltebash
是否有某种方法允许转义序列(例如Ctrl+ Alt+)e展开正在输入的命令行中的所有变量zsh?
我试图了解这个zsh小部件的工作原理:
expand-aliases() {\n unset \'functions[_expand-aliases]\'\n functions[_expand-aliases]=$BUFFER\n (($+functions[_expand-aliases])) &&\n BUFFER=${functions[_expand-aliases]#$\'\\t\'} &&\n CURSOR=$#BUFFER\n}\n\nzle -N expand-aliases\nbindkey \'\\e^E\' expand-aliases\nRun Code Online (Sandbox Code Playgroud)\n\n我在这个答案中找到了代码。它的目的是当您点击 时展开命令行上的所有别名C-M-e。
它有效,但代码中有几件事我不明白。
\n\n这是我认为我理解的和我不理解的:
\n\nzle -N expand-aliases\nRun Code Online (Sandbox Code Playgroud)\n\n此行安装一个名为的小部件expand-aliases,它将调用具有相同名称的函数。
bindkey \'\\e^E\' expand-aliases\nRun Code Online (Sandbox Code Playgroud)\n\n该行将小部件绑定到关键和弦C-M-e。
unset \'functions[_expand-aliases]\'\nRun Code Online (Sandbox Code Playgroud)\n\n我不明白这一行,因为我不知道数组functions是如何填充的。
functions[_expand-aliases]=$BUFFER\nRun Code Online (Sandbox Code Playgroud)\n\n该行将当前命令行的内容存储在关联数组内functions,键为_expand-aliases。
(($+functions[_expand-aliases])) &&\nRun Code Online (Sandbox Code Playgroud)\n\n为了更好地理解该行的工作原理,我执行了以下命令:
\n\nalias ls=\'ls --color=auto\'\nalias -g V=\'|vipe\'\nfunctions[_expand-aliases]=\'ls V\'\necho $functions[_expand-aliases] \xe2\x86\x92 ls --color=auto | vipe\necho $+functions[_expand-aliases] \xe2\x86\x92 1\n(($+functions[_expand-aliases])); …Run Code Online (Sandbox Code Playgroud)