eshell でリモートサーバに入って作業をしていると
/
からディレクトリを辿りたくなることがあります。 深い作業ディレクトリから /etc 下のファイルを見に行きたい時などです。
ここで
cd /
としてしまうと、リモートの / ではなくて 当然、自マシンの / へ移動してしまいます。
かといって相対パスで ../../../ なんてやるのも面倒なので リモートサーバの / まで移動する eshell 用コマンド "cd/"を 適当 に作っておきました。
;; リモートホスト / へ移動
(defun eshell/cd\/ ()
(interactive)
(let* ( (host-name (concat
(car (split-string (eshell/pwd) ":/"))
":/")))
(eshell/cd host-name)
))
// ( を2つ続けると、はてなの markdown で注釈になるのか。。
ちなみに eshell で helm を使うととても便利です。
helm-eshell-history を使うと eshell のコマンド履歴を helm で絞り込み → 入力できます。
コマンドを一部入力した状態で実行すると、 入力した部分に一致する候補が絞り込まれた状態で helm が起動するので便利です。 eshell 標準の eshell-previous-matching-input-from-input と同じような機能ですが、 helm で絞り込みが効くのでより便利だと思います。
helm-esh-pcomplete を使うと pcomplete の補完を helm で選択して入力することができます。 pcomplete をそのまま使うよりもはるかに便利だと思います。 pcomplete を使っているので、リモートサーバの上でも補完が可能です。
ちなみに helm-esh-pcomplete で補完を行うと相対パスが絶対パスに変換されて入力されます。 これにより、 eshell の cd を使った移動履歴を helm-eshell-history で絞り込む際に 履歴が全て絶対パスで記録されているため カレントディレクトリを意識せずに cd の履歴を再利用することができます。
"cd " と入力して helm-eshell-history を実行することで、 eshell は autojump 無しで移動したことのあるディレクトリに どんどん移動することができます!!
よく使うので eshell-mode-hook で
(define-key eshell-mode-map (kbd "M-p") 'helm-eshell-history)
(define-key eshell-mode-map [(tab)] 'helm-esh-pcomplete)
と割り当てて使っています。
auto-complete での eshell 補完も設定しているので 簡単な移動は auto-complete で、 リモートなどへの遠い移動や履歴からの補完は helm でと使い分けています。
eshell 便利です。
// とは言うものの、素直に zsh 使った方が良いことが多いですが……