Команды для естественных языков – ЧАСТЬ 2

Точным определением границ абзаца управляют две переменные: paragraph-separate и paragraph-start.  Значение paragraph-start — это регулярное выражение, которое должно соответствовать любой строке,  которая либо начинает, либо разделяет  абзацы. Значение paragraph-separate  — это еще  одно регулярное выражение, которое должно соответствовать только строкам, которые разделяют абзац, но не  являются частью какого-либо абзаца (например, пустые строки). Строки, которые начинают новый абзац и содержатся в нем, должны соответствовать только paragraph-start, но не paragraphseparate.     Например, в режиме  Fundamental,  paragraph-start  равна "[ \t\n\f]",  а paragraph-separate — это "[ \t\f]*$".

Обычно желательно, чтобы границы страниц разделяли абзацы. Значения по умолча-

нию этих переменных распознают обычный разделитель страниц.

21.4  Страницы

Очень часто файлы представляются  разделенными на страницы с помощью знаков прогона (или перевода) страницы (ASCII Control-L, восьмиричный код 014). Когда вы печатаете файл, этот знак принудительно разбивает страницу; таким образом, каждая страница файла будет начинаться  на новом листе бумаги. Большинство команд Emacs рассматривают знак-разделитель страниц точно так же, как любые другие знаки: вы можете вставить их при помощи C-q C-l  или удалить с помощью hDELi.  Таким образом, вы свободны в выборе, делить на страницы ваш файл или нет. Однако, из-за того, что деление на страницы часто является смысловым  делением файла, то предусмотрены команды для перемещения по страницам и для действий над ними.

C-x [     Сместить точку к предыдущей странице (backward-page).

C-x ]     Сместить точку к следующей странице (forward-page).

C-x C-p      Поставить точку и метку по краям этой (или другой) страницы (mark-page).

C-x l    Сосчитать строки в этой странице (count-lines-page).

Команда C-x [ (backward-page) двигает точку  к позиции непосредственно  после предыдущего разделителя страницы. Если точка уже находится сразу после разделителя, то команда пропускает эту страницу и останавливается на предшествующей ей. Числовой аргумент служит в качестве счетчика повторов. Команда C-x ] (forward-page) передвигает точку вперед, пропуская следующий разделитель страниц.

Команда C-x C-p (mark-page) ставит точку в начале текущей страницы, а метку в ее конце.  Разделитель страниц в конце включается в область (метка следует за ним). Разделитель страниц в начале не включается  (точка следует за ним). C-x C-p C-w дает удобный способ уничтожить  страницу или переместить  ее в другое место. Если вы сдвинитесь к разделителю еще одной страницы с помощью C-x [ и C-x ], а затем восстановите уничтоженную страницу, все страницы будут снова правильно разграничины. C-x C-p включает в область только разделитель следующей страницы именно для этого.

Числовой аргумент для C-x C-p используется для указания страницы, к которой необходимо отправиться, относительно текущей. Ноль означает текущую страницу. Единица означает следующую страницу, а ?1 — предыдущую.

Команда C-x l (count-lines-page) хороша для принятия решения, где разорвать страницу на две. Она печатает в эхо-области  общее число строк в текущей странице и затем делит ее на те, которые предшествуют текущей строке, и на те, что следуют за ней, как в примере:

Page has 96 (72+25)  lines2

Заметьте, что значение суммы на единицу меньше; это верно, если точка не стоит в начале строки.

Переменная page-delimiter говорит, где начинается страница. Ее значение — это регулярное выражение, соответствующее  началу строки, которая разделяет страницы. Обычное значение этой переменной равно "^\f", что соответствует знаку перевода страницы в начале строки.

21.5  Заполнение текста

Заполнение текста означает разбиение его на строки определенной длины. Emacs может делать заполнение двумя способами. В режиме Auto Fill,  вставка текста с помощью самовставляющихся знаков также автоматически заполняет его. Есть также явные команды для заполнения, которые вы можете использовать, когда редактирование текста оставляет его незаполненным. Когда вы редактируете форматированный текст, вы можете задать стиль заполнения каждого фрагмента (см. Раздел 21.11 [Форматированный  текст], с. 198).

21.5.1  Режим Auto Fill

Режим Auto Fill  — это второстепенный режим, в котором строки обрываются автоматически, когда становятся слишком длинными. Разрыв происходит только тогда, когда вы набираете hSPCили hRETi.

M-x auto-fill-mode

Включение и выключение режима Auto Fill.

hSPCi

hRETi             В режиме Auto Fill прерывает строку, если это нужно.

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

