我的问题类似于这个,除了 emacs 而不是 vim。问题是我有一个要打开的 cpp 文件,当我输入 f[TAB] 时,它会自动完成为 foo 二进制文件 foo 而不是 foo.cpp。有没有办法关闭具有特定(或没有)扩展名的文件的自动完成功能?或者有没有办法优先考虑某些扩展名?
编辑:我用过此解决方案用于迷你缓冲区中的自动完成,但我想要一个 Bash 自动完成的解决方案。
编辑:我发现我可以export FIGNORE=.bin
忽略 Bash 自动完成中所有带有 .bin 扩展名的文件。此解决方案的问题在于,它不适用于没有扩展名的文件,并且只有在同一目录中没有 .cpp 文件时,才能实现此操作。
答案1
如果你给它一些扩展名(例如 .bin),那么你可以使用 complete-ignored-extensions 忽略它:
在补全文件名时,Emacs 通常会忽略某些不太可能被选择的替代方案,这些替代方案由列表变量completion-ignored-extensions 决定。列表中的每个元素都应该是一个字符串;任何以此字符串结尾的文件名都将被忽略作为补全替代方案。任何以斜杠 (/) 结尾的元素都代表子目录名称。completion-ignored-extensions 的标准值有几个元素,包括“.o”、“.elc”和“~”。例如,如果目录包含“foo.c”和“foo.elc”,则“foo”会补全为“foo.c”。但是,如果所有可能的补全都以“ignored”字符串结尾,则不会忽略它们:在前面的示例中,“foo.e”会补全为“foo.elc”。在补全列表中显示补全替代方案时,Emacs 会忽略completion-ignored-extensions。
http://www.gnu.org/software/emacs/manual/html_node/emacs/Completion-Options.html