読者です 読者をやめる 読者になる 読者になる

Re: vim scriptでディレクトリの存在を知る - dullhikoのだるい日記

vim

vimスクリプトでreadfile/writefileでファイルの読み書きをリストオブジェクトを通して出来ると知り、そのへんをいじっていて「ディレクトリの存在を知りたい」と考えるようになりました。

しかし、そのような関数はざっと見たところ見つからないです。

http://d.hatena.ne.jp/dullhiko/20091008#p1

あります。

let tmp = isdirectory('hoge')

ついでにファイル関係のチェックをする関数の紹介。

ディレクトリが存在するかどうか

  • isdirectory({dir})

上で紹介したやつ。mkdir({name}) って関数もあるのでなかったら作るとかもこの組み合わせで可能。

ファイルが読み込み可能かどうか

  • filereadable({file})

ファイルの存在チェックもするので、fileread() で読めるかをチェックしたいならこちらの方が確実。

ファイルが書き込み可能かどうか

  • filewritable({file})

filereadable() と同様。

ファイルが実行可能かどうか

  • executable({file})

system() を使う場合はこれで事前にチェックしておくと吉。
追記: 実際は実行可能なコマンドがあるかのチェックなので、$PATH とかも調べられます。ファイル自体を調べたい場合はフルパスで指定すること。

ファイルもしくはディレクトリが存在するかどうか

  • glob({file})

本来はワイルドカードを展開する関数だが、戻り値が空かどうかでファイル自体が存在するかのチェックに使える。これなら読み込み権限がないファイルの存在もチェックできる。


ちなみに glob() 以外は ~/ を $HOME に展開しないので、必要なら expand() で展開する。

echo filereadable(expand('~/.vimrc'))


system() はやろうと思えば何でもできるけど、環境依存が激しくなってしまうので組み込み関数がある場合はできるだけそちらを使いましょう!