
デフォルト(emacs)モードでbashを使用してをクリックすると、次の動作が発生しますEsc。 .
$ echo hello
hello
$ hello # I hit `<ESC>.` to insert this
をクリックすると、 hello
挿入された単語の前にスペースはありません。Esc.
viモードに切り替えて設定すると、.
前にスペースがあります。
$ set -o vi
$ bind -m vi-command ".":yank-last-arg
$ echo hello
hello
$ hello # I hit `<ESC>.` to insert this. Note the leading space.
これらの先行スペースを避けるためにbash / readlineを設定する方法はありますか?
答え1
これはバグのように見えますが、実際にはBashはただ追いかけようとします。POSIXの指定の行動_
、
[count]_
現在の文字位置の後に <space> を追加し、<space> の後に前の入力行の最後のビッグワードを追加します。次に、追加した最後の文字の後に挿入モードに入ります。番号を持って計算、追加計算前の行の最初の大きな単語です。
回避策としてこれを追加してください~/.inputrc
。必要に応じて、バインドされていない他のキーに\M-h
変更します。
set editing-mode vi
set keymap vi-command
"\M-h":history-expand-line
".":"a!$\e\M-hA"
次に、新しい端末を開きます。.通常モードでタップすると
!$
コマンドラインに挿入されます。\e
(表示Esc)通常モードに戻ります。\M-h
最後の引数の値にhistory-expand-line
拡張されるアクションをトリガします。$!
A
行末に移動して挿入モードに入ります。
$ echo "X Y Z"
X Y Z
$ "X Y Z" #<ESC>. inserts this
$ echo "X Y Z"
X Y Z
$ cat "X Y Z" #cat <ESC>. inserts this
答え2
何かを挿入した後にコマンドモードに入ると、カーソルが左に移動します。まるで最後に入力した単語の後のスペースを取り除きますが、編集モードに戻って別のものを挿入すると、以前に挿入した単語の最後の文字の後のスペースが復元されます。
手動でスペースを追加すると、ダブルスペースが作成されます。