Debug bagaimana vim memanggil makeprg

Aug 26 2020

Saya mencoba menyiapkan pylint untuk bekerja dengan :makeperintah di Vim 8.2.

Saya telah mengatur :compiler pylinttetapi menjalankan :makememberi saya pesan bantuan pylint, jadi beberapa argumen tampaknya diteruskan dengan tidak benar.

:set makeprg? aku s

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

Saya sudah mencoba menjalankan perintah ini langsung di terminal (menambahkan nama file) dan berhasil - output adalah daftar kesalahan, bukan pesan bantuan.

Sayangnya, saya tidak melihat perintah vim mana yang coba dieksekusi. Adakah petunjuk tentang kesalahan saya atau cara men-debugnya?

Saya ingin tetap menggunakan fungsi default vim sebanyak mungkin dan tidak menggunakan plugin apa pun untuk ini.

Jawaban

3 filbranden Aug 26 2020 at 04:01

bagaimana cara men-debugnya?

Anda dapat menggunakan :verboseperintah untuk meningkatkan verbositas dari perintah tertentu.

Dalam kasus khusus ini, Anda memerlukan tingkat verbositas di atas 3 untuk melihat perintah shell sebenarnya yang dijalankan oleh Vim , jadi ini seharusnya berfungsi:

: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"

Ada petunjuk tentang kesalahan saya?

Seperti @D. Ben Knoble menunjukkan, Anda kehilangan nama file saat ini dalam pelaksanaan perintah. Anda dapat memperbaikinya dengan meneruskannya ke :makeperintah, dengan :make %, atau Anda benar-benar dapat memasukkannya %ke makeprgdalamnya, karena ini akan meluas %sebelum menjalankan perintah:

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

Perhatikan %di akhir baris perintah. Jika Anda memasukkan %ke makeprg, maka jalankan saja :makeakan berfungsi untuk menjalankan pylint pada file Anda saat ini.

2 xaxa Aug 26 2020 at 03:37

(Terima kasih kepada @ d-ben-knoble)

makeprg tidak termasuk nama file, jadi

:make %

harus digunakan untuk menyaring file saat ini