Câu trả lời:
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 fooBarcrm để chuyển đổi sang FooBarcr_hoặc crsđể chuyển đổi sangfoo_barcru để chuyển đổi sang FOO_BARcr- để chuyển đổi sang foo-barĐú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
vnoremap tos :s/\C\(\U\&\S\)\([A-Z]\)/\1_\l\2/g<CR>
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:
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 @@.