
我正在執行一項重複性任務,我在其中一個 F 鍵中定義了一個宏,但每次執行該宏時我仍然必須按住 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
它的作用是定義一個函數“Icap”(“插入大寫”的縮寫),該函數設定兩個自動命令。第一個自動命令是在進入插入模式之前:
- Vim 將遊標的目前位置新增至跳轉列表。
然後在呼叫 foo 後,並在離開插入模式後立即發生以下情況:
Vim 類型
<C-o>gUl
.這將跳到跳轉列表中的上一個位置,並將遊標下的字元轉換為大寫。之後,vim 鍵入gi<esc>
.這是一種讓遊標回到之前位置的巧妙方法。理論上,<C-i>
應該可行,但當我測試它時,我遇到了奇怪的問題。Vim 刪除屬於函數的每個自動指令。這是為了防止將來的插入模式變更進行您不想要的奇怪編輯。
您也可以進行以下映射:
nnoremap <leader>i :call Icap()<cr>
然後,您可以使用其他命令進入插入模式(c
、a
、I
、o
、s
等),並且仍然會產生大寫副作用。