Text 如何在Vim中将每行的前两个大写字符更改为小写?

Text 如何在Vim中将每行的前两个大写字符更改为小写?,text,full-text-search,text-editor,vim,Text,Full Text Search,Text Editor,Vim,我有以下案文: HELLO TO STACKOVERFLOW WELCOME TO STACKOVERFLOW 我希望文本更改如下: heLLO TO STACKOVERFLOW weLCOME TO STACKOVERFLOW 如何在Vim中执行此操作?使用CTRL-V突出显示前两列的可视块 输入gu或u将所选文本降格,输入gu或u将所选文本升格 虽然@Jin为交互式使用提供了一个很好的答案,但这里有一种在脚本中实现的方法: 要运行到缓冲区的每一行: :%normal 0gu2l 也可

我有以下案文:

HELLO TO STACKOVERFLOW
WELCOME TO STACKOVERFLOW
我希望文本更改如下:

heLLO TO STACKOVERFLOW
weLCOME TO STACKOVERFLOW

如何在Vim中执行此操作?

使用CTRL-V突出显示前两列的可视块

输入
gu
u
将所选文本降格,输入
gu
u
将所选文本升格


虽然@Jin为交互式使用提供了一个很好的答案,但这里有一种在脚本中实现的方法:

要运行到缓冲区的每一行:

:%normal 0gu2l
也可以指定应用命令的行范围。这将适用于第4行和第5行:

:4,5normal 0gu2l
在正常模式下:

  • 如果设置了
    startofline
    :动词set sol?
    将告诉您),您可以使用:
    lgu
    CTRL-V
    G

    详情:
    • l
      转到下一个字符
    • gu
      make lowercase
      操作符,需要一个动作
    • CTRL-V
      指定运动是分块的
    • G
      转到最后一行的第一列
  • 如果未设置
    startofline
    ,则
    gu
    CTRL-V
    Gl.
    l
    转到下一个字符,
    重复相同的命令)

对于使用
gu
更改为大写的
gu
,对于切换大小写,请确保设置了
tildeop
,并使用
~

除了@Benoit、@Jin和@progo给出的答案外:

:%s/^../\L&\E/

请参见
:help sub replace special

您可以使用替换

:%s/.*\%3c/\L&
它利用了与原子匹配的
\%c
搜索模式 行中特定列上的字符。利用原子,你可以 轻松调整模式以匹配任意数量的第一个字符
在一行中。

+1,您还可以指定要使用的列<代码>:%normal 15 | gu3l将对所有行的第15列至第17列进行降级。或
~
以反转大小写。发送截图时要小心,你的窗口是半透明的,如果你有敏感的数据在后面,要特别小心(这里不用担心)@Benoit是的,我会的,但我没有什么要隐藏的:)谢谢你的编辑和
~
提示。对
'startofline'
'tildeop'的使用有很好的解释