現在開いているファイルのディレクトリにてVimShellを立ち上げる

Shougo/vimshell · GitHubを使うにあたって、真っ先に分からない点がありました。

  • 現在開いているファイルのディレクトリをカレントディレクトリとして開くにはどうしたらいいのだろう?

結論

:VimShell %:p:h

結論に至るまでのおまけ

help から引用します。

:VimShell {path}					*:VimShell*
			{path}をカレントディレクトリとして、vimshellを起動する。
			他のvimshellが起動している場合、そのvimshellにスイッ
			チし、カレントディレクトリを{path}に変更する。{path}を
			省略した場合、vimshellのカレントディレクトリは変更され
			ない。

※ぼくが実際によく使うのは:VimShellではなく:VimShellPopの方ですがpathの解釈は同じ

ぼくの設定ではカレントディレクトリを自動的に移動するようにはしていないため、
VimShellを立ち上げると現在のファイルと異なる場所になってしまいます。

path に現在開いているファイルのディレクトリパスを渡せばいいというのは分かります。
問題はそれをどうやればいいかです。ぼくが分かる範囲では2通りの参考情報があります。

  • :help filename-modifiers
							 *filename-modifiers*
	 *:_%:* *::8* *::p* *::.* *::~* *::h* *::t* *::r* *::e* *::s* *::gs*
	        *%:8* *%:p* *%:.* *%:~* *%:h* *%:t* *%:r* *%:e* *%:s* *%:gs*
ファイル名修飾子は "%", "#", "#n", "<cfile>", "<sfile>", "<afile>", "<abuf>"
の後で使うことができる。これらは関数 |fnamemodify()| と使うこともできる。Vim
が |+modify_fname| 機能付きでコンパイルされていなければ、これらの修飾子を使う
ことはできない。
--中略--
ファイル名が "src/version.c"、カレントディレクトリが "/home/mool/vim" のときの
例: >
	:p			/home/mool/vim/src/version.c
	:p:.				       src/version.c
	:p:~				 ~/vim/src/version.c
	:h				       src
	:p:h			/home/mool/vim/src
  • Vimテクニックバイブル 2-11 「カレントファイルのファイルパスを一部だけ変更したファイルを開く」

Vimテクニックバイブル ?作業効率をカイゼンする150の技

Vimテクニックバイブル ?作業効率をカイゼンする150の技

これらを参考にして上記結論に至りました。

こういう場合のVimの難点としては、やはり「実現方法の調べ方が分からない」なのかなと感じます。
今回のケースでは上記知識が頭の片隅にあったからよかったですが、
もしなかったらどうやって探すか、Vim力が低いぼくはちょっと手間取りそうです。
そういう手間を減らすためには普段からhelpやネット情報を見て、
「なんか方法あった気が」という取っ掛かりをたくさん用意しておくことが大事なのかもしれないですね。

Vimは慣れれば慣れるほど快適で離れられなくなりますが、そこに至るまでの習熟コストがちょっと高いですね。
でも好き。

なんにせよ、これでまた一つ快適に!