vim macro để chuyển đổi CamelCase thành chữ thường_with_underscores


12

Có macro vim để chuyển đổi CamelCase thành chữ thường_with_underscores và ngược lại không?

Câu trả lời:


19

Tim Pope abolish.vimcó thể chuyển đổi giữa các camelCase, MixedCase, snake_case, và UPPER_CASE, cũng như chuyển đổi (một chiều) để dash-case.

Đặt con trỏ vào bất kỳ fooBar, FooBar, foo_bar, hay FOO_BARvà sử dụng

  • crc để chuyển đổi sang fooBar
  • crm để chuyển đổi sang FooBar
  • cr_hoặc
    crsđể chuyển đổi sangfoo_bar
  • cru để chuyển đổi sang FOO_BAR
  • cr- để chuyển đổi sang foo-bar

giải pháp hoàn hảo
Neil G

Tim Pope thật tuyệt vời. Rất nhiều plugin tuyệt vời.
Hendrik

6

Đúng vậy , và như một phần thưởng, có một người ở đó để đi theo hướng ngược lại!

Trích dẫn từ wiki trong trường hợp nó biến mất:

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

và cho hướng ngược lại:

" Change selected text from name_like_this to NameLikeThis.
vnoremap ,c :s/_\([a-z]\)/\u\1/g<CR>gUl

Cảm ơn! Nó gần như hoàn hảo, ngoại trừ vim của tôi, nó không thay đổi chữ cái đầu tiên của tên CamelCase. Tôi cung không chăc tại sao.
Neil G

Rất đẹp. Tôi đã tìm thấy tôi cần thực hiện thay đổi này cho con rắn để hướng lạc đà:vnoremap tos :s/\C\(\U\&\S\)\([A-Z]\)/\1_\l\2/g<CR>
Jonah

1

lh-dev cũng cung cấp các lệnh để chuyển đổi giữa các kiểu đặt tên:

:NameConvert snake

sẽ chuyển đổi từ dưới con trỏ thành sn_case.

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

sẽ chuyển đổi từng lần xuất hiện của mẫu thành tên getter, giả sử người dùng xác nhận biến đổi ( :h :s_flags)

Các kiểu được hỗ trợ có hai loại:


1

Tôi đã tạo một lệnh như thế này:

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"

Trước tiên, bạn phải tìm kiếm một chuỗi bạn muốn thay thế /nameToReplacevà sau đó bạn chạy :Ctl, và kết quả tìm kiếm tiếp theo sẽ trở thành name_to_replace. Lệnh đặt chính nó vào thanh @@ghi để bạn có thể lặp lại hành động bằng cách nhấn @@.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.