如何在Vim中将所有文本转换为小写


211

如何将Vim中的所有文本转换为小写?可能吗


我们有很多html页面,所有字符均为大写。这样可以节省我重新键入所有小写字母的时间。
ksuralta

2
在对问题进行编辑之前,它是如何将vim中的所有文本转换为小写。显然,存在将文本转换为小写的用例。
Lemonad

Answers:


122
  1. 如果您真的是小写字母,那就不可能-就像在任何文本编辑器中(而不是文字处理程序中)无法将文本转换为粗体或斜体一样。如果要将文本转换为小写,请创建可视块并按u(或U转换为大写)。~在命令模式下,连字符()反转光标下方字符的大小写。

  2. 如果要以小写字母显示Vim中的所有文本,则可能需要查看该guifont选项,或者键入:set guifont=*Vim风味是否支持GUI字体选择器。


33
我认为值得一提的是,您不必创建可视块来小写文本块。guu将小写一行,gu[motion]并将小写该运动的文本值。同样,gUU并且gU[motion]仅以大写形式工作。
Zachary Murray,2009年

1
实际上,使用letterscᴅᴇꜰɢʜıᴊᴋʟᴍɴoᴘʀsᴛᴜvwxʏz对于大多数字母也可以使用小写字母。
gerrit

1
但是,那只是一个hack。这些字符不能用作常规的大写字母,并且字体不能很好地支持它们。(举个例子,在我的台式机上,F呈现奇怪的样子,在我的手机上它根本无法呈现。)总之,Unicode的有趣部分,谢谢!
zoul

2
这个答案是不正确的。user80168的答案正确。
韦恩·沃克曼

400

我假设您要小写文本。解决方案非常简单:

ggVGu

说明:

  1. gg -转到文本的第一行
  2. V -在行模式下打开视觉选择
  3. G -转到文件末尾(目前已选择全文)
  4. u -小写选择区域

88
或ggguG(如果您希望不进行可视选择就这样做)。:help gu
DrAl

18
U大写使用大写(例如ggVGU
内森·华莱士

42

与mangledorf的解决方案相似,但更短且对外行友好

:%s/.*/\L&/g


3
:%s/.*/\L&就足够了(因为不需要选择g标志,因为可以.*选择整条线)
Gordon Gustafson 2014年

1
就像:%s/./\L&/g/ g /表示该行的全局操作一样。不过,让我着迷的是&。为什么有必要?
Braden Best

1
&站在这里的what was matched by the pattern,所以也可以理解为:取代.*\Lowercase(what was matched by the pattern)。请注意,.全局匹配比匹配慢.*
Camusensei

39

使用此命令模式选项

ggguG


gg - Goto the first line 
g  - start to converting from current line    
u  - Convert into lower case for all characters
G  - To end of the file.

27

给猫皮很多的方法...这是我刚刚发布的方法:


:%s/[A-Z]/\L&/g

同样对于大写字母:


:%s/[a-z]/\U&/g

我更喜欢这种方式,因为我一直都在使用这个构造(:%s/[pattern]/replace/g),所以它更自然。


我认为在最后一个示例中有一个Typo(“大写也一样”)-正则表达式应更改为[az]而不是'[AZ]'。
monojohnny

1
:%s/./\U&/g也可以。原来,它忽略数字和非字母字符。让我着迷的是&。为什么\ U(或\ L)本身不够?我们可以对此进行解释吗?
Braden Best

2
&是匹配字符串的替代。因此\U&将匹配的字符串大写,以便可以将其用于替换。
亚历克·雅各布森

22
  • 用g〜然后将一个动作将大小写“ HellO”切换为“ hELLo”。
  • 用gU将大写字母“ HellO”转换为“ HELLO”,然后移动。
  • 将小写的“ HellO”小写到“ hello”,然后再移动。

有关示例和更多信息,请阅读:http : //vim.wikia.com/wiki/Switching_case_of_characters


我猜没有,但是在@mangledorf的答案中有一个比直觉更直观的替换命令,方法是用转义序列“ \ L&”代替小写字母,用“ \ U&”代替大写字母。让我着迷的是&。\ L和\ U很有意义,但是为什么有&必要呢?
Braden Best

9

ggguG

gg:转到第一行。 顾:改为小写。 G:到最后一行。


这与卡拉尼迪的答案有何不同?
MSeifert

赞成将其设为0,这是与上一个答案相同的答案的适当分数。@MSeifert负分数应保留给错误/有害的解决方案
Titou

7

通常Vu(或VU大写)足以将整行变成小写V已经选择了整行来对其进行操作。

Tilda(~)更改单个字母的大小写,从而导致驼峰式大小写或类似的情况。

Vim如何具有许多不同的模式来应对各种场合,以及这些模式如何整齐地组织起来,真是太好了。

例如,v-真正的视觉模式,以及相关的V-视觉线,以及Ctrl+ Q-视觉块模式(允许您选择块,这是其他一些高级编辑器通常也可以通过按住Alt键并选择文本来提供的出色功能)。


6

如果您在Unix下运行

:0,$!tr "[A-Z]" "[a-z]"

4
方括号是多余的,一旦删除了方括号,也不需要引号。 :%!tr A-Z a-z
短暂

所述!指示外部外壳命令,那么$ man tr(相对于:help tr)显示trtranslate
Braden Best

另一种方式::%0,$!tr [:upper:] [:lower:]
albertovar

2

我遇到了类似的问题,我想使用":%s/old/new/g",但最终使用了两个命令:

:0
gu:$
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.