Подтвердить что ты не робот

Vim [компиляция и] запуск ярлыка

В основном то, что я хочу, это сочетание клавиш в vim, которое позволяет мне [компилировать и] запускать в настоящее время редактируемую C, С++ или программу Python. В psuedocode:

when a shortcut key is pressed:
    if current_extension == 'c' then
        shell: gcc this_filename.c -o this_filename_without_extension
        if retcode == 0 then shell: ./this_filename_without_extension
    else if current_extension == 'cpp' then
        shell: g++ this_filename.cpp -o this_filename_without_extension
    if retcode == 0 then shell: ./this_filename_without_extension
    else if current_extension == 'py' then
        shell: python this_filename.py
    end if
end key

Я понимаю, что, возможно, я прошу немного, но мне понравилось бы, если бы это было возможно!

4b9b3361

Ответ 1

Что-то вроде этого будет работать. Просто создайте autocmd filetype, который отображает <F4> или все, что вы хотите сохранить, и скомпилируйте и запустите программу. Он использует exec для создания строки и использует shellescape, чтобы избежать имени файла.

autocmd filetype python nnoremap <F4> :w <bar> exec '!python '.shellescape('%')<CR>
autocmd filetype c nnoremap <F4> :w <bar> exec '!gcc '.shellescape('%').' -o '.shellescape('%:r').' && ./'.shellescape('%:r')<CR>
autocmd filetype cpp nnoremap <F4> :w <bar> exec '!g++ '.shellescape('%').' -o '.shellescape('%:r').' && ./'.shellescape('%:r')<CR>

% - текущее имя файла буфера. %:r - это имя файла буфера без расширения

Ответ 2

http://singlecompile.topbug.net, кажется, делает больше, чем вы хотите. Для более простого решения вы можете просто добавить следующее к вашему vimrc

au BufEnter *.cpp set makeprg=g++\ -g\ %\ -o\ %< 
au BufEnter *.c set makeprg=gcc\ -g\ %\ -o\ %< 
au BufEnter *.py set makeprg=python\ % 
au BufEnter *.[rR] set makeprg=Rscript\ %
map <F5> :call CompileGcc()<CR>
func! CompileGcc()
    exec "w" 
    silent make
endfunc

НТН

Ответ 3

это моя карта, на которой действительно работает, вы можете обновить ее на любом языке:

" <!----------------------------" gcc compile C files----------------------------------------!>
autocmd filetype c nnoremap <Leader>c :w <CR>:!gcc % -o %:r && ./%:r<CR>

" <!----------------------------" java compile files----------------------------------------!>
autocmd filetype java nnoremap <Leader>c :w <CR>:!javac % :r&& java %:r<CR>
" <!----------------------------" php compile files----------------------------------------!>
autocmd filetype php nnoremap <Leader>c :w <CR>:!clear && php  %<CR>

теперь, если вы являетесь одним из этих файлов в vim, просто выполните в обычном режиме:

<leader>c