Emacs css-mode自动关闭括号并在冒号后自动插入分号(ala Textmate)

时间:2010-12-10 16:10:38

标签: css emacs textmate

我正在寻找一种模仿Textmate在Emacs中的CSS编辑行为的方法。

在Textmate中,添加CSS属性时:

#element {}  <-- Braces auto close.
#element {background: ;}  <-- after typing the colon, the semi-colon is automatically inserted and the cursor is placed between them.

我看了几个css-modes(和textmate.el),但看不到有人实现了这个。

我绝对不了解emacs-lisp会愿意自己动手​​做点什么,但有人知道这是否已经完成了吗?

2 个答案:

答案 0 :(得分:3)

您想要查看electric函数的一些示例(在键入特定可见字符时执行其他输入或格式化时使用的命名约定)。

实施没有什么特别之处。有问题的键在模式的键盘映射到一个完成工作的函数。除了你必须处理所输入字符的插入这一事实之外,它就像任何其他键绑定一样。

cc-mode有几个例子。基本方法如下:

(define-key c-mode-base-map "{" 'c-electric-brace)

(defun c-electric-brace (arg)
  (interactive "*P")
  ;; [...]
  (self-insert-command (prefix-numeric-value arg))
  ;; [...]
  )

不可否认,c-electric-brace是一个比你想象的要复杂得多的功能,但是在插入{{1}后插入相同数量的} s的函数是微不足道的。 }第

{

您可能会发现这有点过于简单,但在某些情况下您不希望插入匹配的括号。您可能还希望在删除其中一个时自动处理删除匹配的大括号,方法是定义电子删除功能。

你的电动结肠要求也不如支具那么简单,因为它应该只在正确的环境中出现(虽然在实践中你可能会放弃一个天真的实施,因为我认为你不会在CSS文件不在正确的上下文中。)

如果您决定编写自己的解决方案,希望这可以指明您正确的方向。

显然你想阅读有关elisp的一些教程,但是为了理解上面的代码,请注意你可以使用 Ch f (defun my-electric-brace (arg) "Automatically add a closing '}' for every '{' inserted." (interactive "*P") (let ((count (prefix-numeric-value arg))) (self-insert-command count) (save-excursion (insert-char ?} count)))) (defun my-css-mode-hook () (local-set-key (kbd "{") 'my-electric-brace)) (add-hook 'css-mode-hook 'my-css-mode-hook) )来阅读任何elisp的文档函数(或 Mx describe-function来查看代码。)

答案 1 :(得分:1)

对于各种大括号等的通用自动驾驶,您可能需要查看autopair-mode