Как мога да постигна специфичен за проекта отстъп във 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