我正在使用这个精湛的 js2 模式 fork ,连同自动配对功能,使 Emacs 中的 Javascript 编辑变得很棒。但是我突然想到,由于 js2-mode 是一个完整的解析器,所以只要我在函数调用上下文中,就应该可以自动插入分号。
我想在我深入挖掘之前先问问是否有人调查过这个问题。
最佳答案
这是我解决这个问题的代码:
le-js2-mode-setup-partial.el
(defvar js2-semicolon-contexts (list js2-NAME js2-LP js2-SCRIPT js2-CALL js2-BLOCK))
(defun autopair-js2-maybe-insert-semi-colon (action pair pos-before)
"handler for automatically inserting semi-colon at the end of function call.
"
;; (message "node before is %s" (js2-node-type (js2-node-at-point (- (point) 1))))
;; (message "action is %s" action)
;; (message "pair is %c" pair)
;; (message "context is %s" (buffer-substring-no-properties (point-at-bol) (point-at-eol)))
;; (message "point is %s" (point))
(cond ((and (eq action 'opening)
(eq pair ?\))
(save-excursion
(goto-char pos-before)
(skip-chars-backward " \t")
;; (message "node is %s." (js2-node-type (js2-node-at-point (point))))
(memq (js2-node-type (js2-node-at-point (point))) js2-semicolon-contexts)
))
(save-excursion
(let ((forward-sexp-function nil))
(goto-char pos-before)
(forward-sexp))
(if (looking-at-p "[^[:graph:]]*$")
(insert ";"))))))
;;;###autoload
(defun le::js2-mode-setup ()
(setq autopair-handle-action-fns
(list #'autopair-default-handle-action
#'autopair-js2-maybe-insert-semi-colon))
(rebox-mode 1)
(le::prog-modes-setup))
;;;###autoload(add-hook 'js2-mode-hook 'le::js2-mode-setup)
您也可以从 this GitHub Gist 获取此代码.
关于javascript - Emacs:是否可以在 js2 模式下自动插入分号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9241523/