使い方! ! zshエイリアスから

使い方! ! zshエイリアスから

前のコマンドに基づいてエイリアスを作成しようとしています。

私が走ると言う

ag foo

リストを見ると、その結果をvimで活用したいのでそうしました。

vim -q<(!! --vimgrep)

私が望むエイリアスは

alias edit-last='vim -q<(!! --vimgrep)'

!!しかし、私のエイリアスでは動作しないようです。!!組み込みエイリアスに関する情報を見つけるのに問題があります。

答え1

!!はい歴史的拡張!歴史の拡張を始める最初のものは!!次のとおりです。イベントインジケータ前のコマンドを意味します。

以下からコマンド履歴にアクセスできます。fcそしてhistory組み込み関数と渡されたhistory変える

--vimgrepにのみ意味があるので、最後のコマンドagにエイリアスを適用するとag便利です。ag次のように前のコマンドを見つけることができます。

${${(M)history:#ag *}[1]}

--vimgrepまた、コマンドに挿入する必要があります。

alias edit-last='vim -q<(eval "${${(M)history:#ag *}[1]} --vimgrep")'

現在のディレクトリを変更すると、最後のagコマンドはもはや意味がありません。これは検出が困難です。許可されたコマンドをホワイトリストに追加することもできます。もちろん、これは完璧なテストではありません。

edit-last () {
  local cmd
  setopt local_options extended_glob
  for cmd in $history; do
    case $cmd in
      ((ls|(cvs|git|hg|svn) status)(| *)) :;;
      ("ag "*) vim -q<(eval "$cmd --vimgrep"); return;;
      (edit-last) :;;
      (*) echo >&2 "The previous ag command is too old."; return 125;;
    esac
  done
}

関連情報