如果我运行:
$ ls *
foo bar buzz
$ history | tail -1
ls *
Run Code Online (Sandbox Code Playgroud)
您可以看到,在我的 shell 历史记录中,它记住的是我运行的ls *而不是ls foo bar buzz. 理想情况下,我想将两者记录在不同的历史记录中。当我想知道“文件 foo 到底发生了什么事情?”时,如果能够rm *通过搜索历史记录并找到 'foo'来返回并找出我在错误的目录中所做的事情,那就太好了。
我对 zsh 和 bash 的解决方案感兴趣。
假设我在 zsh 中执行以下操作
cd ~
cd dir1
cd dir2
cd dir3
evince foo.pdf
Run Code Online (Sandbox Code Playgroud)
zsh 在其历史文件中写入完全相同的内容。
现在我的问题是是否有可能
cd ~
cd ~/dir1
cd ~/dir1/dir2
cd ~/dir1/dir2/dir3
evince ~/dir1/dir2/dir3/foo.pdf
Run Code Online (Sandbox Code Playgroud)
在 zsh 历史中。即 zsh 只记住完整路径。
在之前针对 bash 的问题中,我问如何在命令行中扩展相对路径并使用制表符补全?
我喜欢 @Mikel 的答案,其中提到使用Ctrl+ Alt+e来扩展所有变量,并且我经常使用它。
从那时起,我已经切换到,zsh虽然我可以键入$PWD并按Tab以展开当前目录的路径,但如果我键入类似的内容$PWD/.profile并按Tab它不会展开。
我已经阅读了类似的问题,并且看到了有关扩展别名的答案,以及如何通过键入变量并按来扩展变量,但没有什么与在 中按+ +Tab相同 。CtrlAltebash
是否有某种方法允许转义序列(例如Ctrl+ Alt+)e展开正在输入的命令行中的所有变量zsh?