対象
Emacs及びHelmの初心者〜初級者を対象にしています. これを書いているのは初級者です.
あらまし
HelmはEmacsにおける様々なものを検索するための統一的なインターフェイスを提供してくれる非常に大きなパッケージです. とっても便利らしいのだけど, 機能がいっぱいありすぎてちょっと手に余る子だなと思っていました. 実際自分が使えているのはほんの一部の機能だけです. 勉強しようにもどこから手を付けてよいかわからない状態でした.
そんなときにHelmの主要な機能についてうまくまとめてくれている記事を見つけました.
A Package in a league of its own: Helm
tuhdoさんという方が書いてくれているようです. ありがたや. これほどHelmの機能について包括的にまとめている日本語の情報源もあまりないなと思ったので翻訳してみました. これを読めばHelm中級者くらいになれるんじゃないかと期待しています. 既に中級者以上の方にも新しい気づきがあるかもしれません.
また, tuhdoさんはHelm以外にもEmacsに関するガイドをいくつか書いていらっしゃいます.
注意点
-
内容は翻訳に近い要約です. 情報量で言えば「原文 > この記事」です. 原文と違う表現をしている箇所が多々あります.
-
自分の英語力とEmacs力が圧倒的に足りないので, 誤訳であったりtuhdoさんの意図を汲みとり切れていないところが多々あると思います. この記事に至らないどころを感じるとすれば, その責任はすべて自分にあります.
-
ぜひ原文の方も目を通してみてください. ここには載せていない, GIFによるデモ動画も載っています. 「ここの訳違うよ!」「こう書いたほうがいいと思う」などあれば, コメント欄や編集リクエストにてやさしく教えて頂けると幸いです.
A Package in a league of its own: Helm
作者さんたち:
-
Tamas Patrovic (-2007). 最初の開発者さん. このときは
Anything
という名前でした. -
るびきち (2008-2011). このときもまだ
Anything
. -
Thierry Volpiatto (2011-). 現在のメンテナさん. このときに
Anything
はHelm
に生まれ変わりました.
ホームページ: GitHub
Helm
の特徴
Helm
はEmacsでインクリメンタルに補完や検索をするためのフレームワークです. Emacsで何か(Bufferやファイルなど)を探しているときに, 役に立ってくれます.
Helmはanything.el
(Tamas Patrovicさん作)のフォークで, 言わばanything.el
のご子息です. anything.el
のレガシーコードをお掃除することに始まり, いろんなツールを用意してくれています. しかもそれらは下方互換に縛られるようなことはありません.
インストール:
Emacs PreludeかSpacemacsでは最初からセットアップされており, このガイドにあるような設定は必要ないです. でもEmacs PreludeではHelmがデフォルトで無効になってます. ここを見て有効にしてください. Spacemacsはデフォルトで有効です.
もしSpacemacsユーザーなら, もうなんにもしなくていいです. ふつうのEmacsユーザーならM-x list-packages
でhelmを選んでインストールしましょう. インストールが終わったら以下の設定を追加してhelmを有効にしましょう.
最小設定:
(require 'helm-config)
(helm-mode 1)
拡張設定:
(require 'helm)
(require 'helm-config)
;; The default "C-x c" is quite close to "C-x C-c", which quits Emacs.
;; Changed to "C-c h". Note: We must set "C-c h" globally, because we
;; cannot change `helm-command-prefix-key' once `helm-config' is loaded.
(global-set-key (kbd "C-c h") 'helm-command-prefix)
(global-unset-key (kbd "C-x c"))
(define-key helm-map (kbd "<tab>") 'helm-execute-persistent-action) ; rebind tab to run persistent action
(define-key helm-map (kbd "C-i") 'helm-execute-persistent-action) ; make TAB work in terminal
(define-key helm-map (kbd "C-z") 'helm-select-action) ; list actions using C-z
(when (executable-find "curl")
(setq helm-google-suggest-use-curl-p t))
(setq helm-split-window-in-side-p t ; open helm buffer inside current window, not occupy whole other window
helm-move-to-line-cycle-in-source t ; move to end or beginning of source when reaching top or bottom of source.
helm-ff-search-library-in-sexp t ; search for library in `require' and `declare-function' sexp.
helm-scroll-amount 8 ; scroll 8 lines other window using M-<next>/M-<prior>
helm-ff-file-name-history-use-recentf t
helm-echo-input-in-header-line t)
(defun spacemacs//helm-hide-minibuffer-maybe ()
"Hide minibuffer in Helm session if we use the header line as input field."
(when (with-helm-buffer helm-echo-input-in-header-line)
(let ((ov (make-overlay (point-min) (point-max) nil nil t)))
(overlay-put ov 'window (selected-window))
(overlay-put ov 'face
(let ((bg-color (face-background 'default nil)))
`(:background ,bg-color :foreground ,bg-color)))
(setq-local cursor-type nil))))
(add-hook 'helm-minibuffer-set-up-hook
'spacemacs//helm-hide-minibuffer-maybe)
(setq helm-autoresize-max-height 0)
(setq helm-autoresize-min-height 20)
(helm-autoresize-mode 1)
(helm-mode 1)
つかいかた
Helmを使うと「ふつうのEmacsと使用感ぜんぜん違う!」と思うでしょう. だけど一度Helmに慣れるともう離れられなくなります. もしも, Helmがあんまり好きじゃなかったらIdoを使いましょう. Idoについては後ほど紹介します. さて, helmの使い方を見ていきましょう.
Helmによる補完はふつうのEmacsの補完とはすいぶん異なります:
-
Helmでは補完にTABを使いません.
-
まず探している子の名前の一部を入力します. スペース区切りでand検索もできます. この「名前の一部」をpatternsと呼びます. Patternsは正規表現でもいいです.
-
Helmはこのpatternsに一致する子たちを探し, 一致する順にソートしてバッファに表示してくれます. RETで選択できます.
-
Helmのバッファ内ではC-pとC-nでカーソルを動かしたり, C-vとM-vでページを移動したりできます.
-
C-SPCで候補にmarkすることができます. 複数の候補に同じ操作をしたい時などに便利です. M-aで全選択(mark)できます.
-
マークした候補をC-c C-iでカレントバッファに挿入できます.
-
C-tでHelmバッファを縦分割にできます. もう一度C-tを入力すると横分割に戻ります.
C-x bでhelm-mini
が起動するので, それで練習してみましょう. 2つ以上のバッファをmarkしてRETすると, markしたものすべてを開きます.
だいじなこと: 決して補完にTABを使わないことを覚えておいてください. ふつうのEmacsやIdoとは違います. Helmではpatternsを打ちこめばTABを押さなくても候補が自動的に絞られます. これはHelmの特徴であり, 欠点ではありません. TABで候補を絞る習慣は忘れましょう!Helmバッファでpatternsの素早い補完をしたければ, hippie-expand
が従来のTABの役割を担ってくれます. Helmを使いはじめるとこのTABまわりの挙動が大きな混乱を招きますが, 慣れたら絶対に好きになるって!
Helmコマンドを実行したいときはHelmセッションに入りましょう.
Helmセッションとは, 例えば
helm-mini
とかhelm-find-files
とかのことを指します.
HelmセッションにいるときはHelmバッファが常に開いており, Helmセッションから出るとそのバッファは閉じられます. Helmセッションにいるときは以下の3つのコマンドを覚えておかなきゃいけません:
-
TABaction menuを表示するhelm-select-actionです. action menuを開くとカレントHelmセッションから出て, markした候補に対するactionのリストが表示されます.
Find File
とかFind Dired
とかGrep File
とかで使えます. -
C-zはhelm-excute-persistent-actionです. persistent actionを実行してもHelmセッションから出ることはありません.
persistent actionとは, つまり従来のTAB補完に相当するものです.
-
helm-find-files
やhelm-mini
とかのいくつかのHelmセッションでは,grep
とかopen
とかのアクションを複数の候補に対して実行できます.
...なんですが, TABとC-zを入れ替えちゃいましょう. helm-select-actionよりもhelm-excute-persistent-actionの方がよく使うので, このほうがTABを便利に使えるでしょう:
(define-key helm-map (kbd "<tab>") 'helm-execute-persistent-action) ; rebind tab to do persistent action
(define-key helm-map (kbd "C-i") 'helm-execute-persistent-action) ; make TAB works in terminal
(define-key helm-map (kbd "C-z") 'helm-select-action) ; list actions using C-z
Helmセッションでは**C-c ?**がヘルプにあたり, マニュアルを参照できます.
Helmのいいところ
-
シンプルで一貫性のあるインターフェイス: どのHelmセッションもシンプルで共通のインターフェイスを持っています: patternsを入力するミニバッファと, 候補を表示するHelmバッファです. インターフェイスがシンプルなので入門も容易ですね.
-
対話型: Helmはとっても対話的な子です: ユーザーがタイプすればすぐにHelmバッファの候補が更新されます. この特徴のおかげで, Helmは他には無いようなユニークなコマンドを持っています. 例えば
helm-ff-run-grep
などがあり, この子はgrepの結果をタイプするごとに更新してくれます. -
まず探しているものを. 何をするかはあとで: Helmではお目当ての物を探しあてるまで, 何を実行するかは考える必要がないのです. たとえば, とあるファイルをカレントウィンドウに開くか, それとも別のウィンドウに開くかは, ふつうファイルを開く前に決めなければいけませんが, Helmではまずファイルを探すことに集中し, 見つけたあとにカレントウィンドウに開くなり別ウィンドウに開くなりを決めればよいのです. これは大きなアドバンテージでして, 何を実行するかの目測を誤ってもコマンドを中止する必要がないのです. たとえばふつう, C-x C-fを実行したあとに「別ウィンドウに開いたほうがいいな」と思ったら, C-gでキャンセルしてC-x 4 C-fを実行しなおさなければならないのです.
-
マッチング: これはHelmの他にはないとっても強力な特徴です. そう, 正規表現です. regexpのようにsearch patternを入力できるのです.
...以下省略...
なぜ省略しているかというと, 自分は正規表現について語れることが何一つ無いからです. 誤訳が恐ろしくて省略しました. 是非原文を読んでください. デモ動画もあります.
- パフォーマンス: Helmは候補のリストが30000個程度なら問題なく動きます.
カーソル付近のテキスト
既にHelmセッションにいるなら, 以下のコマンドによってカレントバッファの入力を引っ張ってくることができます:
-
C-wで, カレントバッファのカーソル位置の後ろにある単語をHelmミニバッファにヤンクできます.
-
M-nでカーソル位置にあるシンボルをヤンクできます.
helm-mode
が有効なら, ヘルプコマンドでも同様にカーソル位置のシンボルを引っ張ってくることができます:
-
C-h fは
describe-function
で, カーソル位置のシンボルを検索してくれます. -
C-h vは
describe-variable
で, 右に同じ. -
C-h wは
where-is
で, 右に同じ.
これらのコマンドは自動的にHelmを利用します.
Autoresize
helm-autoresize-mode
が有効なら, Helmバッファのサイズを候補の数に応じて自動的にリサイズしてくれます.
(helm-autoresize-mode t)
バッファの大きさの最大値と最小値をカスタマイズできます. いじる変数は
-
helm-autoresize-max-height
-
helm-autoresize-min-height
デフォルトではhelm-autoresize-max-height
は40に設定されており, これはHelmバッファサイズの最大値がフレーム全体の40%であることを意味しています. helm-autoresize-min-height
についても同様です.
もしHelmウィンドウを勝手にリサイズされたくなかったら, helm-autoresize-max-height
とhelm-autoresize-min-height
を同じ値に設定すればよいです.
もしgolden-ratioを使ってたら, Helmウィンドウについては無効にしてください(Spacemacsを使ってたら以下の設定はいらないです):
(defun pl/helm-alive-p ()
(if (boundp 'helm-alive-p)
(symbol-value 'helm-alive-p)))
(add-to-list 'golden-ratio-inhibit-functions 'pl/helm-alive-p)
コマンド: helm-M-x
キーバインド:
デフォルトではバインドされていません. 以下で追加しましょう:
(global-set-key (kbd "M-x") 'helm-M-x)
解説:
M-x
の機能とhelm-M-x
との違いを見てみましょう. M-x
でEmacsにおけるコマンドのリストを見ることができます. そのリストをみて「コマンド多すぎでしょうが!」と思うかもしれません. でもM-x
のことは嫌いにならないであげてください. 少し下まで読めばありがたみがわかるんで!
ではli pa
とタイプしてみましょう. するとlist-packages
が候補のいちばん上に躍り出ました! pa ^li
も同様にタイプしてみましょう.
helm-M-x
はデフォルトのM-x
よりも優秀な子です. なぜなら, 候補の横にそのコマンドのキーバインドも表示してくれるし, TABでコマンドのドキュメントも表示してくれます.
バージョン1.6.5ではhelm-M-x
はあいまい一致検索(fuzzy matching)が可能ですが, デフォルトでは無効になっています. 有効にするには以下のようにします:
(setq helm-M-x-fuzzy-match t) ;; optional fuzzy matching for helm-M-x
注釈: helm-M-x
をM-xに手動で設定する必要があります. 設定しなくともデフォルトのM-x
でもHelmの補完機能は使えますが, キーバインドの表示はしてくれませんし, TABでドキュメントを参照することもできません. もうひとつの重要なことは, prefix argumentはhelm-M-x
を実行したあとに入力することです. helm-M-x
を実行する前にprefix argumentを入力してもなにも起こりません.
prefix argumentとは
C-u 3...
みたいな子です. この子は「あとに続くコマンドを3回呼び出しなさい」という意味です.
コマンド: helm-show-kill-ring
キーバインド:
デフォルトではバインドされていません. 以下で追加しましょう:
(global-set-key (kbd "M-y") 'helm-show-kill-ring)
解説:
C-y
のあとにM-y
を押すことでキルリングをぐるぐる回れることを覚えていますか? ただこの機能はデフォルトではとっても使いづらいです. キルリングに登録されたものをいちいち覚えていられないですからね. キルリングを見るためにはC-h vのあとにkill-ring
とタイプしなければなりません. あまりよい方法ではないでしょう.
helm-show-kill-ring
はこの問題を解決してくれます. Helmはキルリングを見やすい形式で表示してくれて, かつpatternsで絞り込みができます. これでデフォルトのM-y
の負担から解放されますね.
上記の設定でM-y
はhelm-show-kill-ring
にバインドされます. 是非とも使ってみてください. デフォルトよりも随分と楽になりますよ.
コマンド: helm-mini
キーバインド:
デフォルトではバインドされていません. 以下で追加しましょう:
(global-set-key (kbd "C-x b") 'helm-mini)
あいまい一致を有効にするには以下を追加しましょう:
(setq helm-buffers-fuzzy-matching t
helm-recentf-fuzzy-match t)
解説:
helm-mini
はいろいろなソースを包括的に扱えます:
-
現在開いているバッファを
Buffers
に表示します -
最近開いたファイルと
Recentf
に表示します -
Create Buffer
をRETすることで新しいバッファを作ります
とで異なるグループ間を行き来できます. scroll down/upとかC-vやM-vも普通に使えます.
patternsとして*<major-mode>
のように入力すると, そのメジャーモードに該当する候補を表示します. 例えば*dired
と入力すると, Diredバッファに絞り込んでくれます. *!dired
と入力すると, Dired modeじゃないバッファを表示します.
patternsとして/directory
のように入力するとディレクトリ単位の検索もできます. 例えば/.emacs.d/
と入力すれば, .emacs.d
内のファイルに絞り込みます. !/.emacs.d/
とすると, .emacs.d
にないバッファを表示します.
helm-mini
はpatternsに@
を前置することで, バッファ名ではなくバッファの内容で絞り込むこともできます. 正規表現もOKです. 例えば, test
という文字を含んだバッファを絞り込みたければpatternsを@test
とすればよいのです. さらにそのバッファ内の何行目にtest
という文字が含まれているのかが知りたければ, C-sと入力します. すると, helm-mini
セッションはhelm-moccur
にスイッチされ, 候補が表示されます.
バッファの文字色とprefixの意味は以下の通りです:
-
リモートバッファには
@
がついています. -
Red => 外部プロセスによって書き換えられたバッファ
-
Indianred2 => バッファは存在してるけどファイルは削除されてしまったもの
-
Orange => バッファの内容が変更されたが保存されていないもの
-
Italic => ファイルではないバッファ
Emacsのテーマによって色は変わります. 自分のカラーテーマではどのように対応しているのかを確認しておきましょう.
例:
-
*lisp ^helm @moc
と入力すると「lisp-modeで, ファイル名が"helm"からはじまり, バッファの内容に"moc"を含むもの」に絞り込まれます. -
絞り込むメジャーモードを追加したければ,
,
で区切ります. 例えば*!lisp,!sh,!fun
と入力すると「lisp-modeでもsh-modeでもfundamental-modeでもないバッファ」に絞り込まれます. -
*lisp ^helm moc
はmoc
の前に@
がついていないので「lisp-modeで, ファイル名が"helm"からはじまり, さらに"moc"を含むもの」に絞り込みます. -
*!lisp !helm
は「lisp-modeでなく, ファイル名に"helm"を含まないもの」に絞り込みます. -
/helm/ w3
は「"helm"ディレクトリ内の, ファイル名に"w3"を含むもの」に絞り込みます.
helm-mini
はibuffer
の対話型バージョンのようなものです.
類似のコマンド:
-
helm-multi-files
: BuffersとRecentfとFiles from Current Directoryのリストを表示します.helm-mini
ならファイルが見つからなかったときは一番上にCreate bufferが来て, 名前がpatternのバッファを作ることができますが,helm-multi-file
はブランクバッファが表示されます. -
helm-locate
はシステム内すべてのファイルを検索できます. -
helm-buffers-list
:helm-mini
と似ていますが, 最近開いたファイルをrecentf
ではなくido-virtual-buffers
で参照します. これはido
が提供する, 最近開いたファイルを管理する子です. virtual bufferはパスを含んでいません. 設定のしかたによってはhelm-mini
の代わりにもなります.helm-buffers-fuzzy-matching
を有効にしていると,ido-virtual-buffers
でもあいまい一致が有効になります.
コマンド: helm-find-files
キーバインド:
デフォルトでも**<helm-prefix> C-x C-f**でバインドされていますが, 長いので以下のようにするといいでしょう:
(global-set-key (kbd "C-x C-f") 'helm-find-files)
解説:
helm-find-files
は強化されたファイルナビゲーターです.
-
helm-find-files
はカレントディレクトリにおけるあいまい一致をサポートします. たとえば"fob"や"fbr"のようなミスタイプでも"foobar"を補完できます. -
C-zでファイル名補完ができます...が, この記事の最初のほうでやった設定ではTABに設定し直しています. up/downや**M-, M-**でスクロールできます.
-
C-jでハイライトした候補に絞り込み, もう一度C-jを入力するとバッファの中身が覗けます. C-lで戻れます.
-
C-lでひとつ上のディレクトリに移動できます. C-rで戻れます.
-
ディレクトリを新しく作るには重複しない名前をpatternに入力した後, 最後に
/
を追加してRET. その後は作成したディレクトリに入ります. -
ファイルを新しく作るには, ファイル名を入力してHelmバッファの一番上に表示される
[?]
が先頭についた候補をRETします. -
C-sで
grep
っぽいことができます. C-u C-sでrecursive grepです. -
patternの最後に
~/
を入力するとホームディレクトリにすぐ戻れます. -
patternの最後に
/
を入力するとルートディレクトリにすぐ戻れます. -
patternの最後に
./
を入力するとカレントディレクトリにすぐ戻れます.
helm-select-action
を使えばもっといろんなことができます. デフォルトではTAB, この記事の設定ではC-zにバインドされています. action menuにあるactionについてのガイドはExploring large projects with Projectile and Helm Projectileに書いています. なんでここに書かないのかというと, 結局のところProjectileを使ったほうがもっと効率的にファイルのナビゲーションが行えるからです.
Find file at point:
ffap
って知ってます?helm-find-files
でもできます. ファイルパスに相当する文字列にカーソルを合わせてM-x ffap
とすると, そのファイルパスがミニバッファに入力された状態になります. しかし, もうffap
を覚える必要はありません. カーソルを合わせてC-x C-f
でOKです.
履歴:
helm-find-files
のセッションでC-c hを入力すると, 過去に訪れたファイルを表示してくれます.
コマンド: helm-semantic-or-imenu
キーバインド:
<prefix> i (デフォルトではC-x c. この記事の設定ではC-c h)
解説:
Imenuはいろいろな定義を探す方法を提供します. たとえば関数定義とか変数定義とか. imenu
もhelm-semantic-or-imenu
と独立に実行できます.
Semanticを有効にすると, 訪れたファイルの内容を自動的にパースしてくれます. このパーサはC/C++ではきっちり動いてくれます. (semantic-mode 1)
で有効にできます.
文法解釈を自動的にやってくれるんですね. その結果, 変数なり関数なりの定義を追えるようになるのかな?
HelmではSemanticとImenuを一緒にしたインターフェイスを提供してくれます. semantic-mode
がカレントバッファで有効なら, 自動的にタグ付けしてくれてimenu
に落とし込んでくれます. カーソルが適当なシンボルの上にあれば, helm-semantic-or-imenu
のバッファは最初からそのシンボルを指してくれます.
helm-semantic-or-imenu
はC/C++以外でもだいたい同様に動作してくれます. たとえばJava, Python, Ruby, Emacs Lisp and Lisp in general, shell script, Org-mode等々.
Semantic
とImenu
のあいまい一致を有効にしたいなら以下のようにしましょう:
(setq helm-semantic-fuzzy-match t
helm-imenu-fuzzy-match t)
つかいかた
-
C-c h iで実行
-
C-p/C-nでカーソル移動, **C-/C-**でカーソルの指すタグにカレントバッファが移動してくれます.
-
カーソルがタグに登録されたシンボルの上, もしくは内部にあれば,
helm-semantic-or-imenu
のバッファは最初からそのシンボルを指してくれます.
Helmではbeginning-of-defun
(C-M-a)とend-of-defun
(C-M-e)を使えますが, helm-semantic-or-imenu
はこれと同様かそれ以上のの動作をしてくれます. C-g
でキャンセルしたら, helm-semantic-or-imenu
を実行する前のカーソル位置に戻してくれます. この挙動はhelm-semantic-or-imenu
のみ対応しており, imenu
では使えません.
helm-semantic-or-imenu
は以下の種類のタグをサポートしています:
-
Dependencies
: C/C++だとヘッダーファイルのincludeなど. -
Variables
: カレントバッファ内の変数 -
Functions
: カレントバッファ内の関数 -
Privides
: Emacs-Lispだと(provide ...)
とか
タグの種類ごとにフィルタリングしたいときは^
を前置してください.
コマンド: helm-man-woman
キーバインド:
<prefix> m (デフォルトではC-x c. この記事の設定ではC-c h)
解説:
helm-man-woman
を使うとマニュアルページに素早く飛べます. ミニバッファにpatternを入力することも, カーソルの指すシンボルをそのまま検索することもできます. 後者を有効にするには以下の設定を追加しましょう:
(add-to-list 'helm-sources-using-default-as-input 'helm-source-man-pages)
コマンド: helm-find
キーバインド:
<prefix> / (デフォルトではC-x c. この記事の設定ではC-c h)
解説:
Unixのfind
コマンドに対応するもの. patternはいつもどおりスペース区切りでいけますが, Unixのfind
を内部で回しているので, ワイルドカード*
も使えます.
デフォルトではカレントディレクトリのみ検索しますが, C-u
を前置すればどのディレクトリ内を検索するかを尋ねてくれます. また, helm-find
はhelm-find-files
のセッション内で**C-c /**をタイプすることで実行できます.
helm-find
は大きなディレクトリ内で検索をかけると動作がとっても遅くなります. そのときは, **C-!で, 候補を活かしたままサスペンドすることができます. レジュームするにはもう一度C-!**です.
コマンド: helm-locate
キーバインド:
<prefix> l (デフォルトではC-x c. この記事の設定ではC-c h)
解説:
helm-find
に似ていますが, こちらは内部でUnixのlocate
コマンドを回しています. ローカルのデータベースを利用するためにはhelm-locate
の前にC-u
を前置してください. こちらも動きが遅くなることがありますが, helm-find
同様**C-!**が使えます.
helm-locate
であいまい一致を有効にするには以下を追加しましょう:
(setq helm-locate-fuzzy-match t)
locate
はLinuxのコマンドなので, 他のプラットフォームだとちゃんと動かないかもしれません.
コマンド: helm-occur
キーバインド:
<prefix> M-s o (デフォルトではC-x c. この記事の設定ではC-c h)ですが, コレだと長いので以下のバインドがいいでしょう:
(global-set-key (kbd "C-c h o") 'helm-occur)
解説:
occur
に似ていますが, Helmのインターフェイスを使っています. カレントバッファ内でpatternと一致する行を列挙してくれます. patternとマッチする行を行き来するのに便利です. TABでhelm-occur
を出ずに, カーソルが指す行に飛んでくれます. C-gでhelm-occur
を終了し, 元の位置に戻ります.
コマンド: helm-apropos
キーバインド:
<prefix> a (デフォルトではC-x c. この記事の設定ではC-c h)
解説:
Helmのコマンド・関数・変数などなどEmacsのありとあらゆるオブジェクトのマニュアルを参照するコマンドです. apropos-command
に似ていますが, こちらはインタラクティブです. helm-apropos
は以下の5つの子たちを統合しています:
-
コマンド
-
関数
-
クラス
-
ジェネリック関数
-
変数
-
Faces
-
Helm attributes
あいまい一致も有効にできます:
(setq helm-apropos-fuzzy-match t)
コマンド: helm-info-*
キーバインド:
<prefix> h (デフォルトではC-x c. この記事の設定ではC-c h)
Key | Binding |
---|---|
<prefix> h g | Command: helm-info-gnus
|
<prefix> h i | Command: helm-info-at-point
|
<prefix> h r | Command: helm-info-emacs
|
解説:
いろいろな種類のヘルプを開くことができます. 上のようなバインドもありますが, M-x helm info
と入力した後に様々なものをくっつけられます. たとえばhelm-info-as
とかhelm-info-gdb
とか...
コマンド: helm-lisp-completion-at-point
キーバインド:
<prefix> <tab> (デフォルトではC-x c. この記事の設定ではC-c h)
解説:
Emacs Lispを書いている時にEmacsで呼び出せる関数を提供してくれます. たとえば適当に何か書いたあとにこれを実行すると, 補完候補を並べてくれます. これもあいまい一致を有効にできます:
(setq helm-lisp-fuzzy-completion t)
あとがき
自分はもう目から鱗状態でした. Helmってすごいんだなあと感心しきりです.
息切れしてしまったので, とりあえずここまで. 後編に続きます: