Bash 単語を移動するためのさまざまな区切り記号

Bash 単語を移動するためのさまざまな区切り記号

コマンドラインでカーソルを特定の数の引数の後ろに移動するbash emacsモードのショートカットを探しています。私が探しているものを説明するために、具体的な例(カーソルが[]ある場所)を使用します。

スタート: $ prog -v a/b/c d/e/f[]

ターゲット: $ prog -[]v a/b/c d/e/fまたは$ prog -v[] a/b/c d/e/f

理想的には、bashにカーソルを戻すように効果的に話したいと思います。Nここで、パラメータは空白以外の文字で構成される連続した文字列です。

私が試したこと:

  • 十分に長く待つと、left-arrow行きたい場所に行くことができますが、非効率的です。

  • C-a、その後right-arrow十分に長く座っています。また、非効率的です。

  • M-breadlineが「単語」だと思うものを返しますが、実際には空白、スラッシュ、ダッシュで停止しているようです。しかし、空白文字でのみ停止したいです。与えられた例では、行きたい場所にM-b行くM-bには+ + + + +を使用し、必要に応じて2回使用する必要があります。M-bM-bM-bM-bM-b

  • M-7+ 7回しM-bM-b効率性は高くなりますが、「単語」区切り記号の数を数えるには脳の力が必要です。 readlineが「単語」区切り文字を考慮するよりも空白文字を計算する方がはるかに簡単です。

理想的には、返す引数の数を指定してから、M-2+のように返すように指示できますM-b

B@m0dularはviモードでパラメータ境界が必要に応じて処理されますが、Emacsモードを維持したいと思い、コマンド自体を繰り返し返さずに返すパラメータの数を指定できるようにしたいと指摘しました。 。

メモ:私はもともとこのバージョンをリリースしましたStackOverflowにありますが、プログラミングと直接関係がないので、ここに来ると提案しました。

答え1

必要な動作を得るためにいつでもvi-backward-bigwordAlt+Bバインドできます(他のテキストスタイルから選択することもできます)。vi-forward-bigwordAlt+Fzsh

bind '"\eb": vi-backward-bigword'
bind '"\ef": vi-forward-bigword'

それからそれを使うことができますAlt+2 Alt+B

shell-backward-wordまた、shell-forward-wordスキップシェルフラグもあります。たとえば、

cmd "first arg" $(echo second third)

"first arg"、、、$(およびechoはすべてシェルタグですsecond。通常、必要に応じてコマンド置換を引用すると、これはシェルタグになります。third)

答え2

ライブラリのemacsモードキーボードショートカットを使用して取得できる最も近いのは - -readlineであり、後方検索してそこにカーソルを置くことです。カーソルが行の先頭にある場合は、-を使用してカーソル位置から前方に検索することもできます。CtrlMeta]vvCtrl]v

答え3

これは実際にナビゲーションをどのように使用するかに関する質問でありreadline、デフォルトモードはemacsスタイルの移動です。set -o viviキーバインディングに興味があるかもしれません。

あなたの例では、set -o vi次のいずれかを実行できます。

Esc F--

または: Esc F-v

または、Bカーソルが目的の位置に達するまでマッシングを続けます。または、クリックしてEscコマンドvを編集しvim:wq実行します。実際、可能性は無関心です。

関連情報