Отступы

Эта глава описывает команды Emacs, которые создают, убирают или настраивают отступы.

TAB
Сделать отступ текущей строки, "соответствующий" режиму.
C-j
Выполнить RET, за которым следует TAB (newline-and-indent).
M-^
Слить две строки (delete-indentation). Это отменяет действие C-j.
C-M-o
Разбить строку в точке; текст на строке после точки становится новой строкой с отступом до того столбца, с которого он начинается сейчас (split-line).
M-m
Передвинуться (вперёд или назад) к первому непустому знаку на текущей строке (back-to-indetation).
C-M-\
Сделать отступ нескольких строк до одного и того же столбца (indent-region).
C-x TAB
Жёстко сдвинуть блок строк влево или вправо (indent-rigidly).
M-i
Сделать отступ от точки к следующему предопределённому столбцу позиции табуляции (tab-to-tab-stop).
M-x indent-relative
Сделать отступ от точки к месту под точкой отступа в предыдущей строке.

Большинство языков программирования имеют некоторое соглашение по отступам. Для Лисп-кода отступ строк выполняется согласно их вложенности в круглые скобки. Та же самая общая идея используется для кода на Си, хотя многие детали отличаются.

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

В режиме Text, TAB запускает команду tab-to-tab-stop, которая делает отступ к следующему столбцу позиции табуляции. Вы можете установить позиции табуляции с помощью M-x edit-tab-stops.

Способы и команды отступа

Чтобы передвинуться через отступ на строке, сделайте M-m (back-to-indentation). Эта команда, данная где угодно на строке, помещает точку на первый непустой знак в этой строке.

Чтобы вставить строку с отступом перед текущей строкой, сделайте C-a C-o TAB. Чтобы сделать строку с отступом после текущей строки, используйте C-e C-j.

Если вы просто хотите вставить в буфер символ табуляции, то вы можете набрать C-q TAB.

C-M-o (split-line) сдвигает текст от точки до конца строки вертикально вниз, так что текущая строка становится двумя строками. C-M-o сначала передвигает точку вперёд через любое количество пробелов и табуляций. Затем она вставляет после точки ограничитель строки и достаточное количество отступов, чтобы достичь того же столбца, на котором находится точка. Точка остается перед вставляемым переводом строки; с этой точки зрения C-M-o напоминает C-o.

Чтобы начисто соединить две строки, используйте команду M-^ (delete-indentation). Она удаляет отступ в начале текущей строки, а так же ограничитель строки, заменяя их одиночным пробелом. В особом случае (полезном для кода на Лиспе) одиночный пробел опускается, если соединяемыми знаками являются последовательные открывающие или закрывающие круглые скобки, или если после слияния идёт ещё одна новая строка. Чтобы удалить просто отступ строки, перейдите в начало строки и используйте M-\ (delete-horizontal-space), которая удаляет все пробелы и табуляции около курсора.

Если есть префикс заполнения, M-^ убирает его, если он находится после удаляемого перевода строки. Смотрите раздел Префикс заполнения.

Имеются также команды для изменения отступов нескольких строк сразу. C-M-\ (indent-region) применяется для всех строк, которые начинаются в данной области; она делает для каждой из этих строк "обычный" отступ, как если бы вы напечатали TAB в начале строки. Числовой аргумент определяет столбец для отступа, и каждая строка сдвигается влево или вправо так, что её первый непустой знак появляется в этом столбце. C-x TAB (indent-rigidly) cдвигает все строки в области вправо в соответствии со своим аргументом (влево при отрицательном аргументе). Вся группа строк жёстко сдвигается в одну сторону, именно поэтому эта команда получила такое имя.

M-x indent-relative выполняет отступ точки, основываясь на предыдущей строке (фактически, по последней непустой строке). Она вставляет пробел в точке, двигая точку до тех пор, пока она не встанет под точкой отступа в предыдущей строке. Точка отступа является концом последовательности пробелов или концом строки. Если точка находится дальше вправо, чем любая точка отступа в предыдущей строке, то все пробельные знаки перед точкой удаляются, и используется первая применимая теперь точка отступа. Если даже после этого нет пригодной точки отступа, indent-relative запускает tab-to-tab-stop (смотрите следующий раздел).

indent-relative -- это определение TAB в режиме Indented Text. Смотрите раздел Команды для естественных языков.

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

Позиции табуляции

Для набора таблиц вы можете использовать определение TAB в режиме Text, tab-to-tab-stop. Эта команда вставляет перед точкой отступ, достаточный для того, чтобы достичь следующего столбца позиции табуляции. Если вы находитесь не в режиме Text, эту функцию можно найти по ключу M-i.

Вы можете произвольно установить используемые в M-i позиции табуляции. Они запоминаются в переменной с именем tab-stop-list как список номеров столбцов в возрастающем порядке.

Удобный способ установить позиции табуляции -- воспользоваться командой M-x edit-tab-stops, которая создаёт и выбирает буфер, содержащий описание установленных позиций табуляции. Вы можете отредактировать этот буфер для определения других позиций табуляции и затем набрать C-c C-c, чтобы сделать эти новые позиции табуляции действующими. edit-tab-stops запоминает, какой буфер был текущим, когда вы запускали её, и записывает позиции табуляции обратно в этот буфер; обычно все буферы разделяют одни и те же позиции табуляции, и изменение их в одном буфере влияет на все, но если вам случится сделать tab-stop-list локальной в одном буфере, то edit-tab-stops будет редактировать локальные установки.

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

 : : : : : :
0 1 2 3 4
0123456789012345678901234567890123456789012345678
To install changes, type C-c C-c

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

Заметим, что позиции табуляции, которые управляют tab-to-tab-stop, не имеют ничего общего с показанными символами табуляции в буфере. Смотрите раздел Переменные управления изображением, для более подробной информации на этот счет.

Табуляция по сравнению с пробелами

Обычно Emacs использует для отступа строк как табуляцию, так и пробелы. Если вы захотите, то все отступы будут делаться только при помощи пробелов. Чтобы потребовать это, установите переменную indent-tab-mode равной nil. Это переменная буфера; изменение её влияет только на текущий буфер, но имеется и значение по умолчанию, которое вы тоже можете изменить. Смотрите раздел Локальные переменные.

Существуют также команды для превращения табуляции в пробелы и наоборот, всегда сохраняющие столбцы всего непустого текста. M-x tabify находит в области последовательности пробелов и преобразует в табуляцию любую последовательность, состоящую по меньшей мере из трех пробелов, если это можно сделать без изменения отступа. M-x untabify заменяет все табуляции в области на соответствующее число пробелов.

Назад |  Вперед |  Содержание



Распространение материалов сайта означает, что распространитель принял условия лицензионного соглашения.
Идея и реализация: © Владимир Довыденков и Анатолий Камынин,  2004-2024