Linuxの端末で広く使われている「Bash」には、デフォルトでEmacs風キーバインド(キー操作と機能の紐づけ)が設定されています。
さらに、GNOMEなどのデスクトップ環境なら、簡単にEmacs風のキーバインド(キーテーマ)が設定可能です。この設定を行えば、WebブラウザやテキストエディタといったGUIアプリでも、端末と同じショートカットキー(ホットキー)を使うことができます。
しかし、WindowsにはデフォルトでEmacs風キーバインドを設定する方法が用意されていません。そこで、「AutoHotKey」というソフトを使ってWindowsでもEmacs風キーバインド使う方法を紹介します。
Emacs風キーバインドとは?
特定のキー(単独あるいは複数の組み合わせ)を押したときに、実行する機能を割り当てることを「キーバインド」や「キーバインディング」と呼びます。とくに、「Ctrl」や「Alt」を押しながら別のキーを押す「ショートカットキー(ホットキー)」には、OSやソフトによってさまざまな機能が「バインディング」されています。
Emacs風キーバインドとは、Unix系OSで古くから使われてきたテキストエディタ「GNU Emacs」のキーバインドに似たキーバインド、という意味です。
Emacsのキー操作は一般的なGUIアプリのキー操作とは異なりますが、ホームポジションに手を置いたままカーソルの移動や文字の削除といった操作が行えるので、慣れると効率的にコマンド文の入力や文章の編集ができるのが特徴です。そのため、Emacs以外のソフトウェアでもEmacs風のキーバインドを設定して使うユーザーも多くいます。
Emacs風キーバインドといっても、ソフトによって「本家Emacsとほぼ同じ」だったり、「カーソルの移動のみEmacs同じ」だったりします。たとえば、以下のページで紹介しているBashのキーバインドはEmacsをベースにしており、カーソルの移動や文字の削除に使うショートカットの多くがEmacsと共通しています。しかし、エディタであるEmacsとシェルであるBashは用途が異なることもあり、「Ctrl+C」などは役割が異なります。
AutoHotKeyのインストール
AutoHotKeyはWindows用の常駐プログラムで、キーやマウスの入力を監視し、特定の操作が行われたときに任意の処理を実行します。「キー操作を別のキー操作に置き換える」こともできるので、これを使ってEmacs風キーバインドを実現することができます。
AutoHotKeyはフリーソフトウェアです。AutoHotKeyのサイトを開き、「Download」ボタンをクリックすると以下の画面になります。「Download Current Version」をクリックすると、インストール用の実行ファイルがダウンロードされます。
ダウンロードした「AutoHotkey_バージョン番号_setup.exe」を実行するとインストーラーが起動します。途中で以下のような選択画面が表示されます。通常は「Express Installation」を選べば問題ないでしょう。「C:\Program Files\AutoHotkey」以下にインストールされます。
「emacs.ahk」でEmacs風キーバインドを設定する(Emacsに慣れた人向け)
AutoHotKeyの設定は、拡張子「ahk」のスクリプトファイルで行います。Naoki Ishikawaさんが作成された「emacs.ahk」を使えば、Emacs風のキーバインドが設定可能です。ただし、Bashで採用されている基本的なキーバインドだけでなく、より多くのEmacs風のキーバインドが設定されます。たとえば「Ctrl+X を押してから Ctrl+C でアプリ終了」などです。ショートカットキーの多くがEmacs風に置き換わるので、Emacsの操作に習熟した人向けです。
「emacs.ahk」は以下のGithubレポジトリからダウンロードできます。
ダウンロードしたemacs.ahkをダブルクリックすれば、AutoHotKeyのアイコンがシステムトレイに表示され、Emacs風キーバインドが有効になります。カーソル移動だけでなく、「ファイルを開く」「保存する」「閉じる」「文字をコピーする」「貼り付ける」といった操作も、Emacsと同じキーバインドに置き換えられます。Emacsの操作体系が体に染みついている人なら、快適にWindowsを使えるようになるでしょう。必要に応じてスクリプトを編集し、自分好みにカスタマイズすることもできます。
「カーソル移動+α」のキーバインドだけをEmacs風にする
筆者は普段Emacsを使っておらず、Linuxデスクトップで「GTKのEmacs風キーテーマ」を常用しています。WebブラウザーやテキストエディターでもBashと同じキー操作でカーソルの移動などができ、非常に快適です。
この環境では、「カーソル移動と文字削除」がBashと同じ操作になるものの、そのほかの操作はGNOME標準のキーバインドが使えます。たとえば「Ctrl+C」「Ctrl+X」「Ctrl-V」は「コピー」「切り取り」「貼り付け」のままです(つまりWindowsと同じ)。
Windowsでこれと似た環境を実現するため、「emacs.ahk」を元に、「GTKのEmacs風キーテーマ」に近い設定を行うスクリプト「gtk-emacs-theme-like.ahk」を作成しました。以下のGithubレポジトリからダウンロードできます。
「emacs.ahk」と同様、ダウンロードした「gtk-emacs-theme-like.ahk」をダブルクリックするとAutoHotKeyが読み込んで起動します(すでにemacs.ahkを実行している場合は先にタスクトレイから終了してください)。
「gtk-emacs-theme-like.ahk」を実行すると、以下の通りショートカットキーが置き換えられます。
入力キー | 置き換え先 | 機能 |
---|---|---|
Ctrl+B | ← | カーソルを左へ |
Shift+Ctrl+B | Shift+← | 選択しながらカーソルを左へ |
Ctrl+F | → | カーソルを右へ |
Shift+Ctrl+F | Shift+→ | 選択しながらカーソルを右へ |
Ctrl+P | ↑ | カーソルを上へ |
Shift+Ctrl+P | Shift+↑ | 選択しながらカーソルを上へ |
Ctrl+N | ↓ | カーソルを下へ |
Shift+Ctrl+N | Shift+↓ | 選択しながらカーソルを下へ |
Ctrl+D | Del | カーソルの後ろの文字を削除 |
Ctrl+H | Backspace | カーソルの前の文字を削除 |
Ctrl+A | Home | カーソルを行頭へ |
Shift+Ctrl+A | Shift+Home | カーソルから行頭まで選択 |
Ctrl+E | End | カーソルを行末へ |
Shift+Ctrl+E | Shift+End | カーソルから行末まで選択 |
Alt+B | Ctrl+← | カーソルを1単語左へ |
Shift+Alt+B | Shift+Ctrl+← | 選択しながらカーソルを1単語左へ |
Alt+F | Ctrl+→ | カーソルを1単語右へ |
Shift+Alt+F | Shift+Ctrl+→ | 選択しながらカーソルを1単語右へ |
Ctrl+W | Ctrl+X | 切り取り |
Ctrl+Y | Ctrl+V | 貼り付け |
Ctrl+K | Shift+End Del | カーソル位置から行末まで削除 |
Ctrl+U | Shift+Home Del | カーソル位置から行頭まで削除 |
Ctrl+M | Enter | 改行 |
Ctrl+R | Ctrl+F | 検索 |
Ctrl+\ | Ctrl+A | すべて選択 |
ログオン時にAutoHotKeyスクリプトを自動で実行するには
ログオン時に実行するahkスクリプトは、どこか適切なフォルダーに置いておきましょう。OneDriveを使っているなら、そちらにおいておけば複数のPCで使うのに便利でしょう。
Windows 10へのログオン時、ahkファイルを自動で実行するには「スタートアップフォルダー」にahkファイルへのショートカットを置きます。スタートアップフォルダーは、「名前を指定して実行」で「shell:startup」を実行すればエクスプローラーで開きます。詳しくは以下の記事を参照してください。
ahkスクリプトを置いたフォルダーとスタートアップフォルダーをエクスプローラーで開き、右ボタンでドラッグ&ドロップして「ショートカットをここに作成」を選択しましょう。Altキーを押しながらドラッグ&ドロップして作成することもできます。
「gtk-emacs-theme-like.ahk」のショートカットを作成すると、以下のようになります。これで、次回ログイン時に自動でスクリプトが実行されます。
ahkスクリプトの編集とリロード(再読み込み)
ahkスクリプトから不要な設定を無効化するには、該当の行の先頭に「;(セミコロン)」を追記してコメントアウトしてください。もちろん、必要な設定を追加することもできます。
ahkスクリプトを書き換えて保存後、システムトレイのAutoHotKeyアイコンを右クリックし、「Reload This Script」を選ぶことで再読み込みされます。
AutoHotKeyの終了
AutoHotKeyを終了するには、システムトレイのアイコンを右クリックして「Exit」をクリックしてください。
コメント