Вопрос или проблема
Я новичок в 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
-
Когда вы используете
vim.opt.expandtab = true
, это означает, что все табуляции, которые вы вводите в редакторе, заменяются на пробелы. Если ваш оригинальный файл использует табуляции (например, шириной 8 пробелов), то при редактировании вы можете по факту изменять структуру отступов, заменяя табуляции на 4 пробела. Эта замена и вызывает различия, которые вы видите в выводеgit diff
. -
Если вы хотите сохранить оригинальные табуляции, рекомендуем вам отключить
expandtab
:
vim.opt.expandtab = false
- Вместо этого настройте
tabstop
иshiftwidth
, чтобы они были равны 8, если вы работаете с кодом, где используется табуляция в 8 пробелов:
vim.opt.shiftwidth = 8 -- количество пробелов для отступа
vim.opt.tabstop = 8 -- количество пробелов, которое соответствует табуляции в файле
Рекомендации:
-
Если вы хотите видеть 4 пробела в вашем редакторе, но при этом не хотите изменять оригинальный код, вы можете использовать плагин, который отображает отступы по вашему желанию, не изменяя фактические символы в файле.
-
Проверьте, какой стиль кодирования принят в проекте FRR, чтобы убедиться, что ваши форматы отступов согласуются с кодом других разработчиков.
Заключение
Ваша проблема с различиями в Git связана с конфигурацией отступов в вашей среде редактирования. Изменив настройки Neovim так, чтобы он использовал табуляции вместо пробелов, вы избежите неожиданных изменений в вашем коде, а Git не будет показывать различия, когда вы сохраните редактор. Убедитесь также, что вы работаете в соответствии с принятыми стандартами кодирования, чтобы избежать проблем с совместимостью в будущем.