加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 不要在shell中为vim自动完成文件名中的某些扩展

发布时间:2020-12-15 22:04:29 所属栏目:安全 来源:网络整理
导读:我注意到bash中bash完成的一个非常酷的功能.假设我有一个包含文件的目录 a.javaa.classb.javab.class 如果我开始键入vim一个Tab,bash将自动完成a.java.它知道我不想编辑a.class 我想知道它是如何实现这种行为的.在我的bash_completion.d目录中有一堆完成文件
我注意到bash中bash完成的一个非常酷的功能.假设我有一个包含文件的目录

a.java
a.class
b.java
b.class

如果我开始键入vim一个Tab,bash将自动完成a.java.它知道我不想编辑a.class

我想知道它是如何实现这种行为的.在我的bash_completion.d目录中有一堆完成文件,但vim没有.
vim如何实现此行为,如何修改它以包含其他要忽略的文件扩展名?

解决方法

在Ubuntu上,如果我安装包bash-completion,我可以看到它的内容:

$dpkg -L bash-completion

在输出中,列出了/ etc / bash_completion.
在里面,写入以下命令:

. /usr/share/bash-completion/bash_completion

它来源文件/usr/share / bash-completion / bash_completion.

这些文件vary从OS到另一个的位置:

Note: I use a Mac,and on macOS the bash-completion file is stored (by default) in /usr/local/etc/bash_completion,and the bash_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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读