コマンドラインモードタイプを<Esc>およびCtrlコマンドにする


11

以下の単語を引用したいとします。場合は|、カーソル位置がある、あなたは簡単に言葉を引用することができcw""<Esc>P、通常モードから。

|below

コマンドラインモードでも同じ動作を実現したいと考えています。私の質問は、コマンドラインモードで「」と入力する方法を教えてください<Esc>。私は:norm cw""<Esc>P他のいくつかのバリエーションを試しましたが、""<Esc>P代わりにを取得しました"below"

まだこれに関連して、コマンドラインモードタイプのCtrlコマンドを作成する方法を教えてください。たとえば、cw"<C-r>""<Esc>代わりに前述の単語を引用できます。しかし、入力するにはコマンドラインが必要になり<C-r>ます。これどうやってするの?


1
<C-x><C-e>readlineでコマンドラインを編集するのと同じように、Vimでコマンドラインウィンドウを開く$EDITOR必要があり<C-f>ます。を参照してください:help cmdline-window
romainl 2015年

回答:


11

<C-v>あなたが探しているものです。Escエスケープする必要なく、リテラル文字(文字列 "Esc"の代わりにリテラルなど)を入力できます。

:norm cw""<C-v><Esc>P

次のように表示されます:

:norm cw""^[P

そしてあなたがしたいことをします(すなわち、単語を引用します)。これを他の<C-?>マッピングで使用することもできます。たとえば、2番目のリクエスト:

:norm cw"<C-v><C-r>""

次のように表示されます:

:norm cw"^R""

上記と同じになります。Esc最後に追加を含める必要はありません。


10

これは、などの特殊キー<Esc>normalコマンドで変換されず、を押し<Esc>たように扱われるためです。これを解決するには、execコマンドを使用できます。そのようです:

:exec "norm cw\"\"\<Esc>P"

引用符との前にバックスラッシュを置く必要があることに注意してください<Esc>。二重引用符の代わりに単一引用符を使用しても機能しません。


これはCtrlコマンドでも機能しますか?コマンドでそれらをどのように記述する必要がありますか?
ゴンサロリベイロ

はい、動作するはずです。:あなたはそうのようにそれらを書くことができます"\<C-{insert key}>"
EvergreenTree

2

コマンドラインモードは異なります。そこでは、同じ(通常モード)編集コマンドを使用できません。コマンドのリストはにあります:help c_CTRL-V

現在、コマンドラインウィンドウ:help command-line-window)がありq:、通常<C-F>モードおよびコマンドラインモードから入力できます。ではそのウィンドウ、あなたはすべての通常のコマンドとマッピングを使用することができ、そのためには、オプション1になります。

オプション2は、コマンドラインモードの特別なマッピングです。私が言ったように、あなたは:normal他のアプローチを使うことはできません。それらを定義するための鍵は、:help c_CTRL-\_e「コマンドライン全体を評価して[結果]で置き換える[マッピング]です。」以下は、コマンドラインの最後でのみ正しく機能する簡単な例です。

:cnoremap <F1> <C-\>esubstitute(getcmdline(), '\w\+$', '"&"', '')<CR>

1
OPはコマンドラインのマッピングを作成するためのものではなく、コマンドラインからマッピングを実行するためのものです。
EvergreenTree
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.