Эта глава описывает команды Emacs, которые создают, убирают или настраивают отступы.
newline-and-indent
).
delete-indentation
). Это отменяет действие
C-j.
split-line
).
back-to-indetation
).
indent-region
).
indent-rigidly
).
tab-to-tab-stop
).
Большинство языков программирования имеют некоторое соглашение по отступам. Для Лисп-кода отступ строк выполняется согласно их вложенности в круглые скобки. Та же самая общая идея используется для кода на Си, хотя многие детали отличаются.
В любом языке для создания отступа в строке используется команда 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-^ убирает его, если он находится после удаляемого перевода строки. See section Префикс заполнения.
Имеются также команды для изменения отступов нескольких строк сразу.
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. See section Команды для естественных языков.
See section Отступы в форматированном тексте, другой способ задать отступы для части вашего текста.
Для набора таблиц вы можете использовать определение 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
, не имеют ничего общего с показанными символами
табуляции в буфере. See section Переменные управления изображением, для более подробной
информации на этот счет.
Обычно Emacs использует для отступа строк как табуляцию, так и
пробелы. Если вы захотите, то все отступы будут делаться только при
помощи пробелов. Чтобы потребовать это, установите переменную
indent-tab-mode
равной nil
. Это переменная буфера;
изменение ее влияет только на текущий буфер, но имеется и значение по
умолчанию, которое вы тоже можете изменить. See section Локальные переменные.
Существуют также команды для превращения табуляции в пробелы и наоборот, всегда сохраняющие столбцы всего непустого текста. M-x tabify находит в области последовательности пробелов и преобразует в табуляцию любую последовательность, состоящую по меньшей мере из трех пробелов, если это можно сделать без изменения отступа. M-x untabify заменяет все табуляции в области на соответствующее число пробелов.
Go to the first, previous, next, last section, table of contents.