30

vimで、コマンドラインから次のように実行すると

:normal! i

vimは挿入モードに入りません。同様にコマンド

:normal! A

カーソルを行の終わりに移動しますが、カーソルは挿入モードのままです。

これが機能しない理由はありますか?それができない場合は、vimscript関数の本体から挿入モードに入る別の方法を知りたいです(そしてもちろん、関数が戻った後も挿入モードを持続させます)。

編集:質問の2番目の部分がいっぱいになるように見えますが、どうすればそのようなことができるのか、なぜそれらが期待どおりに機能しないの:startinsertか疑問に思っています。空の行などがあるため、矢印の動きで「追加」をシミュレートすることは悪い解決策です。:normal! A:normal! a

4

3 に答える 3

38

通常のコマンドは、挿入モードでの終了を不完全なコマンドと見なして中止します。差出人help normal

{コマンド}は完全なコマンドである必要があります。{commands}がコマンドを終了しない場合、最後のコマンドは、<Esc>または<C-C> 入力されたかのように中止されます。「:normal」がビジー状態の間、表示は更新されません。これは、挿入コマンドを完了する必要があることを意味します(挿入モードを開始するには、:startinsertを参照してください)。

:startinsertあなたが探しているコマンドかもしれません。

:normal AIngo Karkatが提案しているように、にbang(!)を追加することで実現できます。差出人:startinserthelp startinsert

いつ!含まれているので、「A」のように機能し、行に追加します。

于 2012-07-20T21:30:32.353 に答える
19

すでに述べたものに加えて、次のstartinsertものを使用できますfeedkeys()

call feedkeys('A', 'n')

あなたが望むことをしますが、この方法で追加したキーは、現在のスクリプト/関数/マッピング/などの実行が終了した後にのみ処理されます.

于 2012-07-21T08:35:37.250 に答える
10

の代わりに、 (with ):normal Aを使用します。ヘルプに記載されています。:startinsert!!

の場合:normal a、カーソルを右に移動してから、を実行します:startinsert

于 2012-07-21T11:54:12.927 に答える