Gỡ lỗi cách gọi vim makeprg

Aug 26 2020

Tôi đang cố gắng thiết lập pylint để làm việc với :makelệnh trong Vim 8.2.

Tôi đã thiết lập :compiler pylintnhưng khi chạy :makeđưa ra thông báo trợ giúp của pylint, vì vậy một số đối số dường như được chuyển không chính xác.

:set makeprg?

makeprg=pylint --output-format=text --msg-template="{path}:{line}:{column}:{C}: [{symbol}] {msg}" --reports=no

Tôi đã cố gắng chạy lệnh này trực tiếp trong terminal (nối tên tệp) và nó hoạt động - đầu ra là danh sách lỗi, không phải thông báo trợ giúp.

Rất tiếc, tôi không thấy vim đang cố gắng thực thi lệnh chính xác nào. Bất kỳ gợi ý về những gì tôi đã làm sai hoặc làm thế nào để gỡ lỗi nó?

Tôi muốn sử dụng chức năng mặc định của vim nhiều nhất có thể và không sử dụng bất kỳ plugin nào cho việc này.

Trả lời

3 filbranden Aug 26 2020 at 04:01

làm thế nào để gỡ lỗi nó?

Bạn có thể sử dụng :verboselệnh để tăng độ dài của một lệnh cụ thể.

Trong trường hợp cụ thể này, bạn cần mức chi tiết trên 3 để xem lệnh shell thực được Vim thực thi , vì vậy điều này sẽ hoạt động:

:4verbose make
Calling shell to execute: "pylint --output-format=text --msg-template="{path}:{line}:{column}:{C}: [{symbol}] {msg}" --reports=no  2>&1| tee /tmp/abcde12/3"

Bất kỳ gợi ý về những gì tôi đã làm sai?

Như @D. Ben Knoble đã chỉ ra, bạn đang thiếu tên của tệp hiện tại khi thực hiện lệnh. Bạn có thể sửa nó bằng cách chuyển nó vào :makelệnh, với :make %hoặc bạn thực sự có thể kết hợp nó %vào makeprgchính nó, vì nó sẽ mở rộng %trước khi chạy lệnh:

:let &makeprg = 'pylint --output-format=text --msg-template="{path}:{line}:{column}:{C}: [{symbol}] {msg}" --reports=no %'

Lưu ý %ở cuối dòng lệnh. Nếu bạn kết hợp %vào makeprg, thì chỉ cần chạy :makesẽ hoạt động để chạy pylint trên tệp hiện tại của bạn.

2 xaxa Aug 26 2020 at 03:37

(Cảm ơn @ d-ben-knoble)

makeprg không bao gồm tên tệp, vì vậy

:make %

nên được sử dụng để lót tệp hiện tại