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

Если переменная colon-double-space не равна nil, команды заполнения ставят после двоеточия два пробела.

21.5.3  Префикс  заполнения

Чтобы заполнить абзац, в котором каждая строка начинается с особого маркера (который может несколькими пробелами, что дает абзац с отступом), используйте  так называемый префикс заполнения.  Префикс заполнения — это цепочка знаков, с которой, по предположению Emacs, начинается каждая строка, и которая не включается в заполнение. Вы можете задать префикс заполнения явно; кроме того, Emacs может вычислять его автоматически (см. Раздел 21.5.4 [Адаптивное  заполнение], с. 188).

C-x .     Установить префикс заполнения (set-fill-prefix).

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

M-x fill-individual-paragraphs

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

M-x fill-nonuniform-paragraphs

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

Чтобы задать префикс заполнения, передвиньтесь к строке,  которая начинается с желаемого префикса, поставьте  точку  в конец префикса и дайте команду C-x . (set-fillprefix).  После  C-x стоит  точка.   Чтобы выключить  префикс заполнения, определите пустой префикс: наберите C-x ., когда точка находится в начале строки.

Когда префикс заполнения в действии, команды заполнения уничтожают его в каждой строке  перед заполнением  и вставляют его в каждую  строку после заполнения. Режим Auto Fill  также автоматически вставляет в каждую вновь созданную строку префикс заполнения. Команда C-o вставляет в созданные ей строки префикс заполнения, когда вы используете  ее в начале строки (см. Раздел 4.7 [Пустые строки], с. 39). С другой стороны, команда M-^ уничтожает префикс (если он есть) после удаляемого  перевода строки (см. Глава 20 [Отступы], с. 177).

Например, если fill-column равна 40 и вы установили префикс заполнения равным ‘;;

’, то M-q в таком тексте:

;; Это пример

;; абзаца внутри

;; комментария в стиле Лиспа.

дает следующее:

;; Это пример абзаца внутри комментария

;; в стиле Лиспа.

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

Вы можете использовать M-x fill-individual-paragraphs, чтобы установить префикс заполнения для каждого абзаца автоматически.  Эта команда делит область на абзацы, считая любое изменение величины отступа началом нового абзаца, и заполняет каждый из этих абзацев. Таким образом, все строки одного “абзаца” имеют одинаковый отступ. Именно этот отступ служит префиксом заполнения для каждого абзаца.

M-x fill-nonuniform-paragraphs — это похожая команда, которя делит область на абзацы другим способом. Она рассматривает только строки-разделители   абзацев (как определено  paragraph-separate)  в качестве начинающих новый абзац.  Поскольку это означает, что  строки одного абзаца могут  иметь разный отступ,  в качестве префикса заполнения используется отступ наименьшего  среди всех строк этого абзаца размера. Это дает хорошие результаты для стилей, в которых первая строка абзаца имеет больший или меньший отступ, чем остальная часть абзаца.

Префикс заполнения  хранится в переменной  fill-prefix.   Ее значение — это либо строка, либо nil, когда префикса заполнения нет. В каждом буфере для этой переменной есть свое значение; ее изменение  воздействует   только на текущий буфер,  но имеется и значение по умолчанию, которое вы также можете изменить. См. Раздел 31.2.4 [Локальные переменные], с. 350.

Свойство текста indentation предоставляет другой способ управления  величиной  от-

ступа абзаца. См. Раздел 21.11.6 [Формат Отступ], с. 201.

21.5.4  Адаптивное заполнение

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

Если в абзаце есть две или более строки, префикс заполнения  берется из второй, но только если он также появляется и в первой.

Если в абзаце есть только одна строка, команды заполнения могут  взять префикс из этой строки. Здесь сложно принять решение, потому что в таком случае разумными могут оказаться три варианта:

Использовать префикс первой строки для всех строк этого абзаца.

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

Не предпринимать никаких особенных действий для второй и последующих строк.

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

Если префикс, обнаруженный на первой строке, соответствует регулярному выражению adaptive-fill-first-line-regexp,  или он оказался последовательностью,  начинающей комментарий (это зависит от основнего режима), то для заполнения абзаца используется этот найденный префикс, при условии, что он не будет действовать как начало абзаца в следующих строках.

Иначе, найденный префикс преобразуется в эквивалентное число пробелов, и в качестве префикса заполнения для оставшихся строк используются эти пробелы, при условии, что они не будут действовать как начало абзаца в следующих строках.

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

Переменная adaptive-fill-regexp определяет, какие виды начала строки могут служить префиксом заполнения:  используются  любые знаки в начале строки, соответствующие этому регулярному выражению. Если вы установите переменную adaptive-fill-mode равной nil, префикс заполнения никогда не выбирается  автоматически.

Вы можете  задать более сложные методы автоматического выбора префикса заполнения, установив переменную adaptive-fill-function  в значение функции.  Эта функция вызывается, когда точка находится с левого края строки, и она должна вернуть подходящий префикс заполнения. Если она возвращет nil, это означает, что она не увидела в этой строке префикс заполнения.

21.6  Команды  преобразования регистра

В Emacs есть команды для перевода одиночных слов или любого произвольного текста в верхний или в нижний регистр.

M-l             Перевести следующее слово в нижний регистр (downcase-word).

M-u            Перевести следующее слово в верхний регистр (upcase-word).

M-c            Сделать первую букву следующего слова заглавной, а остальные — строчными

(capitalize-word).

C-x C-l       Перевести область в нижний регистр (downcase-region).

C-x C-u      Перевести область в верхний регистр (upcase-region).

Команды преобразования слов наиболее полезны.  M-l (downcase-word)  переводит слово после точки в нижний регистр, передвигая точку за него. Таким образом, повторение M-l переводит последующие слова. M-u (upcase-word) переводит  все слово в прописные буквы, в то время как M-c (capitalize-word) ставит первую букву слова в верхнем регистре, а остальные — в нижнем регистре. Все эти команды переводят несколько слов за один раз, если им придать аргумент.  Они особенно удобны для перевода большого объема текста, набранного полностью в верхнем регистре, в смешанный регистр, потому что вы можете двигаться по тексту, используя M-l, M-u или M-c, когда это необходимо, и используя иногда M-f, чтобы пропустить слово.

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

Если команда перевода регистра в словах дается в середине слова, то она применяется только к части слова, которая следует за точкой. Это очень похоже на то, что делает M-d (kill-word). С отрицательным аргументом, перевод регистра применяется только к части слова перед точкой.

Другие   команды  перевода регистра  —  это  C-x C-u  (upcase-region)  и  C-x C-l (downcase-region),  которые переводят все между  точкой и меткой в заданный регистр. Точка и метка не сдвигаются.

Команды перевода регистра в области, upcase-region и downcase-region, обычно заблокированы. Это означает, что они запрашивают  подтверждение, если вы пытаетесь их использовать. При подтверждении вы можете включить эти команды, тогда они больше не будут запрашивать подтверждения. См. Раздел 31.4.11 [Блокирование  команды], с. 364.

21.7  Режим Text

Когда  вы редактируете  текстовые файлов на естественном языке,  вам будет удобнее воспользоваться режимом Text, а не Fundamental.  Чтобы войти в режим Text, наберите M-x text-mode.

В режиме Text абзацы разделяются только пустыми строками и разделителями страниц.   В результате  абзацы могут  иметь отступ,  и адаптивное заполнение  может определить, какой отступ должен использоваться для заполнения абзаца. См.  Раздел 21.5.4 [Адаптивное заполнение], с. 188.

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

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

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

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