yasnippet插件
Table of Contents
1 yasnippet
YASnippet is a template system for Emacs. It allows you to
type an abbreviation and automatically expand it into function templates.
yasnippet 是一个缩写扩展的插件。
比如:我输入 blogheader,然后按tab键,会自动扩展为:
#+TITLE: #+AUTHOR: lexnewgate #+EMAIL: lexnewgate@gmail.com #+DATE: #+DESCRIPTION: #+CATEGORIES: xxx yyy #+KEYWORDS: tags1,tags2 #+LINK_UP: AlexWei #+LINK_HOME: AlexWei
2 配置
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; yasnippet ;; http://capitaomorte.github.io/yasnippet/ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (add-to-list ‘load-path "~/.emacs.d/plugins/yasnippet") (require ‘yasnippet) (yas-global-mode 1) (add-to-list ‘yas-snippet-dirs "~/.emacs.d/plugins/yasnippet/snippets")
如果要解决和company-mode的tab冲突,并让company-mode也显示yasnippet的缩写 候选,那么加上以下语句:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; code completion ;; http://company-mode.github.io/ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (add-to-list ‘load-path "~/.emacs.d/plugins/company") (require ‘company) (add-hook ‘after-init-hook ‘global-company-mode) (setq company-idle-delay 0.5) ;; weight by frequency (setq company-transformers ‘(company-sort-by-occurrence)) (defvar company-mode/enable-yas t "Enable yasnippet for all backends.") (defun company-mode/backend-with-yas (backend) (if (or (not company-mode/enable-yas) (and (listp backend) (member ‘company-yasnippet backend))) backend (append (if (consp backend) backend (list backend)) ‘(:with company-yasnippet)))) (setq company-backends (mapcar #‘company-mode/backend-with-yas company-backends))
3 编写snippet
这里举个简单例子。手册链接
3.1 为所在主模式写新的snippet
- 运行指令 yas-new-snippet
- 然后开始写snippet
例如,我在org-mode要经常添加代码块,我想让src_扩展为:
#+begin_src 光标所在位置 ;#+end_src
那么我的snippet会是
# -*- mode: snippet -*- # name: src_ # key: src_ # -- #+begin_src $0 ;#+end_src
这里除了以$开头的所有都可以理解成普通字符串,$0的含义是跳转的最后一个点。
注意新目录的名字一定要和mode相符合。
3.2 目录结构问题
默认情况下,副模式是不会开启的。 1 可以通过yas-activate-extra-mode开启 2 或者编写共享文件
比如说我想在各个编程主模式中方便输入我的签名,那么我就在各个模式之下建立一个 .yas-parents的文件,然后里面用空格隔开我想在各个主模式共享的snippets的模式。
3.3 编辑已经存在snippet
指令为 yas-visit-snippet-file
4 后续
由于我自己用的smex插件,所以我很少使用各种快捷键。故所有emacs相关博文都会以 命令名字的方式出现。