2012-09-28 29 views
8

Tôi đang viết plugin vim đầu tiên của mình (viml + python). Một lệnh mà plugin có là "GetStepCommand()" và về cơ bản tìm nạp dữ liệu từ nguồn dữ liệu từ xa, tôi massage dữ liệu một chút và sao chép nó vào bộ đệm để người dùng có thể bắt đầu chỉnh sửa nó. Có một tham số mà người dùng phải cung cấp cho "GetStepsCommand" và đó là đường dẫn tìm kiếm đến nơi dữ liệu cư trú, ví dụ:/projects/procedure/stepPlugin Vim - tùy chỉnh tự động hoàn thành các thông số trong chế độ lệnh

Bây giờ con đường đó có thể dài và dễ dàng miss-spell một cái gì đó. Vì vậy, tôi muốn triển khai hoàn thành tab của riêng mình cho phần tham số. Vim đã chăm sóc tự động hoàn thành lệnh bằng tabbing, nhưng tất nhiên nó không thể có bất kỳ kiến ​​thức về làm thế nào để hoàn thành các tham số (cái gì tôi sẽ giải quyết bản thân mình).

Nhưng trước tiên tôi cần phải biết: - nếu/làm thế nào tôi có thể đánh chặn các phím nhấn trong lệnh chế độ - lấy/nhận được dòng lệnh mà người dùng hiện đang viết - kiểm tra nếu nó trong lệnh chế độ hoặc insert/view-mode - và cuối cùng trả về một dòng lệnh được cập nhật (tab-complete) mà người dùng có thể tiếp tục viết trong ':' sau khi nhấn phím.

Bất kỳ con trỏ, thủ thuật, bài viết, hướng dẫn ... thông tin tức được đánh giá rất

Trả lời

6

Khi đối số lệnh tùy chỉnh của bạn là một đường dẫn tập tin hệ thống, nó chỉ đơn giản là vấn đề của việc thêm -complete=file định nghĩa :command của bạn, như thế này:

:command -nargs=1 -complete=file MyCommand echomsg <q-args> 

bạn không cần phải chặn bấm phím trong chế độ dòng lệnh (và bạn không nên, vì điều này sẽ xảy ra phản ứng xấu với các plugin khác!) Vim cung cấp hoàn mặc định khác (cp :help :command-complete.), ngay cả một tùy chỉnh trong đó chức năng Vimscript là hóa đơn ked để xác định các ứng cử viên hoàn thành.

+0

Cảm ơn lời khuyên, tôi sẽ xem xét chúng. Tuy nhiên, đối số không phải là đường dẫn hệ thống tệp, dữ liệu của nó (mô tả đường dẫn trong DB) từ hệ thống mà tôi đang kéo dữ liệu vào bộ đệm. Vì vậy, đó là lý do tại sao tôi sẽ cần phải thực hiện một số quy trình tự động hoàn thành của riêng tôi. –

+0

Cảm ơn bạn đã tham khảo ": lệnh -complete" ... chỉ cần hoàn thành chơi xung quanh với nó ... nên không có vấn đề từ đây. –

+2

@ KristofferNordström Một lưu ý về loại hoàn thành cụ thể này: '-complete = file' không phải là tùy chọn hoàn thành bên cạnh tên của nó. Nó sẽ làm cho công việc hoàn thành để hoàn thành các tệp, ** sẽ mở rộng các biến môi trường, sẽ ngăn không cho bạn gõ không gian không thoát ** (thông thường với đối số '-nargs = 1' và' MyCommand ab' sẽ là 'ab'), ** sẽ mở rộng các mẫu và thực hiện mở rộng backtick ** (lặp lại một lỗi nếu các mở rộng này dẫn đến nhiều tên tập tin hơn '-nargs' cho phép). Và không ai trong số những điều này được đề cập trong trợ giúp. – ZyX

Các vấn đề liên quan