用于Gvim 或 Vim 配置文件的一键编译与运行函数(注:需要机器上安装了GCC才行)
本代码只加入了对C/C++的编译与运行,如果要加入其语言的可以参考此代码加入即可
同时,本代码加入了对Windows下用Gvim编译UTF-8编码格式的源文件时中文乱码的解
决方法(也就是在编译选项中加入了 “-fexec-charset=gbk”)。
将上面的代码加入到_vimrc文件里即可
?1. [代码]gvim配置文件
"------------------------------------------------------------------------------
" < 判断操作系统是否是 Windows 还是 Linux >
"------------------------------------------------------------------------------
if(has("win32") || has("win64") || has("win95") || has("win16"))
let g:iswindows = 1
else
let g:iswindows = 0
endif
"------------------------------------------------------------------------------
" < 判断是终端还是 Gvim >
"------------------------------------------------------------------------------
if has("gui_running")
let g:isGUI = 1
else
let g:isGUI = 0
endif
"------------------------------------------------------------------------------
" < 编译、连接、运行配置 >
"------------------------------------------------------------------------------
" F9 一键保存、编译、连接存并运行
map <F9> :call Run()<CR>
imap <F9> <ESC>:call Run()<CR>
" Ctrl + F9 一键保存并编译
map <c-F9> :call Compile()<CR>
imap <c-F9> <ESC>:call Compile()<CR>
" Ctrl + F10 一键保存并连接
map <c-F10> :call Link()<CR>
imap <c-F10> <ESC>:call Link()<CR>
let s:LastShellReturn_C = 0
let s:LastShellReturn_L = 0
let s:ShowWarning = 1
let s:Obj_Extension = ‘.o‘
let s:Exe_Extension = ‘.exe‘
let s:Sou_Error = 0
let s:windows_CFlags = ‘gcc\ -fexec-charset=gbk\ -Wall\ -g\ -O0\ -c\ %\ -o\ %<.o‘
let s:linux_CFlags = ‘gcc\ -Wall\ -g\ -O0\ -c\ %\ -o\ %<.o‘
let s:windows_CPPFlags = ‘g++\ -fexec-charset=gbk\ -Wall\ -g\ -O0\ -c\ %\ -o\ %<.o‘
let s:linux_CPPFlags = ‘g++\ -Wall\ -g\ -O0\ -c\ %\ -o\ %<.o‘
func! Compile()
exe ":ccl"
exe ":update"
if expand("%:e") == "c" || expand("%:e") == "cpp" || expand("%:e") == "cxx"
let s:Sou_Error = 0
let s:LastShellReturn_C = 0
let Sou = expand("%:p")
let Obj = expand("%:p:r").s:Obj_Extension
let Obj_Name = expand("%:p:t:r").s:Obj_Extension
let v:statusmsg = ‘‘
if !filereadable(Obj) || (filereadable(Obj) && (getftime(Obj) < getftime(Sou)))
redraw!
if expand("%:e") == "c"
if g:iswindows
exe ":setlocal makeprg=".s:windows_CFlags
else
exe ":setlocal makeprg=".s:linux_CFlags
endif
echohl WarningMsg | echo " compiling..."
silent make
elseif expand("%:e") == "cpp" || expand("%:e") == "cxx"
if g:iswindows
exe ":setlocal makeprg=".s:windows_CPPFlags
else
exe ":setlocal makeprg=".s:linux_CPPFlags
endif
echohl WarningMsg | echo " compiling..."
silent make
endif
redraw!
if v:shell_error != 0
let s:LastShellReturn_C = v:shell_error
endif
if g:iswindows
if s:LastShellReturn_C != 0
exe ":bo cope"
echohl WarningMsg | echo " compilation failed"
else
if s:ShowWarning
exe ":bo cw"
endif
echohl WarningMsg | echo " compilation successful"
endif
else
if empty(v:statusmsg)
echohl WarningMsg | echo " compilation successful"
else
exe ":bo cope"
endif
endif
else
echohl WarningMsg | echo ""Obj_Name"is up to date"
endif
else
let s:Sou_Error = 1
echohl WarningMsg | echo " please choose the correct source file"
endif
exe ":setlocal makeprg=make"
endfunc
func! Link()
call Compile()
if s:Sou_Error || s:LastShellReturn_C != 0
return
endif
let s:LastShellReturn_L = 0
let Sou = expand("%:p")
let Obj = expand("%:p:r").s:Obj_Extension
if g:iswindows
let Exe = expand("%:p:r").s:Exe_Extension
let Exe_Name = expand("%:p:t:r").s:Exe_Extension
else
let Exe = expand("%:p:r")
let Exe_Name = expand("%:p:t:r")
endif
let v:statusmsg = ‘‘
if filereadable(Obj) && (getftime(Obj) >= getftime(Sou))
redraw!
if !executable(Exe) || (executable(Exe) && getftime(Exe) < getftime(Obj))
if expand("%:e") == "c"
setlocal makeprg=gcc\ -o\ %<\ %<.o
echohl WarningMsg | echo " linking..."
silent make
elseif expand("%:e") == "cpp" || expand("%:e") == "cxx"
setlocal makeprg=g++\ -o\ %<\ %<.o
echohl WarningMsg | echo " linking..."
silent make
endif
redraw!
if v:shell_error != 0
let s:LastShellReturn_L = v:shell_error
endifhttp://www.huiyi8.com/hunsha/hanshi/?
if g:iswindows韩式婚纱照片
if s:LastShellReturn_L != 0
exe ":bo cope"
echohl WarningMsg | echo " linking failed"
else
if s:ShowWarning
exe ":bo cw"
endif
echohl WarningMsg | echo " linking successful"
endif
else
if empty(v:statusmsg)
echohl WarningMsg | echo " linking successful"
else
exe ":bo cope"
endif
endif
else
echohl WarningMsg | echo ""Exe_Name"is up to date"
endif
endif
setlocal makeprg=make
endfunc
func! Run()
let s:ShowWarning = 0
call Link()
let s:ShowWarning = 1
if s:Sou_Error || s:LastShellReturn_C != 0 || s:LastShellReturn_L != 0
return
endif
let Sou = expand("%:p")
let Obj = expand("%:p:r").s:Obj_Extension
if g:iswindows
let Exe = expand("%:p:r").s:Exe_Extension
else
let Exe = expand("%:p:r")
endif
if executable(Exe) && getftime(Exe) >= getftime(Obj) && getftime(Obj) >= getftime(Sou)
redraw!
echohl WarningMsg | echo " running..."
if g:iswindows
exe ":!%<.exe"
else
if g:isGUI
exe ":!gnome-terminal -e ./%<"
else
exe ":!./%<"
endif
endif
redraw!
echohl WarningMsg | echo " running finish"
endif
endfunc
?
gVim/Vim 一键编译、连接、运行 C/C++ 单文件
时间: 2024-10-13 19:33:31
gVim/Vim 一键编译、连接、运行 C/C++ 单文件的相关文章
Ubuntu&;红帽的vim通用配置(文件头+一键编译执行C/C++/Java单文件)
vim是一款功能很强大的编辑器,可能网上的大神们配置的比较复杂.功能也很多.我这里的配置能够满足基本需求.快速且通用,只要大家将自己的vimrc文件打开按照我的截图添加几行代码即可解决. 大家直接看我的配置文件吧 先讲一下ubuntu与redhat下打开配置文件vimrc的方法 *在redhat下 首先切换到root.然后输入 vim /etc/vimrc 在ubuntu下 直接输入 sudo vim /etc/vim/vimrc 打开配置文件vimrc之后按照下面图示中添加代码即可 这里的配置
VIM 一键编译
第一种方法去VIM官网下个CVIM插件(http://www.vim.org/scripts/script.php?script_id=213)应该是这个地址,不是的话,自己去VIM官网输入CVIM关键字搜索直接解压到你的.vim文件夹中(就是专门放VIM插件的文件夹)然后命令如下(只针对C和C++文件,其他文件无效):F9 compile and linkAlt-F9 write buffer and compileCtrl-F9 run executableShift-F9 set comm
window 下命令行编译连接运行
编程的流程 一个编程的基本流程包括编辑.编译和链接三大步骤. 1.什么叫编辑 编辑edit代码即编写代码,是编程的第一步.你可以任意一个编辑器进行代码的编写,也可以使用windows自带的"记事本"来编写代码,也可以使用Notepad++,或者visual studio提供的编辑器. 2.什么叫编译 注:编译链接前,系统应该安装有相应的编译器,并设置好环境变量 编译(compile)是将用某种编程语言(如 C++语言)写成的源代码,转换成目标文件. 目标文件包含着机器代码(可直接被计算
jmake 编译当前目录所有c/c++单文件
在一个目录下写一些单文件的c或者c++文件时,每次敲出命令如g++ a.cpp -o a感觉比较麻烦. 所以就模仿makefile的功能,实现了扫描当前目录,并将所有c文件.cc文件.cpp文件直接调用gcc/g++编译. 本程序的缺点之一就是不能用于文件间有相互include的情况,因为要扫描代码include了其他什么文件比较麻烦.而且不能在编译命令中加入其他库的选项. 使用方式: 1 jmake 源代码: 1 /* 2 * author: huanglianjing 3 * 4 * thi
Vim一键编译C++源码
咳咳,仅仅是简单的编译文件啦.打造成IDE什么的就算了.(本文来自一个OIer) 本来用着VScode的Vim插件,感觉VScode自带一个终端还挺方便的,界面也很美观.感觉Vim是真的好用(自从用了Vim的插件,在Windows的DevC++下老是按Esc ) 然而老年电脑带不起VScode... 考虑了Sublime,感觉也带不起Sublime... 于是转Vim,但是还要开个终端,每次还要输入那么多命令编译运行(虽然也可以用方向键,但也觉得很麻烦)感觉很麻烦.而且我需要看编译错误信息来改代
编译连接运行
可执行文件ComManager 在编译链接时指定了 -ljdsocket,但在ComManager 并没有使用到这个类,而是使用了comtcp 类 而comtcp 用插件的方式 dlopen,打开 libjdBlockSocket并在 编译链接时指定了 -libjdBlockSocket的头文件及库路径 有个问题,而类jdsocket与类jdBlockSocket的成员函数名基本一致. 运行ComManager时会优先执行加载jdsocket库,导致在comtcp类加载libjdBlockSoc
grep-2.26 sed-4.2.2 awk-4.1.4 最新版本静态编译 [不依赖 DLL 的单文件]
-------------------------------------------------------------------------------------------- grep (GNU grep) 2.26 Copyright (C) 2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This i
Ubuntu / Debian / Deepin等 Sublime Text 3 配置C++环境(一键编译&;运行,格式化代码)
配置编译环境: 进sublime,然后点击Tools->Build System->New build System 直接用下面的替换 { "shell_cmd": "g++ '${file}' -o '${file_path}/${file_base_name}'", "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$", "working_dir
Linux内核学习--写一个c程序,并在内核中编译,运行
20140506 今天开始学习伟大的开源代表作:Linux内核.之前的工作流于几个简单命令的应用,因着对Android操作系统的情愫,"忍不住"跟随陈利君老师的步伐,开启OS内核之旅.学习路径之一是直接从代码入手,下面来写一个hello.c内核模块. 说明: 这个路径/usr/src/linux-headers-2.6.32-22/include/linux是引用的头文件. 内核模块固定格式:module_init()/ module_exit(),module函数是从头文件中来的.