我正在寻找一种模仿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会愿意自己动手做点什么,但有人知道这是否已经完成了吗?
答案 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。