Vim: применить настройки к файлам в каталоге - PullRequest
97 голосов
/ 19 января 2009

Как указать настройки Vim для всех файлов в текущем каталоге?

Идеальным решением было бы, если бы Vim искал и читал .vimrc в текущем каталоге, прежде чем искать ~ / .vimrc, и применил бы там настройки для всего дерева.

Я видел плагин , но это означает, что примененные настройки не прозрачны, поскольку требуют установки плагина. В отличие от этого, modeline является прозрачным, поскольку независимо от пользовательского vimrc или конкретного вызова vim, параметры modeline будут применяться к этому файлу.

Вещи, которые я пробовал,

  • размещение .vimrc в рабочем каталоге
  • :so vimrc в моделине.

Полагаю, оба не работают по соображениям безопасности. Мне не нужна вся мощь vimrc; привязки к настройкам, приемлемым для моделин, будет достаточно. Моя цель - сделать так, чтобы vimmers упростил внедрение стандартов кодирования в проекте.

Ответы [ 10 ]

85 голосов
/ 19 января 2009

Вы можете поместить что-то вроде этого в $VIM/vimrc

autocmd BufNewFile,BufRead /path/to/files/* set nowrap tabstop=4 shiftwidth=4
49 голосов
/ 02 июля 2010

Я бы настоятельно рекомендовал не использовать set exrc

Даже с set secure в * nix vim все равно будет запускать автокоманды, shell и др., Если вы владеете файлом Так что если вы случайно отредактировали файл в этом архиве, я отправил вам .vimrc, содержащий:

autocmd BufEnter * :silent! !echo rm -rf ~/

вы, вероятно, будете менее удивлены, чем я.

42 голосов
/ 19 января 2009

Я сторонник способа плагинов . По нескольким причинам:

  • Modelines особенно ограничены: мы не можем устанавливать переменные (которые настраивают другие (ft) плагины, такие как «должны ли скобки for-snippet быть на новой строке?»), Или вызывать функцию из них (я не Не ограничиваясь стандартами кодирования, я также устанавливаю make-файл для использования в зависимости от текущего каталога)
  • СУХОЙ : с моделями, настройка должна повторяться в каждом файле, если слишком много вещей для настройки или настройки, это быстро станет трудно поддерживать, более того, это потребует использование плагина расширения шаблона (что следует учитывать, если в вашем проекте есть несколько vimmers).
  • Не каждый использует vim для разработки. Я не хочу, чтобы меня беспокоили настройки редактора других людей, зачем мне их паразитировать?
  • Проще попросить vimmers установить один и тот же плагин, вместо того, чтобы просить их копировать-вставлять и поддерживать одинаковые строки в их .vimrc
  • Настройки можно сохранить с другими файлами проекта (cvs / svn / git / что угодно)
  • Действительно легко иметь файл конфигурации для каждого проекта - с помощью плагина у меня есть глобальный файл конфигурации для стандартов кодирования всего проекта и конкретные файлы конфигурации для каждого подпроекта (какой файл сборки использовать, который исполняемый файл для вызова, ...)

Кстати, решение sth может использоваться для получения одного файла конфигурации. Это очень похоже на плагин, за исключением того, что .vimrc должен быть паразитирован с неглобальными параметрами, и он не поддерживает легко несколько / общих файлов конфигурации.

26 голосов
/ 19 апреля 2013

Этот вопрос старый, но кажется довольно естественным и постоянным.

Мое решение довольно простое. Я помещаю файл .vimrc в корневой каталог моих проектов. В первой строке файла .vimrc обычно указывается ~/.vimrc, а затем добавляется конкретная конфигурация, которую я хочу. Я использую псевдоним tvim='vim -u .vimrc' и использую tvim в своих личных каталогах проектов. «tvim» означает «доверенный vim», что означает, что если я выполню его в каталоге с файлом .vimrc и что-то пойдет не так, мне некого будет винить, кроме себя, поскольку я прямо сказал, что доверяю этому. Кроме того, я храню группу этих файлов в хранилище, так что иногда я могу просто сделать мягкую ссылку на ту, которую я хочу для определенного типа проекта.

20 голосов
/ 20 января 2009

Размещение .vimrc в рабочем каталоге фактически поддерживается, только по умолчанию отключено. См. :h 'exrc' и :h startup для получения подробной информации, установка 'exrc' включит чтение .vimrc из текущего каталога.

Также рекомендуется :set secure при использовании этого. Это блокирует команды :autocmd, shell и write для .vimrc в текущем каталоге.

Еще одна вещь, на которую стоит обратить внимание - это настройка сеанса (:h session) со стандартным представлением и настройками для проекта.

Все это говорит о том, что я, вероятно, выбрал бы вариант плагина, подробно описанный самим Люком Эрмиттом.

10 голосов
/ 02 ноября 2012

Чтобы минимизировать риски безопасности с ЛЮБЫМИ функциями «автозапуска» для НИЧЕГО в наши дни, могу ли я посоветовать вам использовать существующие функции vim вместо плагинов (переносной багаж)?

Например.

Файл vimrc моей локальной папки называется "_gvimrc" (специально). Это уменьшает надежду для таких людей, как Фен, на то, чтобы развлечь себя за наш счет. : -)

В моем файле $ VIM / .vimrc я вставил:

if filereadable("_gvimrc")
    source _gvimrc
endif

в конце.

Я использую «filereadable ()» вместо «fileexists ()», так как последний имеет некоторую причудливость при пытках с одновременным открытием нескольких (более 10) файлов (не знаю почему).

Конечно, вы можете указать собственное уникальное имя файла, чтобы еще больше запутать потенциальных нарушителей. Например, «_mygvimrc», «_gobbledygook» и т. Д. Вам просто нужно выбрать одно стандартизированное имя и соответственно указать его в своем $ VIM / .vimrc. Полагаясь на внутреннюю часть vi / vim, вы исключаете проблемы переносимости. НО, НЕ называйте его .vimrc (или _vimrc) для предотвращения рекурсивного поиска в случае, если вы позже редактируете файл $ VIM / .vimrc с помощью vim.

Используется с Windoze 98SE, через Windork XP Pro, а теперь и с Windorkier 7 (уже более 5 лет). Я отмечу список файлов .txt в Проводнике, а затем использую «Редактировать с несколькими Vim», в результате чего несколько окон Vim открываются одновременно. Для своей работы я делаю это несколько раз в день, ежедневно. Все файлы были обработаны с помощью того, что я установил в своем локальном _gvimrc.

2 голосов
/ 05 мая 2014

Я согласен с плагиновым подходом по соображениям безопасности.

Существует очень хороший плагин, который еще не был упомянут. Это позволяет вам использовать .lvimrc в каталогах вашего проекта.

Попробуйте "localvimrc" из:

http://www.vim.org/scripts/script.php?script_id=441

https://github.com/embear/vim-localvimrc

2 голосов
/ 19 января 2009

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

1 голос
/ 15 марта 2017

Попробуйте vim-localrc

~/
|- .local.vimrc     (1)
`- project/
   |- .local.vimrc  (2)
   `- src/
      |- .local.vimrc   (3)
      `- main.c

https://github.com/thinca/vim-localrc/blob/master/doc/localrc.txt

0 голосов
/ 02 августа 2017

Я посмотрел на существующие плагины и не очень понравился ни одному из них, поэтому я написал простую функцию, которая поддерживает vim-fugitive . Преимущество этого в том, что он знает, что корень проекта всегда является корнем хранилища, и, кроме того, я могу хэшировать файл, чтобы сохранить таблицу доверия. Просто поместите в файл .vimrc следующее:

function LoadRepoVimrc()
  let l:path = fugitive#repo().tree('.vimrc')
  if filereadable(l:path)
    let l:sha1 = fugitive#repo().git_chomp('hash-object',l:path)
    if !exists('g:SAFE_VIMRC') | let g:SAFE_VIMRC = {} | endif
    if has_key(g:SAFE_VIMRC,l:path) && g:SAFE_VIMRC[l:path] ==? l:sha1
      execute 'source '.fnameescape(l:path)
    elseif confirm("Trust ".l:path."?", "&Yes\n&No",2) == 1
      let g:SAFE_VIMRC[l:path] = l:sha1
      execute 'source '.fnameescape(l:path)
    else
      execute 'sandbox source '.fnameescape(l:path)
    endif
  endif
endfunction
autocmd User FugitiveBoot call LoadRepoVimrc()
set viminfo ^= !

Если для параметра viminfo установлена ​​опция !, то словарь SAFE_VIMRC будет сохраняться между запусками (обратите внимание на ^, чтобы добавить параметр, чтобы он не испортил n опция).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...