Далее приведены несколько функций, связанных с выражениями со сбалансированными скобками (также называемыми sexp в контексте перемещения по ним в Emacs). Таблица синтаксиса управляет тем, как эти функции интерпретируют различные символы; см. Таблицы синтаксиса. См. Разбор выражений для примитивов более низкого уровня, предназначенных для сканирования sexp или их частей. О командах для пользователей см. Команды для редактирования со скобками в Руководстве GNU Emacs.
Эта функция перемещается вперед через arg (по умолчанию 1) сбалансированных групп скобок. (Другие синтаксические сущности, такие как слова или парные строковые кавычки, игнорируются.)
Эта функция перемещается назад через arg (по умолчанию 1) сбалансированных групп скобок. (Другие синтаксические сущности, такие как слова или парные строковые кавычки, игнорируются.)
Эта функция перемещается вперед, выходя из arg (по умолчанию 1) уровней скобок. Отрицательный аргумент означает перемещение назад, но также на меньшую глубину. Если escape-strings не равен nil (как в интерактивном режиме), также выходит из заключающих строк. Если no-syntax-crossing не равен nil (как в интерактивном режиме), предпочтительнее выйти из любой заключающей строки, вместо того чтобы перемещаться к началу списка, разбитого на несколько строк. В случае ошибки положение точки не определено.
Эта функция аналогична up-list, но с отрицательным аргументом.
Эта функция перемещается вперед на arg (по умолчанию 1) уровней скобок. Отрицательный аргумент означает перемещение назад, но на большую глубину в скобках (на −arg уровней).
Эта функция перемещается вперед через arg (по умолчанию 1) сбалансированных выражений. Сбалансированные выражения включают как выражения, ограниченные скобками, так и другие виды, например, слова и строковые константы. См. Разбор выражений. Например,
---------- Буфер: foo ---------- (concat∗ "foo " (car x) y z) ---------- Буфер: foo ----------
(forward-sexp 3)
⇒ nil
---------- Буфер: foo ----------
(concat "foo " (car x) y∗ z)
---------- Буфер: foo ----------
forward-sexp вызывает функцию, которая является значением переменной forward-sexp-function, если она не равна nil, для выполнения фактической работы, передавая ей те же аргументы, с которыми была вызвана команда. Основные режимы могут определять собственные функции для перемещения по сбалансированным выражениям, подходящие для данного режима, и устанавливать эту переменную на такую функцию.
Эта функция перемещается назад через arg (по умолчанию 1) сбалансированных выражений.
Эта функция перемещается назад к arg-му началу определения (defun). Если arg отрицателен, она фактически перемещается вперед, но все равно к началу определения, а не к его концу. arg по умолчанию равен 1.
Эта функция перемещается вперед к arg-му концу определения. Если arg отрицателен, она фактически перемещается назад, но все равно к концу определения, а не к его началу. arg по умолчанию равен 1.
Если не равно nil, эта локальная для буфера переменная содержит регулярное выражение, задающее текст, который может находиться перед открывающей скобкой, начинающей определение. Иными словами, определение начинается со строки, которая начинается с совпадения с этим регулярным выражением, за которым следует символ с синтаксисом открывающей скобки.
Если значение этой переменной не равно nil, открывающая скобка в колонке 0 считается началом определения. Если оно равно nil, открывающая скобка в колонке 0 не имеет специального значения. По умолчанию — t. Если в строковом литерале случайно встречается скобка в колонке 0, экранируйте её обратной косой чертой, чтобы избежать ложного срабатывания.
Если не равно nil, эта переменная содержит функцию для нахождения начала определения. Функция beginning-of-defun вызывает эту функцию вместо использования своего обычного метода, передавая ей её необязательный аргумент. Если аргумент не равен nil, функция должна переместиться назад на указанное количество функций, как это делает beginning-of-defun.
Если не равно nil, эта переменная содержит функцию для нахождения конца определения. Функция end-of-defun вызывает эту функцию вместо использования своего обычного метода.
Если Emacs скомпилирован с поддержкой tree-sitter, он может использовать информацию от синтаксического анализатора tree-sitter для перемещения по синтаксическим конструкциям. Поскольку то, что именно считается определением, различается между языками, основной режим должен установить treesit-defun-type-regexp, чтобы определить это. Тогда режим может бесплатно получить функциональность навигации по определениям, используя treesit-beginning-of-defun и treesit-end-of-defun.
Эта переменная определяет, какие узлы считаются определениями в Emacs. Это может быть регулярное выражение, соответствующее типу узлов определений. (О “узле” и “типе узла” см. Разбор исходного кода программы.)
Например, python-mode устанавливает эту переменную в регулярное выражение, соответствующее либо ‘function_definition’, либо ‘class_definition’.
Иногда не все узлы, соответствующие регулярному выражению, являются допустимыми определениями. Поэтому эта переменная также может быть ячейкой cons вида (regexp . pred), где pred должна быть функцией, принимающей узел в качестве аргумента и возвращающей не nil, если узел является допустимым определением, или nil в противном случае.
Эта переменная определяет, как Emacs обрабатывает вложенные определения. Если значение равно top-level, функции навигации перемещаются только по определениям верхнего уровня. Если значение равно nested, функции навигации распознают вложенные определения.
Функция, которая является значением переменной 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 (см. Выражения в Расширяемом само документируемом текстовом редакторе).