Могу ли я заставить vim уважать мои файлы .gitignore?

Мне было интересно, есть ли способ заставить vim читать файлы .gitignore и использовать их для определения параметров, которые не будут отображаться при автозаполнении имен файлов.

Например, работая на python, я бы не хотел, чтобы файлы .pyc предлагались для редактирования. Я думаю, что у vim есть свой механизм для этого, мне было интересно, как загрузить в него информацию из .gitignore.

Ответов (3)

Решение

Как предлагает @dwc, вот сценарий vim:

let filename = '.gitignore'
if filereadable(filename)
    let igstring = ''
    for oline in readfile(filename)
        let line = substitute(oline, '\s|\n|\r', '', "g")
        if line =~ '^#' | con | endif
        if line == '' | con  | endif
        if line =~ '^!' | con  | endif
        if line =~ '/$' | let igstring .= "," . line . "*" | con | endif
        let igstring .= "," . line
    endfor
    let execstring = "set wildignore=".substitute(igstring, '^,', '', "g")
    execute execstring
endif

Возьмите этот источник и поместите его в файл в каталоге вашего плагина, например ~/.vim/plugin/gitignore.vim . Он прочитает ваш .gitignore файл и проанализирует его, преобразуя его формат в подходящий wildignore, а затем установит эту опцию.

Ограничения :

  • Это прочитает .gitignoreфайл из каталога, в котором вы запускаете vim. Не предпринимается никаких усилий для поиска других .gitignoreфайлов и их анализа. В качестве альтернативы вы можете указать абсолютный путь к файлу в первой строке.
  • Параметр wildignoreв vim не поддерживает идею отрицания игнорирования, как в .gitignoreфайле. То есть нельзя сказать, :set wildignore=*.html,!foo.htmlчтобы он игнорировал все файлы HTML, кроме foo.html. Следовательно, .gitignoreстроки, начинающиеся с! просто игнорируются.

Я написал для этого плагин: https://github.com/octref/RootIgnore

Он может .gitignore автоматически добавлять шаблоны в ваш wildignore.
Некоторые удобные функции:

  • Когда вы находитесь в подкаталоге, например:
my_proj/  
   .gitignore  
   .git/
   sub/

Если вы cd в sub и откроете там Vim, плагин будет рекурсивно подниматься вверх, чтобы найти .gitignore и добавить его в wildignore .

  • Вы можете легко добавлять ~/.gitignoreправила с помощью let g:RootIgnoreUseHome = 1.

Vim будет игнорировать шаблоны файлов, указанные в option , поэтому вы можете установить их так: wildignore

:set wildignore=*.o,*~,*.pyc

Или поместите ту же строку (без ":") в ваш файл ~ / .vimrc. Если вам нужно что-то более динамичное, например, настройка на .gitignore в текущем каталоге, вам нужно будет сделать несколько сценариев, но я оставлю это как упражнение для кого-то другого.