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表示插入模式下的映射

发布了267 篇原创文章 · 获赞 12 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/u010734277/article/details/51377088