最初に書いた文字を大文字にして挿入モードに入るにはどうすればいいですか?

最初に書いた文字を大文字にして挿入モードに入るにはどうすればいいですか?

私は F キーの 1 つにマクロを定義した繰り返しのタスクを実行していますが、そのマクロを実行するたびに、Shift キーを押したまま最初の文字を入力する必要があります。これもマクロに含めることができるかどうか疑問に思いましたが、そのための方法を探しても成果はありませんでした。

挿入モードに入る方法は、テキスト内のカーソルの位置に応じて多数あります。しかし、挿入モードに入った後に入力した最初の文字だけを大文字にするマクロを定義することはできますか?

答え1

まあ、これはちょっとハッキーな解決策ですが、うまく機能するようです。どのようにマッピングしたいのかよくわからないので、<leader>i私の例では にマッピングしました。自由に好きなように変更してください。

function! Icap()
  augroup icap
    au InsertLeave * exec "normal! \<C-o>gUlgi\<esc>:augroup icap | au! | augroup END\<cr>"
    au InsertEnter * exec "normal! m`"
  augroup END
endfunction

nnoremap <leader>i :call Icap()<cr>i

これは、2 つの自動コマンドを設定する関数「Icap」(「insert capitalize」の略) を定義します。最初の自動コマンドは、挿入モードに入る直前のものです。

次に、foo を呼び出した後、挿入モードを終了した直後に、次のことが起こります。

  • Vim は と入力します<C-o>gUl。これにより、ジャンプリストの前の位置に移動し、カーソルの下の文字を大文字に変換します。その後、vim は と入力します。gi<esc>これは、カーソルを前の位置に戻すためのハッキーな方法です。理論的には<C-i>動作するはずですが、テスト中に奇妙な問題に遭遇しました。

  • Vim は、この機能に属するすべての自動コマンドを削除します。これは、将来の挿入モードの変更によって、望ましくない奇妙な編集が行われるのを防ぐためです。

次のようなマッピングを行うこともできます。

nnoremap <leader>i :call Icap()<cr>

これにより、他のコマンドを使用して挿入モードに入ることができ ( c、、、、など)、大文字化の副作用も得られます。aIos

関連情報