我正在执行一项重复性任务,为此我在其中一个 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