如何在 Vim 中将所有文本转换为小写
Posted
技术标签:
【中文标题】如何在 Vim 中将所有文本转换为小写【英文标题】:How to convert all text to lowercase in Vim 【发布时间】:2010-11-09 07:49:49 【问题描述】:如何将 Vim 中的所有文本转换为小写?有没有可能?
【问题讨论】:
我们有很多所有字符都是大写的html页面。这节省了我用小写字母重新输入所有内容的时间。 在编辑问题之前,它是如何将vim中的所有文本转换为小型大写字母。显然,有一个将文本转换为小写的用例。 VIM 网站有答案:vim.wikia.com/wiki/Switching_case_of_characters 谢谢。 【参考方案1】:我假设您希望将文本小写。解决方法很简单:
ggVGu
解释:
-
gg - 转到第一行文本
V - 在行模式下打开可视选择
G - 转到文件末尾(此时您已选择整个文本)
u - 小写选定区域
【讨论】:
或 ggguG 如果你想在没有视觉选择的情况下这样做。 :help gu 使用大写U
表示大写(例如ggVGU
)【参考方案2】:
-
1234563如果要将文本转换为小写,请创建一个可视块并按
u
(或U
转换为大写)。命令模式下的波浪号 (~
) 反转光标下字符的大小写。
如果您想在 Vim 中以小写字母查看所有文本,您可能需要查看 guifont
选项,或者如果您的 Vim 风格支持 GUI 字体选择器,则输入 :set guifont=*
。
【讨论】:
我认为值得一提的是,您不一定要创建视觉块来小写文本块。guu
将小写一行,gu[motion]
将小写该动作的文本。同样,gUU
和 gU[motion]
的工作方式相同,仅适用于大写。
实际上,大多数字母也可以使用小写字母,使用ᴀʙcᴅᴇꜰɢʜıᴊᴋʟᴍɴoᴘʀsᴛᴜvwxʏz。
不过,这只是一个 hack。这些并不意味着用作常规的小型大写字母,并且不受字体的很好支持。 (在我的台式机上,F 呈现奇怪,在我的手机上它根本不呈现,举个例子。)无论如何,Unicode 的有趣部分,谢谢!
这个答案不正确。 user80168 有正确答案。【参考方案3】:
使用此命令模式选项
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.
【讨论】:
【参考方案4】:类似于 mangledorf 的解决方案,但更短且对外行友好
:%s/.*/\L&/g
【讨论】:
:%s/.*/\L&
就足够了(不需要g
标志,因为.*
选择了整行)
与:%s/./\L&/g
一样,因为 /g/ 表示该行的全局操作。不过,让我感动的是&
。为什么有必要?
&
在这里代表what was matched by the pattern
,所以可以理解为:将.*
替换为\Lowercase(what was matched by the pattern)
。请注意,全局匹配.
比匹配.*
慢【参考方案5】:
给猫剥皮的方法有很多...这是我刚刚posted的方法:
:%s/[A-Z]/\L&/g
大写也一样:
:%s/[a-z]/\U&/g
我更喜欢这种方式,因为我一直在使用这种构造 (:%s/[pattern]/replace/g
),所以它更自然。
【讨论】:
我认为最后一个例子中有一个错字('同样为大写')- 正则表达式应该更改为 [a-z] 而不是 '[A-Z]' 。:%s/./\U&/g
也可以。结果它忽略了数字和非字母字符。我得到的是&
。为什么 \U(或 \L)本身不够?我们能解释一下吗?
&
是匹配字符串的替身。所以\U&
将匹配的字符串大写,以便它可以用于替换。【参考方案6】:
使用 g~
将 case “HellO”切换为“hELLo”,然后移动。
大写“HellO”到“HELLO”,gU
然后是一个动作。
小写“HellO”到“hello”,gu
然后是一个动作。
有关示例和更多信息,请阅读以下内容: http://vim.wikia.com/wiki/Switching_case_of_characters
【讨论】:
我猜没有,但是在@mangledorf 的答案中,有一个不太直观的替换命令,用小写的转义序列“\L&”替换所需的字符,并且"\U&" 表示大写。我得到的是&
。 \L 和 \U 非常有意义,但为什么需要 &
?【参考方案7】:
使用ggguG
gg
:转到第一行。
gu
: 改为小写。
G
:转到最后一行。
【讨论】:
这与 Kalanidhi 的回答有何不同? 赞成将此值设为 0,这对于作为前一个答案副本的答案来说是一个足够的分数。 @MSeifert 负分应该留给错误/有害的解决方案【参考方案8】:通常 Vu (或 VU 为大写)足以将整行转换为小写因为 V 已经选择了整行来应用该操作。
Tilda (~) 改变单个字母的大小写,导致驼峰或类似的大小写。
Vim 有许多不同的模式来处理各种场合,以及这些模式的组织方式,这真是太棒了。
例如 v - 真正的视觉模式,以及相关的 V - 视觉线,以及 Ctrl+Q - 可视块模式(允许您选择块,其他一些高级编辑器通常通过按住 Alt 键并选择文本来提供的一个很棒的功能)。
【讨论】:
【参考方案9】:如果你在 Unix 风格下运行
:0,$!tr "[A-Z]" "[a-z]"
【讨论】:
方括号是多余的,一旦你删除它们,引号也不是必需的。:%!tr A-Z a-z
!
表示一个外部 shell 命令,因此$ man tr
(与:help tr
相对)表明tr
用于translate
。
其他方式::%0,$!tr [:upper:] [:lower:]
【参考方案10】:
我遇到了类似的问题,我想使用":%s/old/new/g"
,但最终使用了两个命令:
:0
gu:$
【讨论】:
以上是关于如何在 Vim 中将所有文本转换为小写的主要内容,如果未能解决你的问题,请参考以下文章