Смешивание вкладок и пробелов без смешивания вкладок и пробелов - PullRequest
1 голос
/ 04 декабря 2011

Я пользователь Vim, который (из-за моего опыта работы с Python) привык к пробелам вместо вкладок. Я работаю над проектом PHP с другим разработчиком, который использует Windows IDE и действительно хочет использовать вкладки. Кажется, на самом деле не существует какого-либо жесткого и быстрого руководства по стилю для PHP, которое бы предпочло определенный стиль, поэтому я застрял, пытаясь разобраться с вкладками.

Есть ли какой-нибудь способ, через Git или Vim, что я могу работать с кодом с вкладками и преобразовывать его в пробелы во время редактирования? Тогда, возможно, в git add / commit он может быть преобразован обратно во вкладки?

1 Ответ

3 голосов
/ 04 декабря 2011

Одна действительно важная вещь - это то, что отслеживаемый контент должен быть стандартизирован. Вы и другой разработчик просто должны договориться о чем-то там. Любой из вас, кто хочет что-то сделать помимо согласованного стандарта, может привести к неоднозначным результатам. Не всегда возможно чисто конвертировать туда и обратно.

Я бы порекомендовал просто разобраться с этим. У меня есть собственное мнение о вкладках и пробелах, и я работал над кодом, используя каждую. Лучшее, что нужно сделать, - это просто настроить редактор в соответствии со стандартизированным стилем и следовать ему. В vim, выключите вкладку «расширение», установите для табуляции то, что вам нравится.

Если вы все еще хотите попробовать, есть два основных способа:

  • Используйте автокоманды в Vim для преобразования при чтении / записи. Вам, вероятно, понадобятся BufReadPost, BufWritePre и BufWritePost. (Для написания вы конвертируете в стандарт, пусть Vim напишет его, а затем вернется обратно к тому, как вы хотите редактировать.) Убедитесь, что tabstop установлен так, как вам нравится, и что-то вроде этого (не проверено):

    set tabstop=4
    autocmd BufReadPost * set expandtab | retab
    autocmd BufWritePre * set noexpandtab | retab!
    autocmd BufWritePost * set expandtab | retab
    

* - это файл, к которому это будет применяться; возможно, вам придется возиться с этим или добавить только автокоманды для файлов в определенном каталоге, чтобы убедиться, что этого не происходит для всего, что вы редактируете. Обратите внимание, что это опасно; например, он заменит буквенные символы табуляции внутри строк.

  • Используйте грязные / чистые фильтры Git. Вы можете прочитать о них в man gitattributes или в Pro Git . Вы можете использовать их для преобразования для редактирования, а затем вернуться к стандарту для фиксации. Если нет никакого странного отступа, это может быть так же просто, как заменить ведущие вкладки на некоторое количество пробелов и пробелы на долю от этого количества вкладок. Делайте это с помощью sed / perl / indent, как вам удобно.
...