Перемещение по сбалансированным выражениям
Ниже приведено несколько функций для работы со сбалансированными выражениями в скобках (при перемещении по ним в 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