Редактирование программ – ЧАСТЬ 11

C-c C-t       Переключает средства автоматической вставки перевода  строки и  голодного удаления одновременно (c-toggle-auto-hungry-state).

Переменная c-hungry-delete-key говорит, включено ли средство голодного удаления.

22.15.4  Другие команды режима C

C-M-h        Помещает метку  в конце  определения  функции, а точку  в  начале  (c-mark function).

M-q            Заполняет абзац, обрабатывая комментарии Си и Си++ (c-fill-paragraph).

Если какая-либо часть текущей строки является комментарием или находится внутри комментария, эта команда заполняет этот комментарий или его абзац, сохраняя отступы и ограничители комментария.

C-c C-e      Запускает препроцессор Си для текста в области и показывает результат, который включает раскрытия всех вызовов макросов  (c-macro-expand).   Текст буфера, написанный  перед областью, также передается препроцессору, так как там могут быть определения макросов,  но вывод для этой части не показывается.

Когда вы отлаживаете использующий макросы код на Си, бывает трудно точно понять, как  раскрываются макросы.  С этой командой вам не нужно это понимать, вы можете видеть раскрытия.

C-c C-\       Вставляет или выравнивает знаки ‘\’  в концах строк области  (c-backslashregion). Это полезно после написания или редактирования определения макроса Си.

Если строка уже  завершается  знаком ‘\’,  эта команда подстраивает размер пропуска перед ним.  В противном случае она вставляет новый ‘\’.   Однако, последняя строка области рассматривается  особо; в нее не вставляется  ‘\’,  а если если этот знак там стоит, то он удаляется.

M-x cpp-highlight-buffer

Подсвечивает части текста в соответствии с условными конструкциями препроцессора. Эта команда показывает еще один буфер с именем ‘*CPP Edit*’, который служит в качестве графического меню для выбора способа отображения конкретных видов условных конструкций и их содержимого. После изменения различных установок щелкните на ‘[A]pply these settings’ (или перейдите в этот буфер и нажмите a), чтобы соответственно обновить подветку в буфере с режимом C.

C-c C-s      Показывает информацию  о  синтаксисе текущей  исходной  строки  (c-showsyntactic-information).   Это та информация,  которая  управляет отступом строки.

22.15.5  Комментарии в режимах C

Режим C и родственные  режимы используют несколько переменных для управления форматом комментариев.

c-comment-only-line-offset

Дополнительный сдвиг для строки, которая содержит только начало коммен-

тария. Это может быть либо число, либо пара в форме (непривязанныйсдвиг

. привязанныйсдвиг), где непривязанныйсдвиг — это размер сдвига, придаваемый полнострочным комментариям, начинающимся не в нулевом столбце, а привязанныйсдвиг — это размер сдвига, даваемый полнострочным  комментариям, начинающимся в нулевом столбце.  Простое число в качестве значения эквивалентно (значение . 0).

c-comment-start-regexp

Эта локальная для буфера  переменная  указывает, как  распознавать начало комментария.

c-hanging-comment-ender-p

Если эта переменная  равна nil,  c-fill-paragraph  оставляет завершающую строку для блока комментария на отдельной строке.  Значение по умолчанию равно t, что помещает закрывающий ограничитель комментария ‘*/’ в конце последней строки текста комментария.

c-hanging-comment-starter-p

