vimにファイルを保存した後にbash / zshコマンドを実行する方法は?

vimにファイルを保存した後にbash / zshコマンドを実行する方法は?

.zshrcvimで編集した直後に編集してインポートできるように、zshrcにエイリアスがありますが、alias zshrc='vi ~/.zshrc && source ~/.zshrc何も変更していなくてもファイルがロードされます。私はそれを使用した場合にのみファイルをロードしたいのですが:w:wq何も変更しないことにした場合は、不必要に再ロードしたくないと思います。

vim ~/.zshrc成功すると終了ステータスは0ではなく、失敗した場合は0ではありません0。明らかに、さまざまなタイプの失敗には、異なるゼロ以外の補償があります。たとえば、vimでvsを使用している場合、:q!vimの終了ステータスは何ですか?おそらく、返された終了状態(例えば)に:wqbashステートメントを集中させることができます。最初はvimを正常に開くと返されると思いましたが、端末にはvim内でどのvimコマンドが実行されたかを確認する方法が必要です。たとえば、使用できる条件文がありますか?これは明らかに有効なif条件ではありませんが、これを行う方法はありますか?ifif [ $? = 113 ]; then source ~/.zshrc; fi0if [ -exec $(vim ~/.zshrc) = ":wq" ]; then source ~/.zshrc; fi

たとえば、ファイルを操作し.cてvimを保存して終了したらすぐにコンパイルされることを確認したい場合にも役立ちますif [ -exec $(vim main.c) = ":wq" ]; then gcc main.c -o main && ./main; fi

ベストアンサー1

Vi(m)は、起動に失敗したか、ゼロ以外の状態で強制終了するスクリプトを実行しているか(該当する状態が可能かどうかわからない)、またはシグナルです。終了状態でおよびを区別できません:q!:wq

エディタを起動した後、エディタを終了する間にファイルが変更されたことを確認できます。ファイルが変更されたかどうかは不明です。今回の編集会議ではしかし、それは重要ではないと思います。厳密に言えば、ファイルを開いたままにしておくとファイルが変更されたかどうかを確認することはできませんが、同じファイル名に対するinodeの変更を確認するのに十分近いです。

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を呼び出すコードにファイルが存在することを確認してください。これは上記の純粋なシェルサイドソリューションよりも正確ですが、はるかに複雑です。

おすすめ記事