Обтекание выделенного текста окружающими символами в Emacs

В Textmate я могу обернуть окружающие символы ('(', '[', '"' и т. д.) вокруг текста, выбрав его и нажав открывающий символ. Например, если я выберу word и нажму (, он станет (word). Как Emacs называет эту функцию и как ее включить?


person hekevintran    schedule 01.06.2010    source источник


Ответы (9)


Для скобок вы можете использовать M-(. Для скобок/скобок/кавычек вы можете сделать:

(global-set-key (kbd "M-[") 'insert-pair)
(global-set-key (kbd "M-{") 'insert-pair)
(global-set-key (kbd "M-\"") 'insert-pair)

Обратите внимание, что если у вас нет выделенной области, она просто вставит пару элементов и поместит курсор между ними. Также удобно для удаления совпадающих элементов

(global-set-key (kbd "M-)") 'delete-pair)

ИЗМЕНИТЬ:

Хороший момент в комментариях о переопределении backward-paragraph. Вы можете привязать его к C-{, что может мешать чему-то в основном режиме. insert-pair берет последний ключ и ищет, какую пару вставить, поэтому, если вы не хотите привязывать его к something-{, вместо этого вы можете привязать его к этой функции:

(defun my-insert-braces ()
  (interactive)
  (if (region-active-p)
      (insert-pair 1 ?{ ?})
    (insert "{}")
    (backward-char)))
person scottfrazer    schedule 01.06.2010
comment
Единственная проблема в том, что M-{ больше нельзя использовать для обратного абзаца =) - person hekevintran; 01.06.2010
comment
Интересная ошибка/странное поведение: если я включаю (global-set-key (kbd "M-[") 'insert-pair), то emacs вставляет мусор escape-символа всякий раз, когда я выполняю действие мыши (но это только в случае 'M-[') - person rien333; 09.09.2017

Я использую http://www.emacswiki.org/emacs/ParEdit. М-( делает именно это.

person Anton    schedule 01.06.2010

Autopair — лучший из этих инструментов.

person hekevintran    schedule 05.06.2010

Начиная с Emacs 24.1 (выпущен в 2012-06 гг.).
Поместите это в свой emacs init: (electric-pair-mode 1).
Теперь, если вы выберете слово и нажмете (, оно станет (слово). То же самое для ", [, { и т. д.

person slk500    schedule 30.04.2019

Вы можете посмотреть wrap-region.

person Bozhidar Batsov    schedule 01.06.2010

Я бы также посмотрел на скелетный режим http://ggorjan.blogspot.com/2007/05/skeleton-pair-mode-in-emacs.html

Это очень гибко, особенно для скобок.

person pygabriel    schedule 01.06.2010

Есть textmate-режим.

Из Emacswiki:

См. textmate-mode для попытки иметь поведение TextMate для скобок и кавычек (автоматическое закрытие, перезапись, интеллектуальное удаление).

http://code.google.com/p/emacs-textmate/

person malana    schedule 01.06.2010

Теперь также есть Corral. Его поведение «делай то, что я имею в виду» делает этот процесс намного быстрее, чем ручной выбор текста и нажатие клавиши.

(отказ от ответственности: я автор)

person nivekuil    schedule 23.05.2015

Если вы используете smartparens, просто выберите текст, а затем введите пару. Вики Smartparens: упаковка

person Ignacio    schedule 12.08.2016