LINUX.ORG.RU

vim: tabstop и shiftwidth per project

 


1

1

Продолжаю медленно осваивать vim

Для подконтрольных мне проектов захотелось добавить в проект нечто, что бы явным образом задавало бы правила indention для проекта. При этом:

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

Добавлять в каждый файл комментарий вида vim:ts=4 – запаришься. Хотя задачу решило бы.

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

Есть ли какие-то еще решения. Вроде лимитированного по функциональности vim:ts=4, но так чтобы работало на весь проект?

Update: Цитирую ответ достопочтенного @lwo, который предлагает, на мой вкус, самое лучшее решение моей задачи.

Для ровно этого изобрели https://editorconfig.org/.

Кладешь в корень проекта файл с настройками поведения редактора, поддерживающие редакторы подхватывают его. В neovim работает из коробки, для vim вроде как плагин есть.

Update 2: vim начиная с версии 9.0.1799 имеет поддержку .editconfig из коробки

★★★

Последнее исправление: shaplov (всего исправлений: 2)

Я откуда-то такую шляпу украл:

function! SetupEnvironment()
  let l:path = expand('%:p')
  if l:path =~ 'path_to_project_1'
      setlocal tabstop=2 shiftwidth=2
  elseif l:path =~ 'path_to_project_2'
      setlocal tabstop=4 shiftwidth=4
  else
    setlocal tabstop=2 shiftwidth=2
  endif
endfunction
autocmd! BufReadPost,BufNewFile * call SetupEnvironment()

vazgen05 ★★★
()

Для ровно этого изобрели https://editorconfig.org/.

Кладешь в корень проеута файл с настройками поведения редактора, поддерживающие редакторы подхватывают его. В neovim работает из коробки, для vim вроде как плагин есть.

lwo
()
Последнее исправление: lwo (всего исправлений: 1)
Ответ на: комментарий от shaplov

и как он тогда приедет на все инстансы на которых я правлю код?

Так же, как и все остальные твои личные или конкретного окружения настройки.

И как коллегам вимерам он окажется полезен?

А с чего ты взял, что он окажется им полезным? Более вероятно, что наоборот.

LamerOk ★★★★★
()
Ответ на: комментарий от lwo

Для ровно этого изобрели https://editorconfig.org/.

Кладешь в корень проеута файл с настройками поведения редактора, поддерживающие редакторы подхватывают его. В neovim работает из коробки, для vim вроде как плагин есть.

О! спасибо за пояснения! Я стековерфлоу видел посылы туда, но сути не вкурил…

Теперь вижу, что вещь стоящая… Наверное ее надо взять.

shaplov ★★★
() автор топика
Ответ на: комментарий от LamerOk

И как коллегам вимерам он окажется полезен?

А с чего ты взял, что он окажется им полезным? Более вероятно, что наоборот.

С того, что я им начальник ;-) И я хочу единого оформления. И сам же первым это единство нарушаю :-)

Editorconfig эту задачу решает идеально…

shaplov ★★★
() автор топика
Ответ на: комментарий от shaplov

И я хочу единого оформления.

Это делается не через вим, а через линтеры - astyle, clang-format, etc.

С того, что я им начальник

Тогда не будь самодуром, и не заставляй людей пользоваться вимом.

LamerOk ★★★★★
()
Ответ на: комментарий от LamerOk

И я хочу единого оформления.

Это делается не через вим, а через линтеры - astyle, clang-format, etc.

.editorconfig – это то, что я собственно говоря искал, и даже более универсальнее чем я ожидал. Предлагаемые вами astyle, clang-format – не то что я искал, вообще другого класса инструменты

С того, что я им начальник

Тогда не будь самодуром, и не заставляй людей пользоваться вимом.

Я не виноват. Они сами…

shaplov ★★★
() автор топика
Последнее исправление: shaplov (всего исправлений: 1)
Ответ на: комментарий от Gentooshnik

ИМХО класть .localvimrc в репу - это не хуже чем всякие .gitignore и myproject.sln. Но да, если есть возможность использовать editorconfig - используй.

.localvimrc позволяет потенциально автоматически запустить произвольный код… Не хорошо это…

shaplov ★★★
() автор топика