Может ли Vim отображать два пробела для отступов, сохраняя при этом четыре пробела в файле?

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

Могу ли я настроить Vim для отображения 2 пробелов для отступов, но записать 4 в файл?

Ответ 1

Это противоположность тому, что было задано здесь.

Да, ты можешь! Если у вас есть опция "скрывать", вы можете попробовать это.

:syntax match spaces /  / conceal cchar= "Don't forget the space after cchar!
:set concealcursor=nvi
:set conceallevel=1

Вот что делают эти команды:

  • Установите символ замены для 2 пробелов в 1 космос
  • Сохранять текст под курсором, скрытым для обычных, визуальных и вставных режимов
  • Включить скрытие текста одним символом

Вам все равно нужно настроить tabstop, softtabstop и shiftwidth на 4, но он выглядит и кажется, что это 2 ! Однако, когда вы пишете файл, это действительно 4.

Если вы хотите отключить сокрытие, вы можете сделать одну из двух вещей:

  1. Удалить правило сокрытия :syntax clear spaces или
  2. Разрешить скрытый текст расширяться под курсором :set concealcursor=

Ответ 2

В справочной системе приведен пример аналогичного варианта использования различных ширины табуляции, см :help retab-example.

Адаптация этого к пространствам с удвоением/удвоением:

:autocmd BufReadPost,BufWritePost  * %substitute/^\( \+\)\1/\1/e
:autocmd BufWritePre               * %substitute/^ \+/&&/e

Ответ 3

Если он использует истинные пробелы вместо вкладок (как это звучит), нет, вы не можете отображать vim 2 пробела, где их нет 4. Однако вы можете сообщить vim следующие команды, чтобы заменить все 4-пространственные группы символом табуляции, а затем отобразить их как 2 пробела.

:set tabstop=4 ! display a tab as 4 columns
:set shiftwidth=4
:set noexpandtab
:gg=G   ! convert the whole file to tabs
:set tabstop=2 !display a tab as 2 columns
:set shiftwidth=2

Когда вы будете готовы представить свою работу,

:set tabstop=4
:set shiftwidth=4
:set expandtab
:%retab

Должен преобразовать его обратно.