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 ...

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.


12

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

:!python %

Lihat :he cmdline-special(atau di sini )


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.


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.


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).


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

1

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

Misalnya. :!python something.py


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

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


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.