如何进入插入模式并将我写的第一个字母大写?

如何进入插入模式并将我写的第一个字母大写?

我正在执行一项重复性任务,为此我在其中一个 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”的缩写),该函数设置两个自动命令。第一个自动命令是在进入插入模式之前执行的:

然后在调用 foo 之后,并立即离开插入模式,将发生以下情况:

  • Vim 键入<C-o>gUl。这将跳转到跳转列表中的上一个位置,并将光标下的字符转换为大写。在此之后,vim 键入gi<esc>。这是一种让光标返回到先前位置的 hack 方法。理论上<C-i>应该可以工作,但在测试时我遇到了奇怪的问题。

  • Vim 会删除属于此功能的所有自动命令。这是为了防止将来插入模式更改导致您不想要的奇怪编辑。

您还可以进行如下映射:

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

然后您就可以使用其他命令进入插入模式(、、、、c等)并且仍然获得大写字母的副作用。aIos

相关内容