105
126

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

EmacsAdvent Calendar 2016

Day 25

初心者〜初級者のためのEmacs-Helm事始め : 前編

Last updated at Posted at 2016-12-24

対象

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-). 現在のメンテナさん. このときにAnythingHelmに生まれ変わりました.

ホームページ: GitHub

Helmの特徴

HelmはEmacsでインクリメンタルに補完や検索をするためのフレームワークです. Emacsで何か(Bufferやファイルなど)を探しているときに, 役に立ってくれます.

Helmはanything.el(Tamas Patrovicさん作)のフォークで, 言わばanything.elのご子息です. anything.elのレガシーコードをお掃除することに始まり, いろんなツールを用意してくれています. しかもそれらは下方互換に縛られるようなことはありません.

インストール:

Emacs PreludeSpacemacsでは最初からセットアップされており, このガイドにあるような設定は必要ないです. でもEmacs PreludeではHelmがデフォルトで無効になってます. ここを見て有効にしてください. Spacemacsはデフォルトで有効です.

もしSpacemacsユーザーなら, もうなんにもしなくていいです. ふつうのEmacsユーザーならM-x list-packageshelmを選んでインストールしましょう. インストールが終わったら以下の設定を追加して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-pC-nでカーソルを動かしたり, C-vM-vでページを移動したりできます.

  • C-SPCで候補にmarkすることができます. 複数の候補に同じ操作をしたい時などに便利です. M-aで全選択(mark)できます.

  • マークした候補をC-c C-iでカレントバッファに挿入できます.

  • C-tでHelmバッファを縦分割にできます. もう一度C-tを入力すると横分割に戻ります.

C-x bhelm-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-zhelm-excute-persistent-actionです. persistent actionを実行してもHelmセッションから出ることはありません.

persistent actionとは, つまり従来のTAB補完に相当するものです.

  • helm-find-fileshelm-miniとかのいくつかのHelmセッションでは, grepとかopenとかのアクションを複数の候補に対して実行できます.

...なんですが, TABC-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 fdescribe-functionで, カーソル位置のシンボルを検索してくれます.

  • C-h vdescribe-variableで, 右に同じ.

  • C-h wwhere-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-heighthelm-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-xM-xに手動で設定する必要があります. 設定しなくともデフォルトのM-xでもHelmの補完機能は使えますが, キーバインドの表示はしてくれませんし, TABでドキュメントを参照することもできません. もうひとつの重要なことは, prefix argumentはhelm-M-xを実行したあとに入力することです. helm-M-xを実行する前にprefix argumentを入力してもなにも起こりません.

prefix argumentとはC-u 3...みたいな子です. この子は「あとに続くコマンドを3回呼び出しなさい」という意味です.

01_helm-M-x.png

コマンド: 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-yhelm-show-kill-ringにバインドされます. 是非とも使ってみてください. デフォルトよりも随分と楽になりますよ.

02_helm-M-y.png

コマンド: 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 BufferRETすることで新しいバッファを作ります

とで異なるグループ間を行き来できます. scroll down/upとかC-vM-vも普通に使えます.

patternsとして*<major-mode>のように入力すると, そのメジャーモードに該当する候補を表示します. 例えば*diredと入力すると, Diredバッファに絞り込んでくれます. *!diredと入力すると, Dired modeじゃないバッファを表示します.

patternsとして/directoryのように入力するとディレクトリ単位の検索もできます. 例えば/.emacs.d/と入力すれば, .emacs.d内のファイルに絞り込みます. !/.emacs.d/とすると, .emacs.dにないバッファを表示します.

03_helm-mini.png

helm-miniはpatternsに@を前置することで, バッファ名ではなくバッファの内容で絞り込むこともできます. 正規表現もOKです. 例えば, testという文字を含んだバッファを絞り込みたければpatternsを@testとすればよいのです. さらにそのバッファ内の何行目にtestという文字が含まれているのかが知りたければ, C-sと入力します. すると, helm-miniセッションはhelm-moccurにスイッチされ, 候補が表示されます.

04_helm-mini.png

バッファの文字色とprefixの意味は以下の通りです:

  • リモートバッファには@がついています.

  • Red => 外部プロセスによって書き換えられたバッファ

  • Indianred2 => バッファは存在してるけどファイルは削除されてしまったもの

  • Orange => バッファの内容が変更されたが保存されていないもの

  • Italic => ファイルではないバッファ

Emacsのテーマによって色は変わります. 自分のカラーテーマではどのように対応しているのかを確認しておきましょう.

例:

  • *lisp ^helm @mocと入力すると「lisp-modeで, ファイル名が"helm"からはじまり, バッファの内容に"moc"を含むもの」に絞り込まれます.

  • 絞り込むメジャーモードを追加したければ, ,で区切ります. 例えば*!lisp,!sh,!funと入力すると「lisp-modeでもsh-modeでもfundamental-modeでもないバッファ」に絞り込まれます.

  • *lisp ^helm mocmocの前に@がついていないので「lisp-modeで, ファイル名が"helm"からはじまり, さらに"moc"を含むもの」に絞り込みます.

  • *!lisp !helmは「lisp-modeでなく, ファイル名に"helm"を含まないもの」に絞り込みます.

  • /helm/ w3は「"helm"ディレクトリ内の, ファイル名に"w3"を含むもの」に絞り込みます.

helm-miniibufferの対話型バージョンのようなものです.

類似のコマンド:

  • 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-sgrepっぽいことができます. 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を使ったほうがもっと効率的にファイルのナビゲーションが行えるからです.

05_helm-find-files.png

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はいろいろな定義を探す方法を提供します. たとえば関数定義とか変数定義とか. imenuhelm-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等々.

SemanticImenuのあいまい一致を有効にしたいなら以下のようにしましょう:

(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 ...)とか

タグの種類ごとにフィルタリングしたいときは^を前置してください.

06_semantic.png

コマンド: 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)

07_man-woman.png

コマンド: helm-find

キーバインド:

<prefix> / (デフォルトではC-x c. この記事の設定ではC-c h)

解説:

Unixのfindコマンドに対応するもの. patternはいつもどおりスペース区切りでいけますが, Unixのfindを内部で回しているので, ワイルドカード*も使えます.

デフォルトではカレントディレクトリのみ検索しますが, C-uを前置すればどのディレクトリ内を検索するかを尋ねてくれます. また, helm-findhelm-find-filesのセッション内で**C-c /**をタイプすることで実行できます.

helm-findは大きなディレクトリ内で検索をかけると動作がとっても遅くなります. そのときは, **C-!で, 候補を活かしたままサスペンドすることができます. レジュームするにはもう一度C-!**です.

08_helm-find.png

コマンド: 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のコマンドなので, 他のプラットフォームだとちゃんと動かないかもしれません.

09_helm-locate.png

コマンド: 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とマッチする行を行き来するのに便利です. TABhelm-occurを出ずに, カーソルが指す行に飛んでくれます. C-ghelm-occurを終了し, 元の位置に戻ります.

10_helm-occur.png

コマンド: 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ってすごいんだなあと感心しきりです.
息切れしてしまったので, とりあえずここまで. 後編に続きます:

初心者〜初級者のためのEmacs-Helm事始め : 後編

105
126
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
105
126

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?