В режиме Auto Fill  строки автоматически разрываются на пробелах, когда они становятся длиннее желаемой величины. Прерывание и перерасположение строки происходит, только когда вы набираете hSPCi  или hRETi.   Если вы хотите  вставить пробел или знак новой строки с запретом прерывания строки, наберите C-q hSPCi  или C-q C-j  (напомним, что знак новой строки — это на самом деле control-J). C-o также вставляет новую строку без прерывания  строки.

Режим Auto Fill  хорошо работает с режимами для языков программирования, так как он делает в новых строках отступ с помощью hTABi.  Если строка, заканчивающаяся комментарием, получилась слишком длинной, то текст комментария разбивается на две строки.   Возможно, в конце  первой строки и в начале второй вставятся новые ограничители комментариев, таким образом, чтобы каждая строка стала отдельным комментарием; этим выбором управляет переменная comment-multi-line (см. Раздел 22.7 [Комментарии], с. 219).

Адаптивное заполнение (смотрите следующий раздел) работает с режимом Auto Fill так же,  как с явными командами заполнения. Оно автоматически берет префикс заполнения из второй или первой строки абзаца.

2  Страница содержит 96 (72+25) строк.  (Прим. переводчика)

Режим Auto Fill  не перезаполняет  целые абзацы; он может прерывать строки, но не может их объединять. Таким образом, редактирование в середине абзаца может привести к созданию абзаца, который неправильно заполнен. Простейшим способом сделать абзац снова правильно заполненным обычно служит применение явных команды заполнения.

Многие пользователи любят режим Auto Fill и хотят использовать его во всех текстовых файлах. Раздел о файлах инициализации рассказывает, как устроить, чтобы это было для вас постоянным. См. Раздел 31.7 [Файл инициализации], с. 366.

21.5.2  Явные  команды заполнения

M-q            Заполнить текущий абзац (fill-paragraph).

C-x f     Установить столбец заполнения (set-fill-column).

M-x fill-region

Заполнить каждый абзац в области (fill-region).

M-x fill-region-as-paragraph

Заполнить область,  рассматривая  ее как один абзац.

M-s            Отцентрировать строку.

Чтобы перезаполнить один абзац, используйте  команду M-q (fill-paragraph).  Она действует на абзац, в котором находится точка, или на абзац после точки, если она стоит между абзацами. Перезаполнение работает путем удаления всех разрывов строк и вставки новых в тех местах, где это требуется.

Чтобы перезаполнить много абзацев, используйте M-x fill-region, которая делит об-

ласть на абзацы и заполняет каждый из них.

Команды M-q и fill-region используют для нахождения границ абзаца тот же самый критерий, что и M-h (см. Раздел 21.3 [Абзацы], с. 183). Для большего контроля, вы можете использовать M-x fill-region-as-paragraph, которая перезаполняет  все между точкой и меткой.  Эта команда удаляет в области все пустые строки, поэтому отдельные блоки текста в результате объединяются в один блок.

Числовой аргумент для M-q приводит к  тому, что помимо заполнения,  текст  еще  и выравнивается. Это значит, что вставляются дополнительные пробелы, чтобы правый край строки попадал точно в столбец заполнения. Чтобы уничтожить  дополнительные пробелы, используйте M-q без аргумента. (Аналогично и для fill-region.) Другой способ управлять выравниванием или выбрать другие стили заполнения состоит в применении свойства текста justification; смотрите Раздел 21.11.7 [Формат Выравнивание], с. 202.

Команда M-s (center-line) центрирует текущую строку в пределах текущего столбца заполнения. С аргументом n, она центрирует несколько строк отдельно и переходит через них.

Максимальная ширина строки для заполнения содержится в переменной fill-column. Изменение значения fill-column делает ее локальной  для текущего буфера; до этого момента действует значение по умолчанию.  Изначально оно равно 70.  См.  Раздел 31.2.4 [Локальные переменные],  с. 350.  Наилегчайший способ установить fill-column  — использовать команду C-x f (set-fill-column).   Запущенная с числовым аргументом, она использует его в качестве нового столбца заполнения. Просто с C-u в качестве аргумента, она устанавливает fill-column соответственно текущей горизонтальной позиции точки.

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

Если переменная sentence-end-double-space равна nil, то команды заполнения ожидают и оставляют в конце  предложений только один пробел.  Обычно эта переменная равна t,  поэтому команды заполнения настаивают на постановке  двух пробелах в конце предложения, как объяснено выше. См. Раздел 21.2 [Предложения],  с. 182.

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

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

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

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