基本上,我想要的是vim中的键盘快捷键,该快捷键可让我[编译并]运行当前正在编辑的C,C ++或Python程序。在伪代码中:
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
我意识到我可能会问很多,但是如果可能的话,我会很乐意的!
这样的事情会起作用。只需创建映射文件类型autocmd<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
是没有扩展名的缓冲区文件名
@DuncanNZ如果要创建很多这样的函数,则可能需要编写一个函数。尽管我确实认为使用make解决方案是正确的方法,因为这仅在您只需要创建一个源文件时才有效。可能适用于暂存文件,但不适用于任何项目。
我添加的一件事是
&& echo Compilation complete
在最后一项之前提出的,&&
因为编程竞赛问题无法提示输入,因此我不知道何时编译。但是,再次感谢您提供的出色解决方案!这些映射应该是本地缓冲区的。而且,
:make
优先于直接调用编译器。感谢您提供这个方便的答案,假设我想添加C ++ 11标志,是否应该更改
!g++ '
为'g++ -std=c++11 '
in(...) '!g++ '.shellescape('%').' (...)
?