Как пометить текст между круглыми скобками в Emacs?

Любая такая функция или elisp script? Я хочу, чтобы эквивалентная функция представляла собой последовательность vi в vim.

Ответы

Ответ 1

Попробуйте последовательность клавиш C-M-u C-M-SPC (т.е. удерживая клавиши Control и Meta, последовательно нажмите u и Space), которая выполняет команды backward-up-sexp и mark-sexp.

Edit:

Я допустил ошибку: backward-up-sexp не существует в стандартном Emacs. Я написал это точно из-за проблемы, упомянутой в комментарии lkahtz, что существующая функция backward-up-list не будет работать, если точка находится между двойными кавычками.

(defun backward-up-sexp (arg)
  (interactive "p")
  (let ((ppss (syntax-ppss)))
    (cond ((elt ppss 3)
           (goto-char (elt ppss 8))
           (backward-up-sexp (1- arg)))
          ((backward-up-list arg)))))

(global-set-key [remap backward-up-list] 'backward-up-sexp)

Ответ 2

expand-region (который связан с C- =) отлично работает.

Ответ 3

Xah Lee имеет функцию emacs- lisp, которая достигает этого с помощью xah-select-text-in-quote. Он доступен на его веб-сайте:

Выберите текст между ближайшими левыми и правыми разделителями. Разделители здесь включают следующие символы:\ "< > () {} []" "< > " "「 」「 」【】 〖〗" "< > 〔〕(). Эта команда неправильно обрабатывает вложенные скобки.

Ответ 4

С Emacs связывание клавиш Mm v отлично работает.