zshラインエディタ:パラメータでナビゲートして編集できますか?

zshラインエディタ:パラメータでナビゲートして編集できますか?

コマンドを実行しようとすると、シェルで一般的な状況が発生します。

command "/some/complex/and terrible/path" -vf --various --flags --and -- things --config-file="/some other/annoyingly/large/path/to/somewhere"

わかると、私はほとんどの時間をそこにいましたが、いくつかのものを移動しなければなりませんでした。次の手順を試す前に、最後のパラメータを一番前に移動する必要があるとします。

command --config-file="/some other/annoyingly/large/path/to/somewhere" "/some/complex/and terrible/path" -vf --various --flags --and -- things

これをキーストロークゴルフの観点から見てください。怖い状況です。これは実際には、コマンドのほぼ半分を再入力(またはコピー&ペースト)する必要がある悪夢のようなシェルコマンド入力シナリオです。精神を維持するための最善の希望は、おそらく外部エディタを使用することです。[このように]

daWそれにもかかわらず、Vimはarg解析を実行するのに十分賢くありません。したがって、vimのパフォーマンスを考慮すると、約8回のキーストロークだけで操作を実行できますが、最後のargを取り出すために使用できる簡単な方法はありません。

私はvimをすべてのコーディングタスクに使用するので、vimでテキストを編集するために多くのソフトウェアを使用しているので、これが良い解決策になる可能性があると思いました。

しかし、私が望むのは、Zsh(またはBash!)ラインエディタが引数をプッシュできるようにプログラムできることです。このような:https://github.com/AndrewRadev/sideways.vimもちろん、このプラグインはスペースで区切られたシェル引数では機能しません。そしてvimが必要です。

--config-file方向ジャンプ(argのどこかにカーソルを置き、次にHopLeftをマッシュしてargを左にジャンプできます)またはドラッグ&ペースト(argのどこかにカーソルを置くことができます)に満足します。--config-file取り出し、ホームを押します。前方に行き、後ろに貼ります。)

これにより、個々の文字の代わりに引数を単位でナビゲートして、シェル引数をすばやく再構成できます。一般的なコマンド編集速度が大幅に向上します。私はシェルから直接異常に大量のコーディングを実行するので、これは非常に心配です。

このアイデアをさらに発展させるには、エディタとして実装されます。モデル、これをパラメータ編集モードと呼びます。ここで、カーソルは文字の代わりにパラメータの上に移動し、パラメータに対してより完全な作業セットを1単位で実行できます。

それでは現実に戻りましょう。問題はこれです:プログラムでzshに現在あるシェルの引数を削除させることはできますか?それからもう一度貼り付けますか?単に単語ジャンプではなく、実際のパラメータに基づいてジャンプできるキーをバインドできますか?

thisに使用する既存のバインディングがないようですが、bindkeyプログラムでカーソル位置を制御できる場合は、そうする方法があるようです。最終的に私は私のコマンドをリアルタイムで構文を強調表示するプラグインを使用します。https://github.com/zsh-users/zsh-syntax-highlighting

答え1

select-word-styleこのフレームワーク、特にそのフレームワークを探している可能性があります。シェルテキストスタイル。バラより

info zsh select-word-style

たとえば、次を追加します~/.zshrc

autoload -U select-word-style
zle -N select-word-style
bindkey '\ez' select-word-style

次に(対応するパターンを使用すると仮定emacs

  • Alt+Z電話するにはタップしますselect-word-style
  • テキストスタイルを選択できるメニューが表示されます。Sテキストshellスタイルを選択するにはタップします。
  • その後、Ctrl+W前の単語は完全な引数で削除されます(aシェル言葉)。
  • Ctrl+Aまたは行のHome先頭に移動
  • Alt+F単語を右に移動
  • Ctrl+Y以前に削除した単語をキャンセルします。
  • Alt+ZN帰りたいならノーマルテキストスタイル。

答え2

問題はこれです:プログラムでzshに現在あるシェルの引数を削除させることはできますか?それからもう一度貼り付けますか?単に単語ジャンプではなく、実際のパラメータに基づいてジャンプできるキーをバインドできますか?

そうそうできます。ただ使用私のZsh編集プラグイン。これには、シェル全体をスキップして切り取るためのキーバインディングが含まれています。

関連情報