Автоматически закрывать фигурные скобки в Emacs?

StackOverflow https://stackoverflow.com/questions/1023770

  •  06-07-2019
  •  | 
  •  

Вопрос

Я видел плагин для Vim под названием Автозакрытие (обнаружено из этот post), который автоматически добавляет закрывающую скобку при вводе '(', '{' и т. д.

Например;когда я набираю следующее ( | это курсор):

int main(|

Я хотел бы закрытия ) будет вставлено автоматически для меня:

int main(|)

Кто-нибудь знает о подобной функции для emacs - на этот раз Google меня подвел!

Это было полезно?

Решение

Есть также 'pareditшпаргалка показывает вам все доступные команды.оказалось, что он нравится больше, чем электрический режим, предложенный в другом ответе.Хотя paredit применим только к (), поэтому он может не соответствовать вашим потребностям.

Но, честно говоря, круглые скобки окружены множеством пакетов.В вики есть все перечислено здесь.Режимы, отвечающие на ваш вопрос:

Другие советы

да, этот режим называется электрическим . Вы можете комбинировать электрическое поведение с этим простым макросом для максимального удобства:

(defun electric-pair ()
  "If at end of line, insert character pair without surrounding spaces.
   Otherwise, just insert the typed character."
  (interactive)
  (if (eolp) (let (parens-require-spaces) (insert-pair)) 
    (self-insert-command 1)))

Затем включите его, привязав соответствующие символы в ваших любимых режимах программирования. Например, для PythonMode:

(add-hook 'python-mode-hook
          (lambda ()
            (define-key python-mode-map "\"" 'electric-pair)
            (define-key python-mode-map "\'" 'electric-pair)
            (define-key python-mode-map "(" 'electric-pair)
            (define-key python-mode-map "[" 'electric-pair)
            (define-key python-mode-map "{" 'electric-pair)))

Режим CPerl предоставляет это как встроенный:

;; from my .emacs
(add-hook 'cperl-mode-hook
  (lambda ()
    (setq cperl-hairy nil
      abbrev-mode t     ;; automatic keyword expansion
      cperl-highlight-variables-indiscriminately t
      cperl-auto-newline t
      cperl-auto-newline-after-colon t
      cperl-regexp-scan nil
      cperl-electric-keywords t 
      cperl-electric-linefeed t  
      cperl-electric-parens nil) ;; <------ electric parens!

В других режимах может быть что-то похожее.

у Марсело есть написал об этом замечательный пост используя скелетный режим.Он также показывает, как удалить сбалансированную скобку, если вы удалили открывающую скобку, и как действовать в случае, если вы случайно напечатали закрывающую скобку.(Кстати, оба поведения копируют TextMate).

Обновлять:

Поскольку я опубликовал этот ответ, я обнаружил Автопара это практически идеальная система для этого варианта использования.Я много им пользовался и мне это нравилось.

Я собираюсь добавить эту тему и предоставлю другую альтернативу. Недавно появился новый проект, который занимается автоматической вставкой пар, переносом областей, перемещением по сбалансированным выражениям и многим другим. Список функций слишком длинный, чтобы дать здесь, поэтому я просто сделаю ссылку на smartparens github repo , где вы можете прочитать подробный файл readme. .

Это расширенная версия вышеупомянутой AutoPair, которая обеспечивает большинство основных функций paredit (и распространяется на все виды различных пар, а не только на те, которые распознаются синтаксическими таблицами emacs).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top