Возможно ли автоматическое заполнение скобок или кавычек в emacs? - PullRequest
6 голосов
/ 21 октября 2010

Я использовал XCode и Netbeans и заметил, что у них есть функция автоматического заполнения кавычек или скобок (и я предполагаю, что другие IDE часто делают это также). Я не знаю, как называется эта функция, но есть ли способ сделать это в Emacs?

Например, когда я печатаю

printf("

Я бы хотел, чтобы он автоматически вводил

printf("")

поместив курсор между кавычками.

Спасибо.

Ответы [ 6 ]

7 голосов
/ 21 октября 2010

Базовым вариантом будет AutoPairs .Тот же эффект, но немного более изощренный, может быть достигнут с помощью YASnippet .

3 голосов
/ 21 октября 2010

Режим Paredit вставляет соответствующие закрывающие элементы по умолчанию, поэтому при вводе вы увидите что-то вроде printf(), затем printf(""), и курсор будет помещен в кавычки.

3 голосов
/ 21 октября 2010

Если вы введете M- (это вставит и (и a), и оставит точку между ними; если вы затем наберете M-), то это переместит точку через закрытие). Я использую это все время.

Существует также режим, называемый "paredit" (доступен из http://mumble.net/~campbell/emacs/paredit.el), который также выполняет такие действия для цитат и, возможно, для других вещей.

2 голосов
/ 22 октября 2010

Мои 5 центов здесь тоже.

(setq skeleton-pair t)
(defvar skeletons-alist
  '((?\( . ?\))
    (?\" . ?\")
    (?[  . ?])
    (?{  . ?})
    (?$  . ?$)))

(global-set-key (kbd "(") 'skeleton-pair-insert-maybe)
(global-set-key (kbd "[") 'skeleton-pair-insert-maybe)
(global-set-key (kbd "\"") 'skeleton-pair-insert-maybe)
(global-set-key (kbd "\'") 'skeleton-pair-insert-maybe)

Следующий совет позволит backspace удалить пары: a (|) b -> ab

(defadvice delete-backward-char (before delete-empty-pair activate)
  (if (eq (cdr (assq (char-before) skeletons-alist)) (char-after))
      (and (char-after) (delete-char 1))))

Следующий совет сделает backward-kill-word(для меня это M-backspace ), чтобы удалить соответствующий параметр, даже если он отделен другим текстом;очень удобно.

(defadvice backward-kill-word (around delete-pair activate)
  (if (eq (char-syntax (char-before)) ?\()
      (progn
 (backward-char 1)
 (save-excursion
   (forward-sexp 1)
   (delete-char -1))
 (forward-char 1)
 (append-next-kill)
 (kill-backward-chars 1))
    ad-do-it))

Я сейчас пытаюсь перейти к паредиту.

2 голосов
/ 21 октября 2010

Я использую код из http://cmarcelo.wordpress.com/2008/04/26/a-little-emacs-experiment/ для создания "электрических пар". Как я описал в моем блоге , в других режимах возникают проблемы с тройными кавычками в Python. (Особенность Python)

0 голосов
/ 22 октября 2010

Автономная пара вспомогательный режим делает именно то, что вы просите.

...