Как открыть отдельные файлы или проекты с различными настройками вкладок / пробелов - PullRequest
2 голосов
/ 20 марта 2012

Я использую (Mac) Vim в своих проектах, настроенных на использование 2 пробелов для вкладок, и даже имею скрипт, который преобразует все вкладки в 2 пробела при сохранении.

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

macvim --oh-no-not-tabs-again .

Какая лучшая практика?

Ответы [ 3 ]

3 голосов
/ 01 апреля 2012

Вы можете запускать автокоманды отдельно для каждого каталога, так что вы можете настроить все что угодно автоматически без горячих клавиш.Вот что я придумал:

" set up global defaults, these are mine
set tabstop=4
set softtabstop=4
set shiftwidth=4
set smarttab
set expandtab
set autoindent
set smartindent

" override tab settings on a per-directory basis
function! SetStandardTabs()
  set noexpandtab
  set tabstop=8
  set softtabstop=4
endfunction

augroup PerDirectoryTabs
  autocmd!
  autocmd BufRead,BufEnter,BufNewFile /path/to/csharp/files/* call SetStandardTabs()
augroup END

Это конфигурирует vim для автоматического определения, когда вы находитесь в поддереве / path / to / csharp / files, и устанавливает локальные переменные буфера так, как вы хотите,Поместите его в свой .vimrc, и все готово.

Edit Вот код, который нужно вставить в ваш .vimrc, который ищет в дереве ближайший "локальный" .vimrc иИсточники (нагрузки) это.Используйте с осторожностью!Не устанавливайте глобальные переменные и не делайте что-нибудь «интересное», у вас будет трудно диагностировать поведение.Я не исчерпывающе проверил это.Это может съесть ваших детей.Вы были предупреждены!

" per-subtree .vimrc
function! FindAndSourceLocalVimrc()
  if exists('g:inFindLocalVimrc')
    return
  endif
  let g:inFindLocalVimrc=1

  let v = findfile('.vimrc', '.;')
  if exists('v')
    let v = fnamemodify(v, ':p')
    if v != $MYVIMRC
      exe "source " . v
    endif
  endif

  unlet g:inFindLocalVimrc
endfunction

call FindAndSourceLocalVimrc()

Я уверен, что через 10 лет я найду уже существующий встроенный способ сделать это в одну строку.

1 голос
/ 20 марта 2012

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

Если вы хотите, чтобы вкладки были 2 символами, то в вашем vimrc:

set ts=2
set sw=2

Также вам не нужен скрипт для конвертации.Просто используйте set expandtab, который делает это автоматически при вводе символа табуляции.

0 голосов
/ 16 мая 2014

Несколько лет назад я разработал утилиту на C под названием autotab. Он анализирует первые несколько тысяч строк текстового файла, а затем выдает команду Vim для установки параметров :shiftwidth, :expandtab и :tabstop для этого файла. Он ориентирован на языки, похожие на C. autotab знает, достигается ли отступ с помощью пробелов или комбинаций табуляции и пробелов.

В заголовке комментария в программе содержатся инструкции по его интеграции в Vim, чтобы он автоматически вызывался при загрузке файла.

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

...