尝试用 web-mode,engine用的django,已经设置为auto pair,但是每次输入 {{
或者 {%
并没有触发 auto-pair,不知道大家有没有碰到过这个问题。怀疑可能是 evil 造成的,但是也没有证据。
另外,注意到每次输入花括号都会在minibuffer回显以下内容:
尝试用 web-mode,engine用的django,已经设置为auto pair,但是每次输入 {{
或者 {%
并没有触发 auto-pair,不知道大家有没有碰到过这个问题。怀疑可能是 evil 造成的,但是也没有证据。
另外,注意到每次输入花括号都会在minibuffer回显以下内容:
可以尝试下awesome-pair
两个花括号这种是模板语法,应该是 web-mode 内置不支持的,看是不是少启用了某些 minor-mode,这些 minor-mode 估计提供了支持
从 Search failed
看,应该是某个(例如 paredit
之类的?)扩展导致补全过程中断。
最好把 backtrace 打出来。
Search failed
信息出自 smartparens:
嗯嗯,抽空尝试一下
web-mode支持的,不然不会有那个变量。而且我在原贴中提到我已经将engine切到django,django模板的语法高亮都没问题的。
是的,确实是 smartparens,把它停用后web mode auto-pairing的问题依旧,看来并不是用smartparens的功能实现的。
我试了只加载 evil
、web-mode
和 electric-pair-mode
没问题。
{{
可以补全(其实是 {
单独补全了两次)。
{%
只能得到 {%}
(想要补全 %
得自己实现)。
⋊> emacsq.sh \
-P web-mode,evil \
-M electric-pair-mode \
-batch \
--eval '(progn
(switch-to-buffer "*.html")
(web-mode)
(evil-mode 1)
(evil-insert-state)
(execute-kbd-macro (kbd "{{"))
(goto-char (point-max))
(insert "\n")
(execute-kbd-macro (kbd "{%"))
(message "%s" (buffer-string)))'
Package cl is deprecated
{{}}
{%}
wow,这个脚本用来快速尝试elisp代码不错,不懂的地方是第一句:switch-to-buffer
不会报错吗?这个buffer在哪里创建的?
switch-to-buffer
会按需自动创建 buffer。
我尝试把你贴出来的命令修改了一下,加了elpa dir,但是不工作,找不到 web-mode
./emacsq.sh \
-P web-mode,evil \
-M electric-pair-mode \
-ed ~/.emacs.d/epla/27.2/develop \
-batch \
--eval '(progn
(switch-to-buffer "*.html")
(web-mode)
(evil-mode 1)
(evil-insert-state)
(execute-kbd-macro (kbd "{{"))
(goto-char (point-max))
(insert "\n")
(execute-kbd-macro (kbd "{%"))
(message "%s" (buffer-string)))'
加一行 -ud ~/.emacs.d/epla/27.2 \
试试,脚本可能有点 bug。
─λ ./emacsq.sh \
-P web-mode,evil \
-M electric-pair-mode \
-ud ~/.emacs.d/epla/27.2 \
-ed ~/.emacs.d/epla/27.2/develop \
-batch \
--eval '(progn
(switch-to-buffer "*.html")
(web-mode)
(evil-mode 1)
(evil-insert-state)
(execute-kbd-macro (kbd "{{"))
(goto-char (point-max))
(insert "\n")
(execute-kbd-macro (kbd "{%"))
(message "%s" (buffer-string)))'
Cannot open load file: 没有那个文件或目录, web-mode
不行
这就有点奇怪了,确定 develop
底下的目录结构对吗?
我这里目录结构是这样的,例如要测试放在备份目录下的 ivy:
⋊> ls ~/.emacs.d/27.1/
elpa elpa.bak
⋊> ls ~/.emacs.d/27.1/elpa.bak/
archives gnupg ivy-20210202.1423 ...
⋊> emacsq.sh \
-ed ~/.emacs.d/27.1/elpa.bak \
-P ivy --batch --eval "(princ (functionp 'ivy-mode))"
t
应该是没错
╰─λ ls ~/.emacs.d/elpa/27.2/develop/ | grep web-mode
web-mode-20210131.1758
把 load-path
打印出来看看:
(package-initialize)
+ (print load-path)
(unless (string-empty-p \"${opt_load_pkgs}\")
我也遇到同样的问题,用web-mode写django模板不能自动补全{%
,最后直接用猫哥的awesome-pair,再另外加个%的补全
(add-to-list 'load-path "~/emacs-plugin/awesome-pair") ; add awesome-pair to your load-path
(require 'awesome-pair)
(dolist (hook (list
'c-mode-common-hook
'c-mode-hook
'c++-mode-hook
'java-mode-hook
'haskell-mode-hook
'emacs-lisp-mode-hook
'lisp-interaction-mode-hook
'lisp-mode-hook
'maxima-mode-hook
'ielm-mode-hook
'sh-mode-hook
'makefile-gmake-mode-hook
'php-mode-hook
'python-mode-hook
'js-mode-hook
'go-mode-hook
'qml-mode-hook
'jade-mode-hook
'css-mode-hook
'ruby-mode-hook
'coffee-mode-hook
'rust-mode-hook
'qmake-mode-hook
'lua-mode-hook
'swift-mode-hook
'minibuffer-inactive-mode-hook
'web-mode-hook
))
(add-hook hook '(lambda () (awesome-pair-mode 1))))
(define-key awesome-pair-mode-map (kbd "(") 'awesome-pair-open-round)
(define-key awesome-pair-mode-map (kbd "[") 'awesome-pair-open-bracket)
(define-key awesome-pair-mode-map (kbd "{") 'awesome-pair-open-curly)
(define-key awesome-pair-mode-map (kbd ")") 'awesome-pair-close-round)
(define-key awesome-pair-mode-map (kbd "]") 'awesome-pair-close-bracket)
(define-key awesome-pair-mode-map (kbd "}") 'awesome-pair-close-curly)
(define-key awesome-pair-mode-map (kbd "=") 'awesome-pair-equal)
;; (define-key awesome-pair-mode-map (kbd "%") 'awesome-pair-match-paren)
(define-key awesome-pair-mode-map (kbd "\"") 'awesome-pair-double-quote)
;; (define-key awesome-pair-mode-map (kbd "SPC") 'awesome-pair-space)
;; (define-key awesome-pair-mode-map (kbd "RET") 'awesome-pair-newline)
(define-key awesome-pair-mode-map (kbd "C-S-d") 'awesome-pair-backward-delete)
(define-key awesome-pair-mode-map (kbd "C-d") 'awesome-pair-forward-delete)
(define-key awesome-pair-mode-map (kbd "C-k") 'awesome-pair-kill)
(define-key awesome-pair-mode-map (kbd "M-\"") 'awesome-pair-wrap-double-quote)
(define-key awesome-pair-mode-map (kbd "M-[") 'awesome-pair-wrap-bracket)
(define-key awesome-pair-mode-map (kbd "M-{") 'awesome-pair-wrap-curly)
(define-key awesome-pair-mode-map (kbd "M-(") 'awesome-pair-wrap-round)
(define-key awesome-pair-mode-map (kbd "M-)") 'awesome-pair-unwrap)
(define-key awesome-pair-mode-map (kbd "M-p") 'awesome-pair-jump-right)
(define-key awesome-pair-mode-map (kbd "M-n") 'awesome-pair-jump-left)
;; (define-key awesome-pair-mode-map (kbd "M-:") 'awesome-pair-jump-out-pair-and-newline)
;; custom tag
(defun awesome-pair-open-percent ()
(interactive)
(cond
((derived-mode-p 'web-mode)
(insert "%%")
(backward-char))
(t
(insert "%")
)
))
(defun awesome-pair-single-quote ()
(interactive)
(cond
((derived-mode-p 'emacs-lisp-mode)
(insert "'"))
(t
(insert "''")
(backward-char)
)
))
(define-key awesome-pair-mode-map (kbd "%") 'awesome-pair-open-percent)
(define-key awesome-pair-mode-map (kbd "'") 'awesome-pair-single-quote)
用fingertip吧,融合了最新的treesit技术。
上次用了下fingertip,但是启用treesit之后各种出问题就回到awesome-pair了。 具体问题忘了,不知道是不是和windows有关,想着反正awesome-pair目前也能满足需求就懒得折腾了
web-mode 使用 django
模版时要加空格, 输入 {% + 空格 才能自动补全,web-mode的主要问题是和默认的electric-pair-mode
冲突,如果要补全只能修改默认的模版
(add-to-list 'web-mode-engines-auto-pairs '("django" . (("{{ " . " }")
("{% " . " %")
("{%-" . " | %")
("{%=" . " | %")
("{{-" . " | }")
("{{{" . " | }}")
("{# " . " #")
("<% " . " %>"))))
我在写C++代码时也遇到这个问题。怎么解决呢?