Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk menulis vimript atau Cara Menyusun dan Menjalankan kod C dari Vim

Bagaimana untuk menulis vimript atau Cara Menyusun dan Menjalankan kod C dari Vim

Susan Sarandon
Lepaskan: 2024-10-30 15:36:25
asal
1093 orang telah melayarinya

Menggunakan vimskrip ringkas, kami boleh menyusun dan menjalankan sebarang kod C dengan mudah tanpa meninggalkan Vim! Kami akan menggunakan vim9script untuk ini.

Fungsi CompileAndRun

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')
Salin selepas log masuk
Salin selepas log masuk

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.

  • :t: Hanya mengambil "ekor" (atau nama asas) laluan fail, mengalih keluar direktori.
  • :r: Mengalih keluar sambungan daripada nama fail.

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
Salin selepas log masuk
Salin selepas log masuk

.. 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
Salin selepas log masuk
Salin selepas log masuk

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
Salin selepas log masuk
Salin selepas log masuk

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()
Salin selepas log masuk
Salin selepas log masuk

Kini kita boleh menjalankan :CompileAndRun.

How to write vimript or How to Compile and Run C code from Vim

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
Salin selepas log masuk
Salin selepas log masuk

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
Salin selepas log masuk
Salin selepas log masuk

How to write vimript or How to Compile and Run C code from Vim

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')
Salin selepas log masuk
Salin selepas log masuk

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
Salin selepas log masuk
Salin selepas log masuk

Dan kami akan mengubah suai augroup dan memformatkannya dengan baik:

var compile_result = systemlist(compile_cmd)
execute 'terminal ./' .. file_name
Salin selepas log masuk
Salin selepas log masuk

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
Salin selepas log masuk
Salin selepas log masuk

Anda mungkin perasan bahawa kali ini kami juga menentukan saiz belahan.

How to write vimript or How to Compile and Run C code from Vim

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()
Salin selepas log masuk
Salin selepas log masuk

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
Salin selepas log masuk
Salin selepas log masuk

Kini kami boleh menukar bendera kompilasi kami pada masa jalankan, cuma jangan lupa menambah ruang pada akhirnya!

Jom uji:

How to write vimript or How to Compile and Run C code from Vim

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
Salin selepas log masuk
Salin selepas log masuk

Kami juga telah menambah pengikat kekunci F8 untuk mengakses arahan kami dengan lebih mudah.

Nota

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!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan