vim 一键编译JAVA,c++

参考:http://www.cnblogs.com/ma6174/archive/2011/12/10/2283393.html
以及vim帮助文档
用这段代码可以实现f5编译

"C,C++ 按F5编译运行
map <F5> :call CompileRunGcc()<CR>
func! CompileRunGcc()
    exec "w"
    if &filetype == 'c'
        exec "!g++ % -o %<"
        exec "! ./%<"
    elseif &filetype == 'cpp'
        exec "!g++ % -o %<"
        exec "! ./%<"
    elseif &filetype == 'java' 
        exec "!javac %" 
        exec "!java %<"
    elseif &filetype == 'sh'
        :!./%
    endif
endfunc

但是实际使用中会出现一个问题,就是编译JAVA的时候,会告诉找不到类。
在vim中使用命令:pwd查看当前工作目录,发现当前目录是在用户目录下而不是工作目录。也就是说,首先得进入了当前工作目录才能使用这个脚本。
vim中可以使用“%”代表当前文件路径,以及使用一些参数提取需要的内容
下面内容来自vim帮助文档

Examples, when the file name is "src/version.c", current dir
"/home/mool/vim": >
  :p            /home/mool/vim/src/version.c
  :p:.                     src/version.c
  :p:~              ~/vim/src/version.c
  :h                       src
  :p:h          /home/mool/vim/src
  :p:h:h        /home/mool/vim
  :t                       version.c
  :p:t                     version.c
  :r                       src/version
  :p:r          /home/mool/vim/src/version
  :t:r                     version
  :e                           c
  :s?version?main?             src/main.c
  :s?version?main?:p    /home/mool/vim/src/main.c
  :p:gs?/?\\?       \home\mool\vim\src\version.c

Examples, when the file name is "src/version.c.gz": >
  :p            /home/mool/vim/src/version.c.gz
  :e                             gz
  :e:e                         c.gz
  :e:e:e                       c.gz
  :e:e:r                       c
  :r                       src/version.c
  :r:e                         c
  :r:r                     src/version
  :r:r:r                   src/version

所以,可以用

:cd %:p:h

进入当前工作目录。注意vim中使用“:!”可以使用命令行命令,但是如果cd前面加了!就会发现编译的时候路径被重置了。不要加!才可以更改工作目录。
将下面代码加入.vimrc就可以实现f5编译了


map <F5> :call CompileRunGcc()<CR>
imap <F5> <ESC>:call CompileRunGcc()<CR>
func! CompileRunGcc()
    exec "w"
    exec "cd %:p:h"
    if &filetype == 'c'
        exec "!g++ % -o %<"
        exec "! ./%<"
    elseif &filetype == 'cpp'
        exec "!g++ % -o %<"
        exec "! ./%<"
    elseif &filetype == 'java' 
        exec "!javac %" 
        exec "!java %<"
    elseif &filetype == 'sh'
        :!./%
    endif
endfunc

map只是单纯的映射,如果在插入模式下按F5就会变成在文档中插入F5而不执行函数。所以使用下面一行imap表示插入模式下的映射

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值