Как я могу заставить vim выполнить набор команд в зависимости от текущего каталога? [Дубликат]

После выполнения различных предложенных исправлений он был окончательно решен путем обновления расширения NuGet Package Manager в Visual Studio.

Это делается в разделе «Инструменты -> Расширения и обновления», затем в диалоговом окне «Расширения и обновления» -> Галерея Visual Studio. Может потребоваться перезапуск Visual Studio.

91
задан wilhelmtell 19 January 2009 в 08:29
поделиться

10 ответов

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

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

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

41
ответ дан Community 20 August 2018 в 10:59
поделиться
  • 1
    Я заметил, что вы должны сохранить новый файл в пути до того, как он правильно выполнит плагин – cmcginty 4 November 2010 в 01:43
  • 2
    В самом деле. Это семейство плагинов просто определяет структуру. Вы все равно должны писать конкретные определения проекта в файле - что структура будет автоматически отправляться. – Luc Hermitte 4 November 2010 в 02:32
  • 3
    Обратите внимание, что Люк ссылается на собственный плагин. Кажется, что это работает намного лучше, чем связанный в вопросе. Благодарю. – data 1 December 2010 в 14:33
  • 4
    Что ж. Я не могу сказать. Поскольку я использую мои в течение многих лет, я никогда не смотрел на другие реализации. Время от времени я получаю отчет об ошибке, который я в конечном счете принимаю во внимание. BTW, моя версия реализована для запуска перед mu-шаблоном, чтобы установить переменные, зависящие от проекта, перед расширением шаблонов (что весьма полезно для получения текущего корневого каталога проекта и обрезания его из расширений пути) – Luc Hermitte 1 December 2010 в 17:08
  • 5
    @JasonMcCarrell Моя реализация local_vimrc и Markus "embear & quot; У Брауна есть поддержка черного списка, белого списка ... Если вам просто нужно указать, как будет выполняться отступ, может быть, лучше всего будет использовать EditorConfig-vim. – Luc Hermitte 14 March 2018 в 16:30

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

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

19
ответ дан andr 20 August 2018 в 10:59
поделиться
  • 1
    Этот подход прост и идеально соответствует моим потребностям. – Jinxed 5 April 2017 в 14:23

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

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

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

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

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

1
ответ дан asgeo1 20 August 2018 в 10:59
поделиться

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

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

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

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

20
ответ дан gravious 20 August 2018 в 10:59
поделиться
  • 1
    Пожалуйста, см. Комментарий от phen. Это может привести к серьезным последствиям для безопасности. – data 1 December 2010 в 13:39

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

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

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

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

47
ответ дан Martijn Courteaux 20 August 2018 в 10:59
поделиться
  • 1
    Это также верно для плагинов, которые автоматически выполняются при загрузке vim. – Luc Hermitte 1 December 2010 в 17:13

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

2
ответ дан Nathan Fellman 20 August 2018 в 10:59
поделиться

Я посмотрел на плагины, которые существовали и на самом деле не представляли никого из них, поэтому я написал простую функцию, которая копирует на 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).

0
ответ дан Parakleta 20 August 2018 в 10:59
поделиться

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

autocmd BufNewFile,BufRead /path/to/files/* set nowrap tabstop=4 shiftwidth=4
79
ответ дан sth 20 August 2018 в 10:59
поделиться
  • 1
    Это рекурсивно, но только с *. Если вы попытаетесь уменьшить его до / path / to / files / или / path / to / files, это не сработает. – SystemParadox 10 February 2012 в 00:42
  • 2
    Это здорово, если в вашем проекте есть дерево файлов, написанных с помощью «noexpandtab». и другое дерево со всеми файлами & quot; expandtab & quot; (например, CodeIgniter). Вы можете установить правильное действие для файлов в каждом дереве индивидуально с помощью одного файла конфигурации. – user9645 29 January 2014 в 17:03
  • 3
    Как ни странно, это не сработало, когда мой путь включал символическую ссылку; Я должен был поставить полный путь без символических ссылок, прежде чем он сработает. – Dolan Antenucci 5 September 2014 в 21:03

Попробуйте 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
ответ дан Touv 20 August 2018 в 10:59
поделиться

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

10
ответ дан XEQtor 20 August 2018 в 10:59
поделиться
  • 1
    Здесь недоверие к переносимости плагинов не имеет оснований, поскольку эти плагины local_vimrc (по крайней мере, мои) являются переносимыми (его поддерживали на разных ОС и даже на Windows 95). Вопрос об угрозе безопасности также преувеличен: если мы будем следовать этому пути, мы никогда не будем устанавливать что-либо, чтобы облегчить нашу работу. – Luc Hermitte 2 November 2012 в 16:29
  • 2
    Но, насколько мне известно, первая реальная проблема заключается в том, что с вашим подходом вы должны работать из точного каталога, содержащего файл _gvimrc (это плохое имя, поскольку оно предназначено для содержания gvim конкретных вещей). Если ваш проект состоит из нескольких каталогов, для которых может потребоваться общая конфигурация и конкретные (в случае нескольких модулей), это быстро покажет свои ограничения. – Luc Hermitte 2 November 2012 в 16:33
  • 3
    Вторая проблема заключается в том, что вы можете работать только в одном проекте в то время - если я хочу работать с OTB, openjpeg и проектом, который заражает обе библиотеки, это решение не позволит мне установить определенные настройки для каждого из три проекта. – Luc Hermitte 2 November 2012 в 16:34
  • 4
    Это также работает для последовательной загрузки файла синтаксиса из локального каталога. – maharvey67 11 May 2018 в 19:59