web-dev-qa-db-ja.com

vimを使用して選択範囲内の各単語の最初の文字を大文字にします

Vimでは、~単一の文字を大文字にする( この質問 で述べたように)が、vimを使用して選択範囲内の各単語の最初の文字を大文字にする方法はありますか?

たとえば、私が変更したい場合

hello world from stackoverflow

Hello World From Stackoverflow

Vimでどのようにすればよいですか?

62
keelar

次の置換を使用できます。

s/\<./\u&/g
  • \<はWordの先頭に一致します
  • .は、Wordの最初の文字に一致します
  • \uは、置換文字列の次の文字を大文字にするようVimに指示します(&)
  • &は、LHSで一致したものを置換することを意味します
136
Rohit Jain

: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 "()".
35
ernix

Vim Tips Wikiには、視覚的な選択を小文字、大文字、およびタイトルケースに切り替える TwiddleCaseマッピング があります。

TwiddleCase関数を.vimrcに追加する場合は、目的のテキストを視覚的に選択し、チルダ文字~を押すだけで、各ケースを循環できます。

10
Ingo Karkat

この正規表現を試してください..

s/ \w/ \u&/g
2
Krishna

また、非常に便利な vim-titlecase このためのプラグイン。

1