32

何らかの理由でキャメルケースという名前のものをvimでアンダースコアで区切られたものに選択的に変換したい場合、どうすればそうできますか?

/s[a-z][A-Z]現在、アンダースコアを追加して小文字に変換するマクロを検索して記録できることがわかりましたが、次のようなものでそれを実行できるかどうか興味があります。

%s/([a-z])([A-Z])/\1\u\2/gc

前もって感謝します!

編集:キャメルケースの答えを見つけました(これは私が本当に必要としていたものです)が、他の誰かがキャメルケースをキャメルケースに変更する方法に答えることができますか?

4

6 に答える 6

58

Tim Pope によるAbolishプラグインを試してみてください。あるスタイルから別のスタイルに強制するためのいくつかのショートカットを提供します。たとえば、次のように開始します。

MixedCase

[ニーモニック: CoeRce crcto Camelcase] と入力すると、次のようになります。

mixedCase

[ニーモニック: CoeRce crsto Snake_case] と入力すると、次のようになります。

mixed_case

[ニーモニック: CoeRce to MixedCase] と入力するcrmと、次のページに戻ります。

MixedCase

repeat.vimもインストールすると、ドット キーを押して強制コマンドを繰り返すことができます。

于 2011-03-03T20:29:14.813 に答える
32

これは少し長いですが、仕事をしているようです:

:%s/\<\u\|\l\u/\= join(split(tolower(submatch(0)), '\zs'), '_')/gc

于 2011-03-03T19:57:40.747 に答える
15

あと5分くらい頑張ればよかった。ええと...誰かが興味を持っているなら:

%s/\(\l\)\(\u\)/\1\_\l\2/gcトリックを行います。

実際、これはキャメルケースでは機能しますが、キャメルケースでは機能しないことに気付きました。これは誰かにも役立つ可能性があります。

于 2011-03-03T19:08:48.497 に答える
7

これを行うプラグインを作成しました。 https://github.com/chiedojohn/vim-case-convert

大文字と小文字を変換するには、ビジュアル モードでテキスト ブロックを選択し、次のいずれかを入力します (自明)。

:CamelToHyphen :CamelToSnake :HyphenToCamel :HyphenToSnake :SnakeToCamel :SnakeToHyphen

ドキュメント内のすべてのオカレンスを変換するには、次のコマンドのいずれかを実行します。

:CamelToHyphenAll :CamelToSnakeAll :HyphenToCamelAll :HyphenToSnakeAll :SnakeToCamelAll :SnakeToHyphen

各変換の前にプロンプ​​トをバイパスするには、上記のコマンドのいずれかに感嘆符 (例: :CamelToHyphen!) を追加します。ただし、プラグインはファイル内の変数または他のテキストの違いを認識しないため、これを行いたくない場合があります。

于 2015-03-30T15:41:19.743 に答える
2

キャメルケースの場合:

%s#(\<\u\|\l)(\l+)(\u)#\l\1\2_\l\3#gc

ヒント: 私の例のように正規表現の区切り文字を変更して、(多少) 読みやすくすることができます。

于 2011-03-03T19:14:24.240 に答える
0

さまざまな開発指向の処理用の API があります。とりわけ、(構成可能な) 規則 (変数 <-> 属性 <-> ゲッター <-> セッター <-> 定数 <-> パラメーター <-> ...) とスタイル (キャメルケース) の間で名前を変換するためのいくつかの関数を提供します。 (低/高) <-> アンダースコア)。これらの変換関数は、プラグインにラップされています。

プラグイン + API は、 https ://github.com/LucHermitte/lh-dev から取得できます。この名前変換タスクには、lh-vim-libが必要です。

次の方法で使用できます。

  • 名前を変更したいシンボルにカーソルを置きます
  • type :NameConvert+ 希望する変換のタイプ (ここでは : underscore)。注意: このコマンドはオートコンプリートをサポートしています。
  • ほら!
于 2011-03-04T11:01:37.237 に答える