Отступ первой строки абзаца
Чтобы сделать отступ в первой строке абзаца, поместите курсор в начале абзаца и нажмите клавишу TAB. При нажатии клавиши ВВОД, чтобы начать следующий абзац, его первая строка будет с отступом.
Совет: Если вы хотите изменить отступ для уже написанных абзацев, используйте метод клавиши TAB для первого абзаца, как описано выше. Затем поместите курсор в начале следующего абзаца. Нажмите BACKSPACE, а затем клавишу ВВОД. Повторите процесс для последующих абзацев.
Отступ первой строки по умолчанию
Если вам всегда нужен отступ в первой строке, измените стиль «Обычный»:
- Поместите курсор в любое место абзаца.
- На вкладке Главная щелкните правой кнопкой мыши стиль Обычный и выберите Изменить.
- Выберите Формат, а затем выберите Абзац.

- На вкладке Отступы и интервалы в разделе Отступ выберите Первая строка.

- Нажмите ОК.
- Нажмите кнопку ОК еще раз.

Примечание: Если вы всегда хотите использовать отступ в первой строке при запуске нового документа, выберите параметр Новые документы на основе этого шаблона, прежде чем нажать ОК.
Сделать отступ в одну строку
После «:» я ввожу все элементы массива. Так вот, как сделать, чтобы номер первого элемента, к примеру, «m[i,j]=» выводился не на одной строке с «введите все элементы массива:» а через одну (два раза Enter нажать, вот на ней)
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Перевод Char[] в одну строку
ДОбрый день, подскажите пожалуйста, как можно char *a перевести в одну String? спасибо
Сравнение массивов в одну строку
Можно ли массивы int a, b на Си присвоить как a=b или сравнить a==b

