vim配置c语言开发环境 vim简单配置教程( 三 )


最简单的编译单个文件,和 sublime 的默认 build system 差不多,我们定义 F9 为编译单文件:
nnoremap <silent> <F9> :AsyncRun gcc -Wall -O2 "$(VIM_FILEPATH)" -o "$(VIM_FILEDIR)/$(VIM_FILENOEXT)" <cr>其中 $(…) 形式的宏在执行时会被替换成实际的文件名或者文件目录,这样按 F9 就可以编译当前文件,同时按 F5 运行:
nnoremap <silent> <F5> :AsyncRun -raw -cwd=$(VIM_FILEDIR) "$(VIM_FILEDIR)/$(VIM_FILENOEXT)" <cr>用双引号引起来避免文件名包含空格,“-cwd=$(VIM_FILEDIR)” 的意思时在文件文件的所在目录运行可执行,后面可执行使用了全路径,避免 linux 下面当前路径加 “./” 而 windows 不需要的跨平台问题 。
参数 `-raw` 表示输出不用匹配错误检测模板 (errorformat) ,直接原始内容输出到 quickfix 窗口 。这样你可以一边编辑一边 F9 编译,出错了可以在 quickfix 窗口中按回车直接跳转到错误的位置,编译正确就接着执行 。
接下来是项目的编译,不管你直接使用 make 还是 cmake,都是对一群文件做点什么,都需要定位到文件所属项目的目录,AsyncRun 识别当前文件的项目目录方式和 gutentags相同,从文件所在目录向上递归,直到找到名为 “.git”, “.svn”, “.hg”或者 “.root”文件或者目录,如果递归到根目录还没找到,那么文件所在目录就被当作项目目录,你重新定义项目标志:
let g:asyncrun_rootmarks = ['.svn', '.git', '.root', '_darcs', 'build.xml'] 然后在 AsyncRun 命令行中,用 “<root>” 或者 “$(VIM_ROOT)”来表示项目所在路径,于是我们可以定义按 F7 编译整个项目:
nnoremap <silent> <F7> :AsyncRun -cwd=<root> make <cr>那么如果你有一个项目不在 svn 也不在 git 中怎么查找 <root> 呢?很简单,放一个空的 .root 文件到你的项目目录下就行了,前面配置过,识别名为 .root 的文件 。
继续配置用 F8 运行当前项目:
nnoremap <silent> <F8> :AsyncRun -cwd=<root> -raw make run <cr>当然,你的 makefile 中需要定义怎么 run ,接着按 F6 执行测试:
nnoremap <silent> <F6> :AsyncRun -cwd=<root> -raw make test <cr>如果你使用了 cmake 的话,还可以照葫芦画瓢,定义 F4 为更新 Makefile 文件,如果不用 cmake 可以忽略:
nnoremap <silent> <F4> :AsyncRun -cwd=<root> cmake . <cr>由于 C/C++ 标准库的实现方式是发现在后台运行时会缓存标准输出直到程序退出,你想实时看到 printf 输出的话需要 fflush(stdout) 一下,或者程序开头关闭缓存:“setbuf(stdout, NULL);” 即可 。
同时,如果你开发 C++ 程序使用 std::cout 的话,后面直接加一个 std::endl 就强制刷新缓存了,不需要弄其他 。而如果你在 Windows 下使用 GVim 的话,可以弹出新的 cmd.exe 窗口来运行刚才的程序:
nnoremap <silent> <F5> :AsyncRun -cwd=$(VIM_FILEDIR) -mode=4 "$(VIM_FILEDIR)/$(VIM_FILENOEXT)" <cr>nnoremap <silent> <F8> :AsyncRun -cwd=<root> -mode=4 make run <cr>在 Windows 下使用 -mode=4 选项可以跟 Visual Studio 执行命令行工具一样,弹出一个新的 cmd.exe窗口来运行程序或者项目,于是我们有了下面的快捷键:
F4:使用 cmake 生成 MakefileF5:单文件:运行F6:项目:测试F7:项目:编译F8:项目:运行F9:单文件:编译F10:打开/关闭底部的 quickfix 窗口恩,编译和运行基本和 NotePad++ / GEdit 的体验差不多了 。如果你重度使用 cmake 的话,你还可以写点小脚本,将 F4 和 F7 的功能合并,检测 CMakeLists.txt 文件改变的话先执行 cmake 更新一下 Makefile,然后再执行 make,否则直接执行 make,这样更自动化些 。
动态检查


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: