【发布时间】: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
我有以下文字:
HELLO TO STACKOVERFLOW
WELCOME TO STACKOVERFLOW
我希望将文本更改如下:
heLLO TO STACKOVERFLOW
weLCOME TO STACKOVERFLOW
如何在 Vim 中做到这一点?
【问题讨论】:
标签: text full-text-search text-editor vim
使用 CTRL-V
突出显示前两列的可视块输入gu 或u 将所选文本小写,gU 或U 输入大写。
【讨论】:
~ 反转大小写。发送截图要小心,你的窗口是半透明的,如果你背后有敏感数据要特别小心(这里不用担心)
~ 提示。
~ 技巧有效(gu 和 gU 对我不起作用)。
虽然@Jin 为交互式使用提供了一个很好的答案,但这里有一种方法可以在脚本中做到这一点:
运行到缓冲区的每一行:
:%normal 0gu2l
或者您可以指定应用命令的行范围。这将适用于第 4 行和第 5 行:
:4,5normal 0gu2l
【讨论】:
:%normal 15|gu3l 会将所有行的第 15 列小写到第 17 列。
正常模式下:
startofline(:verb set sol? 会告诉你),你可以使用:lguCTRL-VG。l 转到下一个字符gu 是 make lowercase 运算符,期待动议CTRL-V 指定运动是块状的G 转到最后一行的第一列。startofline,则guCTRL-VGl.(l 转到下一个字符,. 重复相同的命令)。要更改为大写,请将gu 更改为gU,对于切换大小写,请确保设置tildeop 并改用~。
【讨论】:
'startofline'和'tildeop'的使用
除了@Benoit、@Jin 和@progo 给出的答案:
:%s/^../\L&\E/
见:help sub-replace-special
【讨论】:
你可以使用替换
:%s/.*\%3c/\L&
利用\%c 搜索模式原子匹配
行中特定列的字符。使用那个原子你可以
轻松调整模式以匹配任意数量的第一个字符
在一条线上。
【讨论】: