![如何进入插入模式并将我写的第一个字母大写?](https://linux22.com/image/1510033/%E5%A6%82%E4%BD%95%E8%BF%9B%E5%85%A5%E6%8F%92%E5%85%A5%E6%A8%A1%E5%BC%8F%E5%B9%B6%E5%B0%86%E6%88%91%E5%86%99%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%AD%97%E6%AF%8D%E5%A4%A7%E5%86%99%EF%BC%9F.png)
我正在执行一项重复性任务,为此我在其中一个 F 键中定义了一个宏,但每次执行该宏时,我仍然必须按住 Shift 键才能输入第一个字母。我想知道这是否也可以包含在宏中,但我搜索了各种方法,但无果而终。
进入插入模式的方法有很多种,与文本中光标的位置有关。但我是否可以定义一个宏,在进入插入模式后将我输入的第一个字母大写,并且仅此而已?
答案1
好吧,这有点像 hack 解决方案,但似乎有效。我不确定你想如何映射它,所以我<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”(“insert capitalize”的缩写),该函数设置两个自动命令。第一个自动命令是在进入插入模式之前执行的:
- Vim 将光标的当前位置添加到跳转列表。
然后在调用 foo 之后,并立即离开插入模式,将发生以下情况:
Vim 键入
<C-o>gUl
。这将跳转到跳转列表中的上一个位置,并将光标下的字符转换为大写。在此之后,vim 键入gi<esc>
。这是一种让光标返回到先前位置的 hack 方法。理论上<C-i>
应该可以工作,但在测试时我遇到了奇怪的问题。Vim 会删除属于此功能的所有自动命令。这是为了防止将来插入模式更改导致您不想要的奇怪编辑。
您还可以进行如下映射:
nnoremap <leader>i :call Icap()<cr>
然后您就可以使用其他命令进入插入模式(、、、、c
等)并且仍然获得大写字母的副作用。a
I
o
s