• Vim C/C++的一键编译


    开始用Vim差不多有两个月的时间, 一开始用Makefile 编译一整个项目无压力, 但是当写到单个文件的时候, 编译就比较麻烦了, 每次都得
    :w
    :!gcc -o 1.exe 1.c
    :!1
    非常麻烦...所以我都直接用的Code::Blocks...其实比Vim快多了哈哈...

    但是昨晚折腾病发作, 想好好来配置一下, 于是花了一个晚上...改了一个能看得过去的一键编译.
    原来的代码出自: http://www.vimer.cn/2009/10/11.html 这个域名好羡慕...
    觉得他考虑的东西太多而且不好用, 自己折腾了折腾.
    所幸vim的帮助文件非常全面, 改动他并不是难事.
    代码及注释如下:

      1 "单个文件编译 Linux 下大概有问题
     2 "
     3 "
     4 map <F9> :call Do_OneFileMake()<CR> 
     5 "判断操作系统
     6 if(has("win32") || has("win95") || has("win64") || has("win16"))
     7     let g:iswindows=1
     8 else
     9     let g:iswindows=0
    10 endif
    11 "函数体
    12 function Do_OneFileMake()
    13     "关闭之前可能存在的QucikFix窗口
    14     execute "cclose"    
    15     "判断文件路径和工作目录是否相同(其实我也不知道为什么要判断
    16     if expand("%:p:h")!=getcwd()
    17         echohl WarningMsg | echo "Fail to make! This file is not in the current dir! " | echohl None
    18         return
    19     endif
    20     "sourcefilename 功能未知, 判断该类型是否被支持
    21     let sourcefileename=expand("%:t")
    22     if (sourcefileename=="" || (&filetype!="cpp" && &filetype!="c"))
    23         echohl WarningMsg | echo "Fail to make! Please select the right file!" | echohl None
    24         return
    25     endif
    26     "编译前先保存
    27     exec "w" 
    28     "设置make参数,
    29     "Linux 和 Windows的情况不同, Linux的执行是./*.out Windows的是 *.exe Linux 下的没有经过测试o
    30     "makeprg 是 make的参数, 如果 makeprg=make 就执行真正的make.exe,  寻找目录下的makefile, 如果不是make的话这个参数就相当于makefile 的内容, 但是无论如何错误信息都会被送到QuickFix窗口.(暂时的粗浅理解
    31     "makeprg中空格和双引号都需要用反斜杠""转义
    32     if &filetype=="c"
    33         if g:iswindows==1
    34            set makeprg=gcc -o "%<.exe" "%"
    35         else
    36            set makeprg=gcc -o "%<" "%"
    37         endif
    38     elseif &filetype=="cpp"
    39         if g:iswindows==1
    40             set makeprg=g++ -o "%<.exe" "%"
    41         else
    42             set makeprg=g++ -o "%<" "%"
    43         endif
    44     endif
    45     "删除旧文件, outfilename是生成程序的完整路径
    46     let outfilename=expand("%:r").".exe"
    47     if filereadable(outfilename)
    48         if(g:iswindows==1)
    49             let outdeletedsuccess=delete(outfilename)
    50         else
    51             let outdeletedsuccess=delete("./".outfilename) "doesn't work
    52         endif
    53         "如果文件删除不了报错
    54         if(outdeletedsuccess!=0)
    55             set makeprg=make
    56             echohl WarningMsg | echo "Fail to make! I cannot delete the ".outfilename | echohl None
    57             return
    58         endif
    59     endif
    60     "静默编译, silent 关键字用于静默执行
    61     execute "silent make"
    62     set makeprg=make  
    63     "编译后如果文件存在,说明编译成功, 执行之
    64     if filereadable(outfilename)
    65         if(g:iswindows==1)
    66             execute "!"%<.exe""
    67             return 
    68         else
    69             execute "!"./%<.out""
    70             return 
    71         endif
    72     endif
    73     "不成功弹出错误信息, 即QuickFix窗口
    74     execute "silent copen 6"
    75 endfunction



    以上.

  • 相关阅读:
    Python将字符串转换成字典
    MySQL索引、视图
    MySQL高级查询
    MySQL函数应用
    MySQL约束
    MySQL基础查询
    MySQL数据库基本语法
    MySQL数据库存储引擎
    MySQL数据库简介与命令行操作
    MySQL 安装和配置环境变量
  • 原文地址:https://www.cnblogs.com/lastavengers/p/3957013.html
Copyright © 2020-2023  润新知