如何在vim中仅对全大写行的单词执行首字母大写转换
Vim批量处理全大写行操作方法
你直接在打开目标文件后的普通模式下执行如下命令即可:
:g/^[^a-z]\+$/s/\<\(\u\)\(\u*\)\>/\u\1\L\2/g
命令拆解说明
- 开头的
:g是Vim的全局匹配命令,只会对命中匹配规则的行执行后续操作 /^[^a-z]\+$/是行匹配规则:匹配整行没有任何小写英文字母的行,也就是你要的全大写行,数字、英文标点、空格不会干扰匹配- 后半段是替换逻辑:
- 匹配规则
\<\(\u\)\(\u*\)\>会捕获每个完整单词的首字母和剩余字母 - 替换规则
\u\1\L\2会保留首字母大写,把剩余字母全部转为小写 - 末尾的
g代表对行内所有单词生效,不会只修改行内第一个单词
- 匹配规则
如果你担心误改,可以在命令末尾加c参数,改成如下形式,每次替换前都会弹出确认提示,核对没问题再批量处理:
:g/^[^a-z]\+$/s/\<\(\u\)\(\u*\)\>/\u\1\L\2/gc
处理完成后输入:w即可保存修改。
内容的提问来源于stack exchange,提问作者nino
相关产品推荐
相关产品推荐

