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