我們在寫腳本的時候,總要在檔案的開頭加入 #!
這樣的開頭來讓系統知道如何執行這個腳本,而 #!
這樣的東西則稱之為 shebang 。
每次寫腳本都需要手動撰寫 shebang 也是很煩的,因此我們可以讓 emacs 根據腳本的檔名,自動幫我們加入合適的 shebang 到檔案的第一行。
在 emacs 上,有一個名為 insert-shebang 的套件可以幫助我們達到這個需求。
舉例來說,在建立 xxx.sh
這樣的檔案時, insert-shebang 會自動在檔案開頭加入:
#!/usr/bin/env bash
而如果建立的是 xxx.py
,則會是:
#!/usr/bin/env python
安裝套件
insert-shebang 已經收錄在 MELPA 中,因此你可以直接透過 M-x
去安裝這套件
M-x package-install RET insert-shebang RET
使用方式
設定這個套件
預設的 insert-shebang 其實就已經符合大部分的需求了,如果還想對他進行一些設定,則可以透過以下命令進行:
M-x customize-group RET insert-shebang RET
在我撰寫這篇文章的時候, insert-shebang 版本是 0.9.5 ,大概有以下幾個設定我會有興趣:
insert-shebang-file-types
預設的 insert-shebang 只有對以下幾組副檔名會加入對應的 shebang 。
(defcustom insert-shebang-file-types '(("py" . "python") ("sh" . "bash") ("pl" . "perl")) "*If nil, add all your file extensions and file types here." :type '(alist :key-type (string :tag "Extension") :value-type (string :tag "Interpreter")) :group 'insert-shebang)
insert-shebang-ignore-extensions
insert-shebang 預設會去檢查所有你開啟/建立的檔案是否需要加入 shebang ,這邊可以指定哪些副檔名不要進行這個檢查。
(老實說我覺得這個設定有點多餘….)
(defcustom insert-shebang-ignore-extensions '("txt" "org") "*Add extensions you want to ignore. List of file extensions to be ignored by default." :type '(repeat (string :tag "extn")) :group 'insert-shebang)
後記
雖然這個套件是蠻方便的,但是對於那些沒進行 shebang 設定的檔案,會丟出一些訊息在 *Message*
緩衝區也讓我覺得比較討厭。
如果你想插入 shebang 的同時,並加入一些檔案的資訊,比如授權(copyright)等等,可以參考我另外一篇文章: 使用 yasnippet 自動插入程式碼樣板 。