Управление на специфични за проекта настройки за Vim/Neovim проекти.

Преглед

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

В тази статия нека проучим наличните опции, които имаме във Vim/Neovim. Ще започна с най-простото решение и след това ще продължа да изследвам добавките, които можем да използваме.





exrc, vimrc, nvimrc

Ако зададете опцията exrc във вашия .vimrc или init.vim файл, Vim/Neovim ще изпълни .exrc (за Vim/Neovim), .vimrc (Vim), .nvimrc (Neovim), намерени в текущата директория, когато Vim/Neovim се стартира.

set exrc

От съображения за сигурност може също да искате да зададете опцията secure заедно (вижте :h secure)

set secure exrc

Когато secure е включено, командите :autocmd, shell и write не са разрешени в .nvimrc, .vimrc и .exrc в текущата директория и командите за карта се показват.

От документацията за опцията secure,

Когато е включено, командите “:autocmd”, shell и write не са разрешени в
“.nvimrc” и “.exrc” в текущата директория и командите за карта се показват
. Изключете го само ако знаете, че няма да срещнете
проблеми, или когато опцията 'exrc' е изключена.В Unix тази опция се
използва само ако “.nvimrc” или „.exrc“ не е ваша собственост. Това може да бъде
опасно, ако системите позволяват на потребителите да правят "chown". По-добре задайте
‘secure’ в края на вашия |init.vim| тогава
.
Тази опция не може да бъде зададена от |modeline| или в |sandbox|, от
съображения за сигурност.

Документация за Neovim за опция exrc,

Ако опцията 'exrc' е включена (което НЕ е по подразбиране), текущата
директория се търси за два файла. Използва се първият, който съществува,
останалите се игнорират.
- Файлът .nvimrc
- Файлът .exrc

Документация за Vim за опция exrc,

Ако опцията ‘exrc’ е включена (което НЕ е по подразбиране), текущата
директория се търси за три файла. Използва се първият съществуващ,
останалите се игнорират.
— Файлът “.vimrc” (за Unix, Amiga) (*)
“_vimrc” (за Win32) (*)
— Файлът „_vimrc” (за Unix, Amiga) (*)
„.vimrc” (за Win32) (*)
— Файлът „.exrc” (за Unix, Amiga )
“_exrc” (за Win32)

Приставки за локален vimrc

Като алтернатива можете да използвате плъгини, за да активирате конфигурации на директория. Можете да използвате vim-localvimrc и vim-localrc за тази цел, което може да е по-сигурно от настройката exrc.

Вграден FileType Plugin

Ако вашите проекти са на различни езици, един добър вариант определено е да се уверите в вградения плъгин за типове файлове (:h ftplugin).

За Vim папката за използване обикновено е под ~/.vim/after/ftplugin. напр. ако искате да замените настройките по подразбиране на Javascript, създайте файл с име javascript.vim в тази папка с персонализираните настройки.

За Neovim, папката за използване обикновено е под ~/.config/nvim/after/ftplugin.

напр. ако отидете в системната папка ftplugin по подразбиране (в моя случай е /usr/local/share/nvim), можете да видите конфигурациите по подразбиране за всички типове файлове.

AutoCmd

Друга възможност е да използвате командата auto. Има много начини, по които можете да го използвате.

Настройки, специфични за езика

Можете да зададете специфични за езика настройки, напр.

autocmd FileType markdown setlocal spell
autocmd FileType html setlocal shiftwidth=2
autocmd FileType php,html setlocal shiftwidth=2 expandtab

Или можете да извлечете файл, ако имате много настройки, напр.

autocmd FileType markdown source ~/.vim/settings/mysettings.vim

Централизирани настройки

Можете също така да централизирате настройките си в папка, като използвате командата auto (:h autocmd-pattern), напр.

:autocmd BufRead,BufNewFile /path/to/dir/** setlocal ts=4 sw=4

Също така, прочетете тази глава отLearn Vimscript the Hard Way, за да разберете клопката на автоматичната команда и как да избегнете създаването на дублиращи се автоматични команди.

редактор-конфиг

editorconfig-vim е плъгин EditorConfig за Vim/Neovim. По принцип просто трябва да създадете .editorconfig файл в папката на проекта и Vim/Neovim ще използва настройките с помощта на този плъгин.

Плъгинът EditorConfig Vim поддържа следните свойства на EditorConfig:

  • indent_style
  • indent_size
  • tab_width
  • end_of_line
  • charset
  • insert_final_newline
  • trim_trailing_whitespace
  • max_line_length
  • root (използва се само от ядрото на EditorConfig)

От Vim/Nevom въведете :h editorconfig, за да получите повече подробности от документацията, след като го инсталирате,

vim-следител

Този плъгин може да не ви позволи ръчно да конфигурирате специфични за проекта настройки. vim-sleuth автоматично настройва 'shiftwidth' и 'expandtab' евристично въз основа на текущия файл или, в случай че текущият файл е нов, празен или по друг начин недостатъчен, като разглежда други файлове от същия тип в текущата и родителската директории .

vim-прожекционист

projectionist.vim предоставя подробна конфигурация на проекта с помощта на проекции.

Нека видим тривиален пример за задаване на цветова схема за проект.

Създайте файл с име .projections.json в папка със следното съдържание.

{
  "*.html": {
    "colorscheme": [
      "onedark"
    ]
  }
}

Projectionist ще открие този файл и ще зададе буферна локална променлива (b:projectionist) всеки път, когато се зарежда HTML файл.

Използвайки dofiles, които разработих в предишната си статия, създайте файл plugin/projectionist.vim със следното съдържание.

augroup change_colorscheme
    autocmd!
    autocmd User ProjectionistActivate call s:change_colorscheme() 
augroup END
function! s:change_colorscheme() abort
    let l:colorscheme = projectionist#query('colorscheme') 
    if len(l:colorscheme) > 0
        execute 'colorscheme '.l:colorscheme[0][1][0]
    endif
endfunction

Рестартирайте Vim/Neovim и сега, ако отворите или създадете HTML файл в папката, цветовата схема автоматично ще се промени на onedark.

Projectionist също има функции, които улесняват навигацията по проекта.

напр. със следния .projections.json, който описва моята структура на проекта, мога лесно да навигирам във файловете на проекта.

{
  "*.html": {
    "colorscheme": [
      "onedark"
    ]
  },
  "libs/*.py": {
    "alternate": "tests/test_{}.py",
    "type": "source"
  },
  "tests/test_*.py": {
    "alternate": "libs/{}.py",
    "type": "test"
  },
  "cli.py": {
    "type": "main"
  },
  "lib/models/*.py": {
    "type": "model"
  }
}

Сега,

  • тип :Emain ще отвори cli.py
  • отворете utils.py, въведете :A и test_utils.py ще бъдат заредени.
  • open test_utils.py, тип :A и utils.py ще бъдат заредени.
  • тип :Emodel users и users.py ще бъдат заредени.

Имате различни опции за отваряне на файла в разделяне, раздел и т.н. Въведете :h projectionist, за да разгледате документацията.

Ако търсите приставка, базирана на Lua, можете да изпробвате vim-projectconfig.

Разгледайте и следните статии!







Ако все още не сте член на Medium и искате да станете такъв, щракнете тук. (Част от вашата абонаментна такса ще бъде използвана за поддръжка на alpha2phi.)