Kompilasi kode dari vim

18

Baru vimdan dan saya ingin dapat mengkompilasi kode dari dalam vimtanpa menjalankan terminal baru dan memanggil kompilator.

Bagaimana cara saya melakukan ini? Perhatikan bahwa persyaratan ini tidak terbatas gcchanya pada, saya kadang-kadang perlu memanggil pythonjuga pada skrip yang sedang saya kerjakan, sehingga Anda mendapatkan ide ...

phhehehe
sumber

Jawaban:

25

Tulis a Makefile, maka Anda cukup:

:make

dari dalam vim. Dan jika kompilasi gagal:

:copen

akan menampilkan peringatan dan kesalahan. Memilih mereka akan membawa Anda ke file dan baris yang sesuai.

chris
sumber
12

Dalam vim, file saat ini dapat disebut sebagai %, jadi

:!python %

Lihat :he cmdline-special(atau di sini )

glenn jackman
sumber
6

Jika Anda tidak suka makefile karena alasan tertentu, Anda dapat memanggil perintah apa pun dengan:!

Misalnya Anda dapat menggunakan ":! Javac * .java && java Foo" untuk mengkompilasi dan menjalankan program java sederhana. Anda juga dapat memanggil sistem bangunan lain (scons, cmake, ...) dengan cara ini.

stribika
sumber
3

Coba plugin quickrun untuk Vim. Halaman ini menyertakan tautan ke github, yang merupakan versi terbaru dan yang saya gunakan.

Keuntungan menggunakan plugin ini sebagai lawan melakukan :!, output dari perintah akan dikumpulkan dan ditampilkan di jendela terpisah.

Juga, secara default plugin itu akan menggantung instance vim Anda ketika Anda memintanya untuk mengeksekusi suatu perintah, tetapi itu dapat dikonfigurasikan untuk menjalankan perintah secara tidak sinkron, itulah yang saya lakukan. Baca dokumentasi untuk lebih jelasnya.

Shrikant Sharat
sumber
3

Saya menggunakan vim yang memiliki interpreter Python dikompilasi.

Saya sumber file python yang memiliki fungsi ini:

def pyterm(filename="", interactive=1):
    cmd = "%s %s %s " % (PYTHON, "-i" if interactive else "", filename)
    if "DISPLAY" in os.environ:
        return run_config(os.environ.get("XTERM"), cmd)
    else:
        return os.system(cmd)

Dan petakan ke pintasan keyboard:

nmap ;ru :update<CR>:python pyterm(vim.current.buffer.name, 0)<CR>
nmap ;ri :update<CR>:python pyterm(vim.current.buffer.name, 1)<CR>

Saya sebelumnya telah menetapkan beberapa variabel lingkungan untuk menentukan terminal yang tepat untuk dijalankan jika menggunakan gvim, atau di terminal yang sama jika tidak dalam X.

Maka saya biasanya cukup ketik '; ri' dalam buffer Python untuk menjalankannya (biasanya untuk mengujinya).

Keith
sumber
2

Vim dapat digunakan untuk mengkompilasi menggunakan gnu make pada file saat ini - bahkan jika tidak ada Makefile untuk file tersebut (untuk lebih jelasnya lihat di sini ):

:make %:r

Dengan cara ini vim memberi Anda akses ke umpan balik kesalahan perbaikan cepat dari daftar compiler ( :help quickfix) - :cnKesalahan berikutnya, :cpKesalahan sebelumnya, Kesalahan :cwdaftar jendela baru.

Jika Anda belum mendapatkan gnu make maka Anda dapat mengatur variabel makeprg (ubah ke g ++ jika Anda mengkompilasi C ++):

:se makeprg=gcc\ -o\ %<\ %

dan kemudian menggunakan vim perintah make untuk mengkompilasi file saat ini dan mendapatkan quickfix daftar kesalahan di vim:

:make

EDIT: Jika Anda juga ingin menjalankan executable terkompilasi dari dalam vim, Anda dapat melakukan ('!' Dijalankan, '%: r' adalah nama file tanpa akhiran):

:!./%:r
Pierz
sumber
1

Dalam kasus gcc, python, dll. Anda dapat menyebutnya dengan tanda titik dua (:!)

Misalnya. :!python something.py

JinX
sumber
0
!gcc file.c && ./a.out

Ini akan mengkompilasi file C Anda serta menjalankan executable yang meminta input semua dalam jendela vim Anda.

Hasil Sharma
sumber
1
Jawaban yang lebih lengkap akan mencakup ':', dan untuk membuatnya lebih fleksibel Anda dapat mengubah 'file.c' untuk operator file saat ini '%'::!gcc % && ./a.out
Pierz
Saya melakukan sesuatu yang serupa di saya .vimrc, saya memetakan Command + Shift + Rke:map <D-R> :exe '!gcc %:p' <bar> exe '!'.getcwd().'/a.out'<cr>
f1lt3r
0

Mengenai kasus kompilasi kode sumber tertentu.

Dan jika Anda memiliki sesuatu yang dapat mengkompilasi python, atur makeprgsesuai.

Luc Hermitte
sumber