您想查看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-电梅开二度比你可能期待一个更为复杂的功能,但它是微不足道的具有简单地插入相同数量的}
个功能在插入{
之后。
(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)
但是,您可能会发现这有点过分简单,并且有些情况下您不希望插入匹配大括号。通过定义电子删除功能,您可能还希望在删除其中一个时自动处理删除的大括号。
您的电子冒号要求也不如支架那么简单,因为它只能出现在正确的环境中(尽管在实践中您可能会失去一个天真的实现,因为我不认为您会在冒号中输入冒号这是不正确的上下文中的CSS文件。)
希望这点你在正确的方向,如果你决定写自己的解决方案。
很明显,你会想读一些教程上elisp的,但对于理解上面的代码,只要注意,您可以使用章˚F(describe-function
)来读取文档的任何elisp的功能(或的Mxfind-function
到查看代码)。
自动完成属性名称后插入冒号和分号也很舒服! – smonff 2016-12-06 14:30:25