从插入模式中将Vim中单词的第一个字符大写,然后返回到同一个地方

时间:2015-01-14 14:04:06

标签: vim keyboard-shortcuts

写作时,我经常发现我最终得到的东西是[where] [是光标):

quux foo fooba][rino

我的意思是

quux foo Fooba][rino

是否可以将foobarino大写为Foobarino,从插入模式开始,最终在同一个地方,而不擦除您可能设置的某个标记?

我知道我可以使用bgUlea之类的东西来移动单词的开头,大写一个字符然后移到最后并附加,但我想继续我离开的地方。

2 个答案:

答案 0 :(得分:2)

您可以将ea替换为gi

:help gi说:

Insert text in the same position as where Insert mode
was stopped last time in the current buffer.
This uses the |'^| mark.  It's different from "`^i"
when the mark is past the end of the line.
The position is corrected for inserted/deleted lines,
but NOT for inserted/deleted characters.
When the |:keepjumps| command modifier is used the |'^|
mark won't be changed.

答案 1 :(得分:2)

基于@ romainl的想法,这是一个由<C-g>~触发的完整映射。

" i_CTRL-G_~        Switch case of the start of the current word from insert
"                   mode.
inoremap <C-g>~ $<BS><C-\><C-n>b~gi

首先确保在自动缩进的情况下保持当前位置(通过插入虚拟字符),然后离开插入模式,跳转,执行大小写切换,最后在原始位置重新进入插入模式