migemo-isearch
jsmigemoを利用し、ローマ字のまま日本語をインクリメンタル検索するための機能拡張です。
そもそも migemo とは?
詳しくはオリジナル実装の高林哲さんによる解説、「Migemo: ローマ字のまま日本語をインクリメンタル検索」を参照ください。
設定方法
Emacs のインクリメンタルサーチの様に使う場合は、とくに設定は不要です。
デフォルトでは、以下に示すように emacs に合わせたキーボードバインディングとしています:
コマンド |
説明 |
デフォルトバインド |
migemo-isearch.isearch-forward |
前方インクリメンタルサーチ開始 |
ctrl+s |
migemo-isearch.isearch-backward |
後方インクリメンタルサーチ開始 |
ctrl+r |
なお、例えばAwesome Emacs Keymapを利用している場合、検索コマンドの競合を避けるためにkeybindings.json
に以下を追加し、Awesome Emacs Keymap の設定を無効化・調整する必要があります。
{
"key": "ctrl+s",
"command": "-emacs-mcx.isearchForward",
"when": "!findInputFocussed"
},
{
"key": "ctrl+r",
"command": "-emacs-mcx.isearchBackward",
"when": "!findInputFocussed"
},
{
"key": "ctrl+g",
"command": "-workbench.action.closeQuickOpen",
"when": "inQuickOpen"
},
{
"key": "ctrl+g",
"command": "workbench.action.closeQuickOpen",
"when": "inQuickOpen && !migemo-isearch.inIsearchMode"
},
{
"key": "ctrl+n",
"command": "-workbench.action.quickOpenSelectNext",
"when": "inQuickOpen"
},
{
"key": "ctrl+n",
"command": "workbench.action.quickOpenSelectNext",
"when": "inQuickOpen && !migemo-isearch.inIsearchMode"
},
{
"key": "ctrl+p",
"command": "-workbench.action.quickOpenSelectPrevious",
"when": "inQuickOpen"
},
{
"key": "ctrl+p",
"command": "workbench.action.quickOpenSelectPrevious",
"when": "inQuickOpen && !migemo-isearch.inIsearchMode"
}
context
インクリメンタルサーチを開始し input box が表示されている状態では、migemo-isearch.inIsearchMode
というcontextが有効になっています。
なお、Awesome Emacs Keymapがインストールされいる場合、
migemo-isearch.isEmacsMcxInstalled
というコンテキストが有効になっています。
これらの context はキーバインド設定のwhen
句に利用することができ、デフォルトで以下のキーがバインドされています。
コマンド |
説明 |
デフォルトバインド |
migemo-isearch.isearch-repeat-forward |
前方次検索 |
ctrl+s |
migemo-isearch.isearch-repeat-backward |
後方次検索 |
ctrl+r |
migemo-isearch.isearch-delete-char |
検索文字削除/戻る |
backspace |
migemo-isearch.isearch-exit |
検索完了 |
enter |
migemo-isearch.isearch-abort |
検索中断 |
ctrl+g |
migemo-isearch.isearch-ring-retreat |
検索履歴を遡る |
alt+p |
migemo-isearch.isearch-ring-forward |
検索履歴を進める |
alt+n |
Config 項目
true を設定した場合、オプション(⌥)キーの代わりにコマンド(⌘)キーを利用します。この設定は macOS のみ有効です。
(c.f. emacs-mcx.useMetaPrefixMacCmd)
使い方
ctrl+s (isearch-forward
) で、ファイル終端(前方)に向けたインクリメンタル検索を開始します。
ctrl+r (isearch-backward
) で、ファイル先頭(後方)に向けたのインクリメンタル検索を開始します。
検索文字列が無い状態でもう一度 ctrl+s(または ctrl+r)をタイプすると、最後に検索した文字列の再検索を行います。
文字列の検索に成功している状態でctrl+s(または ctrl+r)をタイプすると、タイプする毎に次(前)のマッチ位置にジャンプしていきます。
backspace (isearch-delete-char
)をタイプすると、一回前の位置に戻ります。
検索を完了する毎に、検索文字列がサーチリング(search ring)に保存されます。
コマンド alt+p (isearch-ring-retreat
)または alt+n (isearch-ring-advance
)で、リング内の文字列を呼び出すことが出来ます。
サーチリングの中に保存されている過去の検索文字列の数は、現在のところ固定で 16 です。
検索文字列は大文字小文字を区別しません。ただし、検索文字列に大文字が含まれていると、大文字・小文字を区別するようになります。
なお migemo で熟語・複合語を検索する場合、例えば"漢字入力"をマッチしたい場合には、"kanjiNyuuryoku"というように区切りを大文字にします。
このときアルファベットの大文字小文字が区別されるようになりますが、実用上問題ないかと思います。
enter(isearch-exit
)をタイプすると検索を終了します。あるいは、
left/right/up/down/home/end/
pagedown/pageupのいずれかをタイプすると検索を終了し、続いてタイプしたコマンドを実行します。
Awesome Emacs Keymapがインストールされている場合は、以下のキーをタイプしても検索を終了し、続いて定義されているコマンドを実行します。
詳細
- ctrl+f
- ctrl+b
- ctrl+p
- ctrl+n
- ctrl+a
- ctrl+e
- alt+f
- alt+b
- alt+m
- ctrl+v
- alt+v
- alt+shift+.
- alt+shift+,
- alt+g alt+g
- alt+g g
- ctrl+x ctrl+o
- ctrl+x h
- ctrl+x u
- ctrl+/
- ctrl+shift+-
- ctrl+;
- alt+;
- ctrl+w
- alt+w
- ctrl+y
- alt+y
- ctrl+o
- ctrl+m
- ctrl+j
検索を中断する場合はctrl+g (isearch-abort
) をタイプしますが、その動作は状況に依存します:
- 文字列の検索に成功している状態でctrl+gをタイプすると、検索全体が取り消されカーソルが検索開始した位置に戻ります。
- 検索に成功していた後に続いて失敗した文字が含まれている状態でctrl+gをタイプすると、検索に失敗した文字列が取り除かれ、
最後に成功した位置に戻ります。
この状態で 2 回目のctrl+gをタイプすると、1.の処理となって検索全体が取り消されます。
ToDo
今後予定しているのは以下の通りです:
- isearch-yank-* など
- query-replace への移行機能
- 大文字小文字区別の切り替え機能
- ace-jump-modeとの統合
参考
謝辞およびライセンス
migemo のオリジナル実装は、高林哲さんによる Migemo: ローマ字のまま日本語をインクリメンタル検索です。
本機能拡張は、oguna さんによる javascript の migemo 実装、oguna/jsmigemoを利用しています。
また辞書として、3 条項 BSD ライセンスに基づいたoguna/yet-another-migemo-dictを利用しています。
これら oguna さんの実装は、辞書構造を工夫した Migemo 実装の紹介 - Qiitaで詳しく説明されています。
アイコンについて
機能拡張のアイコンは、名前の由来に基づきちょんまげ(?)の生えたポケモンを
text-to-pokemonで生成、利用しています。
その学習データにはpokemon-blip-captionsが使われており、
ライセンスはCC BY-NC-SA 4.0とのことです。
しかし 2023 年現在、AI が生成した画像の著作権についてはまだ曖昧な点があると理解しています。
以上を踏まえ、このアイコンについて私 sumomoneko は一切の権利主張を行いません。