a.java a.class b.java b.class
如果我开始键入vim一个Tab,bash将自动完成a.java.它知道我不想编辑a.class
我想知道它是如何实现这种行为的.在我的bash_completion.d目录中有一堆完成文件,但vim没有.
vim如何实现此行为,如何修改它以包含其他要忽略的文件扩展名?
解决方法
$dpkg -L bash-completion
在输出中,列出了/ etc / bash_completion.
在里面,写入以下命令:
. /usr/share/bash-completion/bash_completion
它来源文件/usr/share / bash-completion / bash_completion.
Note: I use a Mac,and on macOS the bash-completion file is stored (by default) in
/usr/local/etc/bash_completion
,and thebash_completion.d
directory is in/usr/local/etc/bash_completion.d
在我的系统上,/usr/share / bash-completion / bash_completion包含以下行:
_install_xspec '*.@(o|so|so.!(conf|*/*)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)' vi vim gvim rvim view rview rgvim rgview gview emacs xemacs sxemacs kate kwrite
我认为这一行是你所观察到的行为的原因.
如果你想调整它以使bash在$vim命令之后完成文件名时排除foo和bar扩展名,你可以试试following procedure.
>创建文件〜/ .bash_completion
在后者内部,写道:
for bcfile in ~/.bash_completion.d/* ; do [ -f "$bcfile" ] && . $bcfile done
>创建〜/ .bash_completion.d /目录.
>在此目录中,创建一个vim文件.
在后者内部,写道:
complete -f -X '*.@(o|so|so.!(conf|*/*)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class|foo|bar)' vi vim gvim rvim view rview rgvim rgview gview
complete是一个bash builtin命令,它允许您指定如何完成命令名称的参数.
-f是-A文件的简写,它指定要阻止您只想在建议中查看文件名.
-X排除任何符合以下模式的内容.
请注意,我只是复制了/usr/share / bash-completion / bash_completion中使用的模式,并添加了foo和bar扩展:
*.@(o|so|so.!(conf|*/*)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class|foo|bar) ^^^^^^^
您可以修改模式以排除要避免的实际扩展.
模式后面的名称告诉bash哪些命令应该排除这些扩展.
在上一个命令中,它们是:
vi vim gvim rvim view rview rgvim rgview gview
他们都调用了Vi或Vim的版本.您可以在最后添加其他编辑器名称.
有关更多信息,请参阅
$man bash
查找READLINE部分和Programmable Completion子部分,以及SHELL BUILTIN COMMANDS部分中完整内置的描述.
另见An introduction to bash completion part 1和An introduction to bash completion part 2.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。