在vim中,我知道我们可以使用~
来大写单个字符(如this question中所述),但是有一种方法可以使用vim将选中每个单词的第一个字母大写?
例如,如果我想改变
hello world from stackoverflow
到
Hello World From Stackoverflow
我应该如何在vim中完成?
答案 0 :(得分:134)
您可以使用以下替换:
s/\<./\u&/g
\<
匹配单词的开头.
匹配单词的第一个字符\u
告诉Vim将替换字符串中的以下字符设为大写(&)
&
表示替换LHS上匹配的任何内容答案 1 :(得分:34)
:help case
说:
To turn one line into title caps, make every first letter of a word
uppercase: >
: s/\v<(.)(\w*)/\u\1\L\2/g
说明:
: # Enter ex command line mode.
space # The space after the colon means that there is no
# address range i.e. line,line or % for entire
# file.
s/pattern/result/g # The overall search and replace command uses
# forward slashes. The g means to apply the
# change to every thing on the line. If there
# g is missing, then change just the first match
# is changed.
模式部分具有这种含义。
\v # Means to enter very magic mode.
< # Find the beginning of a word boundary.
(.) # The first () construct is a capture group.
# Inside the () a single ., dot, means match any
# character.
(\w*) # The second () capture group contains \w*. This
# means find one or more word caracters. \w* is
# shorthand for [a-zA-Z0-9_].
结果或替换部分具有以下含义:
\u # Means to uppercase the following character.
\1 # Each () capture group is assigned a number
# from 1 to 9. \1 or back slash one says use what
# I captured in the first capture group.
\L # Means to lowercase all the following characters.
\2 # Use the second capture group
结果:
ROPER STATE PARK
Roper State Park
魔法模式的替代品:
: % s/\<\(.\)\(\w*\)/\u\1\L\2/g
# Each capture group requires a backslash to enable their meta
# character meaning i.e. "\(\)" verses "()".
答案 2 :(得分:10)
Vim Tips Wiki有一个TwiddleCase mapping可以将视觉选择切换为小写,大写和标题大小写。
如果您将TwiddleCase
功能添加到.vimrc
,那么您只需在视觉上选择所需的文字,然后按波形符~
循环浏览每个案例。
答案 3 :(得分:2)
试试这个正则表达式..
s/ \w/ \u&/g
答案 4 :(得分:2)
选项1。- 。此映射将键q
映射到光标位置的大写字母,然后将其移动到光标的开头。下一个单词:
:map q gUlw
要使用此功能,请将光标放在行的开头,然后为每个单词按一次q
以大写第一个字母。如果您希望按原样保留第一个字母,请打w
移至下一个单词。
选项2。- 。此映射将键q
映射为反转光标位置字母的大小写,然后移至下一个单词的开头:
:map q ~w
要使用此功能,请将光标置于q
行的开头,每个单词一次以反转第一个字母的大小写。如果您希望按原样保留第一个字母,请打w
移至下一个单词。
取消映射。 - 要取消映射(删除)分配给q
键的映射:
:unmap q
答案 5 :(得分:1)
还有一个非常有用的vim-titlecase
插件。
答案 6 :(得分:0)
为了限制对视觉选择的修改,我们必须使用类似的东西:
:'<,'>s/\%V\<.\%V/\u&/g
\%V ............... see help for this
答案 7 :(得分:0)
以下映射导致 g~ 到“标题案例”所选文本:
vnoremap g~ "tc<C-r>=substitute(@t, '\v<(.)(\S*)', '\u\1\L\2', 'g')<CR><Esc>