通常,当我将一个文件名传递给当前目录中唯一由 Tab 自动完成的文件时,在它之前出现的命令然后按多个 Tab(错误地),相同的文件名多次完成,我应该删除或取消并重新开始.
有没有办法禁用此行为(不创建另一个文件或隐藏文件)?
ls <Tab>filename <Tab>filename <Tab>filename
通常,当我将一个文件名传递给当前目录中唯一由 Tab 自动完成的文件时,在它之前出现的命令然后按多个 Tab(错误地),相同的文件名多次完成,我应该删除或取消并重新开始.
有没有办法禁用此行为(不创建另一个文件或隐藏文件)?
ls <Tab>filename <Tab>filename <Tab>filename
一种解决方案是
nospace
使用complete
内置.首先,您需要知道完成是如何定义的
ls
然后你通过添加修改它
-o nospace
因此,即使您Tab ↹多次点击,也不会匹配,也不会向命令行添加任何参数。
副作用:如果要添加另一个参数,则需要在行尾手动添加一个空格
ls
。为避免这种副作用,您可以修改
_longopt
函数以防止它两次匹配相同的参数(这可能不是直截了当的)。如何将其应用于其他命令并使其永久化
在匹配后附加尾随空格是默认行为。我不知道在
-o nospace
使用complete
.此外,请记住,完成规则是在某处指定的,即使是内置命令(在我的笔记本电脑上的这个文件夹中:)
/usr/share/bash-completion
。如果您查看该文件/usr/share/bash-completion/bash-completion
,您会发现完成定义的位置ls
:您会看到相同的规则适用于一大堆不同的命令(例如
cp
,mv
,rm
...),因此如果您通过添加 修改它-o nospace
,更改将影响ls
和所有其他命令。如果您不习惯修改全局设置(您需要 root 权限),您可以将它们写入
~/.bash_completion
(创建此文件,如果不存在),就像这样如果您希望修改此处未列出的其他命令的完成,只需在
/usr/share/bash-completion/bash-completion
文件或/usr/share/bash-completion/completions
文件夹中查找它们即可。