私の知る限り、Vim には履歴拡張機能はありません。
その場合、当然のこととして、コマンド ラインで Vim が提供するツールを使用します。そして、オプションがあります!
<Up>
矢印フィルタリング
- コマンドライン編集コマンド
CTRL-W
単語を後方に削除する
<Left>
<Right>
移動、行頭/行末へのCTRL-B
移動CTRL-E
- コマンドライン ウィンドウ
q:
(またはCTRL-F
既にコマンド ライン上にある場合)を使用して、究極の履歴編集機能を利用できます。
- 目の前の特定の問題に対して、Vim の精神で慣用的な代替ソリューションを見つける
ただし、本当に Bash スタイルの履歴拡張が必要な場合は、コマンドラインの省略形と一緒に何かを<expr>
簡単にハッキングできます (少なくとも単純なケースでは)。
私が最も頻繁に使用する履歴拡張アイテム (率直に言って、それほど頻繁ではありません):
!!
、最新のコマンドライン
!-2
、2 番目に新しいコマンド ライン
!*
、前のコマンド ラインの最初の引数を除くすべての引数
!$
、前のコマンドラインの最後の引数
式の省略形としてそれらを実装する方法は次のとおりです。
cnoreabbr <expr> !! getcmdtype() == ':' ? @: : '!*'
cnoreabbr <expr> !-2 getcmdtype() == ':' ? histget(':', -2) : '!-2'
cnoreabbr <expr> !* getcmdtype() == ':' ? join(split(@:,'\s\+')[1:], ' ') : '!*'
cnoreabbr <expr> !$ getcmdtype() == ':' ? split(@:,'\s\+')[-1] : '!$'
そして、これがあなたの例がVimでどのように機能するかです:
:echo "Hello Stackoverflow"
Hello Stackoverflow
:echo "I'm posting on !$<Enter>
I'm posting on Stackoverflow
もちろん、本当にこのルートをたどる場合は、より複雑な式に関数を使用してください。