Автоматичний відступ пробілів з C у vim?


85

Я був трохи зіпсований за допомогою Eclipse та Java. Я почав використовувати vim для кодування C в середовищі Linux, чи є спосіб, щоб vim автоматично робив належний інтервал для блоків?

Отже, після введення {{наступний рядок матиме 2 пробіли з відступом, а повернення до цього рядка збереже його на тому ж відступі, а a} змістить назад 2 пробіли?

Відповіді:


134

Ці дві команди повинні це зробити:

:set autoindent
:set cindent

Для отримання бонусних балів помістіть їх у файл .vimrc, який знаходиться у вашому домашньому каталозі на Linux


12
Я б також рекомендував помістити їх у ~ .vim / ftplugin / c.vim, щоб ви не постійно використовували cindent, а лише для файлів C / C ++.
greywh

@graywh: А як щодо pl, php, cpp, as, java та всіх інших файлів, я хочу мати такий самий відступ? Чи потрібно створювати окремий файл налаштувань для кожного з них?
davr

17
Я покладаюсь на вкладені сценарії відступу Vim (: відступ filetype), що набагато краще, ніж просто використання "cindent" завжди.
greywh

3
чому відступ файлів кращий, ніж використання cindent, тут добре пояснено: vim.wikia.com/wiki/…
Jayen

1
Для автовідступу ви можете скористатися скороченням: set ai
Iam Zesh

56

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

:set cindent

Щоб відступити два пробіли (замість однієї вкладки з восьми пробілів, за замовчуванням vim):

:set shiftwidth=2

Щоб vim не перетворював вісім пробілів на вкладки:

:set expandtab

Якщо ви коли-небудь захочете змінити відступ блоку тексту, використовуйте <і>. Зазвичай я використовую це разом із режимом вибору блоку (v, виберіть блок тексту, <або>).

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


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

3
Ви також пропустили зміну softtabstop на додаток до ширини зсуву.
greywh

8

Багато функцій vim (як autoindentі cindent) вимкнені за замовчуванням. Щоб справді побачити, що vim може зробити для вас, вам потрібен гідний ~/.vimrc.

Хороший стартер є $VIMRUNTIME/vimrc_example.vim. Якщо ви хочете спробувати, використовуйте

:source $VIMRUNTIME/vimrc_example.vim

коли в вим.

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

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

Це перезапише ваш поточний ~/.vimrc, але якщо все, що у вас є, є налаштування відступу, запропоновані Давром, я б не потішав це, оскільки приклад vimrc подбає про це також для вас. Повний посібник із прикладу та те, що він робить для вас, дивіться :help vimrc-intro.


6

Просто запустіть:

user@host:~ $ echo set autoindent >> .vimrc

1
Я не був тим, хто голосував проти, але це, мабуть, тому, що просто "встановити автовідступ" не має власного автоматичного відступу при введенні "{" та "}", а також не автоматично встановлює інтервал до 2 пробілів. Це те, про що вони просили.
Віктор Замянян

3

Я думаю, що найкраща відповідь насправді пояснюється у vim wikia:

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

Зверніть увагу, що в ньому не рекомендується використовувати "встановити автовідступ". Найкраща особливість з усіх, які я знаходжу в цьому поясненні, - це можливість встановлення параметрів для кожного файлу, що особливо корисно, якщо ви програмуєте, наприклад, на python та C ++, оскільки вам потрібно 4 місця для вкладок у першому та 2 для простори в останньому.


0

і завжди пам’ятайте це шанобливе пояснення Spaces + Tabs:

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


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). Сценарії відступу Filetype набагато кращі.
greywh

@graywh крім wiki, яке авторитетне джерело заявляє про застарілий статус smartindent?
memeplex
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.