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

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

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

Ответы

Ответ 1

Как было предложено @dwc, здесь vim script:

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 линии, которые начинаются с! просто игнорируются.

Ответ 2

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

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

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

Ответ 3

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

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

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

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

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