Переформатирование
Переформатирование означает корректировку длины строк (путём перемещения разрывов строк), чтобы они были близки к указанной максимальной ширине, но не превышали её. Кроме того, строки можно выравнивать по ширине, то есть вставлять пробелы так, чтобы левое и/или правое поля точно совпадали. Ширина задаётся переменной fill-column. Для удобства чтения длина строк не должна превышать примерно 70 столбцов.
Можно использовать режим автоформатирования (см. Автоматическое переформатирование), чтобы автоматически форматировать текст по мере его ввода, однако изменения существующего текста могут нарушить его форматирование. В этом случае текст нужно переформатировать явно.
Большинство команд в этом разделе возвращают значения, не имеющие практического смысла. Все функции переформатирования учитывают текущие левое и правое поля, а также текущий стиль выравнивания (см. Поля при переформатировании). Если текущий стиль выравнивания — none, функции переформатирования ничего не делают.
Некоторые функции переформатирования принимают аргумент justify. Если он не равен nil, это означает, что нужно выполнить выравнивание. Чтобы запросить определённый стиль выравнивания, можно указать left, right, full или center. Если указано t, используется текущий стиль выравнивания для этой части текста (см. ниже current-justification). Любое другое значение рассматривается как full.
При интерактивном вызове функций переформатирования с аргументом-префиксом для justify подразумевается значение full.
- Команда: fill-paragraph &optional justify region
-
Эта команда переформатирует абзац в точке или после неё. Если justify не равен
nil, каждая строка также выравнивается. Для определения границ абзаца используются стандартные команды перемещения по абзацам. См. Абзацы в Руководстве GNU Emacs.Если region не равен
nil, режим Transient Mark включён и метка активна, эта команда вызываетfill-region, чтобы переформатировать все абзацы в области, а не только текущий абзац. При интерактивном вызове этой команды region равенt.
- Команда: unfill-paragraph arg &optional beg end
Эта команда выполняет обратную операцию: объединяет строки текущего абзаца. Если задан числовой аргумент-префикс arg, операция применяется к указанному числу абзацев. Если аргумент-префикс не задан и область активна, отменяется форматирование каждого абзаца в этой области. При вызове из Lisp с аргументом arg, равным
nil, и значениями beg и end, не равнымиnil, отменяется форматирование абзацев в области, ограниченной beg и end.
- Команда: fill-region start end &optional justify nosqueeze to-eop
-
Эта команда переформатирует каждый абзац в области от start до end. Если justify не равен
nil, текст также выравнивается.Если nosqueeze не равен
nil, пробельные символы, кроме разрывов строк, остаются без изменений. Если to-eop не равенnil, форматирование продолжается до конца абзаца или до следующего жёсткого перевода строки, если включёнuse-hard-newlines(см. ниже).Переменная
paragraph-separateопределяет, как распознаются абзацы. См. Стандартные регулярные выражения, используемые при редактировании.
- Функция: pixel-fill-region start end pixel-width
-
В большинстве буферов Emacs используется моноширинный текст, поэтому все функции переформатирования (например,
fill-region) работают с учётом количества символов иchar-width. Однако Emacs может отображать и другие типы содержимого, например текст с изображениями и пропорциональными шрифтами, и для этого предназначенаpixel-fill-region. Она переформатирует область текста от start до end с точностью до пикселя, поэтому текст с пропорциональными или несколькими разными шрифтами будет выглядеть правильно отформатированным независимо от различий в размерах символов. Аргумент pixel-width задаёт максимальную ширину строки в пикселях после переформатирования; это эквивалентfill-columnв пикселях дляfill-region. Например, этот фрагмент Lisp вставит текст пропорциональным шрифтом, а затем переформатирует его так, чтобы ширина не превышала 300 пикселей:(insert (propertize "This is a sentence that's ends here." 'face 'variable-pitch)) (pixel-fill-region (point) (point-max) 300)
Если start не находится в начале строки, горизонтальное положение start, преобразованное в пиксели, будет использоваться как отступ для последующих строк.
Для вычисления требуемой ширины в пикселях можно использовать вспомогательную функцию
pixel-fill-width. Если не передать ей аргументы, она вернёт значение, немного меньшее ширины текущего окна. Первый необязательный аргумент, columns, задаёт количество столбцов при использовании стандартных моноширинных шрифтов, напримерfill-column. Второй необязательный аргумент задаёт окно. Обычно её используют так:(pixel-fill-region start end (pixel-fill-width fill-column))
- Команда: fill-individual-paragraphs start end &optional justify citation-regexp
-
Эта команда переформатирует каждый абзац в области с учётом его индивидуального префикса заполнения. Так, если строки абзаца были снабжены отступами из пробелов, после переформатирования отступы абзаца останутся такими же.
Первые два аргумента, start и end, задают начало и конец переформатируемой области. Третий и четвёртый аргументы, justify и citation-regexp, необязательны. Если justify не равен
nil, абзацы не только переформатируются, но и выравниваются. Если citation-regexp не равенnil, это означает, что функция обрабатывает почтовое сообщение и поэтому не должна переформатировать строки заголовка. Если citation-regexp — строка, она используется как регулярное выражение; если оно совпадает с началом строки, эта строка считается маркером цитаты.Обычно
fill-individual-paragraphsсчитает каждое изменение отступа началом нового абзаца. Еслиfill-individual-varying-indentне равенnil, абзацы разделяются только строками-разделителями. Этот режим подходит для абзацев с отступами, у которых первая строка имеет дополнительный отступ.
- Пользовательский параметр: fill-individual-varying-indent
Эта переменная изменяет поведение
fill-individual-paragraphs, как описано выше.
- Команда: fill-region-as-paragraph start end &optional justify nosqueeze squeeze-after
-
Эта команда рассматривает область текста как один абзац и переформатирует её. Поведение команды задаётся переменной
fill-region-as-paragraph-function; по умолчанию используетсяfill-region-as-paragraph-default, подробно описанная ниже.Если область состояла из нескольких абзацев, пустые строки между ними удаляются. Если justify не равен
nil, текст не только переформатируется, но и выравнивается.Если nosqueeze не равен
nil, пробельные символы, кроме разрывов строк, остаются без изменений. Если squeeze-after не равенnil, он задаёт позицию в области; пробельные символы, кроме разрывов строк, до этой позиции остаются без изменений.В режиме адаптивного переформатирования эта команда по умолчанию вызывает
fill-context-prefixдля выбора префикса заполнения. См. Режим адаптивного переформатирования.
- Команда: justify-current-line &optional how eop nosqueeze
-
Эта команда вставляет пробелы между словами текущей строки, чтобы строка заканчивалась точно на
fill-column. Она возвращаетnil.Если аргумент how не равен
nil, он явно задаёт стиль выравнивания. Это может бытьleft,right,full,centerилиnone. Если указаноt, используется заданный стиль выравнивания (см. нижеcurrent-justification).nilозначает выполнить полное выравнивание.Если eop не равен
nil, выполняется только выравнивание по левому краю, еслиcurrent-justificationзадаёт полное выравнивание. Это используется для последней строки абзаца: даже если весь абзац выровнен по ширине, последняя строка не должна выравниваться таким образом.Если nosqueeze не равен
nil, внутренние пробелы не изменяются.
- Пользовательский параметр: default-justification
Значение этой переменной задаёт стиль выравнивания для текста, в свойствах которого не указан собственный стиль. Возможные значения:
left,right,full,centerилиnone. Значение по умолчанию —left.
- Функция: current-justification
-
Эта функция возвращает подходящий стиль выравнивания для переформатирования текста вокруг точки.
Она возвращает значение свойства текста
justificationв точке или значение переменнойdefault-justification, если такого свойства текста нет. Однако для обозначения «не выравнивать» она возвращаетnil, а неnone.
- Пользовательский параметр: sentence-end-double-space
-
Если значение этой переменной не равно
nil, точка, за которой следует только один пробел, не считается концом предложения, и функции переформатирования избегают разрыва строки в таком месте.
- Пользовательский параметр: sentence-end-without-period
Если значение этой переменной не равно
nil, предложение может заканчиваться без точки. Это используется для таких языков, как тайский, в которых предложения заканчиваются двумя пробелами, но без точки.
- Пользовательский параметр: sentence-end-without-space
Если значение этой переменной не равно
nil, оно должно быть строкой символов, которыми может заканчиваться предложение без последующих пробелов.
- Пользовательский параметр: fill-separate-heterogeneous-words-with-space
Если значение этой переменной не равно
nil, при объединении строки, заканчивающейся одним словом, со следующей строкой, начинающейся другим словом, между словами разных типов (например, английским и CJK) при переформатировании будет добавлен пробел.
- Переменная: fill-paragraph-function
-
Эта переменная позволяет переопределить переформатирование абзацев. Если её значение не равно
nil,fill-paragraphвызывает эту функцию для выполнения переформатирования. Если функция возвращает значение, не равноеnil,fill-paragraphсчитает задачу выполненной и немедленно возвращает это значение.Обычно эта возможность используется для переформатирования комментариев в режимах программирования. Если функции нужно переформатировать абзац обычным способом, это можно сделать так:
(let ((fill-paragraph-function nil)) (fill-paragraph arg))
- Переменная: fill-forward-paragraph-function
Эта переменная позволяет переопределить способ, которым функции переформатирования, такие как
fill-regionиfill-paragraph, переходят к следующему абзацу. Её значением должна быть функция, принимающая единственный аргумент n — количество абзацев для перехода — и возвращающая разность между n и фактическим количеством пройденных абзацев. Значение этой переменной по умолчанию —forward-paragraph. См. Абзацы в Руководстве GNU Emacs.
- Переменная: fill-region-as-paragraph-function
Эта переменная позволяет переопределить способ, которым функции, такие как
fill-paragraphиfill-region, переформатируют текст. Её значением должна быть функция, принимающая аргументы, определённыеfill-region-as-paragraph, и возвращающая префикс заполнения, используемый при переформатировании. Значение этой переменной по умолчанию —fill-region-as-paragraph-default.
- Переменная: use-hard-newlines
Если значение этой переменной не равно
nil, функции переформатирования не удаляют переводы строк со свойством текстаhard. Такие жёсткие переводы строк служат разделителями абзацев. См. Жёсткие и мягкие переводы строк в Руководстве GNU Emacs.
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Filling.html