จะทำให้การเคลื่อนไหวเคารพ camelCase หรือ snake_case ได้อย่างไร?


20

เป็นเรื่องปกติที่จะใช้ทั้ง camelCase หรือ snake_case เพื่อแยกหลายคำซึ่งเป็นตัวระบุ มันจะดีถ้า "คำว่า" การเคลื่อนไหว ( b, w, e) จะตรวจสอบผู้ขอบเขตภายในระบุ

พฤติกรรมนี้จะประสบความสำเร็จได้อย่างไร? (ปลั๊กอิน / vimrc / ... ?)


1
ฉันต้องการทราบสิ่งนี้สำหรับsnake_case
Martin Tournoij

คุณอาจจะสามารถทำอะไรบางอย่างกับการiskeywordตั้งค่า แต่ฉันกลัวว่ามันจะมีผลข้างเคียงมากมาย ... (ดู:help word)
Martin Tournoij

@Carpetsmoker ฉันคิดว่ามันใช้งานsnake_caseได้ ดูเหมือนว่ามันจะไม่รวมอยู่ใน quesiton
แจสเปอร์

4
คุณได้ครอบคลุมVimWiki แล้ว : vim.wikia.com/wiki/Moving_through_camel_case_wordsฉันจะเขียนคำตอบที่เหมาะสมในบางกรณีหากมีคนอื่นไม่ชนะฉัน
รวย

โดยส่วนตัวแล้วฉันคิดว่าคำที่เป็นคำซ้อนเป็นคำทั้งหมดและไม่ชอบความคิดที่จะแบ่งคำออกเป็นครึ่งทางเนื่องจากตัวพิมพ์เล็กหรือใหญ่ ปกติฉันจะใช้ปุ่มfและtเพื่อจัดการการเคลื่อนไหวของคำภายใน
Sukima

คำตอบ:


11

ปลั๊กอินCamelCaseMotionทำในสิ่งที่คุณต้องการ โดยค่าเริ่มต้นมันแมปกับคีย์,w, ,b, ,eซึ่งเทียบเท่ากับปกติw, b,e ,ใช้งานได้กับทั้ง CamelCase และ snake_case:

ตัวอย่าง:

camelCaseWord

การใช้d,wจะลบcamel; ใช้มันอีกครั้งจะลบCaseใช้มันอีกครั้งจะลบ

หรือกับกรณีงู:

snake_case_word

d,wจะลบและในครั้งที่สองที่จะลบsnake_case_

การเคลื่อนไหว "ภายใน" (เช่นdiw) ควรทำงานตามที่คาดไว้ (เช่นdi,w)

ถ้าคุณต้องการคุณยังสามารถแทนที่ค่าเริ่มต้นw, bและeด้วย:

map <silent> w <Plug>CamelCaseMotion_w
map <silent> b <Plug>CamelCaseMotion_b
map <silent> e <Plug>CamelCaseMotion_e
sunmap w
sunmap b
sunmap e
omap <silent> iw <Plug>CamelCaseMotion_iw
xmap <silent> iw <Plug>CamelCaseMotion_iw
omap <silent> ib <Plug>CamelCaseMotion_ib
xmap <silent> ib <Plug>CamelCaseMotion_ib
omap <silent> ie <Plug>CamelCaseMotion_ie
xmap <silent> ie <Plug>CamelCaseMotion_ie

2
โปรดทราบว่าการแมปเริ่มต้นของปลั๊กอินนี้,ทำตามคำสั่ง (ทำซ้ำครั้งล่าสุดf/ t/ F/ Tการเคลื่อนไหว) ซึ่งหมายความว่าหากคุณต้องการใช้คำสั่งนั้นคุณจะต้องรอช้า (กำหนดค่าโดย'timeoutlen') โชคดีที่ปลั๊กอินให้คุณใช้การแมปอื่น ๆ ที่คุณเลือก
tommcdo

ดูเหมือนจะมีบางส่วนผลข้างเคียงกับปลั๊กอินนี้คือ: dwใน, key);เมื่อเคอร์เซอร์ที่kดูเหมือนว่าจะเอาสายทั้งหมด (รวมถึงการขึ้นบรรทัดใหม่) ในขณะที่ฉันคาดหวังเพียงแค่keyจะถูกลบออก ...
มาร์ติน Tournoij

1
ฉันพบปลั๊กอินนี้จะดีกว่า การรวมการเคลื่อนไหวกับการลบทำงานได้อย่างถูกต้องและจะหยุดที่วงเล็บเช่นกัน
Paschalis

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