Tabstops в Neovim и git diff

Вопрос или проблема

Я новичок в vim и испытываю трудности с его настройкой.

Я работаю с кодом FRR, в котором табуляция составляет 8 пробелов. Я хочу видеть 4 пробела вместо 8 и добавил следующие настройки [options.lua]:

vim.opt.expandtab = true
vim.opt.shiftwidth = 4
vim.opt.tabstop = 4
vim.opt.smarttab = true
vim.opt.autoindent = true
vim.opt.smartindent = true

Git показывает новые строки в файле как:

-       memset(&mroute, 0, sizeof(mroute));
+    memset(&mroute, 0, sizeof(mroute));
        stream_get(&mroute.sg.src, client->ibuf, 4);
        stream_get(&mroute.sg.grp, client->ibuf, 4);
 

Я не вижу разницы в самом файле, но git показывает, что она есть. Как это можно исправить?

Если вы запустите git diff | cat -A, как предложено в Как показать пробелы и табуляции с git-diff, я ожидаю, что это покажет, что табуляции в оригинальном файле были заменены на 4 пробела в отредактированных строках.

Согласно документации NEOVIM, vim.opt.expandtab = true заставит VIM заменять табуляции на пробелы в отредактированных строках.

Поэтому я предлагаю изменить настройку на vim.opt.expandtab = false.

В качестве замечания, я не уверен, что такое FRR код, но табуляции в 8 символов соответствуют стилю кодирования ядра Linux Отступы. Не уверен, может ли редактирование кода с табуляцией в 4 символа, а не в 8, вызвать несоответствие отступов по сравнению с оригинальной табуляцией в 8 символов.

Ответ или решение

Для решения проблемы с настройками табуляции и различиями в Git при работе с FRR-кодом, вы уже сделали много правильных шагов. Однако давайте более подробно рассмотрим вашу настройку Neovim и то, как вы можете справиться с проблемами, возникающими при работе с отступами.

Настройки Neovim

На данный момент ваши настройки в файле options.lua выглядят правильно для того, чтобы использовать 4 пробела вместо табуляций. Это позволяет вам видеть отступы как 4 пробела, что может быть желаемым форматом для вашей работы. Однако, поскольку в выходном коде у вас есть различия в отображении с Git, важно понимать, как это влияет на ваш файл.

Ваши текущие настройки:

vim.opt.expandtab = true   -- использовать пробелы вместо табуляции
vim.opt.shiftwidth = 4      -- количество пробелов для отступа
vim.opt.tabstop = 4         -- количество пробелов, которое соответствует табуляции в файле
vim.opt.smarttab = true      -- умные табуляции
vim.opt.autoindent = true    -- автоматический отступ
vim.opt.smartindent = true    -- интеллектуальный отступ

Проблема с различиями в Git

  1. Когда вы используете vim.opt.expandtab = true, это означает, что все табуляции, которые вы вводите в редакторе, заменяются на пробелы. Если ваш оригинальный файл использует табуляции (например, шириной 8 пробелов), то при редактировании вы можете по факту изменять структуру отступов, заменяя табуляции на 4 пробела. Эта замена и вызывает различия, которые вы видите в выводе git diff.

  2. Если вы хотите сохранить оригинальные табуляции, рекомендуем вам отключить expandtab:

vim.opt.expandtab = false
  1. Вместо этого настройте tabstop и shiftwidth, чтобы они были равны 8, если вы работаете с кодом, где используется табуляция в 8 пробелов:
vim.opt.shiftwidth = 8      -- количество пробелов для отступа
vim.opt.tabstop = 8         -- количество пробелов, которое соответствует табуляции в файле

Рекомендации:

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

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

Заключение

Ваша проблема с различиями в Git связана с конфигурацией отступов в вашей среде редактирования. Изменив настройки Neovim так, чтобы он использовал табуляции вместо пробелов, вы избежите неожиданных изменений в вашем коде, а Git не будет показывать различия, когда вы сохраните редактор. Убедитесь также, что вы работаете в соответствии с принятыми стандартами кодирования, чтобы избежать проблем с совместимостью в будущем.

Оцените материал
Добавить комментарий

Капча загружается...