web-dev-qa-db-ja.com

Vimのコマンドラインモードで通常モードのモーションを使用する

コマンドラインモードでモーダル編集は可能ですか?

いくつかの例:

  • !ls ~/foo/barを書き込んだ後、dbで削除したいbar
  • 上記のコマンドを実行し、lsmvに変更して$に戻りたい
59
Natan Yellin

デフォルトでは、VimコマンドラインでControl + f(またはset ceditを参照)を押すと、通常モードのVim編集キーを使用してコマンドを編集できるコマンドラインウィンドウが開きます。 Enterはコマンドを実行するか、Control + cは標準のコマンドラインに戻ります。

そのため、具体的な例では、VimコマンドラインでControl + fを押し、次にdbを押すと、必要なことが実行されます。

より洗練された編集コマンドを実行する必要がある場合は、上記のアプローチを使用します。なぜなら、私は代替手段よりもVimの編集キーに精通しているからです。また、通常モードのvimキーの方が強力です。

詳細については、:help c_ctrl-fを参照してください。

98
Jeromy Anglim

vimのコマンドラインモード:<ctrl-w>は単語を削除します

通常モードq:はコマンド履歴に移動します(これはvimコマンドで編集できます)

見る :help cmdline-editingおよび:help cmdline-windowより多くのコマンド。

25

コマンドラインモードでの移動と編集のための組み込みホットキー

<Esc>        abandon command-line without executing it
CTRL-C       abandon command-line without executing it

CTRL-B       cursor to begin of command-line
CTRL-E       cursor to end   of command-line

CTRL-F       opens the command-line window (unless a different key is specified in 'cedit')

CTRL-H       delete the character  in front of the cursor (same as <Backspace>)
CTRL-W       delete the Word       in front of the cursor
CTRL-U       delete all characters in front of the cursor

CTRL-P       recall previous command-line from history (that matches pattern in front of the cursor)
CTRL-N       recall next     command-line from history (that matches pattern in front of the cursor)
<Up>         recall previous command-line from history (that matches pattern in front of the cursor)
<Down>       recall next     command-line from history (that matches pattern in front of the cursor)
<S-Up>       recall previous command-line from history
<S-Down>     recall next     command-line from history
<PageUp>     recall previous command-line from history
<PageDown>   recall next     command-line from history

<S-Left>     cursor one Word left
<C-Left>     cursor one Word left
<S-Right>    cursor one Word right
<C-Right>    cursor one Word right

<LeftMouse>  cursor at mouse click

参照: - :help ex-edit-index

(以前の回答と重複していることをお詫びします。うまくいけば、この完全な°、構造化された概要がそれにもかかわらず有用です。)
°2014年現在–新しいキーボードショートカットが追加されている可能性があります

12
Aaron Thoma

検索する :help cmdline-editingin Vim。

コマンドラインモードで機能するショートカットのリストが表示されます。

現在の問題の抜粋:

CTRL-B or <Home>                    *c_CTRL-B* *c_<Home>*
    cursor to beginning of command-line
CTRL-E or <End>                     *c_CTRL-E* *c_<End>*
    cursor to end of command-line
<S-Left> or <C-Left>                    *c_<C-Left>*
    cursor one Word left
                        *c_<S-Right>*
<S-Right> or <C-Right>                  *c_<C-Right>*
    cursor one Word right

またはq: Reneが述べたように、以前に入力したコマンドをさまざまなモードで編集できます。

8
Xavier T.

「通常モード」のようなコマンドライン編集用のプラグイン

emacscommandline は、Emacsスタイルのマッピングを追加することにより、コマンドラインモードをUnixコマンドラインのように動作させます( Bash Shell)。一部のマッピングは既存のvimコマンドをマップするだけですが、残りはネイティブで利用できない機能を実装しています。

conomode.vim は、コマンドラインの上部に一種の通常モード(「Cmdline-通常モード」)を実装します。目的はcmdline-window(q :)に似ていますが、ナビゲーションと編集はインプレースで実行できます。もちろん、cmdline-windowの方がはるかに強力です。

ConomodeはVimのネイティブのemacsスタイルのコマンドライン編集に代わるものではなく、CTRL-Oを1つ追加するだけです(下記参照)。

  • c_で入力します(コマンドラインモードでCTRL-Oを押します)
  • モードインジケーターはコロン「:」であり、カーソルと共に移動し、その下の文字を非表示にします
  • i、i、a、A、:、または任意のマップされていないキー(それ自体が実行または挿入される)でCmdlineモードに戻るか、60秒待ちます。
  • escで通常モードに戻る

(確かに、私はこのプラグインのポイントを理解していません。 Ctrl+O コノモードに入るには、コマンドラインウィンドウを Ctrl+F。)

そこに他のプラグインがあるかもしれません。 → https://www.google.com/webhp?q=command-line+editing+plugin+vim

本格的なプラグインを採用する代わりに、またはそれを補完するものとして、独自のマッピングを定義できます。 →私の他の answer を参照してください。

4
Aaron Thoma

通常モードのコマンドを複製するカスタムマッピング

コマンドラインモードで、特定の標準コマンドをキーストロークに手動でマップできます。

たとえば、次のマッピングのセットは Alt+h コマンドラインモードでは、1文字左に移動します。 Alt+k 同様に、前のExコマンドなどを呼び出す hjkl 通常モード。

" provide hjkl movements in Command-line mode via the <Alt> modifier key
cnoremap <expr> <A-h> &cedit. 'h' .'<C-c>'
cnoremap <expr> <A-j> &cedit. 'j' .'<C-c>'
cnoremap <expr> <A-k> &cedit. 'k' .'<C-c>'
cnoremap <expr> <A-l> &cedit. 'l' .'<C-c>'

Alt修飾キーはデフォルトでは(重要なものに)マップされていないため、同じ方法で他の(またはすべての)機能を通常モードから挿入モードにプルできます。例:現在の単語の先頭に移動するには Alt+b

" Normal mode command(s) go… --v <-- here
cnoremap <expr> <A-b> &cedit. 'b' .'<C-c>'
cnoremap <expr> <A-w> &cedit. 'w' .'<C-c>'

" <Alt>+<i> changes the first Word (typically 
"   the last run Ex :command or the last range, given the case)
cnoremap <expr> <A-i> &cedit. '^cw' .'<C-c>'

そのコードをvimrcファイルにコピーして、vimを起動するたびに読み込まれるようにする必要があります(通常モードで:new $myvimrcと入力すると、コードを開くことができます)。


「ホイールを再発明する」代わりに、または独自のマッピングを補完するものとして、フル機能のプラグインを他から引き出すことができます著者→私の他の answer を参照してください。

1
Aaron Thoma