通常,在输入文件名的前几个字符后可以按 Tab 键并获得完整的文件名(或建议,以防有许多具有相同的开始字符)。
但是对于具有特殊字符的文件名,这似乎不起作用。具体来说,我在~/.vim/view
目录中 - 其中包含带有详细信息的文件,例如使用 vim 打开的所有文件的折叠位置(行号)。这些是 vim 用来在重新打开以前使用的文件时使用适当的折叠等恢复相同“视图”的文件。现在(至少在我的盒子里)这些非常有用的文件似乎有最奇怪的文件名,例如~=+temp=+test.sh=
,或者=+temp=+test.sh=
这些文件分别有关于文件的最后“视图”的~/temp/test.sh
信息/temp/test.sh
。
当我进入这个目录并执行类似 als -l ~=+tem
然后点击选项卡的操作时,我通常希望它能够自动完成~=+temp=+test.sh=
但这不会发生。为什么?我如何(如果有的话)实现它?
我在 FreeBSD 上使用 Bash。作为记录,我已经在 zsh、csh、tcsh 和 sh(相同的操作系统)上尝试过这个。我没有为特定的 shell 添加任何问题标签,但如果您认为应该这样做,请随意这样做。
在我看来,Bash
=
在完成文件名时忽略了和之前的部分,可能是为了支持 GNU 风格的长选项,例如.--some-file=<filename>
例如,如果文件
foofoo
和foobar
存在,键入, 将自动完成前缀,并列出两个文件名。echo asdf=f<tab>
foo
使用名为的文件
asdf=xyz
,将很乐意在.give之后的部分自动完成该文件。echo asdf=a<tab>
=
echo asdf=asdf\=xyz
所以是的,你需要在自动完成文件名时
=
转义in Bash 。对于生成的命令来说这不是问题,但是,从这个意义上说,它对 shell 没有特殊意义。另一方面,文件名中的波浪号可能不是问题。除非你有一个用户叫它
=+temp=+test.sh=
应该保持原样。