蓝天,小湖,湖水中一方小筑

Vim中的大小写切换

在vim中,通过v选中的文字可以用u切换到小写,U切换到大写,~在大小写之间切换,但是如果需要对选定的词做大小写操作,就需要用到%s中的\u,\U,\l和
L,\u是把后续的字符串第一个字符转成大写而\U是把后续的都转成大写(upper case),\l和\L是转成小写(lower case)

例如如果要把所有行首的单词首字母大写后面的所有字母都小写,可以这么折腾:

:%s/^\(\w\)\(.*\)/\u\1\L\2/g

需要注意的一点是,如果\L和\U后面跟有别的字符串,也会被弄成大写,如对字符串abcdefg运行 %s/abcd/\Uefgh/g 的结果就是 EFGHefg,这一点在使用反向引用\1, \2等的时候比较麻烦,例如我\1取到的是一个单词,我需要把它们都大写化了,然后后面的\2也会被变成大写。刚好下午 试的是给变量改名字,在需要变大写的单词后面有一条下划线,于是就这么用了:

:%s/\([a-z]\)\(.*\)/\U\1\l\2/g

\l 对下划线没影响,刚好用来抵消 \U 的作用,满好,至于别的情况,暂时没想法……