Kết thúc chuyển động khối python


13

Tôi cần một chuyển động di chuyển đến kết thúc / bắt đầu một khối python và tôi cần một chuyển động khác chuyển sang bắt đầu / kết thúc phương thức / lớp trước / tiếp theo (tất cả các kết hợp).

Tôi đã thử vim-indent-object, python-mode, chapa, vim-python-object, v.v. Không ai trong số họ hỗ trợ kết thúc khối, và không ai trong số họ hỗ trợ tất cả các kết hợp của các chuyển động trên.

Tôi nhớ một lần khi một thời gian tôi đã có một plugin cung cấp ]], [[, ][[]chuyển động cho khởi điểm / kết thúc / tiếp theo phương pháp / lớp trước, nhưng tôi không thể tìm thấy nó trong thư mục cắm của tôi (tìm kiếm "] [" và "[]" trong thư mục đã cắm của tôi và phân tích tất cả các lần xuất hiện nhưng không tìm thấy bất cứ điều gì định nghĩa "] [" hoặc "[]").

Bạn có biết plugin tôi từng sử dụng không? Bạn có biết plugin nào cung cấp chức năng này không?



3
[[]], được cung cấp bởi ftplugin python mặc định.
romainl

1
@romainl Cảm ơn thông tin, tôi biết về [[, ]], (, ), {}. [[]]rất hữu ích trong một số trường hợp nhưng vấn đề chính của tôi là tôi cần []][một cái gì đó tương tự, nó cung cấp các bước nhảy để kết thúc phương thức / lớp tiếp theo / trước.
Sassan

1
@muru cảm ơn, nó ]egiải quyết được hầu hết các vấn đề của tôi, tuy nhiên một số ánh xạ trong plugin này dường như bị hỏng ]vhoặc ]>tôi sẽ cố gắng khắc phục chúng trong một ngã ba và xuất bản nó. Mặc dù tôi vẫn tự hỏi plugin được cung cấp là gì ][[]nó thực sự hữu ích.
Sassan

Câu trả lời:


11

Với bản cập nhật gần đây (tháng 11 năm 2017) $VIMRUNTIME/ftplugin/python.vim, các chuyển động cụ thể theo ft hiện có sẵn cho ngôn ngữ python

  • [[ Nhảy lùi để bắt đầu hiện tại / trước toplevel
  • [] Nhảy lùi về cuối của toplevel trước
  • ][ Nhảy về phía trước để kết thúc toplevel hiện tại
  • ]] Nhảy về phía trước để bắt đầu kế tiếp
  • [m Nhảy lùi để bắt đầu phương thức / phạm vi hiện tại / trước đó
  • [M Nhảy lùi về cuối phương thức / phạm vi trước đó
  • ]M Nhảy về phía trước để kết thúc phương thức / phạm vi hiện tại / tiếp theo
  • ]m Nhảy về phía trước để bắt đầu phương thức / phạm vi tiếp theo

Ví dụ tập tin python

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

Bản cập nhật này nên được đưa vào nếu mức độ bản vá vim của bạn ít nhất 8.0.1256.

Nếu bạn không thể cập nhật nhưng muốn sử dụng chức năng này, bạn có thể cài đặt phiên bản mới nhất vào ~/.vimthư mục:

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

Plugin Pythonsense

Plugin này cung cấp các chuyển động tương tự nhưng được sửa đổi một chút:

Các chuyển động "lớp" stock Vim 8.0 (" ]]", " [[", v.v.), tìm các khối bắt đầu ở cột đầu tiên, bất kể đó là các khối hoặc khối chức năng, trong khi các chuyển động phương thức / hàm của nó (" [m", " ]m", v.v.) tìm tất cả các khối tại bất kỳ thụt lề nào, bất kể đây là khối hay khối chức năng. Ngược lại, các chuyển động của lớp "Pythonsense" hoạt động trong việc tìm kiếm tất cả và chỉ các định nghĩa lớp, bất kể mức độ thụt lề của chúng, trong khi các chuyển động phương thức / hàm của nó hoạt động trên việc tìm tất cả và chỉ các định nghĩa phương thức / hàm, bất kể mức độ thụt lề của chúng.

Tất cả các chi tiết và ví dụ được đưa ra tại https://github.com/jeetsukumaran/vim-pythonsense#stock-vim-vs-pythonsense-menses .


Tôi nên đợi cho đến khi neovim mang bản vá này.
Sassan

1
Tôi đoán trong thời gian này bạn có thể cài đặt nó bằng tay curl https://raw.githubusercontent.com/vim/vim/master/runtime/ftplugin/python.vim --create-dirs -o ~/.config/nvim/ftplugin/python.vim.
Hotschke
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.