7

私は開発中に次のようなことをしていることがよくあります。

:e <file>
:vsplit <the_same_file>  "reopen/re-edit with a vertical split

何人かの回答者が指摘しているように、これを行うにはもっと良い方法があります: :vs<CR>. しばらくの間、そうではなかったとします。

シェルでファイルを開いている場合は、次のように!$履歴展開を使用して、前のコマンドの最後の引数をキャプチャします。

$ echo "Hello" "stackoverflow"
Hello stackoverflow
$ echo "I'm posting on !$"
I'm posting on stackoverflow

この展開、および他の多くの展開は、コマンド ラインの使用方法を完全に再定義しました。vimに同等のものはありますか?%現在のファイルのエイリアスを知っています。過去のコマンド引数はどうですか?

4

3 に答える 3

3

私の知る限り、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

もちろん、本当にこのルートをたどる場合は、より複雑な式に関数を使用してください。

于 2013-08-28T21:15:26.537 に答える
1

引数なしで使用:vspすると、現在のウィンドウが分割されます。

あなたが求めているものとは正確には異なります%が、現在のファイル名をよく使用します。

:e some_file
:vsp %

見る:help cmdline-special

于 2013-08-28T20:11:27.103 に答える