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

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

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


person zxcv    schedule 18.09.2008    source источник


Ответы (7)


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

:set autoindent
:set cindent

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

person davr    schedule 18.09.2008
comment
Я также рекомендовал бы поместить их в ~ .vim / ftplugin / c.vim, чтобы вы не использовали cindent все время, а только для файлов C / C ++. - person graywh; 05.01.2009
comment
@graywh: А как насчет pl, php, cpp, as, java и всех других файлов, в которых я хочу иметь такой же отступ? Нужно ли мне создавать для каждого отдельный файл настроек? - person davr; 22.09.2010
comment
Я полагаюсь на встроенные в Vim сценарии отступа (: filetype indent on), что намного лучше, чем просто всегда использовать cindent. - person graywh; 24.09.2010
comment
почему отступы типов файлов лучше, чем использование cindent, хорошо объясняется здесь: vim.wikia.com/wiki/ < / а> - person Jayen; 30.03.2012
comment
Для автоотступа вы можете использовать сокращение: set ai - person Iam Zesh; 23.01.2014

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

:set cindent

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

:set shiftwidth=2

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

:set expandtab

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

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

person Commodore Jaeger    schedule 18.09.2008
comment
Очень хороший блог. Я все еще новичок в vim, но приятно знать, что есть хорошие ресурсы. - person zxcv; 19.09.2008
comment
Вы также пропустили изменение softtabstop в дополнение к shiftwidth. - person graywh; 05.01.2009

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

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

:source $VIMRUNTIME/vimrc_example.vim

когда в vim.

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

:e $VIMRUNTIME/vimrc_example.vim
:w! ~/.vimrc

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

person rampion    schedule 19.09.2008

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

user@host:~ $ echo set autoindent >> .vimrc
person JamesM-SiteGen    schedule 17.04.2010
comment
Я не был тем, кто проголосовал против, но это, вероятно, произошло потому, что просто установка autoindent не имеет собственного автоматического отступа при вводе {и}, и при этом она не устанавливает автоматически интервал в 2 пробела. Это то, о чем они просили. - person Victor Zamanian; 14.01.2013

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

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

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

person user809472    schedule 22.06.2011

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

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

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

Пытаться:

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

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

установить smartindent

person Craig B.    schedule 18.09.2008
comment
Согласно справке, cindent лучше smartindent, но работает только для C-подобного кода. - person thomasrutter; 04.05.2009
comment
smartindent устарел (тоже был только для C-подобного кода). Скрипты с отступом типа файла намного лучше. - person graywh; 24.09.2010
comment
@graywh, помимо вики, в каком авторитетном источнике указан статус smartindent как устаревший? - person memeplex; 22.07.2015