rcmdnk's blog
Last update

20161006_itermprofileskeys_200_200

コマンドライン操作やターミナル上でのエディタで使う修飾キーとしては基本的にControlボタンが多いですが、 メタキーを使ったショートカットも色々とあって知ってると結構便利だったりします。

メタキーと言うものは現在の通常のキーボードには殆どないわけですが、 Escキーを押してから文字キーを押す、と言う操作で代替されています。 もっと一般的にはAltキーやMacのCommandキーがメタキーの代わりに使えたりします。

が、MacのターミナルアプリやiTermなどでは通常これらのキーがターミナルへのメタキー信号として 送られません。

そこでその辺を使うための設定について。

iTermでのメタキー設定

iTermでは通常Commandキーを使ったショートカットは メニューにある操作(-Nで新しいWindowを作ったり-Vで貼り付けたり) に当てられ、Commandキー自体がメタキーとして送られることはありません。

メタキーを使うためには、Preferencesで Profilesにある使っているProfileに行き、 中にあるKeysのオプションの Left option () key acts as:にある項目で +Escを選びます。

20161006_itermprofileskeys.jpg

これによってOptionキー(symbol)がメタキーとして使える様になります。

左と右のオプションがあるのでそれぞれ使いたいものを。

Normalだと通常のオプションキーになりますが、ターミナルでの入力では 特殊文字が入力できたりしますが普通は使わないと思うので両方潰してもかまわないと思います。

Metaと言う項目があって、これが本来のメタキーの様な役割ではあるのですが、 これを選択すると、

You have chosen to have an option key act as Meta. This option is useful for backward compatibility with older systems. The “+Esc” option is recommended for most users.

と言うWarningが出ます。

実際どの様な信号をそれぞれで出してるかきちんと理解してないですが、 通常のメタキー操作として使いたい場合には最後の”+Esc”を選択するべきです。 Metaを選んで入力してみると文字化けしたものが入力される様な状態でした。

というわけで、”+Esc”を選べばOptionキーがメタキーとして使えるわけですが、 ボタン操作的にやはりCommandキーのところでメタキーを使いたいので、 その場合はPreferencesにある全体のKeysの項目に行き、 Remap Modifier KeysでOptionとCommandキーの入れ替えの設定をします。

20161006_itermkeys.jpg

これでEmacsやコマンドラインで-Fで一単語進む、的な 操作が出来る様になります。

一方、ペーストや新規Windowを作ったりの作業は-Vなどで 代用することになります。

ペーストなど一部のCommandキー操作だけはCommandをそのまま使いたい、ということであれば、 ProfilesKeysでキー毎の設定が出来るので、ここで Keyboard Shortcut-NActionとしてNew Window with Profile…を選んだりすれば メタキーを送らずに本来のCommandキー操作の動作に戻すことが出来ます。

自分設定ではこのNと、-VPasteを割り当てています。

逆にメタキーで使いたいものの方が少ない、と言う場合には 全体のKeysでのSwapはしないで、 必要なキーだけ-FActionSend Escape Sequenceを選んで送るキーにFを選択する 等の設定をすることも出来ます。

追記: 2018/04/17

iTermが新しくなって(3.1.5かそれより前から)EditメニューにEmoji & Symbolsという項目が Spaceに割り振られる様になりました。

これが自分の使ってるIMEの設定とconflictしてしまうのでこの方法はやめて 下にあるKarabinerを使う方法をKarabiner-Elementsで実装して 使うようにしています。

その方が直接手でいじるものも少なくなって良いかと。

追記ここまで

ターミナル.appでのメタキー設定

ターミナル.appでも環境設定からプロファイルキーボードに進むと メタキーとしてOptionキーを使用という項目があります。

これを選択するとiTermで”+Esc”を選んだときと同様メタキーが使える様になります。

こちらは左右が選べないので同時に変更するしかないのと、 他に修飾キーの変換方法が無いのでターミナル.appだけだと Commandキーでメタキーを送ることは出来ずにOptionキーを使うしかありません。

以前までやっていたこと

一番最初はiTermでキー毎の設定をしていたんですが、 数が多いと設定が結構面倒なので最終的には Karabinerを使って必要なキーをEsc+Keyとして送る様に設定していました。

mac/private.xml

これだとターミナル.appでも同時に設定できるので。 この中でもNVW以外は設定していて量が多いですが 書くだけならすぐ書けるので1

なんですが、macOS SierraにアップグレードしてKarabinerが使えなくなったため この設定が効かなくなってしまったのでiTermの設定の中で再設定しました。

同じような設定をBetterTouchToolでも出来るかな、と思ったんですが どうもシグナルを捉えるレベルの違いからかBetterTouchToolからだと 変更が思った通りには効きませんでした。

メタキーを使ったショートカットですが、 .inputrcファイルに設定を書いておくことでコマンドラインで自分で設定することも出来ます。 コントロールキーを使ったショートカットは殆どがデフォルトの操作で埋まっていて 潰したくないものが多いため 何かショートカットを追加したい場合にはメタキーに付けると便利です。 デフォルトでの機能が付いてるキーもありますが、 機能を知っても使わなそうなものも多いので使えるキーは結構あると思います。

色々設定してますが、一番のお勧めは、

"\eu":"\C-ucd ../;ls\C-m"

で、これは-Uで一つ上のディレクトリに移動します。 その後lsで内容表示してますがこれは好みで。

後、メタキーではないですが、よく使うものとして、

# grep prefix
"\C-g": ""
# grep -r "" ./ # and avoid svn/git
"\C-g\C-r": "\C-ugrep -I -r \"\" ./|grep -v \"\\.svn\"|grep -v \"\\.git\"\C-a\ef\ef\ef\C-f\C-f"
"\C-gr": "\C-ugrep -I -r \"\" ./|grep -v \"\\.svn\"|grep -v \"\\.git\"\C-a\ef\ef\ef\C-f\C-f"
# find ./
"\C-g\C-f": "\C-ufind ./ -name \"**\" 2>/dev/null|grep -v \"\\.svn\"|grep -v \"\\.git\"\C-a\ef\ef\C-f\C-f\C-f"
"\C-gf": "\C-ufind ./ -name \"**\" 2>/dev/null|grep -v \"\\.svn\"|grep -v \"\\.git\"\C-a\ef\ef\C-f\C-f\C-f"

こんな設定を書いておくと、 -R Rと打つと、

$ grep -I -r "" ./|grep -v "\.svn"|grep -v "\.git"

と入力され、カーソルキーが最初の""の位置に行きます。 これは現在のディレクトリ以下にあるファイルの中身をgrepで検索するコマンドです。 SVNやGitのディレクトリでもよく使って、これらの設定ディレクトリは外したいので外すような設定を入れています。

findのは現在の居るディレクトリ以下から指定の文字列を含んだファイル、ディレクトリを検索します。

こんな感じで複数の組み合わせのショートカットも出来るので色々便利。

長いコマンドを関数やエイリアスとして設定する方法もありますが、 こういったショートカットに割り当てておくとより簡単に呼び出せて便利だったりもします。

Sponsored Links
  1. (-Wはウィンドウを閉じる、ですが、その後 ターミナルとかでは間違って閉じたく無いので他で無効化してたので、 実はここで抜かなければよかっただけだったり。

Sponsored Links

« Travis CIでのMacのOS環境を変更する設定 GNU screenで再接続時に二重起動を防ぐスクリプト »

}