vim 一键编译JAVA,c++

来源:互联网 发布:网络频繁掉线怎么回事 编辑:程序博客网 时间:2024/05/13 13:11

参考: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'        :!./%    endifendfunc

但是实际使用中会出现一个问题,就是编译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.cExamples, 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'        :!./%    endifendfunc

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

0 0
原创粉丝点击