Если эта переменная  равна nil,  c-fill-paragraph  оставляет начинающий ограничитель блока комментария на отдельной строке.   Значение по умолчанию равно t,  что помещает открывающий ограничитель комментария ‘/*’ в начале первой строки текста комментария.

22.16  Режим Fortran

Режим Fortran предоставляет специальные команды движения для операторов и подпрограмм на Фортране и команды отступов, которые понимают фортрановские соглашения о вложенности, номера строк и операторы продолжения. Режим Fortran имеет свой собственный режим Auto Fill,  который обрывает длинные строки на правильные с точки зрения Фортрана строки продолжения.

Предусматриваются  специальные команды для комментариев, так как комментарии в Фортране не похожи на комментарии в других языках. Возможны встроенные сокращения, которые убыстряют набор, когда вы вставляете ключевые слова Фортрана.

Используйте M-x fortran-mode, чтобы переключиться в этот режим. Эта команда за-

пускает ловушку fortran-mode-hook (см. Раздел 31.2.3 [Ловушки], с. 349).

22.16.1  Команды движения

Режим Fortran обеспечивает специальные команды для движения через подпрограммы (функции и процедуры) и через операторы. Есть также команда для установки области вокруг подпрограмм, удобная для их уничтожения и перемещения.

C-M-a        Переместить  точку    на   начало   подпрограммы    (beginning-of-fortransubprogram).

C-M-e        Переместить точку на конец подпрограммы (end-of-fortran-subprogram).

C-M-h        Поставить точку в начале подпрограммы, а метку в ее конце (mark-fortransubprogram).

C-c C-n      Перейти  на  начало текущего  или  следующего  оператора   (fortran-nextstatement).

C-c C-p      Перейти на конец текущего или предыдущего оператора  (fortran-previousstatement).

22.16.2  Отступы в Фортране

Для создания отступов в программах на Фортране необходимы специальные команды и средства, чтобы быть уверенным в том, что различные синтаксические  единицы (номера строк, указатели комментариев и флаги продолжения строк) появляются в тех столбцах, которые требует стандарт Фортрана.

22.16.2.1  Команды отступа в Фортране

hTABi              Сделать отступ текущей строки (fortran-indent-line).

C-j              Сделать отступ текущей строки и начать новую строку с отступом (fortranindent-new-line).

C-M-j          Прервать текущую строку и подготовить строку продолжения.

M-^            Соединить эту строку со следующей.

C-M-q        Сделать отступ  во всех строках подпрограммы, в которой находится точка

(fortran-indent-subprogram).

Режим Fortran переопределяет hTABтак, чтобы он делал новый отступ в текущей строке для Фортрана (fortran-indent-line). Номера строк и маркеры продолжения имеют отступ до требуемых столбцов, а тело оператора получает независимый отступ, основанный на его вложенности в программе.

Ключ C-j запускает команду fortran-indent-new-line, которая заново делает отступ в текущей строке, а затем создает новую строку и деалет отступ в ней. Эта команда полезна для создания нового отступа в закрывающем операторе циклов ‘do’ и других блоков перед началом новой строки.

Ключ C-M-q запускает fortran-indent-subprogram, команду для создания отступа во всех строках фортрановской подпрограммы (функции и процедуры), cодержащей точку.

Ключ  C-M-j запускает fortran-split-line,  которая разрывает строку соответствующим Фортрану способом. В строке, которая не является  комментарием, вторая половина становится строкой продолжения и имеет соответственный отступ. В строке комментария обе половины становятся  отдельными  строками комментария.

M-^ запускает команду fortran-join-line, которая более или менее является  обращением fortran-split-line. Она объединяет текущую и предшествующую строки подходящим для Фортрана способом.

22.16.2.2  Строки продолжения

Большиство современных компиляторов Фортрана разрешают два способа написания строк продолжения. Если первый непробельный знак на строке находится в столбце 5, то

эта строка считается продолжением предыдущей.  Мы называем это фиксированным форматом; (В GNU Emacs мы всегда остчитываем столбцы от нуля.)  Переменная fortrancontinuation-string указывает, какой знак надо помещать в столбец 5.  Строка, начинающаяся со знака табуляции, за которым стоит любая цифра, кроме ‘0’, также является строкой продолжения. Этот стиль продолжения мы называем табулированным форматом.

Режим Fortran может делать строки продолжения в обоих стилях, но вы должны указать, какой вы предпочитаете.   Этим выбором управляет значение  прееменной  indenttabs-mode: nil означает фиксированный формат, а отличное от nil — табулированный. Вы можете судить о действующим в данный момент формате по наличию или отсутствию в строке режима слова ‘Tab’.

Если текст на строке начинается с принятого в Фортране маркера продолжения ‘$’ или с непробельного знака в столбце 5, режим Fortran считает эту строку строкой продолжения. Когда вы делаете в строке продолжения отступ с помощью hTABi, эта строка приводится к текущему стилю продолжения. Когда вы разбиваете фортрановский  оператор с помощью C-M-j, на новой строке создается маркер продолжения в соотвествии с этим стилем.

Установка стиля продолжения затрагивает некоторые другие аспекты редактирования в режиме Fortran.  При фиксированном формате, минимальный  номер столбаца для тела оператора равен шести.  Строки внутри фортрановских блоков, отступ в которых больше этого числа, всегда используют для пропусков только пробелы. При табулированном формате, минимальный  номер столбца для тела оператора равен восьми, и пропуск перед столбцом 8 всегда состоит из одного знака табуляции.

Когда вы включаете режим Fortran для существующего  файла, он старается вычислить подходящий стиль продолжения автоматически, исходя из содержимого этого файла.  Выбор определяет первая строка, которая начинается с табуляции или шести пробелов. Переменная fortran-analyze-depth определяет, сколько строк нужно рассмотреть (от начала файла); если ни одна их этих строк не укажет стиль, то он определяется по переменной fortran-tab-mode-default. Если она равна nil, то используется фиксированный формат, отличное от nil значение велит использовать табулированный формат.

22.16.2.3  Номера  строк

Если первым непробельным текстом на строке является число, режим Fortran предполагает, что это номер строки, и перемещает его к столбцам от 0 до 4.  (В GNU Emacs столбцы всегда отсчитываются от нуля.)

Номера строк из четырех и менее  цифр обычно имеют отступ на один пробел. Это управляется  переменной fortran-line-number-indent, значение которой является максимальным отступом, который может иметь номер строки.  Номера строк получают такой отступ, чтобы они корректно оканчивались в четвертом столбце, если при этом не требуется отступ больше максимального.  По умолчанию  значение переменной равно 1.

Простая вставка номера строки достаточна для того,  чтобы отступ  у него соответствовал этим правилам. Как только вставляется каждая цифра, отступ пересчитывается. Чтобы выключить это свойство, установите переменную fortran-electric-line-number в nil. Тогда вставка номеров строк будет похожа на вставку всего остального.

22.16.2.4  Синтаксические соглашения

Режим Fortran  предполагает, что  вы следуете  определенным  соглашениям, которые упрощают задачу понимания программ на Фортране в достаточной степени, чтобы делать в них правильный отступ:

Два вложенных цикла ‘do’ никогда не имеют общего оператора ‘continue’.

Ключевые слова Фортрана, такие как ‘if’, ‘else’, ‘then’,  ‘do’ и другие, написаны без внутренних пробелов и разрывов строк.

Компиляторы Фортрана обычно игнорируют все пробельные  знаки вне строковых констант, но режим Fortran не распознает эти ключевые слова, если они разорваны. Конструкции вроде ‘else  if’ или ‘end do’ допустимы, но второе слово должно быть на той же строке, что и первое, а не на строке продолжения.

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

22.16.2.5  Переменные для управления отступами

Несколько дополнительных переменных управляют тем, как  работает отступ в Фор-

тране:

fortran-do-indent

Дополнительный отступ в пределах каждого уровня оператора ‘do’ (по умолча-

нию 3).

fortran-if-indent

Дополнительный отступ в пределах каждого уровня оператора ‘if’ (по умолчанию 3).  Это же значение используется для дополнительного отступа каждого уровня оператора Фортрана90 ‘where’.

fortran-structure-indent

Дополнительный отступ  в пределах каждого уровня операторов  ‘structure’,

‘union’  или ‘map’ (по умолчанию 3).

fortran-continuation-indent

Дополнительный отступ для тел строк продолжения (по умолчанию 5).

fortran-check-all-num-for-matching-do

Если это nil, команды отступа считают, что каждый оператор ‘do’ кончается на операторе ‘continue’.   Поэтому при вычислении отступа для оператора, отличного от ‘continue’, они могут сократить время, не выполняя в этом месте проверку окончания оператора ‘do’. Если это не nil, то команды отступа для любого пронумерованного  оператора должны проверять, не заканчивается  ли там ‘do’. По умолчанию  значение равно ‘nil’.

fortran-blink-matching-if

Если это t, создание отступа для оператора ‘endif’ на мгновение перемещает курсор к  парному оператору ‘if’,  чтобы вы видели, где  он находится.  По умолчанию nil.

fortran-minimum-statement-indent-fixed

Минимальный отступ для операторов Фортрана при использовании фиксированного формата для строк продолжения. Тела операторов никогда не получают отступ менее этого. По умолчанию это 6.

fortran-minimum-statement-indent-tab

Минимальный отступ для операторов Фортрана при использовании табулированного формата строк продолжения. Тела операторов никогда не получают отступ менее этого. По умолчанию это 8.

22.16.3  Комментарии в Фортране

Обычные команды Emacs для комментариев предполагают, что  комментарии могут следовать за строкой кода.  В Фортране  стандартный синтаксис комментариев требует отведения строки целиком только под комментарий.  Поэтому режим Fortran  заменяет стандартные команды комментариев в Emacs и определяет некоторые  новые переменные.

Режим Fortran  также  может обрабатывать нестандартный синтаксис комментариев, когда комментарии начинаются с ‘!’ и могут следовать за другим текстом. Так как только некоторые компиляторы Фортрана признают такой синтаксис, режим Fortran не вставляет такие комментарии, если вы не потребовали этого заранее. Чтобы сделать это, установите переменной comment-start значение ‘"!"’ (см. Раздел 31.2 [Переменные], с. 343).

M-;             Выровнять комментарий или вставить новый комментарий (fortran-commentindent).

C-x ;     Применяется только к нестандартным комментариям ‘!’.

C-c ;     Превратить все строки области в комментарии или (с аргументом) превратить их обратно в реальный код (fortran-comment-region).

M-;  в режиме Fortran  переопределяется  на fortran-comment-indent.  Как  и обычная команда M-;,  она распознает любой вид существующих комментариев  и соответственно выравнивает его текст; если существующего комментария нет, то комментарий вставляется и выравнивается. Но вставка и выравнивание комментариев в режиме Fortran не такие, как в других режимах.

Когда  должен быть вставлен новый комментарий, то,  если текущая строка пустая, вставляется полная строка комментария. В непустой строке вставляется нестандартный комментарий с ‘!’,  если вы сказали, что хотите их использовать. В противном случае в новую строку перед текущей вставляется полная строка комментария.

Нестандартные комментарии с ‘!’ выравниваются, как комментарии в других языках, но полнострочные комментарии выравниваются иначе.  В  стандартном полнострочном комментарие сам ограничитель комментария должен всегда появляться в нулевом столбце.    Что  может выравниваться, так  это текст  в пределах комментария.   Вы  можете выбирать из трех возможных видов выравнивания, устанавливая  переменную fortrancomment-indent-style в одно из этих значений:

fixed       Текст выравнивается по фиксированному столбцу, который  является суммой fortran-commenrt-line-column и минимального отступа оператора. Это значение принимается по умолчанию.

Минимальный отступ операторов — это fortran-minimum-statement-indentfixed для стиля продолжения с фиксированным форматом и fortran-minimumstatement-indent-tab для стиля с табулированным форматом.

relative  Текст выравнивается так, как если бы он был строкой кода, но с дополнитель-

ными fortran-comment-line-column столбцами отступа.

nil        Текст в полнострочных комментариях не перемещается автоматически.

Кроме  того,  вы можете  определить знак, который используется для отступа в пределах полнострочных комментариев, устанавливая  переменной fortran-comment-indentchar значение, равное строке из одного знака, который вы хотите использовать.

В  режиме  Fortran  вводятся две переменные,  comment-line-start  и  comment-linestart-skip, которые играют для полнострочных комментариев ту же роль, что и commentstart и comment-start-skip для обычных, следующих за текстом комментариев.  Обычно они устанавливаются правильно режимом Fortran, так что их не нужно менять.

Обычная команда Emacs для создания комментария C-x ; переопределена.   Если вы используете комментарии с ‘!’, эта команда может быть использована с ними. Иначе она бесполезна в режиме Fortran.

Команда C-c ; (fortran-comment-region) превращает  все строки области в комментарии, вставляя ‘C$$$’ в начале каждой из строк. С числовым аргументом, она превращает область обратно в реальный код, удаляя ‘C$$$’ из начала каждой строки в этой области. Строка, используемая для этих комментариев, может управляться установкой переменной

fortran-comment-region.  Заметим, что здесь мы имеем пример команды и переменной с одним и тем же именем. Эти два варианта использования имени никогда не конфликтуют, так как в Лиспе и в Emacs всегда понятно по контексту, какое из них имеется в виду.

22.16.4  Режим Fortran  Auto Fill

Режим Fortran  Auto  Fill  — это второстепенный  режим, который автоматически разбивает фортрановские операторы, когда они становятся слишом широкими по мере того, как  вы их вставляете.   Разбиение оператора влечет создание строки продолжения с использованием fortran-continuation-string (см.  Раздел 22.16.2.2 [Строки продолжения в Фортране],  с. 240). Разбиение происходит, когда вы набираете hSPCi,  hRETi  или hTABi,  а также в командах для отступов в Фортране.

M-x fortran-auto-fill-mode включает режим Fortran Auto Fill, если он был выключен, или выключает, если он был включен.  Эта команда работает так же,  как работает M-x auto-fill-mode  для обычного режима Auto  Fill  (см.  Раздел 21.5 [Заполнение],  с. 185). Положительный аргумент включает режим Fortran Auto Fill, а отрицательный выключает. Вы можете  узнать, действует ли режим Fortran  Auto  Fill,  по наличию слова ‘Fill’  в строке режима в круглых скобках. Режим Fortran Auto Fill — это второстепенный режим, включаемый и выключаемый в каждом буфере отдельно.  См. Раздел 31.1 [Второстепенные режимы], с. 341.

Режим Fortran Auto Fill разрывает строки на пробелах или разделителях, когда строки становятся  длиннее желаемой ширины (значения fill-column).  Разделителями, на которых режим Fortran  Auto  Fill  может разорвать строку, являются ‘,’,  ‘’’,  ‘+’, ‘-’, ‘/’,  ‘*’,

‘=’ и ‘)’. Разрыв происходит после разделителя,  если переменная fortran-break-beforedelimiters равна nil. Иначе (и по умолчанию) разрыв делается перед разделителем.

По умолчанию режим Fortran Auto Fill  не задействован. Если вы хотите,  чтобы это средство было включено постоянно, добавьте к fortran-mode-hook функцию-ловушку, которая выполнит (fortran-auto-fill-mode 1). См. Раздел 31.2.3 [Ловушки], с. 349.

22.16.5  Проверка столбцов  в Фортране

C-c C-r       Кратковременно показать “линейку столбцов” над текущей строкой (fortrancolumn-ruler).

C-c C-w     Временно разделить текущее  окно по горизонтали  таким образом,  чтобы оно стало шириной в 72 столбца. Это может помочь вам избежать выхода за лимит в 72 столбца, который накладывают некоторые  компиляторы Фортрана (fortran-window-create-momentarily).

Команда C-c C-r  (fortran-column-ruler) кратковременно показывает над текущей строкой линейку столбцов.  Линейка столбцов — это две строки текста, которые показывают вам позиции столбцов, имеющих специальные значения в Фортран-программах. Квадратные скобки показывают границы столбцов для номеров строк, а фигурные скобки показывают границы столбцов для тела оператора. Над ними показаны номера столбцов.

Заметьте, что номера столбцов считаются от нуля, как всегда в GNU Emacs. В связи с этим номера могут на единицу меньше, чем те, к которым вы привыкли; но указываемые ими позиции в строке стандартны для Фортрана.

Текст,  используемый для показа линейки столбцов, зависит от значения переменной indent-tabs-mode.  Если indent-tabs-mode равна nil,  то в качестве линейки столбцов используется значение переменной fortran-column-ruler-fixed.  Иначе показывается переменная fortran-column-ruler-tab. Изменяя эти переменные, вы можете изменить вид линейки столбцов.

Для еще большей  помощи используйте команду C-c C-w (fortran-window-create), которая разделяет теущее окно по горизонтали, делая его ширину равной 72 столбцам. При редактировании в этом окне вы можете непосредственно видеть, когда вы сделали строку слишком длинной, чтобы она была правильной с точки зрения Фортрана.

22.16.6  Сокращения ключевых слов Фортрана

Режим Fortran обеспечивает множество встроенных сокращений для часто встречающихся ключевых слов и объявлений. Это те  же  виды сокращений, которые вы можете определить сами. Чтобы использовать их, вы должны включить режим Abbrev. См. Глава 24 [Сокращения], с. 257.

Встроенные сокращения необычны в одном: все они начинаются с точки  с запятой. Обычно вы не  можете  использовать точку  с запятой в сокращениях, но режим Fortran делает это возможным, изменяя синтаксис точки с запятой на “составную часть слова”.

Например, одно встроенное фортрановское сокращение — это ‘;с’ для ‘continue’. Если вы вставите ‘;с’ и затем поставите знаки пунктуации, например пробел или перевод строки, то ‘;с’ автоматически изменится на ‘continue’, при условии, что включен режим Abbrev.

Наберите ‘;?’  или ‘;C-h’,  чтобы просмотреть  все встроенные сокращения для Фортрана и то, чему они соответствуют.

22.16.7  Другие команды режима Fortran

C-x n d      Сужает до текущей подпрограммы Фортрана.

Режим Fortran переопределяет ключ C-x n d для запуска команды fortran-narrow-tosubprogram, которая служит фортрановским аналогом обычного определения этого ключа. Она сужает буфер до подпрограммы, содержащей точку.

22.17  Режим Asm

Режим Asm — это основной режим для редактирования  файлов на ассемблерном коде.

Он определяет следующие команды:

hTABi              tab-to-tab-stop.

C-j              Вставляет перевод строки и делает отступ, используя tab-to-tab-stop.

:         Вставляет двоеточие и затем удаляет отступ перед меткой, предшествующей двоеточию. Затем делает tab-to-tab-stop.

;         Вставляет или выравнивает комментарий.

Переменная asm-comment-char определяет, какой знак начинает комментарий в синтак-

сисе ассемблера.

Источник: Ричард Столмен, Руководство по GNU Emacs

Похожие посты:

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий