【问题标题】:How to change the first two uppercase characters on each line to lowercase in Vim?如何在 Vim 中将每行的前两个大写字符更改为小写?
【发布时间】:2011-10-05 06:35:13
【问题描述】:

我有以下文字:

HELLO TO STACKOVERFLOW
WELCOME TO STACKOVERFLOW

我希望将文本更改如下:

heLLO TO STACKOVERFLOW
weLCOME TO STACKOVERFLOW

如何在 Vim 中做到这一点?

【问题讨论】:

    标签: text full-text-search text-editor vim


    【解决方案1】:

    使用 CTRL-V

    突出显示前两列的可视块

    输入guu 将所选文本小写,gUU 输入大写。

    【讨论】:

    • ~ 反转大小写。发送截图要小心,你的窗口是半透明的,如果你背后有敏感数据要特别小心(这里不用担心)
    • @Benoit 是的,我会的,但我没有什么要隐藏的 :) 感谢您的编辑和~ 提示。
    • +1 对于在 Visual Studio 中使用 VsVim 的其他人,~ 技巧有效(gugU 对我不起作用)。
    【解决方案2】:

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

    运行到缓冲区的每一行:

    :%normal 0gu2l
    

    或者您可以指定应用命令的行范围。这将适用于第 4 行和第 5 行:

    :4,5normal 0gu2l
    

    【讨论】:

    • +1,您还可以指定要使用的列。 :%normal 15|gu3l 会将所有行的第 15 列小写到第 17 列。
    【解决方案3】:

    正常模式下:

    • 如果设置了startofline:verb set sol? 会告诉你),你可以使用:lguCTRL-VG
      细节 :
      • l 转到下一个字符
      • gumake lowercase 运算符,期待动议
      • CTRL-V 指定运动是块状的
      • G 转到最后一行的第一列。
    • 如果未设置startofline,则guCTRL-VGl.l 转到下一个字符,. 重复相同的命令)。

    要更改为大写,请将gu 更改为gU,对于切换大小写,请确保设置tildeop 并改用~

    【讨论】:

    • 很好地解释了'startofline''tildeop'的使用
    【解决方案4】:

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

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

    :help sub-replace-special

    【讨论】:

      【解决方案5】:

      你可以使用替换

      :%s/.*\%3c/\L&
      

      利用\%c 搜索模式原子匹配 行中特定列的字符。使用那个原子你可以 轻松调整模式以匹配任意数量的第一个字符 在一条线上。

      【讨论】:

        猜你喜欢
        • 2019-07-20
        • 2011-10-06
        • 2014-04-20
        • 2011-02-26
        • 2021-03-30
        • 2014-02-04
        • 1970-01-01
        • 2012-01-03
        • 2011-12-04
        相关资源
        最近更新 更多