程式碼片段 (snippet)
當編輯程式時,有時候會有一些固定的程式碼當作範本,然後在依照自己想要的部分加入,舉個例子,寫 HTML 時,最常用的片段就是
<!doctype html>
<html>
<head>
<meta charset=”UTF-8″/>
<meta name=”viewport” content=”width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scal\e=1.0″/>
<meta http-equiv=”X-UA-Compatible” content=”IE=edge,chrome=1″/>
<title></title>
</head>
<body></body>
<
ml>
如果每次寫一個這種檔案,每次都要重新打一次,真的是浪費生產力,因此每個編輯器都會有讓使用者自己定義 Snippet 的功能,只要定義一次,配合所需要的關鍵字 (key),編輯器就會帶出相對應得程式碼,這就是 Snippet 的功能
安裝 Yasnippet
前面 介紹過 Emacs 的套件管理,我們之後的套件都會使用 use-package 來做管理
加入以下程式到 ~/.emacs.d/init.el
(use-package yasnippet
:ensure t
:config
(yas-global-mode)
(use-package yasnippet-snippets :ensure t)
)
將 yasnippet 次模式設定為全區 (global) 模式,意思是不管什麼主模式,我們都會使用這個次模式,當然這個設定看使用者習慣,因為我用 Emacs 主要來寫程式,所以我會把這個選項開啟。
yasnippet 這個套件並沒有帶現成的 snippet, 因此我們會加入 yasnippet-snippets 這個套件,這個套件包含了相當多的程式預設 snippets
當編輯程式時,有時候會有一些固定的程式碼當作範本,然後在依照自己想要的部分加入,舉個例子,寫 HTML 時,最常用的片段就是
<!doctype html>
<html>
<head>
<meta charset=”UTF-8″/>
<meta name=”viewport” content=”width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scal\e=1.0″/>
<meta http-equiv=”X-UA-Compatible” content=”IE=edge,chrome=1″/>
<title></title>
</head>
<body></body>
<

如果每次寫一個這種檔案,每次都要重新打一次,真的是浪費生產力,因此每個編輯器都會有讓使用者自己定義 Snippet 的功能,只要定義一次,配合所需要的關鍵字 (key),編輯器就會帶出相對應得程式碼,這就是 Snippet 的功能
安裝 Yasnippet
前面 介紹過 Emacs 的套件管理,我們之後的套件都會使用 use-package 來做管理
加入以下程式到 ~/.emacs.d/init.el
(use-package yasnippet
:ensure t
:config
(yas-global-mode)
(use-package yasnippet-snippets :ensure t)
)
將 yasnippet 次模式設定為全區 (global) 模式,意思是不管什麼主模式,我們都會使用這個次模式,當然這個設定看使用者習慣,因為我用 Emacs 主要來寫程式,所以我會把這個選項開啟。
yasnippet 這個套件並沒有帶現成的 snippet, 因此我們會加入 yasnippet-snippets 這個套件,這個套件包含了相當多的程式預設 snippets
不同的主模式,可以定義自己的 snippet,舉個例子,在 C++模式 下的 main 跟 Python 模式 下的 main 當然會不同
我們也可以自己定義 snippet,或者使用別人定義過的
使用 yasnippet
當進入一個新的模式時,你可以使用 Meta-x yas-describe-tables 來看在這個模式下現存的 snippets ,例如在 Emacs Lisp 模式下
我們也可以自己定義 snippet,或者使用別人定義過的
使用 yasnippet
當進入一個新的模式時,你可以使用 Meta-x yas-describe-tables 來看在這個模式下現存的 snippets ,例如在 Emacs Lisp 模式下
要看它的定義時,只要將游標移到要看的目標的反白部分,按 Enter,就可以進入他的定義
# -*- mode: snippet; -*-
#contributor: Xah Lee (
XahLee.org
#contributor: Xah Lee (

)
#name: add-hook
#key: add-hook
#key: ah
# —
(add-hook ‘${1:name}-hook ${2:’${3:function}})$0
用 # 來區分表頭,key 就是讓使用者啟動這個 snippet 的關鍵字
$1 或者 ${1:name} 是只游標停留的第一個位置,按 Tab 鍵會到 $2 或者 ${2: …},$0 是完成輸入後游標預設的位置
試試看,在 test.el 下,打入 ah,然後按 Tab 鍵,就會帶出如下
因為定義了 name,會將 name 選起來,等待使用者來打入新的字,打完後按一下 Tab 鍵會到下一個位置如下