Пробелы с автоматическим отступом с C в vim?

85

Я был несколько испорчен использованием Eclipse и java. Я начал использовать vim для кодирования C в среде Linux, есть ли способ, чтобы vim автоматически делал правильный интервал для блоков?

Итак, после ввода {следующая строка будет иметь 2 пробела с отступом, и возврат в этой строке сохранит ее с тем же отступом, а a} сдвинет назад на 2 пробела?

zxcv
источник

Ответы:

135

Эти две команды должны это сделать:

Для получения бонусных баллов поместите их в файл с именем .vimrc, расположенный в вашем домашнем каталоге в Linux.

Давр
источник
12
Я бы также рекомендовал поместить их в ~ .vim / ftplugin / c.vim, чтобы вы не использовали cindent все время, а только для файлов C / C ++.
graywh 04
@graywh: А как насчет pl, php, cpp, as, java и всех других файлов, в которых я хочу иметь такой же отступ? Нужно ли мне создавать для каждого отдельный файл настроек?
davr
17
Я полагаюсь на встроенные сценарии отступа Vim (: отступ типа файла), что намного лучше, чем просто всегда использовать cindent.
graywh
3
почему Filetype отступы лучше , чем при использовании cindent хорошо объяснено здесь: vim.wikia.com/wiki/...
Jayen
1
Для autoindent вы можете использовать сокращение: set ai
Iam Zesh
56

Я написал все о вкладках в vim , что дает несколько интересных вещей, о которых вы не спрашивали. Для автоматического отступа фигурных скобок используйте:

Чтобы сделать отступ в два пробела (вместо одной табуляции из восьми пробелов, vim по умолчанию):

Чтобы vim не преобразовывал восемь пробелов в табуляции:

Если вы когда-нибудь захотите изменить отступ блока текста, используйте <и>. Я обычно использую это в сочетании с режимом выбора блока (v, выберите блок текста, <или>).

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

Коммодор Джагер
источник
Очень хороший блог. Я все еще новичок в vim, но приятно знать, что есть хорошие ресурсы.
zxcv
3
Вы также пропустили изменение softtabstop в дополнение к shiftwidth.
graywh 04
8

Многие функции vim (например, autoindentи cindent) по умолчанию отключены. Чтобы действительно увидеть, что vim может для вас сделать, вам понадобится достойный ~/.vimrc.

Хороший стартовый $VIMRUNTIME/vimrc_example.vim. Если вы хотите попробовать, используйте

когда в vim.

На самом деле я бы предложил просто скопировать содержимое в ваш, ~/.vimrcпоскольку оно хорошо прокомментировано, и это хорошее место, чтобы начать изучать, как использовать vim. Вы можете сделать это

Это перезапишет ваш текущий ~/.vimrc, но если все, что у вас есть, это настройки отступа, предложенные Davr, я бы не стал беспокоиться, так как пример vimrc позаботится об этом и за вас. Чтобы получить полное представление о примере и о том, что он делает для вас, см :help vimrc-intro.

рамп
источник
6

Просто запустите:

ДжеймсМ-SiteGen
источник
1
Я не был тем, кто проголосовал против, но это, вероятно, произошло потому, что просто "set autoindent" не выполняет сам по себе автоматического отступа при вводе "{" и "}", и при этом он не устанавливает автоматически интервал в 2 пробела. Это то, о чем они просили.
Виктор Заманян
3

Я думаю, что лучший ответ на самом деле объяснен на vim wikia:

http://vim.wikia.com/wiki/Indenting_source_code

Обратите внимание, что он не рекомендует использовать «установить автоотступ». Лучшая функция из всего, что я нахожу в этом объяснении, - это возможность устанавливать настройки для каждого файла, что особенно полезно, если вы программируете, например, на Python и C ++, поскольку вам нужно 4 пробела для вкладок в первом и 2 для пробелы в последнем.

user809472
источник
0

и всегда помните это почтенное объяснение Spaces + Tabs:

http://www.jwz.org/doc/tabs-vs-spaces.html

mike511
источник
2
Что с аргументом этого парня? Я не понимаю, как отказ от символа TAB и его заполнение жестко закодированными пробелами решает проблемы каждого. Это сделало бы невозможным, например, возможность открывать файл и отображать ширину его отступов в соответствии с вашими предпочтениями.
thomasrutter
1
Решение этого парня намного лучше :) blogs.msdn.com/cyrusn/archive/2004/09/14/229474.aspx
thomasrutter
-1

Пытаться:

установить sw = 2

установить ts = 2

установить smartindent

Крейг Б.
источник
Согласно справке, cindent лучше, чем smartindent, но работает только для C-подобного кода.
thomasrutter
smartindent устарел (тоже был только для C-подобного кода). Скрипты с отступом типа файла намного лучше.
graywh
@graywh, помимо вики, в каком авторитетном источнике указан статус smartindent как устаревший?
memeplex