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
Я понимаю, что, возможно, я прошу немного, но мне понравилось бы, если бы это было возможно!
Ответы
Ответ 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