yasnippet
目录
- 简述
- 安装
- 配置
- 添加自定义模板
1简述
yasnippet 是一款自动补全插件。同时可以自定义补全模板。实现想怎么补全就怎么补全。
2 安装
yasnippet 的 github地址. 其实yasnippet 的相关说明及安装方法在这个地址上都有说明. 我在这里,做下赘述,方便不习惯阅读英文的兄弟们可以快速上手。 下面是安装过程:
make dir ~/.emacs.d/plugins cd ~/.emacs.d/plugins git clone --recursive https://github.com/joaotavora/yasnippet
3 配置
将yasnippet 的配置添加到init.el 中(如果对lisp语言了解,也可以添加到其他文件中, 然后在init.el 中引用也可).
全局默认启用
(add-to-list 'load-path "~/.emacs.d/plugins/yasnippet") (require 'yasnippet) (yas-global-mode 1)
交互式开启 通过在buffer 区域输入M-x yas-minor-mode 可以控制当前buffer 是否启用yasnippet.
(yas-reload-all) (add-hook 'prog-mode-hook #'yas-minor-mode)
4 添加自定义模板
其实是开始,我想要的就是这个功能。可以给人自由飞翔的感觉.
4.1 打开编辑
使用命令 M-x yas-new-snippet 打开一个新buffer,或者直接新建一个文件,输入内容后保存到你指定的位置即可。
用M-x yas-new-snippet 打开的buffer内容默认如下:
# -*- mode: snippet -*- # name: # key: # –-
对以上几个选项加心说明:
-
name
- snippet 文件的名字。当触发补全功能时,snippet会读取这个文件,将文件中的内容补充到buffer中。 key
- 快捷键。输入快捷键,然后<tab> 即可补全。 --
- 分界线。从该行以下,全部是补齐内容.
在网上找了一段示例:
# name: file header # key: fh # binding: direct-keybinding # -- #!/usr/bin/env python # coding:utf-8 # Filename:`(file-name-nondirectory buffer-file-name)` $0
找这段,是因为这段里有个可爱的用法: `(file-name-nondirectory buffer-file-name)` . 这个有意思了,这个是显示当前buffer的名字的,让emacs帮你自动写。
4.2 保存
我找了好久才找到怎么保存的.当编辑好后,我们要将buffer 中的内容保存下来,以便日后使用。 C-c C-c ,会提示保存table, snippet 会把我们创建的文件在内部以表格的形式保存:
1 Choose or enter a table (yas guesses snippet-mode): snippet-mode
这里可以使用默认的snippet-mode也可以在snippets 路径中创建另外一个路径,比如python-mode,C++-mode,js-mode 等。在此处,我们可以输入python-mode:
0 Choose or enter a table (yas guesses snippet-mode): python-mode
然后回车:
[yas] Loaded for python-mode. Also save snippet buffer? (y or n)
这里输入y , yasnippet 会以 “ # name: " 的值为文件名,提示保存路径及文件名
5 File to save snippet in: ~/.emacs.d/snippets/python-mode/ ~/.emacs.d/snippets/python-mode/ifelse ./ ../ file header whielse
第一行为默认行。回车即可。
[yas] Snippet "ifelse" loaded for python-mode.
再来看一下,该文件是否已存储成功:
ls -lrt total 24 -rw-r--r-- 1 halberd staff 96 Jan 14 17:13 whielse -rw-r--r-- 1 halberd staff 157 Jan 14 17:17 file header -rw-r--r-- 1 halberd staff 132 Jan 14 17:52 ifelse
Created: 2019-04-26 Fri 19:31