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