I've used XCode and Netbeans, and I've noticed that they have a feature to automatically complete quotation marks 开发者_运维知识库or parentheses (and I assume that other IDEs often do this also). I don't know what the name of this feature is, but is there any way to do this in Emacs?
For example, when I type
printf("
I would like it to automatically input
printf("")
placing the cursor in between the quotation marks.
Thank you.
The basic variant would be AutoPairs. The same effect but a little more sophisticated can also be achieved with YASnippet.
If you type M-(, that will insert both a ( and a ), and leave point in between; if you then type M-), that will move point across the closing ). I use this all the time.
There is also a mode called "paredit" (available from http://mumble.net/~campbell/emacs/paredit.el) which does this sort of thing for quotes as well, and probably other stuff.
Paredit-mode inserts matching closing elements by default, so the while typing you'll see something like printf()
then printf("")
and the cursor would be positioned inside quotes.
I'm using code from http://cmarcelo.wordpress.com/2008/04/26/a-little-emacs-experiment/ to do "electric pairs". As I descibe in my blog other modes have problems with Python's triple quoted strings. (A Python peculiarity)
My 5 cents here as well.
(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)
Next advice will enable the backspace to deletes the pairs: 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))))
Next advice will make backward-kill-word
(for me is M-backspace) to delete matching par even if it separated by other text; very handy.
(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))
I am trying to move now to paredit, though.
The autopair minor mode does exactly what you ask for.
精彩评论