Перевести одну строку c float в double
Подскажите. Есть код. Все задано через float. Но 10 VS не вытаскивает одну из строк, и из-за этого.
Вывести на печать числа от 1 до 4 в одну строку
В С я новичок, прошу помочь понять задание из семестровой. Напишите программу, выводящую на.
Оформление программ и отступы
Паскаль, как и многие другие языки программирования, допускает достаточно свободное оформление программ. Вы можете ставить пробелы и переводы строк как вам угодно (за исключением, конечно, ряда понятных требований типа пробелов в выражении if a mod b=c then ).
Тем не менее, следует придерживаться определенных правил — не для того, чтобы программа компилировалась, а для того, чтобы программу было бы легче читать человеку. Это важно и в ситуации, когда вашу программу будет читать кто-то другой, так и в ситуации, когда вашу программу будете читать вы сами. В хорошо отформатированной программе легче находить другие ошибки компиляциии, легче находить логические ошибки в коде, такую программу легче дописывать и модифицировать и так далее.
Основная цель форматирования программы — чтобы была лучше видна ее структура, то есть чтобы были лучше видны циклы, if’ы и прочие конструкции, важные для понимания последовательности выполнения действий. Должно быть легко понять, какие команды в каком порядке выполняются в программе, и в первую очередь — какие команды относятся к каким циклам и if’ам (циклы, if’ы и подобные конструкции ниже я буду называть управляющими конструкциями).
Поэтому следует придерживаться некоторых правил. Есть множество разных стандартов, правил на эту тему; во многих проектах, которые пишут целые команды программистов, есть официально требования, и каждый программист обязан их соблюдать вплоть до пробела. На наших занятиях я не буду столь строго относиться к оформлению, но тем не менее я буду требовать соблюдения ряда правил (это — некоторая «выжимка», то общее, что есть практически во всех стандартах), а также буду настоятельно рекомендовать соблюдать еще ряд правил.
Разделы ниже будут пополняться по мере того, как я что-то буду вспоминать или видеть в ваших программах.
Обязательные требования
- Используйте здравый смысл. Любое из указанных ниже правил можно нарушать, если здравый смысл подсказывает вам, что лучше сделать не так — но такие ситуации скорее исключение, чем правило.
- На каждой строке должно быть не более одной команды и/или управляющей конструкции.
- Исключение: очень тесно связанные между собой по смыслу команды типа assign и reset.
- Исключение: управляющая конструкция, внутри которой находится только одна короткая команда, например:
if a>0 then inc(i);
for i:=a to b do if x[i]<>0 then begin // больше кода тут быть не должно!
if a=0 then begin b:=2; // в этой строке отступ c:=c+2; // и в этой тоже end;
Основной принцип отступов — программу можно представить себе как последовательность вложенных блоков. Основной блок — сама программа. В нем могут быть простые команды, а также сложные блоки — if’ы, циклы и т.д. Код внутри if’а или внутри цикла — это отдельный блок, вложенный в основной блок. Код внутри цикла внутри if’а — это блок, вложенный в другой блок, вложенный в третий. Пример: следующему коду:
read(n); for i:=1 to n do begin read(a[i]); if a[i]>0 then begin writeln(a[i]); k:=k+1; end; end; if n>0 then writeln('!');соответствует следующая структура блоков:
+--------------------+ | основная программа | | +-----------+ | | | цикл for | | | | +-------+ | | | | | if | | | | | +-------+ | | | +-----------+ | | +------+ | | | if | | | +------+ | +--------------------+
for i:=1 to n do begin read(a); s:=s+a; end; // end сразу виден if s>2 then writeln(s) else begin // else сразу виден и разрывает последовательность строк: writeln('Error'); // видно, что это две ветки halt; end; // видно, что end есть и не потерянif dir='North' then . else if dir='South' then . else if dir='East' then . else if dir='West' then . else writeln('Error!');По смыслу программы это — многовариантное ветвление, здесь все случаи равноправны или почти равноправны. Тот факт, что в программе каждый следующий if вложен в предыдущий — это просто следствие того, что в паскале нет возможности сделать многовариантное ветвление. Поэтому такой код надо оформлять именно так, как указано выше, т.е. все ветки else if делать на одном отступе. (Не говоря уж о том, что если на каждый такой if увеличивать отступ, то программа очень сильно уедет вправо.) Но отличайте это от слудеющего варианта:
if a=0 then writeln(-1); else begin if b=0 then begin x:=1; else x:=b/a; writeln(x); end;
read(a); b:=0; c:=0; for i:=1 to a do begin b:=b+i*i; c:=c+i; end;
Все равно неправильно (for всегда выполняется после c:=0, поэтому отступы должны быть одинаковыми):
read(a); b:=0; c:=0; for i:=1 to a do begin b:=b+i*i; c:=c+i; end;
read(a); b:=0; c:=0; for i:=1 to a do begin b:=b+i*i; c:=c+i; end;
if a=0 then // условие короткое, лучше в одну строку . for i:=1 to 10 do // аналогично . if (((sum+min=min2+min3) or (sqrt(sumSqr)<30)) and (abs(set1-set2)+eps>thershold)) or (data[length(s)-i+1]=data[i]) or good then.
if a=0 then . for i:=1 to 10 do . if ( ( (sum+min=min2+min3) or (sqrt(sumSqr)<30) ) and (abs(set1-set2)+eps>thershold) ) or (data[length(s)-i+1]=data[i]) or good then.
type int=integer; float=extended; var i:integer; s:string;
Не столь обязательные требования, но которые я настоятельно рекомендую соблюдать
- Пишите begin на той же строке, что и управляющая конструкция, ну или хотя бы на том же отступе, что и управляющая конструкция:
Совсем плохо:
for i:=1 to n do begin read(a[i]); .
Более-менее:
for i:=1 to n do begin read(a[i]); .
for i:=1 to n do begin read(a[i]); .
Пример хорошо отформатированной программы:
function sum(a, b: longint): longint; begin sum := a + b; end; var i, a, b, s: longint; x, y: double; arr: array [1..1000] of boolean; begin read(a, b); arr[1] := true; for i := 2 to 1000 do if ((a > 0) and (arr[i-1])) then arr[i] := true; for i := 1 to 1000 do arr[i] := false; s := 0; if (a < 0) then begin a := -a; if (b < 0) then begin b := -b; s := a + b; end else begin while (s
Справочник по Vim: Отступы в программах на языке C и других текстах
Этот документ посвящён отступам в программах на языке C и в других текстах.
1. Отступы в программах на языке C
Основы форматирования отступов в программах на языке C разъясняются в разделе 30.2 Руководства Пользователя.
Vim располагает набором опций для автоматического форматирования отступов в программах, написанных на языке C. Эти опции затрагивают только форматирование отступов и не выполняют какого-либо иного форматирования. Подробнее о форматировании комментариев см. |форматирование-комментарии|.
Замечание: обсуждаемые здесь возможности работают только в том случае, если Vim собран с включёнными особенностями |+smartindent| и |+cindent|.
В общей сложности для форматирования отступов доступно четыре метода:
'autoindent' Используется отступ предыдущей строки. 'smartindent' То же, что и 'autoindent', но с возможностью разбора основных особенностей синтаксиса языка C для увеличения или уменьшения отступов там, где это требуется. 'cindent' Более разумное форматирование отступов в программах на языке C, чем вышеперечисленные методы. Позволяет настраивать форматирование для различных стилей записи кода на языке C. 'indentexpr' Наиболее гибкий метод форматирования отступов: для выяснения величины отступа строки вычисляется специально заданное выражение. Если значение этой опции не пустое, то этот метод имеет наибольший приоритет по отношению к остальным методам. См. Форматирование отступов с помощью выражений. Далее в этом разделе подробно рассматривается работа опции 'cindent'.
Замечание: форматирование отступов при помощи 'cindent' работает не во всех случаях. Vim не C-компилятор: он не в состоянии распознать весь синтаксис.
Отступы в программах на языке C управляются четырьмя опциями:
'cindent' Позволяет осуществлять автоматическое форматирование отступов в программах на языке C. 'cinkeys' Определяет символы, ввод которых вызывает изменение отступа в режиме Вставки. 'cinoptions' Позволяет установить предпочтительный для вас стиль форматирования отступов. 'cinwords' Определяет ключевые слова, которые добавляют отступ в следующей строке. Если опция 'lisp' отключена, а значение опции - 'equalprg' пустая строка, то оператор " indentkeys-format">Значением опции 'cinkeys' является строка, которая управляет форматированием отступов в редакторе Vim в ответ на ввод определённых символов или команд в определённом контексте. Это относится не только к отступам для C. Если опция 'indentexpr' не пустая, то вместо значения 'cinkeys' используется значение 'indentkeys'. Формат опций 'cinkeys' и 'indentkeys' одинаковый.
Значением по умолчанию является строка "0,0). 0#,!^F,o,O,e", что подразумевает следующие правила форматирования отступов:
"0 при вводе ' "0>" при вводе '>' в качестве первого символа в строке "0)" при вводе ')' в качестве первого символа в строке ":" при вводе ':' после метки или в выражении case "0#" при вводе '#' в качестве первого символа в строке "!^F" при вводе CTRL-F (в текст не вставляется) "o" при вводе в любом месте или при использовании команды "o" (не в режиме Вставки!) "O" при использовании команды "O" (не в режиме Вставки!) "e" при вводе второго 'e' в "else" в начале строки Символы, которые предшествуют каждому ключу:
! Если ключу предшествует '!', то Vim не будет вставлять этот ключ, но вместо этого выполнит переформатирование текущей строки. Это позволяет определить кнопку для команды переформатирования текущей строки. Кнопкой по умолчанию является CTRL-F. Будьте осторожны, чтобы случайно не определить для этой цели кнопку CTRL-I, поскольку CTRL-I имеет тот же код, что и . * Если ключу предшествует '*', то перед вставкой ключа Vim выполнит переформатирование строки. Если в значении опции 'cinkeys' встречается определение "*", то Vim выполняет переформатирование текущей строки перед тем, как открыть новую строку. 0 Если ключу предшествует 0, который появляется после '!' или '*', то Vim будет выполнять переформатирование строки только в том случае, когда ключ является первым символом, набранным в этой строке. Если 0 используется после " 0" > <> В угловых скобках указываются названия кнопок. Например: "", "" (см. |коды_клавиш|). ^ Буквы, которым предшествует символ ^, являются управляющими символами. Например: "^F" это то же, что и CTRL-F. o Выполнять форматирование отступов в строке при использовании команды "o" или при открытии новой строки под текущей (например, при вводе в режиме Вставки). O Выполнять форматирование отступов в строке при использовании команды "O". e Выполнять форматирование отступов в строке, которая начинается с "else" при вводе второго "e". : Выполнять форматирование отступов в строке при вводе ':' после метки или выражения case. Не выполнять форматирование отступов при использовании ":" в "класс::метод" в C++. Для форматирования отступов при вводе символа ":" в любом контексте, используйте "". =слово Выполнять форматирование при вводе последнего символа "слова". При этом, "слово" может на самом деле быть частью другого слова. Так, "=end" будет приводить к форматированию отступов при вводе "d" в словах "endif" и "endwhile", но не при вводе слова "bend". Кроме того, форматирование отступов выполняется, когда дополнение приводит к подстановке слова, которое начинается с указанного "слова". "0=слово" выполняет форматирование отступов в тех случаях, когда перед словом в строке есть только пробелы. =~слово Как =слово, но без учёта регистра символов. Если вам действительно необходимо выполнять форматирование отступов при вводе 'o', 'O', 'e', '0', '', '*', ':' или '!', то используйте "", "", "", "", "", "<>>", "<*>", "" или "" вместо указанных ключей соответственно.
Для форматирования отступов в стиле emacs, когда отступы форматируются не при нажатии Enter, но при нажатии Tab, я предлагаю использовать такую настройку:
:set cinkeys=0. 0#,!,!^F
В этом случае вы также можете отключить опцию 'autoindent'.
Замечание: если вы вручную измените отступы в текущей строке, то Vim будет игнорировать установки 'cindent' в этой строке. Это позволяет заставить Vim не вмешиваться в форматирование отступов тех строк, в которых отступы были изменены вручную с помощью клавиш , или , а также по команде CTRL-T или CTRL-D.
Опция 'cinoptions' задаёт метод форматирования отступов, который используется редактором Vim. В списке, который приводится ниже, "N" указывает на число, которое может быть в том числе отрицательным. Если после числа указывается 's', то Vim умножает это число на значение опции 'shiftwidth': "1s" это величина 'shiftwidth', "2s" это удвоенная величина 'shiftwidth' и т.д. Вы можете также пользоваться дробными значениями с десятичной точкой: "-0.5s" обозначает минус половину значения 'shiftwidth'. В примерах, которые приводятся ниже, предполагается, что значение опции 'shiftwidth' равно 4.
Количество пробелов, добавляемых для "обычного отступа". Используется после строки, которая должна увеличить отступ (строки, которые начинаются с "if", открывающая фигурная скобка и т.д.). По умолчанию: величина, равная значению 'shiftwidth'.
cino= cino=>2 cino=>2s
if (cond) if (cond) if (cond)
< < foo; foo; foo;
> > >Добавить N к существующему отступу внутри фигурных скобок, если открывающая скобка находится в конце строки (а точнее, не является первым символом строки). Этим можно пользоваться для того, чтобы отступ, который используется после '
cino= cino=e2 cino=e-2
if (cond) < if (cond) < if (cond) foo; foo; foo;
> > >
else else else
< < bar; bar; bar;
> > >Добавить N к существующему отступу для выражений после "if", "while" и т.д., если строка НЕ находится внутри фигурных скобок. Это полезно, когда требуется, чтобы строка, перед которой нет '
cino= cino=n2 cino=n-2
if (cond) if (cond) if (cond)
foo; foo; foo;
else else else
< < bar; bar; bar;
> > >Поместить первую открывающую фигурную скобку функции или другого блока в колонку N. Это относится только к открывающей скобке, которая не находится внутри других скобок и которая находится в начале строки. То, что следует за открывающей фигурной скобкой, размещается относительно неё. По умолчанию: 0.
cino= cino=f.5s cino=f1s
func() func() func()
< < int foo; int foo; int foo;Размещать открывающие фигурные скобки на N символов от существующего отступа.
Это относится только к открывающим скобкам, которые находятся внутри других фигурных скобок. По умолчанию: 0.cino= cino= if (cond) if (cond) if (cond)
< < foo; foo; foo;Размещать закрывающие фигурные скобки на N символов от соответствующей открывающей скобки. По умолчанию: 0.
cino= cino=-0.5s cino=>2
if (cond) if (cond) if (cond)
< < foo; foo; foo;
> > >Добавить N к существующему отступу внутри фигурных скобок, если открывающая фигурная скобка находится в колонке 0. Благодаря этой возможности можно задать специальный отступ для всего тела функции (некоторым нравится, чтобы это было отрицательное число). По умолчанию: 0.
cino= cino=^-2 cino=^-s
func() func() func()
< < if (cond) if (cond) if (cond)
< < a = b; a = b; a = b;
> > >
> > >Помещать метки case на N символов от отступа switch(). По умолчанию: значение 'shiftwidth'.
cino= cino=:0
switch (x) switch(x)
< case 1: case 1:
a = b; a = b;
default: default:
> >Помещать выражения, встречающиеся после метки case, на N символов от отступа метки. По умолчанию: значение 'shiftwidth'.
cino= cino==10
case 11: case 11: a = a + 1;
a = a + 1; b = b + 1;Если N != 0, то Vim будет выравнивать строку по метке case вместо выражения, следующего после неё в той же строке.
cino= cino=l1
switch (a) < switch (a) case 1: < case 1: break; break;
> >Если N != 0, то Vim будет выравнивать последний "break" по метке case, так чтобы case..break выглядели одним блоком. (по умолчанию: 0).
cino= cino=b1
switch (x) switch(x)
< case 1: case 1:
a = b; a = b;
break; break;
default: default:
a = 0; a = 0;
break; break;
> >Помещать декларации области видимости C++ на N символов от отступа блока, в котором они находятся. По умолчанию: значение 'shiftwidth'.
Декларация области видимости это "public:", "protected:" или "private:".
cino= cino=g0
< public: public:
a = b; a = b;
private: private:
> >Помещать выражения, встречающиеся после декларации области видимости C++ на N символов от отступа метки. По умолчанию: значение 'shiftwidth'.
cino= cino=h10
public: public: a = a + 1;
a = a + 1; b = b + 1;Объявления параметров функций в стиле K&R будут смещены на N символов от поля. По умолчанию: 'shiftwidth'.
cino= cino=p0 cino=p2s
func(a, b) func(a, b) func(a, b)
int a; int a; int a;
char b; char b; char b;Смещать объявление типа возвращаемого значения функции на N символов от поля. По умолчанию: 'shiftwidth'.
cino= cino=t0 cino=t7
int int int
func() func() func()Смещать объявления базовых классов C++ и инициализацию конструкторов, если они начинаются на новой строке (в противном случае они выравниваются по правой стороне ':'). (по умолчанию: 'shiftwidth').
cino= cino=i0
class MyClass : class MyClass :
public BaseClass public BaseClass
<> <>
MyClass::MyClass() : MyClass::MyClass() :
BaseClass(3) BaseClass(3)
<> <>Смещать продолжающуюся строку (строку, которая переходит на следующую) на N дополнительных символов. По умолчанию: 'shiftwidth'.
cino= cino=+10
a = b + 9 * a = b + 9 *
c; c;Смещать строки комментария после начала комментария, если при этом отсутствует какой либо другой текст для выравнивания, на N символов от начала комментария (по умолчанию: 3). См. также |форматирование-комментарии|.
cino= cino=c5
/* /*
текст. текст.
*/ */Если N не равен 0, то смещать строки комментария на число символов, указанных с помощью флага c (см. выше), даже если после начала комментария имеется какой-либо другой текст. По умолчанию: 0.
cino=c0 cino=c0,C1
/******** /********
текст. текст.
********/ ********/(В этом примере используется ":set comments& comments-=s1:/* comments^=s0:/*")
Дополнительно смещать строки комментария на N символов. По умолчанию: 0.
cino= cino=/4
a = b; a = b;
/* комментарий */ /* комментарий */
c = d; c = d;В незакрытых круглых скобках добавить отступ в N символов от строки с незакрытыми круглыми скобками. Для каждой незакрытой круглой скобки добавляется 'shiftwidth' символов. Если N равно 0 или незакрытые скобки являются первым непробельным символом в строке, то выравнивать к следующему непробельному символу после незакрытой скобки. По умолчанию: значение опции 'shiftwidth' * 2.
cino= cino=(0
if (c1 && (c2 || if (c1 && (c2 ||
c3)) c3))
foo; foo;
if (c1 && if (c1 &&
(c2 || c3)) (c2 || c3))
<То же, что и (N, но на один уровень глубже. По умолчанию: значение опции 'shiftwidth'.
cino= cino=u2
if (c123456789 if (c123456789
&& (c22345 && (c22345
|| c3)) || c3))При N не равном 0, не игнорировать отступы, указанные в ( или u, в тех случаях, когда незакрытые скобки являются первым непробельным символом в строке. По умолчанию: 0.
cino= or cino=(s cino=(s,U1
c = c1 && c = c1 &&
( (
c2 || c2 ||
c3 c3
) && c4; ) && c4;В незакрытых скобках, если N не равно 0 и при этом используется, соответственно, "(0" или "u0", либо если используется "U0" и незакрытая скобка является первым непробельным символом в строке, то выравнивать по символу, следующему сразу после незакрытой скобки, вместо выравнивания по первому непробельному символу. По умолчанию: 0.
cino=(0 cino=(0,w1
if ( c1 if ( c1
&& ( c2 && ( c2
|| c3)) || c3))
foo; foo;В незакрытых скобках, если N не равно 0 и при этом используется, соответственно, "(0" или "u0", если незакрытая скобка является последним непробельным символом на своей строке и она не является закрывающей скобкой, выполнять сдвиг следующей строки на N символов относительно внешнего контекста (т.е. начала строки или следующей незакрытой скобки). (По умолчанию: 0).
cino=(0 cino=(0,W4
a_long_line( a_long_line(
argument, argument,
argument); argument);
a_short_line(argument, a_short_line(argument,
argument); argument);Если N не равен нулю, то выравнивать строку, начинающуюся с закрывающей скобки с первым символом строки с соответствующей открывающей скобкой. По умолчанию: 0.
cino=(s cino=(s,m1
c = c1 && ( c = c1 && (
c2 || c2 ||
c3 c3
) && c4; ) && c4;
if ( if (
c1 && c2 c1 && c2
) )
foo; foo;Выравнивать анонимные классы в коде на языке Java правильно. Значение 'N' в данный момент не используется, но должно быть не равным 0 (например, 'j1'). 'j1' позволяет, к примеру, правильно расставить отступы в нижеследующем фрагменте кода:
object.add(new ChangeListener() public void stateChanged(ChangeEvent e) do_something();
>
>);Полное определение значений, действующих по умолчанию:
cinoptions=>s,e0,n0,f0,0,^0,:s,=s,l0,gs,hs,ps,ts,+s,c3,C0,(2s,us,
\U0,w0,m0,j0,)20,*30Vim размещает строку в колонке 1 в следующих случаях:
- Строка начинается с '#' (команда препроцессора), если в опции 'cinkeys' указан флаг '#'.
- Строка начинается с метки (слова, за которым следует ':', кроме "case" и "default".
- Сочетание правил форматирования отступа приводит к тому, что строка имеет отрицательные отступы.
2. Форматирование отступов с помощью выражений
Основы использования гибких правил форматирования отступов объясняются в разделе 30.3 Руководства Пользователя.
Если вы желаете написать свой собственный файл правил форматирования отступов, то вам потребуется установить значение опции 'indentexpr'. Также может быть полезным установить значение опции 'indentkeys'. Примеры можно посмотреть в каталоге $VIMRUNTIME/indent.
ЗАМЕЧАНИЯ ПО ОТДЕЛЬНЫМ ФАЙЛАМ С ПРАВИЛАМИ ФОРМАТИРОВАНИЯ ОТСТУПОВ
FORTRAN
Отступами выделяются блоковое if, select case и where. Комментарии, выражения с метками и продолжающиеся строки выделяются отступами в том случае, если код на Fortran'е находится в свободном формате, но не выделяются, если код на Fortran'е находится в жёстком формате, поскольку это накладывает ограничения на левое поле исходного текста. В этом случае для выражений с метками и продолжающихся строк может потребоваться ручная доработка форматирования отступов. Более подробное обсуждение используемого метода для определения формата исходного кода см. в разделе |fortran-синтаксис|.
Циклы do
По умолчанию, отступы во всех циклах do остаются без форматирования. Циклы do в Fortran'е могут быть неструктурированными, несколько циклов может заканчиваться на одном и том же выражении с меткой практически любого типа. Для правильного форматирования отступов требуется разбор исходного кода на уровне компилятора. Старый исходный код, в котором циклы do заканчиваются на выражения с меткой произвольного типа, может быть отформатирован при помощи продвинутой программы, например Tidy (https://www.unb.ca/chem/ajit/f_tidy.htm).
Структурированные циклы do/continue также остаются без внимания при форматировании отступов, поскольку выражение continue может использоваться для иных целей помимо завершения цикла do. Программы, подобные Tidy, способны преобразовывать циклы do/continue в формат do/enddo. Отступы в циклах do/enddo вполне могут быть отформатированы. Если вы пользуетесь исключительно структурированными циклами типа do/enddo, то об этом следует объявить, установив соответствующим образом переменную fortran_do_enddo в файле .vimrc.
let fortran_do_enddo=1
В данном случае отступы в циклах do будут форматироваться. Если все циклы в файлах типа .f90 принадлежат типу do/enndo, то следует пользоваться переменной буфера и устанавливать её с помощью автокоманды. Например:
au! BufRead,BufNewFile *.f90 let b:fortran_do_enddo=1
Позволяет форматировать отступы в циклах do во всех файлах .f90, но оставляет в покое файлы с исходным кодом на Fortran'е с другими расширениями, такими как .for.
VERILOG
Форматируются отступы в блоковых выражениях общего назначения, таких как if, for, case, always, initial, function, specify, begin и т.д. Отступы в модульных блоковых выражениях, т.е. блоках первого уровня, по умолчанию не форматируются. Отступы в таких блоках можно включить с помощью соответствующей переменной в файле .vimrc:
let b:verilog_indent_modules = 1
В этом случае отступы в коде модульных блоков будут форматироваться. Для того, чтобы такое поведение остановить, нужно убрать указанную переменную:
:unlet b:verilog_indent_modules
Чтобы установить переменную только для файлов Verilog, можно использовать такой набор выражений:
au BufReadPost * if exists("b:current_syntax")
au BufReadPost * if b:current_syntax == "verilog"
au BufReadPost * let b:verilog_indent_modules = 1
au BufReadPost * endif
au BufReadPost * endifКроме того, установка переменной b:verilog_indent_width позволяет изменять ширину отступа (по умолчанию: значение опции 'shiftwidth'):
let b:verilog_indent_width = 4
let b:verilog_indent_width = &sw * 2Вы также можете в целях отладки включить режим диагностики:
let b:verilog_indent_verbose = 1
Убедитесь только, что перед этим выполнена команда ":set cmdheight=2", чтобы было где показывать сообщения диагностики.
