viモードのbashの最後のコマンドの最後のパラメーター


19

私は(Stack Overflowで)最愛のbashをviモードで使用することを確信しています。これまでのところ、私は非常によくそれに慣れて、私はそれが好きです。

しかし、私は本当に1つの機能を見逃しています:emacsモードでは、「ESC」を押すことで前のコマンドの最後のパラメーターを入力できます。(つまり、エスケープを押してから。を押します)

viモードで最後のパラメーターを挿入するデフォルトのバインディングはありますか?私はそれを見つけることができず、このコマンドを本当に見逃しています...

回答:


9

デフォルトはありません。viモードに切り替えると、「yank-last-arg」のバインド(「bind -p」でリストされている)は消えます。

bind '"\e."':yank-last-arg

同じバインディングを返します(または別のものを選択します)


1
zshのクローンbindkey "\e." insert-last-word
jhvaras

私は何年もzshでそれをしてきましたが、bashを使用することを強制されるたびに(たとえば、職場のサーバーで)、bashでの設定方法がわからなかったことを忘れ続けます。もういや!これとの組み合わせhistory-search-backwardsは、深刻なコマンドラインユーザーにとって非常に貴重です。
スリダールサルノバト

11

デフォルトでは「_」にマッピングされる(vi-yank-arg)があります。(コマンドモードで)必要なことを行う必要があります。


+1。この答えが受け入れられなかった理由はわかりません。
サティヤム

7

正確には同じではありませんが、どちらのモードでもを入力でき!$、前のコマンドの最後の単語に置き換えられます。マニュアルそのようなことをもっと見つけてください。


賛成票を得るのに十分近いが、まったく同じではない...実行する前に行を編集する可能性がありません。とにかく感謝します!
ミズーリ州

5

〜/ .inputrcのファイルは、(それが見つからない場合は、手動でそれを生成することができます)、キーマップを設定することができます。〜/ .inputrcに次のコマンドを追加します。

"\e.": yank-last-arg
"\e_": yank-last-arg

私の〜/ .inputrcは:

set completion-ignore-case on
set show-all-if-ambiguous on
set show-all-if-unmodified on

set editing-mode vi
set keymap vi-insert

"\C-p": previous-history
"\C-n": next-history
"\C-a.":beginning-of-line
"\C-e.":end-of-line

"\e.": yank-last-arg
"\e_": yank-last-arg

readlineの詳細については、httpbind -p//linux.about.com/library/cmd/blcmdl3_readline.htmをご覧ください。

また、bashのViキーブラインドReadline VI編集モードのチートシートに関する情報


3

.bashrc内で、これらを追加します。

set -o vi
bind -m vi-command ".":insert-last-argument
bind -m vi-insert "\C-l.":clear-screen
bind -m vi-insert "\C-a.":beginning-of-line
bind -m vi-insert "\C-e.":end-of-line
bind -m vi-insert "\C-w.":backward-kill-word

これらは、ESC-dotだけでなく、Ctrl-A、Ctrl-E、Ctrl-W、Ctrl-Lのデフォルトの動作を復元します。したがって、通常のbash viモードを楽しむことができ、今でも知っている、大好きなショートカットを使用できます。さらにアクションが必要な場合は、「man bash」をチェックして、必要なreadlineアクションの名前(「clear-screen」、「end-of-line」など)を見つけてください。


0

$_前のコマンドの最後の引数を参照するために使用できます。

欠点は次のとおりです。

  1. Enterキーを押す前に、挿入されたものが挿入しようとしたものであることを確認できません。

  2. PROMPT_COMMANDまたはDEBUGトラップ(どちらが正確に問題を引き起こすのかわかりません$_。どちらも.bashrcにあります)を使用して、実行中のコマンドをxtermタイトルに入れるなどの凝った作業を行うと、それはclobberになります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.