จุดสิ้นสุดของการเคลื่อนไหวบล็อกหลาม


13

ฉันต้องการการเคลื่อนไหวที่ย้ายไปยังจุดสิ้นสุด / จุดเริ่มต้นของบล็อกหลามและฉันต้องการการเคลื่อนไหวอีกครั้งเพื่อย้ายไปยังจุดเริ่มต้น / จุดสิ้นสุดของวิธีการ / คลาสก่อนหน้า / ถัดไป / คลาส (ชุดค่าผสมทั้งหมด)

ฉันได้ลอง vim-indent-object, python-mode, chapa, vim-python-object และอื่น ๆ ไม่มีพวกมันรองรับจุดสิ้นสุดของบล็อกและไม่มีพวกมันรองรับการเคลื่อนไหวทั้งหมดข้างต้น

ผมจำได้ว่ากาลครั้งหนึ่งผมมีปลั๊กอินที่ให้]], [[, ][และ[]การเคลื่อนไหวสำหรับต้น / ท้ายของก่อนหน้า / ถัดวิธีการ / ชั้น แต่ฉันไม่สามารถหาได้ในไดเรกทอรีเสียบของฉัน (สืบค้น "] [" และ "[]" ในไดเรกทอรีที่เสียบของฉันและวิเคราะห์เหตุการณ์ทั้งหมด แต่ไม่พบสิ่งที่กำหนด "] [" หรือ "[]")

คุณรู้หรือไม่ว่าปลั๊กอินที่ฉันเคยใช้ คุณรู้หรือไม่ว่าปลั๊กอินใดที่มีฟังก์ชั่นนี้



3
[[และ]]จัดทำโดย python ftplugin ที่เป็นค่าเริ่มต้น
romainl

1
@romainl ขอบคุณสำหรับข้อมูลที่ผมรู้เกี่ยวกับ[[, ]], (, ), และ{ และมีประโยชน์ในบางกรณี แต่ปัญหาหลักของฉันคือฉันต้องการและหรืออะไรทำนองนั้นที่ให้ข้ามไปยังจุดสิ้นสุดของวิธี / คลาสถัดไป / ก่อนหน้า }[[]][]][
Sassan

1
@muru ขอบคุณการ]eแก้ปัญหาส่วนใหญ่ของฉัน แต่การแมปบางอย่างในปลั๊กอินนี้ดูเหมือนว่าจะหักเหมือน]vหรือ]>ฉันจะพยายามแก้ไขด้วยการแยกแล้วเผยแพร่ แม้ว่าฉันจะยังคงสงสัยว่าปลั๊กอินใดที่มีให้][และ[]มันมีประโยชน์จริงๆ
Sassan

คำตอบ:


11

ด้วยการอัพเดทล่าสุด (พ.ย. 2017) ของ$VIMRUNTIME/ftplugin/python.vimการเคลื่อนไหวเฉพาะ ft ต่อไปนี้มีให้บริการสำหรับภาษาไพ ธ อน

  • [[ กระโดดย้อนกลับเพื่อเริ่มต้นของระดับปัจจุบัน / ก่อนหน้า
  • [] กระโดดย้อนกลับไปยังจุดสิ้นสุดของระดับบนสุดก่อนหน้า
  • ][ ข้ามไปข้างหน้าเพื่อสิ้นสุดระดับบนสุดในปัจจุบัน
  • ]] ข้ามไปข้างหน้าเพื่อเริ่มระดับถัดไป
  • [m ข้ามไปข้างหลังเพื่อเริ่มต้นวิธี / ขอบเขตปัจจุบัน / ก่อนหน้า
  • [M ข้ามไปด้านหลังเพื่อสิ้นสุดเมธอด / ขอบเขตก่อนหน้า
  • ]M ข้ามไปข้างหน้าเพื่อสิ้นสุดเมธอด / ขอบเขตปัจจุบัน / ถัดไป
  • ]m ข้ามไปข้างหน้าเพื่อเริ่มต้นวิธีการ / ขอบเขตถัดไป

ตัวอย่างไฟล์ไพ ธ อน

class previous:             # [[[[

    def method_first:
        pass
    # ...

    def method_last:
        pass                # []

class current:              # [[ or [m...[m[m

    def method_first:       # [[]m or [m...[m
        pass                # [[]M or [M...[M
    # ...

    def method_previous:    # [m[m
        pass                # [M

    def method_current:     # [m
        # CURSOR <---------------------------
        pass                # ]M

    def method_next:        # ]m
        pass                # ]M]M
    # ...

    def method_last:        # ][[m or ]m...]m
        pass                # ][   or ]M...]M

class previous:             # ]]   or ]m...]m]m

    def method_first:
        pass
    # ...

def global_func:            # ]]]]
    pass

8.0.1256การปรับปรุงนี้ควรจะรวมถ้าแพทช์ระดับของคุณเป็นกลุ่มเป็นอย่างน้อย

หากคุณไม่สามารถอัปเดต แต่ต้องการใช้ฟังก์ชันนี้คุณสามารถติดตั้งเวอร์ชันล่าสุดลงใน~/.vimไดเรกทอรี:

$ curl https://raw.githubusercontent.com/vim/vim/master/runtime/ftplugin/python.vim --create-dirs -o ~/.vim/ftplugin/python.vim

ปลั๊กอินPythonsense

ปลั๊กอินนี้ให้การเคลื่อนไหวที่คล้ายกัน แต่ปรับเปลี่ยนเล็กน้อย:

การเคลื่อนไหวของสต็อค Vim 8.0 "คลาส" (" ]]", " [[" ฯลฯ ) ค้นหาบล็อกที่เริ่มต้นที่คอลัมน์แรกโดยไม่คำนึงว่าสิ่งเหล่านี้เป็นคลาสหรือฟังก์ชั่นบล็อกในขณะที่วิธีการ / ฟังก์ชั่นเคลื่อนไหว (" [m", " ]m" ฯลฯ ) ค้นหาบล็อกทั้งหมดที่มีการเยื้องใด ๆ ไม่ว่าจะเป็นคลาสหรือฟังก์ชันบล็อกก็ตาม ในทางตรงกันข้ามการเคลื่อนไหวของคลาส "Pythonsense" ทำงานเพื่อค้นหาคำจำกัดความของชั้นเรียนทั้งหมดและเพียงชั้นเรียนโดยไม่คำนึงถึงระดับการเยื้องของพวกเขาในขณะที่การเคลื่อนไหวของวิธีการ / ฟังก์ชั่นการทำงานในการหาคำจำกัดความ

รายละเอียดและตัวอย่างทั้งหมดจะได้รับที่https://github.com/jeetsukumaran/vim-pythonsense#stock-vim-vs-pythonsense-motions


ฉันควรรอจนกระทั่ง neovim นำ patch นี้มาใช้
Sassan

1
ฉันเดาว่าคุณจะสามารถติดตั้งด้วยตนเองcurl https://raw.githubusercontent.com/vim/vim/master/runtime/ftplugin/python.vim --create-dirs -o ~/.config/nvim/ftplugin/python.vimได้
Hotschke
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.