Vimのコマンドタイプモードをプログラムで変更するには?

Vimのコマンドタイプモードをプログラムで変更するには?

現在のコマンドラインを失うことなく、あるコマンドタイプモードから別のコマンドタイプモードに簡単に切り替える方法はありますか?

[~/.vimrcマイファイル]<space>と文字を次に<c-space>再マップします。

  1. N、V、O =>:
  2. 私=>:
  3. :=> / => ?

上記の動作を実行するコードは次のとおりです。

function! s:ModMapSpaceChar()
  noremap <unique> <space> :
  map <unique> <nul> <c-space>
  map! <unique> <nul> <c-space>
  noremap <unique> <c-space> /
  inoremap <unique> <c-space> <c-o>:
  cnoremap <unique> <c-space> <c-\>eg:ToggleCmdTypes()<cr><c-c>@"
  let g:CmdTypes={':' : '/', '/' : '?', '?': ':'}
  function! g:ToggleCmdTypes()
    let a=getcmdtype()
    let b=get(g:CmdTypes, a, a)
    let c=getcmdline()
    let @"=b . c
    return ''
  endfunction
endfunction

call s:ModMapSpaceChar()

私の方法について私をいじめるのは不純な関数ですg:ToggleCmdTypes。理想的には、現在のレジスタに割り当てられている命令を返す必要があります"。その後、生成されたコマンドを実行する必要があります。

答え1

レジスタの破損を防ぐために、レジスタをバイパスする代わりにこの方法を使用することもできますfeedkeys()。唯一の欠点は、マクロで記録して再生すると機能しないことです。

全体的に、全体的なアプローチを再考することをお勧めします。このようにコマンドラインモードに切り替える方法はありません。検索を始めましたが、途中で自分がコマンドで実行したいという事実を知っている人は誰ですか? !

関連情報