มี 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 เพื่อแปลงเป็น fooBarcrm เพื่อแปลงเป็น FooBarcr_หรือcrsเพื่อแปลงเป็นfoo_barcru เพื่อแปลงเป็น FOO_BARcr- เพื่อแปลงเป็น 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ทำให้คำสั่งตัวเองลงในการลงทะเบียนเพื่อให้คุณสามารถทำซ้ำการกระทำโดยการกด@@@@