コマンドラインモードでモーダル編集は可能ですか?
いくつかの例:
!ls ~/foo/bar
を書き込んだ後、db
で削除したいbarls
をmv
に変更して$に戻りたいデフォルトでは、VimコマンドラインでControl + f
(またはset cedit
を参照)を押すと、通常モードのVim編集キーを使用してコマンドを編集できるコマンドラインウィンドウが開きます。 Enter
はコマンドを実行するか、Control + c
は標準のコマンドラインに戻ります。
そのため、具体的な例では、VimコマンドラインでControl + f
を押し、次にdb
を押すと、必要なことが実行されます。
より洗練された編集コマンドを実行する必要がある場合は、上記のアプローチを使用します。なぜなら、私は代替手段よりもVimの編集キーに精通しているからです。また、通常モードのvimキーの方が強力です。
詳細については、:help c_ctrl-f
を参照してください。
vimのコマンドラインモード:<ctrl-w>
は単語を削除します
通常モード:q:
はコマンド履歴に移動します(これはvimコマンドで編集できます)
見る :help cmdline-editing
および:help cmdline-window
より多くのコマンド。
<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年現在–新しいキーボードショートカットが追加されている可能性があります
検索する :help cmdline-editing
in 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が述べたように、以前に入力したコマンドをさまざまなモードで編集できます。
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 を参照してください。
コマンドラインモードで、特定の標準コマンドをキーストロークに手動でマップできます。
たとえば、次のマッピングのセットは 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 を参照してください。