Как я могу добиться отступа для конкретного проекта в vim?

Я работаю над несколькими проектами, в каждом из которых используется разный стиль отступа (для разных типов файлов). Например, 1 табуляция на уровень отступа, 2 или 4 пробела и т. Д. Как я могу автоматизировать переключение между этими разными стилями? Обычно я предпочитаю использовать табуляцию с отступом, но мне надоело постоянно печатать: set expandtabs при работе с кодом с отступом от места. Возможные решения включают загрузку части конфигурации vim на основе пути к файлу или некоторой конфигурации в корне проекта. Есть ли плагин, который элегантно решит эту проблему?


person VoY    schedule 30.05.2011    source источник


Ответы (5)


  1. Посмотрите на вариант cinoptions и вариант softtabstopexpandtab, но вы это знаете).
  2. В вашем '~ / .vimrc' определите автоматические команды ввода буфера для каждого каталога, в котором вы храните источники какого-либо проекта, например:

    augroup ProjectSetup
    au BufRead,BufEnter /path/to/project1/* set et sts=2 cindent cinoptions=...
    au BufRead,BufEnter /path/to/project2/* set noet sts=4 cindent cinoptions=...
    augroup END
    

    Если в проекте используются разные языки и для этого требуются разные настройки, вы также можете добавить такие расширения, как:

    au BufRead,BufEnter /path/to/project1/*.{c,h} set noet sts=0 cindent cinoptions=...
    au BufRead,BufEnter /path/to/project1/*.py set et sts=4
    
person Jan Hudec    schedule 30.05.2011
comment
Можете ли вы предложить способ различать языки на основе типов файлов vim, а не расширений файлов? Мне нравится ваш ответ, но похоже, что эта часть повторяет части моей конфигурации. Спасибо! - person VoY; 30.05.2011
comment
@VoY: Также есть событие FileType для автокоманд. Но его шаблон соответствует типу файла, поэтому вам нужно проверить путь самостоятельно. Или вы можете поместить код в ~/.vim/after/ftplugin/<language>.vim, но вам снова придется проверять путь самостоятельно. - person Jan Hudec; 09.01.2014

Я использую плагин localvimrc, который делает именно то, о чем вы просите:

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

person evnu    schedule 30.05.2011

EditorConfig и это Плагин Vim:

Что такое EditorConfig?

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

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

Вам просто нужно создать .editorconfig файл в корне проекта, и Vim автоматически найдет его (при условии, что у вас установлен плагин), установив правильные значения. Создав .editorconfig файлы для каждого проекта, вы получите то, что вам нужно - конкретный отступ для проекта.

Пример файла конфигурации:

root = true

[*]
charset = utf-8
end_of_line = lf
indent_style = space
indent_size = 4
insert_final_newline = true
trim_trailing_whitespace = true

[*.{js,html}]
indent_size = 2

[*.css]
indent_size = 4
person Robert Kusznier    schedule 08.01.2018

Да, есть: если вы используете проект В плагине вы можете указать файл, содержимое которого оценивается каждый раз, когда вы открываете файл проекта (этот файл называется in.vim). Противоположность in.vim - out.vim: она выполняется каждый раз, когда вы покидаете проект.

person eckes    schedule 30.05.2011
comment
На самом деле я использую плагин проекта, но переключился на автокоманды (см. Другой ответ) для настройки параметров проекта (я также установил такие вещи, как makeprg и т. Д.). Проблема с плагином проекта in / out.vim заключается в том, что он не запускается, если вы сначала вводите буфер не из плагина проекта, а, например, из списка быстрых исправлений (после :make или :grep) или явной команды (:e %:r.h часто очень полезен в C / C ++). - person Jan Hudec; 30.05.2011

Для всего, что поддерживает Editorconfig, правильный ответ - использовать его, см. Отдельный ответ.

Однако для других настроек вы можете использовать .vimrc файлы с set exrc secure.

См. :h exrc:

     d. If the 'exrc' option is on (which is NOT the default), the current
    directory is searched for three files.  The first that exists is used,
    the others are ignored.
    -  The file ".vimrc" (for Unix, Amiga and OS/2) (*)
            "_vimrc" (for MS-DOS and Win32) (*)
    -  The file "_vimrc" (for Unix, Amiga and OS/2) (*)
            ".vimrc" (for MS-DOS and Win32) (*)
    -  The file ".exrc"  (for Unix, Amiga and OS/2)
            "_exrc"  (for MS-DOS and Win32)

См. :h secure:

    When on, ":autocmd", shell and write commands are not allowed in
    ".vimrc" and ".exrc" in the current directory and map commands are
    displayed.  Switch it off only if you know that you will not run into
    problems, or when the 'exrc' option is off.  On Unix this option is
    only used if the ".vimrc" or ".exrc" is not owned by you.  This can be
    dangerous if the systems allows users to do a "chown".  You better set
    'secure' at the end of your ~/.vimrc then.
    This option cannot be set from a |modeline| or in the |sandbox|, for
    security reasons.
person user1338062    schedule 20.03.2020