如何在Vim中将单词的第一个字母大写?

22

我知道在 Vim 中,使用 ~ 可以切换字符的大小写已经有很长一段时间了。但是是否有一种方法可以将一个键映射为大写一个单词并回到先前的位置呢?

例如:

I like to drink Coca co[l]

如果我的光标在“l”处,我意识到我还需要将“c”大写,那么目前我需要执行以下操作:

<C-c> b ~ ll i
有没有一种方法可以将单个键映射为使光标下单词的第一个字母大写,并保持光标在原始位置?

1
请看这里 - Bozhidar Batsov
这也是一份很好的指南。谢谢分享。 - Patrick
这就是如何正确使用vim! - kenny
5个回答

16
:nmap <whatever> m`b~``

2
最好将其设为 mlb~,这样即使您已经在单词的第一个字符上也能产生相同的效果。我自己使用这个功能。 - Hennadii Madan
谢谢,但它在可视模式下(使用vmap)不起作用。 - user4104817

11

个人而言,这正是我不想制作宏的事情类型。没有必要让您的.vimrc充满数十个这样的一次性解决方案,因为解决方案自然地从标准Vim命令“工具箱”中流动,您只需像第二天性一样将其串在一起即可。

我正在输入一个长单词:

the gallicizatio|

(其中|是光标的位置) 突然我意识到我忘记了将 "Gallicization" 的 G 大写。于是我按下 ESC 键(这个键位于我的键盘上的大写锁定键上,所以只需轻轻一点),接着按下 b~A,然后继续打字,就好像什么也没发生一样。那个错误的小写字母 g 被大写的时间足以让 Emacs 用户开始动他的右手去按箭头键,而我已经继续输入接下来的句子了。

相比之下,使用我已经很久没用过的宏可能需要更多的时间才能够记住我为该宏分配了哪些按键。更好的解决方案是学习重要的“核心”命令,这些命令可以根据简单的规则组合在一起,在飞行中产生数百万种可能的效果。


谢谢你的回答!对我来说,记住内置命令序列与记住我创建的映射或宏没有区别。虽然在新机器上,没有首选映射,但人们必须恢复到他们记得的内置命令 :) - Patrick
2
@Patrick:关键是你不需要记住内置命令序列(在这种情况下是b~A)。你只需要记住相对较少的个别内置命令,以及无限组合它们的规则。就像你可以通过记住有限数量的语素和组合它们的规则来构造无限、新颖的英语句子一样。 - Maxy-B
一个Emacs用户会使用M-b M-c来获得相同的结果,而不是移动箭头键。 - Carlo Espino

3

我经常这样做,使用EX命令行遍历匹配某个条件的多条记录。在这种情况下,我使用一个反向引用,看起来像这样:

:%s/\(\w\)\(\w*\)/\U\1\L\2/g

然后,问题就解决了,所有在特定上下文中的单词都会被处理。

编辑:还有这里,请看这个链接,它有类似的答案:

在vim中选择每个单词的第一个字母大写


2

你也可以使用宏

q<register> <C-c> b ~ ll i q

每次需要使用时,请执行@<register>

这种方法的问题在于,“ll”的长度对于每个单词都是不确定的。 - Patrick

0

更改多行文本的大小写

您可以使用以下步骤将第一个字母从小写更改为大写或反之:

步骤 -1-

使用:<,> 或者 ctrl+v 然后按 j 或者 k 高亮选中您要更改的所有行。

步骤 -2-

使用 l 或者 h 调整高亮选中每行的第一个字母。

步骤 -3-

从大写转换为小写使用 gu,从小写转换为大写使用 gU。这将适用于您所选中的所有字母。 注意:您可以使用:

  • gu(将大写转换为小写)
  • gU(将小写转换为大写)
  • g~(在大写和小写之间切换)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接