Câu trả lời:
Tim Pope abolish.vim
có 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_BAR
và 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
Đú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ế /nameToReplace
và 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 @@
.