在vim中,使用单个命令切换文本文件中的所有字符
在Vim中,我需要用一个命令将所有小写字母转换为大写字母,并将所有大写字母转换为小写字母。所以如果我的文本文件看起来像这样在vim中,使用单个命令切换文本文件中的所有字符,vim,Vim,在Vim中,我需要用一个命令将所有小写字母转换为大写字母,并将所有大写字母转换为小写字母。所以如果我的文本文件看起来像这样 Hello World hELLO wORLD 。。需要进行切换,使其看起来像这样 Hello World hELLO wORLD 我知道:%s/[a-z]/\U和/g会将所有小写字母改为大写字母,而:%s/[a-z]/\L和/g会将所有大写字母改为小写字母。但是我怎么写才能同时做到这两个呢 此外,我知道如果我的光标位于文件的顶部,VG~将切换所有大小写,但这不是我
Hello World
hELLO wORLD
。。需要进行切换,使其看起来像这样
Hello World
hELLO wORLD
我知道:%s/[a-z]/\U和/g
会将所有小写字母改为大写字母,而:%s/[a-z]/\L和/g
会将所有大写字母改为小写字母。但是我怎么写才能同时做到这两个呢
此外,我知道如果我的光标位于文件的顶部,VG~
将切换所有大小写,但这不是我需要的答案。谢谢。1GVG~
<Esc>1GVG~
说明:
<Esc> — return to Normal mode; just in case we're in Insert mode or Command line
1G — jump to the 1st line
V — start Visual mode
G — jump to the last line extending selection
~ — toggle case in the selection
-返回正常模式;以防我们处于插入模式或命令行
1G-跳到第1行
V-启动视觉模式
G-跳到最后一行扩展选择
~-在选择中切换大小写
或
1Gg~G
运动过程中g~-变化情况;运动为G(跳到最后一行)
医生:看起来你已经知道你需要的一切了
ggVG~
标记所有代码并切换大小写。如果需要单个命令,可以使用:
:nnoremap <keybinding> ggVG~
切换大小写后,第一个和最后一个exec
标记您在文件中的位置并将其还原。请参阅::h标记
键入:ToggleCase
以使用该功能。当然,您也可以将其绑定到keybinding
:nnoremap <keybinding> :ToggleCase<cr>
:nnoremap:ToggleCase
既然您提到了使用单个命令,并且提到了一些:%s/../
替换,我将提供以下内容:
:%normal! g~~
这将运行命令,为缓冲区的每一行切换一行的大小写。如果您可以使用插件,另一种方法是为整个缓冲区的文本对象使用插件 正如插件README.md文件所述: 尽管这些都是琐碎的操作(例如,
ggVG
),但文本对象版本更方便,因为您不必知道光标的位置(例如,vae
)
安装并启用此插件后,您可以使用以下选项切换整个缓冲区的大小写:
g~ae
正如问题中所述,我知道
VG~
可以做到这一点,但我需要知道如何使用单个命令来做到这一点。@Chris我添加了另一个变体,但没有太大不同。定义“单个命令”。VG~
以何种方式不是一个单一的命令?更容易键入imo:ggg~G
@D.BenKnoble一点点,但很多。您仍然需要按Shift+g
:-)此外,我知道我的光标是否位于文件的顶部,VG~将切换所有大小写,但这不是我需要的答案代码>为什么不能在普通命令中使用此命令?请定义一个单命令!我猜你被否决的原因是你没有说明你需要什么。您想在一行或一个文件上切换大小写,但由于我们未知的原因,VG~
不够好。试着解释一下你的用例以得到好的答案。现在我正试着决定我是否能比ggg~G
@D.BenKnoble更快地键入这个问题。像其他一些人一样,这个问题受到了不合理的任意约束。为什么它必须在一个命令中?(不管怎么说,什么是命令?运动算数吗?鼠标点击怎么办?)是的,我可以看出在整个缓冲区中使用文本对象是多么优雅,但它真的比使用ggg~G
好吗?