มี vim macro ในการแปลง CamelCase เป็น lowercase_with_underscores และกลับกันไหม?
มี vim macro ในการแปลง CamelCase เป็น lowercase_with_underscores และกลับกันไหม?
คำตอบ:
ทิมสมเด็จพระสันตะปาปาabolish.vim
แปลงสามารถในหมู่camelCase
, MixedCase
, snake_case
และUPPER_CASE
เช่นเดียวกับแปลง (ทางเดียว) dash-case
เพื่อ
ตำแหน่งเคอร์เซอร์บนใด ๆfooBar
, FooBar
, foo_bar
หรือFOO_BAR
และการใช้งาน
crc
เพื่อแปลงเป็น fooBar
crm
เพื่อแปลงเป็น FooBar
cr_
หรือcrs
เพื่อแปลงเป็นfoo_bar
cru
เพื่อแปลงเป็น FOO_BAR
cr-
เพื่อแปลงเป็น foo-bar
ใช่มีและเป็นโบนัสมีหนึ่งที่นั่นไปในทิศทางตรงกันข้ามเช่นกัน!
อ้างอิงจาก wiki ในกรณีที่มันหายไป:
" Change selected text from NameLikeThis to name_like_this.
vnoremap ,u :s/\<\@!\([A-Z]\)/\_\l\1/g<CR>gul
และสำหรับทิศทางตรงกันข้าม:
" 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ยังมีคำสั่งให้แปลงระหว่างรูปแบบการตั้งชื่อ:
:NameConvert snake
จะแปลงคำใต้เคอร์เซอร์เป็น snake_case
:%ConvertNames/\<m_\k\+(/getter/gc
จะแปลงแต่ละรูปแบบที่เกิดขึ้นเป็นชื่อทะเยอทะยานสมมติว่าผู้ใช้ยืนยันการเปลี่ยนแปลง ( :h :s_flags
)
รูปแบบที่รองรับมีสองชนิด:
ฉันสร้างคำสั่งเช่นนี้:
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"
ก่อนอื่นคุณต้องค้นหาสตริงคุณต้องการแทนที่/nameToReplace
แล้วคุณเรียกใช้และการแข่งขันการค้นหาต่อไปจะกลายเป็น:Ctl
name_to_replace
ทำให้คำสั่งตัวเองลงในการลงทะเบียนเพื่อให้คุณสามารถทำซ้ำการกระทำโดยการกด@@
@@