vim macro untuk mengonversi CamelCase ke lowercase_with_underscores

12

Apakah ada makro vim untuk mengkonversi CamelCase ke lowercase_with_underscores dan sebaliknya?

Neil G
sumber

Jawaban:

19

Tim Paus abolish.vimdapat mengkonversi antara camelCase, MixedCase, snake_case, dan UPPER_CASE, serta mengkonversi (satu arah) ke dash-case.

Posisi kursor pada salah fooBar, FooBar, foo_bar, atau FOO_BARdan penggunaan

  • crc untuk mengkonversi fooBar
  • crm untuk mengkonversi FooBar
  • cr_atau
    crsuntuk dikonversi kefoo_bar
  • cru untuk mengkonversi FOO_BAR
  • cr- untuk mengkonversi foo-bar
Chris Johnsen
sumber
solusi sempurna
Neil G
Tim Pope luar biasa. Banyak sekali plugin yang bagus.
Hendrik
6

Ya ada , dan sebagai bonus ada satu di sana untuk pergi ke arah yang berlawanan juga!

Kutipan dari wiki jika hilang:

" Change selected text from NameLikeThis to name_like_this.
vnoremap ,u :s/\<\@!\([A-Z]\)/\_\l\1/g<CR>gul

dan untuk arah yang berlawanan:

" Change selected text from name_like_this to NameLikeThis.
vnoremap ,c :s/_\([a-z]\)/\u\1/g<CR>gUl
Daniel DiPaolo
sumber
Terima kasih! Hampir sempurna, kecuali pada vim saya, itu tidak mengubah huruf pertama dari nama CamelCase. Saya tidak yakin mengapa.
Neil G
Sangat bagus. Saya menemukan bahwa saya perlu melakukan perubahan ini untuk arah unta ke ular:vnoremap tos :s/\C\(\U\&\S\)\([A-Z]\)/\1_\l\2/g<CR>
Yunus
1

lh-dev juga menyediakan perintah untuk mengkonversi antara gaya penamaan:

:NameConvert snake

akan mengonversi kata di bawah kursor ke snake_case.

:%ConvertNames/\<m_\k\+(/getter/gc

akan mengonversi setiap kemunculan pola menjadi nama pengambil, dengan asumsi pengguna mengonfirmasi transformasi ( :h :s_flags)

Gaya yang didukung terdiri dari dua jenis:

Luc Hermitte
sumber
1

Saya membuat perintah seperti ini:

command! Ctl
    \ exec "norm \"xygn" |
    \ let @y = substitute(@x, "\\([^A-Z]\\)\\([A-Z]\\)", "\\1_\\2", "g") |
    \ let @y = tolower(@y) |
    \ exec "norm cgn\<C-r>y" |
    \ let @@ = ":Ctl\n"

Pertama-tama Anda harus mencari string yang ingin Anda ganti /nameToReplacedan kemudian Anda jalankan :Ctl, dan kecocokan pencarian berikutnya akan menjadi name_to_replace. Perintah menempatkan dirinya ke dalam @@register sehingga Anda dapat mengulangi tindakan dengan menekan @@.

Jake
sumber