.zshrc を ~/.zshrc に修正する

.zshrc を ~/.zshrc に修正する

次のような場合に、何らかのエイリアスを設定する方法はありますか?

cd some/directory
vim .zshrc

しますvim ~/.zshrc

答え1

答えはあなたが思っているよりもはるかに簡単です。なぜなら、あなたは間違った質問をしているからです。

本当に言いたいのが「~/.zshrc現在の作業ディレクトリに関係なく編集できるエイリアスを作成するにはどうすればよいか」ということであれば、答えは単純です。

alias zshconfig="vim ~/.zshrc" 

この例は私自身のもので~/.zshrc、よく使います。

さらに良い選択肢として、翻訳:以下のコメントでは、次のようになります。

alias zshrc="vim ~/.zshrc" 

言い換えれば、ファイル名やファイル名へのパスをエイリアス化しようとしないでください。どちらも可能ですが、予期しない副作用が発生し、後で問題が発生する可能性があります。@マイケル・ホーマー指摘した。

しかし、あなたが好むのは で$EDITORあることがわかっているのでvimvimその特定のファイルの呼び出しをエイリアスするだけで、問題なく実行できるはずです。(コマンドと引数の特定の組み合わせを、コンテキスト外で使用される可能性が低い珍しい文字列にエイリアスする方がはるかに安全です。)

しかし、もっと一般的に言えば、2 文字のシーケンスの最適化について心配する必要はなく~/、それを入力することに慣れるべきだというのが私のアドバイスです。さあ、エディ・ヴァン・ヘイレンが音階を練習しているように、左手の小指を伸ばしてください。(小指でキーvimを押すことに慣れる必要があるため、この方法で習得するのに役立つでしょう。)Esc

タイピングスキルが向上すると、シーケンスの筋肉記憶が得られ~/、ホームディレクトリ内のファイルを参照するときにその文字列を確実に入力できるようになります。意図的に素早く入力し、誤って入力することはなくなります。

エイリアスに頼ることの欠点は、自宅のコンピューターでどれだけ速度が向上しても、sshクライアントのプライベート サブネット内のリモート Docker コンテナーにアクセスしたときにエイリアスがすべて消えてしまい、速度が低下することです。

答え2

意味がよく分かりませんが、そうですね。あなたがやっていることは、コマンドに別の名前やデフォルトの引数を与えるだけよりも複雑なので、エイリアスではなく関数が必要です。

function vim {
  if [[ $# -eq 1 && $1 == .zshrc && ! -e .zshrc ]]; then
    set -- ~/.zshrc
  fi
  command vim "$@"
}

説明: を実行するとvim、関数が呼び出されます。最後の行では、command vim …外部コマンドが呼び出され、"$@"関数に渡された引数が渡されます。その間に、引数が 1 つだけあり、その引数が正確な文字列であり.zshrc、現在のディレクトリに呼び出されたファイルがない場合.zshrc、コマンド ラインは に置き換えられます~/.zshrc。これらの条件が希望どおりでない場合は、調整してください。

答え3

おそらく、シェルとしてzshを使用していると思いますが、「グローバルエイリアス」機能があるこれにより、次のことが可能になります。

% alias -g .zshrc='~/.zshrc'
% echo .zshrc
/home/mwh/.zshrc

あれは、どこでも単語が.zshrcコマンドラインに現れると、 に置き換えられ~/.zshrc、その後、通常どおりチルダ展開の対象になります。 単語はシェルの「単語」である必要があるため、長い名前の一部だけの場合は展開されません。 これはどのコマンドでも機能します。

グローバル エイリアスは、どこにでも静かに展開されるため、非常に問題が多いことで有名です。そのため、たとえばrm .zshrc別のディレクトリで実行すると、自分のドット ファイルが対象になります。また、シェル関数の内部にも適用され、すでに定義されているものも対象となります。この場合、問題が発生する可能性は比較的低いと思われますが、問題が発生する可能性があることに留意してください。現在のディレクトリ内のファイルを で具体的に指定するか./.zshrc、 または で引用符で囲んでリテラル文字列を取得できます\.zshrc

関連情報