您想查看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