Zshrcにエイリアスがあるので_.zshrc
_を編集し、vim _alias zshrc='vi ~/.zshrc && source ~/.zshrc
_で編集した後すぐにソースを取得できますが、何も変更していなくてもファイルが読み込まれます。 _:w
_または_:wq
_を使用した場合にのみファイルをロードして、何も変更しないことにしたときに不必要に再ロードされないようにします。
_vim ~/.zshrc
_終了ステータスは、成功した場合は_0
_になり、失敗した場合はゼロ以外になります。どうやら、さまざまなタイプの障害からさまざまなゼロ以外のリターンがあります。たとえば、vimで_:q!
_と_:wq
_を使用した場合、vimの同等の終了ステータスはどうなりますか?たぶん、bash if
ステートメントを_if [ $? = 113 ]; then source ~/.zshrc; fi
_のような返された終了ステータスに集中させることができます。私が最初に考えたのは、vimを正常に開くと_0
_が返されるということでしたが、ターミナルがvim内で実行されるvimコマンドを確認するための何らかの方法が必要です。 if [ -exec $(vim ~/.zshrc) = ":wq" ]; then source ~/.zshrc; fi
のように使用できる条件ステートメントはありますか?それが機能するif条件は明らかに現実的ではありませんが、このようなことを達成する方法はありますか?
これは、たとえば_.c
_ファイルで作業していて、if [ -exec $(vim main.c) = ":wq" ]; then gcc main.c -o main && ./main; fi
のようにvimを保存して終了した直後にコンパイルされるかどうかを確認する場合にも役立ちます。
Vi(m)は、起動に失敗するか、ゼロ以外のステータスで強制的に終了するスクリプトを実行している場合(および、それが可能かどうかはわかりません)、またはシグナルによって強制終了されない限り、ステータス0で終了します。終了ステータスでは、:q!
と:wq
を区別できません。
エディタを起動してから終了するまでの間にファイルが変更されたかどうかを確認できます。ファイルが変更されたかどうかはわかりませんこのエディターセッションでですが、これは重要ではないと思います。厳密に言えば、ファイルを開いたままにせずにファイルが変更されたかどうかを確認する方法はありませんが、同じファイル名のiノード変更時間を確認することは十分に近いです。
zmodload -F zsh/stat b:zstat
edit-and-source-if-changed () {
local filename=$@[$#]
local original_ctime="$(zstat +ctime -- $filename)" 2>/dev/null
vim "$@" || return
[[ -n $original_ctime ]] || return
if [[ $original_ctime != "$(zstat +ctime -- $filename 2>/dev/null)" ]]; then
echo source $filename
fi
}
Vimの終了時にコマンドを実行する 、および ファイルを保存してからコマンドを実行する を実行できます。したがって、Vim内から、ファイルを保存するときに変数を設定し、終了コードでその変数が設定されている場合は、固定名のファイルを作成するコマンドを実行できます。そして、Vimを呼び出すコードで、そのファイルが存在するかどうかを確認します。これはより正確ですが、上記の純粋なシェル側のソリューションよりもはるかに複雑です。