hotoolong's blog

プログラムのことやエンジニアリングに関することを記事にしています。

fishでCmd+[とCmd+]を使って移動したディレクトリに移動する

こちら記事を書いたのですが、設定するとペーストが壊れてしまう事象が発生してしまいました。 事象が解消してから設定することをおすすめします。

概要

Macでブラウザの戻る進むを Cmd+[ と Cmd+] で行うのと同じように
Slackのチャネルの戻る進むを Cmd+[ と Cmd+] で行うのと同じように
fishでのディレクトリの移動を Cmd+[ と Cmd+] で行いたい。

fish

config の設定

bind \e\[ prevd-or-backward-word
bind \e\] nextd-or-forward-word

configに上記を追加します。
\eはEscです。
ここではCmdではないです。本来であればCmd+[をそのまま認識させたいのですが、
やり方がなさそうなので、Escにしています。
別のなにかに置き換えていても問題ないです。
今回はこのようにしています。

prevd-or-backward-wordとは

次にprevd-or-backward-wordの中身を確認しておきます。
(※ ここは読み飛ばしてもらっても問題ないです。)

function prevd-or-backward-word
  set -l cmd (commandline)
  if test -z "$cmd"
    prevd
    commandline -f repaint
  else
    commandline -f backward-word
  end
end

コマンドが入力状態をチェックして入力されてなかったら
prevdを発行して再描画しています。
prevdは以前にいたディレクトリへ移動するコマンドです。
backward-wordは1文字戻るコマンドです。入力中の場合は一文字戻るようにしているようです。

やりたいことだけだと

prevd
commandline -f repaint

ここの処理だけです。 このコマンドを別途切り出してもfunctionにしてもいいのですが、
今回はprevd-or-backward-wordが既に実装されているのでこれを使うことにしました。

iTerm2の設定

最近はiTerm2のショートカットが勝手に起動して少し使いづらさを感じていて移行しようか迷い中ですが、 今回はiTerm2の設定です。

Cmd+[とCmd+]を入力してEsc+[とEsc+]に変換する設定を追加しています。

iTerm2のPreferencesからProfilesのタブを選択して
Profileを選択(私の場合はDefault)
Keysのタブを選択して一覧の下にある+ボタンを押して設定を追加します。
Keyboard ShortcutにはCmd[を設定してActionにSend Escape Sequenceを設定して Esc + [ を設定すればOKです。

まとめ

これでCmd+[とCmd+]で戻ることができます。
..を押すことが度々ありますが、これでCmd+[で快適になりそうです。
ディレクトリ..での移動が多い人はやってみてはどうでしょうか。