web-dev-qa-db-ja.com

「vi」と入力したが「cd」を意味する場合に自動的に検出しますか?

1日に5回程度、「cd」を意味するときに「vi」と入力すると、viでディレクトリが開きます。それは私にナッツを作っています。 「vi +ディレクトリ」と入力すると、それを検出して自動的に「cd +ディレクトリ」に変更する方法があるはずです。考え?

21
Alex

最後の引数としてディレクトリを指定してviを呼び出すことを想定しています。

vi() {
    if [[ -d ${!#} ]]; then
        cd "$@"
    else 
        command vi "$@"
    fi
}
38
Chris Down

@ChrisDownの回答とは別に、ここに別のアプローチがあります。ディレクトリをバイパスする

このアプローチでは、次のことができます。

vi ./*

そして、サブディレクトリが含まれていても、現在のディレクトリにあるすべてのファイルでviを起動し、それらのサブディレクトリをバイパスします

vi() {
  for arg do
    [ -d "$arg" ] || set -- "$@" "$arg"
    shift
  done
  [ "$#" -gt 0 ] && command vi "$@"
}

これは、ディレクトリではない任意の引数でviを実行するだけです...したがって、「vi」を「cd」に使用することは教えません;)

また、次のようにした場合、viは呼び出されません。visomedirectory(つまり、cdではなくviの入力ミス)。ただし、その場合は自動的にcdされないため、cdと入力する必要があることを覚えておいてください^^

「互換性のある」方法を使用して引数リストを変更し、多くのプラットフォームに移植できるようにしました。

4
Olivier Dulac

1つの解決策は、cdの使用を完全に停止することです。 shopt -s autocdあなたの.bashrcまたはsetopt autocdあなたの.zshrc。次に、別のディレクトリに移動するには、コマンドを入力せずにディレクトリ名を入力します。

ファイルを編集する場合は、必ずviと入力してください。

単一のコマンドでディレクトリに変更するか、ファイルを編集する必要がある場合は、それを関数にすることができます。

vi () {
  if [ $# -eq 1 ] && [ -d "$1" ]; then
    cd -- "$1"
  else
    command vi "$@"
  fi
}