Hack #218: Vimでsshに接続する
Posted at 2011/06/02ツイート
問題
最も普及しているシェルvimshellを用いて、ローカルなマシン上で快適な環境を堪能していることと思います。neocomplcacheなどのもつファイル名補完などと見事な連携を遂げています。またvimshellの内部コマンドvim
は、vimshellを動作させているVim上の別バッファにファイルを開くというつくりになっておりますが、これがまた見事に、昔懐かしのzshやbashなどと似た動作をすることで、非常に容易に移行できたことに感動した方は多いでしょう。
しかしこれらはsshを介することで本来の実力を活かすことができず、残念な思いをすることになります。sshを使うためにはvimshellのiexeコマンドを用いることになります。あとはもうvimshellはiexeでssh経由先のサーバのシェルであるbashやzshを叩くだけの存在になってしまいます。そして接続先で誤ってvimコマンドなどを発行してしまうと・・・あとはもう悲惨の一言です。
解決
vimshell-sshという、今日完成したばかりのプラギンを用います。
- vimshell-ssh https://github.com/ujihisa/vimshell-ssh
このプラギンはコマンドも関数も提供せず、ただ、あなたがvimshellのiexeでsshコマンドを用いたときの、接続先でのvimコマンドの挙動のみを上書きします。
- 従来のiexe ssh上でのvimコマンド:
- 接続先サーバでvimのプロセスを立ち上げ、その出力をvimshell上で表示しようとする。
- 上書きされたiexe ssh上でのvimコマンド:
- コマンド発行時点では接続先サーバでは何もおこらない
- こっそりとscpでいま接続しているサーバに新規接続、引数のファイルを取得する
- ファイルをダウンロードできればそれを、なければ空のものを、別バッファに分割して表示する
- そのバッファで保存を行うと、こっそりとscpで中身をアップロードする
いかがでしょうか。また、隠れたメリットとして、
- 接続先サーバにvimがインストールされている必要がない
- そのため
~/.vimrc
のコピーは不要。プラギンのインストールも不要。 - vim自体が手元で動作するため、補完などで画面描画書き換えが頻繁に発生するものの、通信速度に関係なく快適な操作が可能
ということが挙げられます。
今後の課題
vimshellのiexe ssh上で、neocomplcacheのファイル名補完が行われません。これは将来誰かが開発するであろうneocomplcache-vimshell-sshによって解決されるでしょう。また、vimshell-sshへのパッチという形で解決するかもしれません。
vimとsshの連携の今後に期待されます。
ujihisaもどる
blog comments powered by Disqus