Vim使用時、一時的にシェルを使いたい場合、^Z:suspendしてシェルに降り、^@^@fgしてVimに戻る、というパターンが確立しています。

ここで問題なのが、一時的にシェルに降りる場合、シェルのカレントディレクトリとVimのカレントディレクトリが異なるということです。

特に、最近は作業内容毎に専用のtab pageを分けており(1番はTODO管理、2番は各種設定編集、3番はこのサイト関係、4番はVimのソースコード、5番以降は一時的な作業時に現れたり消えたり)、各tab pageに独自のカレントディレクトリを持たせ、tab pageの切り替えに応じて自動的に変更するようにしています。この使い方ではVimのカレントディレクトリがコロコロ変化するため、シェルに降りたときに一々cdすることが非常に面倒臭くなります。

と言う訳で:suspendでシェルに降りた際、シェル側のカレントディレクトリを自動的にVim側のカレントディレクトリに合わせたいのですが、これ、どうやればいいんでしょう? プロセス間を跨ぐので、ちょっとやそっとじゃ実現できなさそうな気がします。取り敢えず思いついた方法は次の3通り:

直接法: :suspend時にシェルの標準入力にコマンドを送る
どこから手を付ければいいのかさっぱり分からないので非常に難易度が高い。
間接法: :suspendではなくGNU screenを併用して代替
Vimの起動しているウィンドウ(仮にmainとする)の他に作業用のウィンドウ(仮にanotherとする)を用意。:suspendの代わりにanotherに切り替え、その際にcdを自動的に行う。という方法。
GNU screenが使えないと場合の対処をどうするかということと、そもそもこの方法が実現できるのかということが問題。
消極的解決法: :suspendでなく:shellを使う
速度的に多少の難があります(特にCygwinはひどい。bash completionを使っているせいもありますが)。

うーん、どうしましょう。取り敢えず間接法でやってみましょうか。直接法はBinary Hack的なノリになりそうな気がします。