vimがインストールされているかどうかを確認する方法は?

vimがインストールされているかどうかを確認する方法は?

命令がインストールされているかどうかを確認する方法を知りたいです。

vi特に、コマンドが有効なすべてのシステムでエイリアスを使用したいと思いますvimvim私の* rcファイルを普通に保ちたいです。ただし、一部のオペレーティングシステムはデフォルトでインストールしませんvim。そして他の面では、vi はいViは改善されましたが、vim有効なコマンドではありません。

私はこれを行うことができると思います(bashスタイル):

#If the version info from vi includes the phrase "Vi IMproved", then vi IS vim.
vimInfo=$(vi --version 2> /dev/null | head -n 1 | grep -Fi 'VI IMPROVED')
if [[ -z $vimInfo ]]; then
  if [[ -f $(which vim) ]]; then
    #if the value returned by 'which' is a valid directory, then vim is installed
    alias vi='vim'
  else
    #vim is not installed
    echo "Vi IMproved (vim) is not installed";
  fi
fi

しかし、もっと良い方法がありますか?このwhichコマンドは、すべてのUNIXシリーズシステムに表示されることが保証されていますか?

PS私はほとんどすべての人気シェル(bash、tcsh、zsh、ksh)の* rcファイルを持っており、このソリューションをすべてのシェルに適用する予定です。したがって、ソリューションはシェルに限定されるべきではありません。文法できるしかし、そうです。

答え1

たとえば、次のようになりますcommand

command -v vim

シェル組み込みコマンドです。 (zsh、bash、ksh、しかし、tcsh)

存在するtcsh以下を使用できます。

~> sh -c 'command -v vim'

答え2

私はあなたが問題をあまりにも複雑に考えていると思います。

if type vim >/dev/null 2>/dev/null; then
  alias vi=vim
fi

vim実行する唯一の理由viは、これらのコマンドには有効なシステムがありますが、インストールが破損しているか、同じ名前の別のプログラムがある場合です。

このtype組み込み機能は、すべてのPOSIXシェルとほとんどのBourneシェルにあります。 cshから(そしてcshでのみ)、使用which

if ({ which vim }) alias vi vim >&/dev/null

魚の場合:

if type vim >/dev/null 2>/dev/null; alias vi=vim; end

関連情報