Menggunakan vimskrip ringkas, kami boleh menyusun dan menjalankan sebarang kod C dengan mudah tanpa meninggalkan Vim! Kami akan menggunakan vim9script untuk ini.
Fungsi dalam vim9script ditakrifkan dengan kata kunci def. Memandangkan Vim menggunakan sintaks seperti algol, enddef akan menandakan penghujung fungsi itu.
Kami akan mentakrifkan beberapa pembolehubah dengan kata kunci var kerana vim9script tidak menggunakan let.
vim9script def CompileAndRun() var current_file = expand('%') var file_name = fnamemodify(current_file, ':t:r')
Seperti setiap vim9script, kami mulakan dengan memberitahu vim bahawa ini sebenarnya vim9script!.
Kemudian kami mendapat nama fail semasa menggunakan expand(), kemudian menggunakan fnamemodifty() dan :t:t kami akan menanggalkan laluan dan sambungan, hanya mengekalkan nama asas.
Biasanya kembangkan('%') mengembalikan filename.extension jika anda terus membuka fail dengan vim filename.extension tetapi jika fail dibuka dari laluan relatif, seperti vim ~/some/path /filename.extension ia juga akan mengembalikan laluan, jadi kami perlu membersihkannya.
Kami memerlukan pembolehubah lain untuk menyimpan arahan kompil kami, Perintah kompilasi gcc yang mudah harus dilakukan sebagai permulaan:
var compile_cmd = 'gcc ' .. current_file .. ' -o ' .. file_name
.. ialah cara kami menggabungkan rentetan, serupa dengan php dan beberapa bahasa lain. Anda mungkin juga perasan bahawa kami menggunakan nama fail yang diekstrak untuk binari output kami.
Selepas itu kita hanya boleh menyusun dan melaksanakan binari output.
var compile_result = systemlist(compile_cmd) execute 'terminal ./' .. file_name
Jadi bersama-sama:
def CompileAndRun() var current_file = expand('%') var file_name = fnamemodify(current_file, ':t:r') var compile_cmd = 'gcc ' .. current_file .. ' -o ' .. file_name var compile_result = systemlist(compile_cmd) execute 'terminal ./' .. file_name enddef defcompile
Arahan nyahkompilasi pada akhirnya melakukan apa yang dikatakannya, yang menyusun fungsi kami.
Memandangkan fungsi vim9script diskop secara berbeza daripada vimscript lama, kita perlu menentukan perintah untuk mengaksesnya.
command! CompileAndRun call CompileAndRun()
Kini kita boleh menjalankan :CompileAndRun.
Ok tidak mengapa tetapi bagaimana dengan ralat? Amaran? KAMI MEMERLUKANNYA! Jadi mari kita perbaiki.
Mari kami tambahkan syarat yang menyemak v:shell_error, lihat :h v:shell_error.
if v:shell_error != 0 || !empty(compile_result) botright new +setlocal\ buftype=nofile\ noswapfile\ bufhidden=wipe call setline(1, compile_result) return endif
Berikut ialah ringkasan, botright new mencipta pemisahan mendatar, pilihan setlocal memastikan bahawa ia adalah penimbal calar, systemlist() melaksanakan perduaan sambil mengendalikan baris baharu dengan betul, setline() meletakkan keputusan pada baris pertama penimbal pemisah .
Mari juga tambahkan -Wall pada arahan kompil kami dan buat pembolehubah yang tidak digunakan dalam kod ujian C mudah kami.
var compile_cmd = 'gcc -Wall ' .. current_file .. ' -o ' .. file_name
Not bad ey? Kami masih boleh menjadikannya lebih baik!
Satu lagi faedah menggunakan systemlist() ialah ia telah menangkap 2>&1 aka stdout dan stderr untuk kami jadi kami tidak perlu melakukan ubah hala.
Bolehkah kami menambah penyerlahan sintaks pada amaran dan ralat? Ya! Cuma tambah set filetype=c sebelum panggil setline().
Bolehkah kita menutup pembahagian ini secara automatik? Ya! Tetapi ia memerlukan lebih sedikit kod.
Kami akan memberikan nama kepada penimbal pisah kami, kemudian menggunakan augroup auto tutupnya semasa cuti.
vim9script def CompileAndRun() var current_file = expand('%') var file_name = fnamemodify(current_file, ':t:r')
Ini memastikan bahawa apabila kita menukar fokus daripada penimbal dengan nama CompileErrors, penimbal dengan dipadamkan dan oleh itu pemisahan akan ditutup.
Walau bagaimanapun, mungkin ada kalanya kita ingin memastikan pemisahan terbuka semasa kita bekerja, jadi kita boleh mencipta boolean untuk menetapkannya kepada 1 atau 0 pada masa jalan.
var compile_cmd = 'gcc ' .. current_file .. ' -o ' .. file_name
Dan kami akan mengubah suai augroup dan memformatkannya dengan baik:
var compile_result = systemlist(compile_cmd) execute 'terminal ./' .. file_name
Kami akan menggunakan semakan dan kebaikan yang sama pada arahan run juga. Jadi daripada hanya menjalankan binari, kita boleh melakukan perkara berikut:
def CompileAndRun() var current_file = expand('%') var file_name = fnamemodify(current_file, ':t:r') var compile_cmd = 'gcc ' .. current_file .. ' -o ' .. file_name var compile_result = systemlist(compile_cmd) execute 'terminal ./' .. file_name enddef defcompile
Anda mungkin perasan bahawa kali ini kami juga menentukan saiz belahan.
Mari kami menambah sentuhan terakhir, iaitu keupayaan untuk menentukan bendera kompilasi semasa masa jalan. Untuk itu kita perlu menambah syarat untuk menyemak g:custom_compile_flag dan memulakannya supaya kosong pada mulanya kerana vim9script adalah pemilih dengan pembolehubah kosong.
command! CompileAndRun call CompileAndRun()
Dan sudah tentu, kami juga perlu mengubah suai compile_cmd kami:
if v:shell_error != 0 || !empty(compile_result) botright new +setlocal\ buftype=nofile\ noswapfile\ bufhidden=wipe call setline(1, compile_result) return endif
Kini kami boleh menukar bendera kompilasi kami pada masa jalankan, cuma jangan lupa menambah ruang pada akhirnya!
Jom uji:
Seperti yang anda lihat, kami boleh menukar bendera kompilasi kami pada masa jalan tanpa sebarang masalah!
Seluruh skrip adalah seperti berikut:
var compile_cmd = 'gcc -Wall ' .. current_file .. ' -o ' .. file_name
Kami juga telah menambah pengikat kekunci F8 untuk mengakses arahan kami dengan lebih mudah.
Vim sudah mempunyai pengkompil dan membuat arahan yang perlu anda tambahkan pada senjata anda. Artikel ini hanya cuba mengajar beberapa vim9script dan beberapa perkara yang anda boleh capai dengan mudah dengannya.
Saya harap anda menikmati artikel ini dan jika anda suka, tinggalkan komen atau reaksi.
Atas ialah kandungan terperinci Bagaimana untuk menulis vimript atau Cara Menyusun dan Menjalankan kod C dari Vim. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!