代码之家  ›  专栏  ›  技术社区  ›  beardc

是否可以在emacs中自动完成括号或引号?

  •  6
  • beardc  · 技术社区  · 15 年前

    例如,当我键入

    printf("
    

    printf("")
    

    将光标放在引号之间。

    谢谢您。

    6 回复  |  直到 15 年前
        1
  •  7
  •   Jacob Oscarson    15 年前

    基本的变化是 AutoPairs . 同样的效果,但也可以通过 YASnippet

        2
  •  3
  •   offby1    15 年前

    如果键入M-(,则将同时插入a(和a),并将point保留在两者之间;如果键入M-,则将point移动到结束处)。我经常用这个。

    还有一种模式叫做“paredit”(可从 http://mumble.net/~campbell/emacs/paredit.el )它也会为引语做这类事情,可能还有其他的事情。

        3
  •  3
  •   eGlyph    15 年前

    printf() 然后 printf("") 光标将位于引号内。

        4
  •  2
  •   Matt Harrison    15 年前

    http://cmarcelo.wordpress.com/2008/04/26/a-little-emacs-experiment/ 做“电偶”。正如我所描述的 my blog 其他模式对Python的三引号字符串有问题。(蟒蛇的特点)

        5
  •  2
  •   VitoshKa    15 年前

    (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)
    

    下一个建议将启用 退格 删除对: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 (对我来说 )删除匹配的par,即使它被其他文本隔开;非常方便。

    (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))
    

    不过,我现在正试图改变主意。

        6
  •  0
  •   Bozhidar Batsov    15 年前

    autopair 小模式正是你所要求的。

    推荐文章