smart-tab 20150703.917(in MELPA)
Intelligent tab completion and indentation.

概要

smart-tab.el は、空気読むTAB(C-i)を実現します。

これを導入すると、TABで補完すべきか
インデントすべきかを自動判別してくれます。

これまでM-TABで補完していたのがTABで済むようになります。

以下の働きをします。

  1. regionが指定してある場合はインデントする
  2. C-u C-iでインデントする
  3. シンボルの直後なら補完を試みる

Emacsにはいろいろな補完方法がありますが、
うまく判断してくれます。

  1. auto-complete-mode(レビュー) が有効ならばそれを使う
  2. モード独特の補完方法が設定してある場合はそれを使う
    • emacs-lisp-mode ならば lisp-complete-symbol
    • text-mode ならば dabbrev-completion
  3. それ以外ならば hippie-expanddabbrev-expand (選択可)

M-x global-smart-tab-mode は全体で有効になりますが、
org-modemagit-modew3m-mode など
TABに独自の意味を持たせているモードでは対象外になります。

とはいえ除外すべきモード は eww-mode など他にもあるので
僕としてはモードフックに smart-tab-mode
設定することを推奨します。

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。

(package-initialize)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("melpa" . "http://melpa.org/packages/")
        ("org" . "http://orgmode.org/elpa/")))

初めてsmart-tabを使う方は
以下のコマンドを実行します。

M-x package-install smart-tab

アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。

M-x package-install package-utils (初めてアップグレードする場合のみ)
M-x package-utils-upgrade-by-name smart-tab

追記

yasnippet.el とかぶってしまう難点があります。

これについては少し考えるべきでしょう。

設定 150401063719.smart-tab.el(以下のコードと同一)

;;; nilならばdabbrev-expand, tならばhippie-expandで補完する
(setq smart-tab-using-hippie-expand t)
;;; モードごとの補完コマンドの設定
(setq smart-tab-completion-functions-alist
      '((emacs-lisp-mode . lisp-complete-symbol)
        (text-mode       . dabbrev-completion)))
;;; プログラミング言語のモードのみ有効にする
(add-hook 'prog-mode-hook 'smart-tab-mode)

実行方法

$ wget http://rubikitch.com/f/150401063719.smart-tab.el
$ emacs -Q -f package-initialize -l 150401063719.smart-tab.el

本サイト内の関連パッケージ


本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。