spacemacs 怎么配置按文件后缀创建文件时自动添加代码块?

这招只好使一半… 我设置了 dotspacemacs-distinguish-gui-tab t , 然后在 web-mode 里的 C-i 就不是绑定的 emmet-expand 了. 但是它提示我 <C-i> is undefined… 是不是代码写错地方了, 没生效…

use-package 写。 直接写上去怕是会被覆盖的。

尴尬… 这个要怎么写… 需要在 web-mode 下的时候, 去改变 yas-expand 这个函数的绑定键. 之前的例子是在那个包就设置哪个包的方法… 这个我写在 web-mode 里设置也不生效…

先放 user-config


等等,你为什么要用全局绑定?

放在 user-config 是不生效的, web-mode的时候 C-i 总是显示undefined. 如果dotspacemacs-distinguish-gui-tab nil 的时候那么默认的C-i 总是绑定的emmet-expand. 使用全局是因为我试着用(local-set-key) 也没啥效果…

local-set-key

The binding goes in the current buffer’s local map, which in most cases is shared with all other buffers in the same major mode.

而这个local-set-key运行的时候所谓current buffer是什么情况,这是很不确定的吧?

今天才听说的这个函数,一直用define-key, evil-define-key,都挺好的。。比如

(define-key web-mode-map (kbd "TAB") nil)
(evil-define-key 'insert web-mode-map (kbd "C-l") #'emmet-expand-yas)

还是不行, 懒得折腾了. 心累

你得用<C-i>而不是C-i了,这个应该是直接把C-i识别成另外一个键了,有点tricky

沒错,(kbd "C-i") 返回的是 ^I,所以会混淆

emacs wiki: yasnippet + auto-insert

使用 yasnippet 自動插入程式碼樣板:

;; Auto add HEADER in new file
(add-hook 'find-file-hook
          '(lambda ()
             (when (and (buffer-file-name)
                        (not (file-exists-p (buffer-file-name)))
                        (= (point-max) 1))
               (let ((header-snippet "HEADER")
                     (yas/fallback-behavior 'return-nil))
                 (insert header-snippet)
                 ;; if can't expand snippet, delete insert string
                 (if (not (yas/expand))
                     (delete-region (point-min) (point-max)))))))

不是这个原因, 是只要到了insert 模式,那些绑定键就失效了。。

⋯⋯ Evil insert state 按键是分开的。你要用 evil-define-key 而不是 define-keyglobal-set-key

好像没啥问题撒, 难道不应该写在 user-config 里面?

(evil-define-key 'insert evil-insert-state-map (kbd "<C-i>") 'yas-expand)

这样还是提示 <C-i> is undefined

解决方案: 用新的快捷键全部覆盖

(defun html/init-emmet-mode ()
  (use-package emmet-mode
    :defer t
    :init (spacemacs/add-to-hooks 'emmet-mode '(css-mode-hook
                                                html-mode-hook
                                                sass-mode-hook
                                                scss-mode-hook
                                                web-mode-hook))
    :config
    (progn
      (evil-define-key 'insert emmet-mode-keymap (kbd "<C-i>") 'spacemacs/emmet-expand)
      (evil-define-key 'insert emmet-mode-keymap (kbd "<C-i>") 'spacemacs/emmet-expand)
      (evil-define-key 'emacs emmet-mode-keymap (kbd "<C-i>") 'spacemacs/emmet-expand)
      (evil-define-key 'emacs emmet-mode-keymap (kbd "<C-i>") 'spacemacs/emmet-expand)
      (evil-define-key 'hybrid emmet-mode-keymap (kbd "<C-i>") 'spacemacs/emmet-expand)
      (evil-define-key 'hybrid emmet-mode-keymap (kbd "<C-i>") 'spacemacs/emmet-expand)
      (spacemacs|hide-lighter emmet-mode))))