Vim: применить настройки к файлам в каталоге

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

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

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

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

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

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

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

  • Моделины особенно ограничены: мы не можем установить переменные (которые настраивают другие плагины (ft), например «должны ли скобки для fragmentа быть на новой строке?») Или функция вызова из них (я не ограничиваю себя к стандартам кодирования, я также устанавливаю makefile для использования в зависимости от текущего каталога)
  • DRY : с помощью modelines параметр необходимо повторять в каждом файле, если слишком много вещей для настройки или настройки для изменения, это быстро станет трудно поддерживать, более того, для этого потребуется использование плагина-расширителя-расширителя ( которые вы должны рассмотреть, если у вас есть несколько vimmers в вашем проекте).
  • Не каждый использует vim для разработки. Я не хочу, чтобы меня беспокоили настройки редактора других людей, почему я должен их паразитировать?
  • Легче попросить vimmers установить тот же плагин, вместо того, чтобы просить их скопировать-вставить и сохранить те же строки в их .vimrc
  • Настройки могут быть сохранены вместе с другими файлами проекта (cvs / svn / git / whatever)
  • Очень легко иметь конфигурационный файл для каждого проекта – с плагином, у меня есть глобальный файл конфигурации для стандартов кодирования всего проекта и конкретные файлы конфигурации для каждого подпроекта (какой make-файл использовать, какой исполняемый файл для вызова , …)

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

Вы можете поместить что-то подобное в $VIM/vimrc

 autocmd BufNewFile,BufRead /path/to/files/* set nowrap tabstop=4 shiftwidth=4 

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

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

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

вы, вероятно, будете менее забавны, чем я.

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

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

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

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

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

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

Чтобы свести к минимуму риски безопасности с ЛЮБОЙ функцией «автозапуска» для НИЧЕГО в эти дни, могу ли я посоветовать вам использовать существующие функции 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-файлов в Проводнике, а затем «Edit with multiple Vim», что приведет к одновременному открытию нескольких окон vim. Для моей работы я делаю это несколько раз в день, ежедневно. Все файлы обработаны тем, что я установил в своем локальном _gvimrc.

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

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

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

Попробуйте «localvimrc»:

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

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

Попробуйте 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

Я посмотрел на плагины, которые существовали и не очень нравились никому из них, поэтому я написал простую функцию, которая поросенок поддерживает vim-fugitive . Преимущество этого в том, что он знает, что корень проекта всегда является корнем репозитория, и, кроме того, я могу hash-файл сохранить таблицу доверия. Просто поместите следующее в ваш .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 ).

  • Как я могу расширить полный путь к текущему файлу, чтобы перейти к команде в Vim?
  • Как запустить терминал внутри Vim?
  • Более полезная статусная линия в vim?
  • VIM - Как сопоставить Shift-Enter
  • В Vim, как эффективно вставлять одни и те же символы в несколько строк?
  • Где мой .vimrc-файл?
  • Давайте будем гением компьютера.