Может ли 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
.
Если вы хотите отключить сокрытие, вы можете сделать одну из двух вещей:
- Удалить правило сокрытия
:syntax clear spaces
или - Разрешить скрытый текст расширяться под курсором
: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
Должен преобразовать его обратно.