Spec-Zone.ru › Elisp

Перемещение по сбалансированным выражениям

Ниже приведено несколько функций для работы со сбалансированными выражениями в скобках (при перемещении по ним в Emacs их также называют sexp). Таблица синтаксиса управляет тем, как эти функции интерпретируют различные символы; см. Таблицы синтаксиса. См. Разбор выражений: там описаны низкоуровневые примитивы для сканирования sexp или их частей. Пользовательские команды см. в разделе Команды редактирования с помощью скобок в Руководстве GNU Emacs.

Команда: forward-list &optional arg

Эта функция перемещается вперёд через arg (по умолчанию 1) сбалансированных групп скобок. (Другие синтаксические конструкции, например слова или парные кавычки строк, игнорируются.)

Команда: backward-list &optional arg

Эта функция перемещается назад через arg (по умолчанию 1) сбалансированных групп скобок. (Другие синтаксические конструкции, например слова или парные кавычки строк, игнорируются.)

Команда: up-list &optional arg escape-strings no-syntax-crossing

Эта функция перемещается вперёд, выходя из arg (по умолчанию 1) уровня скобок. Отрицательный аргумент означает перемещение назад, но всё равно на менее глубокий уровень. Если escape-strings не равен nil (как при интерактивном вызове), функция также выходит из охватывающих строк. Если no-syntax-crossing не равен nil (как при интерактивном вызове), предпочтительно выйти из любой охватывающей строки, а не перемещаться к началу списка, разделённого между несколькими строками. При ошибке местоположение точки не определено.

Команда: backward-up-list &optional arg escape-strings no-syntax-crossing

Эта функция аналогична up-list, но с аргументом противоположного знака.

Команда: down-list &optional arg

Эта функция перемещается вперёд, проходя внутрь arg (по умолчанию 1) уровней скобок. Отрицательный аргумент означает перемещение назад, но всё равно глубже внутрь скобок (на −arg уровней).

Команда: forward-sexp &optional arg

Эта функция перемещается вперёд через arg (по умолчанию 1) сбалансированных выражений. К сбалансированным выражениям относятся как выражения, ограниченные скобками, так и другие виды, например слова и строковые константы. См. Разбор выражений. Например:

---------- Buffer: foo ----------
(concat∗ "foo " (car x) y z)
---------- Buffer: foo ----------
(forward-sexp 3)
     ⇒ nil

---------- Buffer: foo ----------
(concat "foo " (car x) y∗ z)
---------- Buffer: foo ----------

forward-sexp вызывает функцию, являющуюся значением переменной forward-sexp-function, если оно не равно nil, чтобы выполнить фактическую работу, передавая ей те же аргументы, с которыми была вызвана команда. Основные режимы могут определять собственные функции для перемещения по сбалансированным выражениям в соответствии с режимом и присваивать этой переменной такую функцию.

Команда: backward-sexp &optional arg

Эта функция перемещается назад через arg (по умолчанию 1) сбалансированных выражений.

Команда: beginning-of-defun &optional arg

Эта функция перемещается назад к началу arg-й defun. Если arg отрицателен, функция фактически перемещается вперёд, но всё равно к началу defun, а не к её концу. Значение arg по умолчанию равно 1.

Команда: end-of-defun &optional arg

Эта функция перемещается вперёд к концу arg-й defun. Если arg отрицателен, функция фактически перемещается назад, но всё равно к концу defun, а не к её началу. Значение arg по умолчанию равно 1.

Пользовательский параметр: defun-prompt-regexp

Если значение не равно nil, эта локальная для буфера переменная содержит регулярное выражение, задающее текст, который может располагаться перед открывающей скобкой, начинающей defun. Иными словами, defun начинается на строке, которая начинается с текста, соответствующего этому регулярному выражению, за которым следует символ с синтаксисом открывающей скобки.

Пользовательский параметр: open-paren-in-column-0-is-defun-start

Если значение этой переменной не равно nil, открывающая скобка в столбце 0 считается началом defun. Если оно равно nil, открывающая скобка в столбце 0 не имеет особого значения. Значение по умолчанию — t. Если в строковом литерале в столбце 0 оказывается скобка, экранируйте её обратной косой чертой, чтобы избежать ложного срабатывания.

Переменная: beginning-of-defun-function

Если значение не равно nil, эта переменная содержит функцию для поиска начала defun. Функция beginning-of-defun вызывает эту функцию вместо использования своего обычного метода и передаёт ей свой необязательный аргумент. Если аргумент не равен nil, функция должна переместиться назад на указанное число функций, как это делает beginning-of-defun.

Переменная: end-of-defun-function

Если значение не равно nil, эта переменная содержит функцию для поиска конца defun. Функция end-of-defun вызывает эту функцию вместо использования своего обычного метода.

Если Emacs скомпилирован с поддержкой tree-sitter, он может использовать сведения синтаксического анализатора tree-sitter для перемещения по синтаксическим конструкциям. Поскольку представление о том, что именно считается defun, различается в разных языках, основной режим должен задать treesit-defun-type-regexp. После этого режим может автоматически получить возможность навигации по defun с помощью treesit-beginning-of-defun и treesit-end-of-defun.

Переменная: treesit-defun-type-regexp

Эта переменная определяет, какие узлы Emacs считает defun. Её значением может быть регулярное выражение, соответствующее типу узлов defun. (Термины «узел» и «тип узла» см. в разделе Разбор исходного кода программы.)

Например, python-mode задаёт для этой переменной регулярное выражение, соответствующее либо «function_definition», либо «class_definition».

Иногда не все узлы, соответствующие регулярному выражению, являются допустимыми defun. Поэтому значением этой переменной также может быть конс-ячейка вида (regexp . pred), где pred — функция, принимающая узел в качестве аргумента и возвращающая значение, не равное nil, если узел является допустимой defun, или nil, если он недопустим.

Переменная: treesit-defun-tactic

Эта переменная определяет, как Emacs обрабатывает вложенные defun. Если её значение равно top-level, функции навигации перемещаются только по defun верхнего уровня. Если её значение равно nested, функции навигации распознают вложенные defun.

Функция, являющаяся значением переменной forward-sentence-function, определяет, как перемещаться по синтаксическим конструкциям, называемым предложениями. Основные режимы могут присваивать этой переменной собственные функции, чтобы настроить поведение команды forward-sentence. Если Emacs скомпилирован с поддержкой tree-sitter, он может использовать сведения синтаксического анализатора tree-sitter для перемещения по синтаксическим конструкциям. Поскольку представление о том, что именно считается предложением, различается в разных языках, основной режим должен задать treesit-thing-settings. Тогда для forward-sentence-function будет задано значение treesit-forward-sentence, и режим автоматически получит возможность навигации по предложениям с помощью forward-sentence и backward-sentence (см. раздел Перемещение по предложениям в Расширяемом текстовом редакторе с документацией).

Если Emacs скомпилирован с поддержкой tree-sitter, он может использовать сведения синтаксического анализатора tree-sitter для перемещения по синтаксическим конструкциям. Поскольку представление о том, что именно считается sexp, различается в разных языках, основной режим должен задать treesit-thing-settings. Тогда для forward-sexp-function будет задано значение treesit-forward-sexp, и режим автоматически получит возможность навигации по sexp с помощью forward-sexp и backward-sexp (см. раздел Выражения в Расширяемом текстовом редакторе с документацией).

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/List-Motion.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API