web-dev-qa-db-ja.com

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

これをキーストロークゴルフで見てみると、悲惨な状況です。これは実際には悪夢のようなシェルコマンド入力シナリオであり、コマンドのほぼ半分を再入力(またはコピーアンドペースト)する必要があります。正気の最大の希望は、外部エディターを使用することかもしれません [このように]

それでも、Vimは引数の解析を行うのに十分なほど賢くはありません(したがって、たとえばdaWを使用して最後の引数をスラップアウトする簡単な方法はありませんが、8回のキーストロークでジョブを完了することは可能です。 。)

ターミナルテキストエディタでテキストを編集するために多くのソフトウェアを持ってくるので、これはまともな回避策になると思います。

しかし、私が欲しいのは、Zsh(またはBash!)ラインエディターを何らかの方法でプログラムして、引数を押し付けることができるzleバインドを使用できるようにすることです。このような種類: https://github.com/AndrewRadev/sideways.vim しかし、もちろん、このプラグインはスペースで区切られたシェル引数でも機能しません。

方向性ホップ(カーソルを--config-file argのどこかに置いてから、HopLeftをマッシュして引数を左にホップできるようにするため)またはヤンク&ペースト( --config-file引数のどこかにカーソルを置き、ヤンクアウトし、ホームキーを押して先頭に移動し、その後に貼り付けます)。

このように、個々の文字を1つの単位としてナビゲートするのではなく、argsを1つの単位としてナビゲートすることにより、シェル引数を迅速に再構成できます。

さらにアイデアを進める場合、これはエディターモードとして実装されます。これを引数編集モードと呼びましょう。このモードでは、カーソルが引数ではなく引数を移動します。文字とより開発された一連のアクションは、引数に対して1つの単位として実行できます。

さあ、地球に戻りましょう。質問はこれです:プログラムでzshに現在使用しているシェル引数を削除させることはできますか?そして、それを貼り付けますか?単語をホッピングするだけでなく、実際の引数に基づいてホッピングできるようにキーをバインドできますか?

bindkeyで使用するためのすぐに使用できるバインドはないようですが、プログラムでカーソルの位置を制御できれば、それを実行する方法があるように思われます。結局のところ、ライブ構文でコマンドを強調表示できるプラグインを使用しています。 https://github.com/zsh-users/zsh-syntax-highlighting

3
Steven Lu

select-Word-styleフレームワーク、特にそのShell Wordスタイルを探しているかもしれません。見る

info zsh select-Word-style

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

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

次に(emacsモードを使用すると仮定)

  • 押す Alt+Zselect-Word-styleを呼び出す
  • wordスタイルを選択できるメニューが表示されます。押す SShellWordスタイルの場合。
  • その後 Ctrl+W 前のWordを完全な引数として削除します(a Shell Word)。
  • Ctrl+A または Home 行頭に移動します
  • Alt+F 1つの単語を右に移動します
  • Ctrl+Y 以前に殺されたWordをヤンクします。
  • Alt+ZNnormal Wordスタイルに戻りたい場合。
1