vim macro เพื่อแปลง CamelCase เป็น lowercase_with_underscores


คำตอบ:


19

ทิมสมเด็จพระสันตะปาปา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

โซลูชั่นที่สมบูรณ์แบบ
Neil G

Tim Pope ยอดเยี่ยมมาก ปลั๊กอินที่ดีมากมาย
Hendrik

6

ใช่มีและเป็นโบนัสมีหนึ่งที่นั่นไปในทิศทางตรงกันข้ามเช่นกัน!

อ้างอิงจาก 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

ขอบคุณ! มันเกือบจะสมบูรณ์แบบยกเว้นในกลุ่มของฉันมันไม่เปลี่ยนอักษรตัวแรกของชื่อ CamelCase ฉันไม่แน่ใจว่าทำไม
Neil G

ดีมาก. ฉันคิดว่าฉันต้องทำการเปลี่ยนแปลงนี้เพื่อให้งูไปสู่ทิศทางที่อูฐ:vnoremap tos :s/\C\(\U\&\S\)\([A-Z]\)/\1_\l\2/g<CR>
Jonah

1

lh-devยังมีคำสั่งให้แปลงระหว่างรูปแบบการตั้งชื่อ:

:NameConvert snake

จะแปลงคำใต้เคอร์เซอร์เป็น snake_case

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

จะแปลงแต่ละรูปแบบที่เกิดขึ้นเป็นชื่อทะเยอทะยานสมมติว่าผู้ใช้ยืนยันการเปลี่ยนแปลง ( :h :s_flags)

รูปแบบที่รองรับมีสองชนิด:

  • รูปแบบที่แน่นอน (snake_case, UpperCamelCase, lowerCamelCase)
  • รูปแบบความหมาย (ท้องถิ่นทั่วโลกสมาชิกพารามิเตอร์ทะเยอทะยาน, หมาคงที่คงที่ฟังก์ชั่นชนิด ... ) ซึ่งสามารถปรับให้พอดีกับการตั้งชื่อโครงการปัจจุบัน

1

ฉันสร้างคำสั่งเช่นนี้:

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.