相关疑难解决方法(0)

为什么不使用“哪个”?那用什么?

当寻找的路径,可执行文件或检查,如果你在Unix shell中输入命令的名称会发生什么,有不同的公用事业过多(whichtypecommandwhencewherewhereiswhatishash,等)。

我们经常听说which应该避免。为什么?我们应该用什么来代替?

shell history which portability

422
推荐指数
4
解决办法
7万
查看次数

如何在 Zsh 命令行中展开所有变量?

在之前针对 bash 的问题中,我问如何在命令行中扩展相对路径并使用制表符补全?

我喜欢 @Mikel 的答案,其中提到使用Ctrl+ Alt+e来扩展所有变量,并且我经常使用它。

从那时起,我已经切换到,zsh虽然我可以键入$PWD并按Tab以展开当前目录的路径,但如果我键入类似的内容$PWD/.profile并按Tab它不会展开。

我已经阅读了类似的问题,并且看到了有关扩展别名的答案,以及如何通过键入变量并按来扩展变量,但没有什么与在 中按+ +Tab相同 。CtrlAltebash

是否有某种方法允许转义序列(例如Ctrl+ Alt+)e展开正在输入的命令行中的所有变量zsh

command-line zsh environment-variables variable

5
推荐指数
1
解决办法
2393
查看次数

更好地理解“zsh”中扩展别名的函数

我试图了解这个zsh小部件的工作原理:

\n\n
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\n
Run Code Online (Sandbox Code Playgroud)\n\n

我在这个答案中找到了代码。它的目的是当您点击 时展开命令行上的所有别名C-M-e

\n\n

它有效,但代码中有几件事我不明白。

\n\n

这是我认为我理解的和我不理解的:

\n\n
zle -N expand-aliases\n
Run Code Online (Sandbox Code Playgroud)\n\n

此行安装一个名为的小部件expand-aliases,它将调用具有相同名称的函数。

\n\n
bindkey \'\\e^E\' expand-aliases\n
Run Code Online (Sandbox Code Playgroud)\n\n

该行将小部件绑定到关键和弦C-M-e

\n\n
unset \'functions[_expand-aliases]\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

我不明白这一行,因为我不知道数组functions是如何填充的。

\n\n
functions[_expand-aliases]=$BUFFER\n
Run Code Online (Sandbox Code Playgroud)\n\n

该行将当前命令行的内容存储在关联数组内functions,键为_expand-aliases

\n\n
(($+functions[_expand-aliases])) &&\n
Run Code Online (Sandbox Code Playgroud)\n\n

为了更好地理解该行的工作原理,我执行了以下命令:

\n\n
alias 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)

zsh

4
推荐指数
1
解决办法
801
查看次数