2011-04-11 78 views
2

我是一个新的vim用户,他正在寻找一个可以让我调用mvn build的脚本。如何遍历目录结构并在vimscript中启动mvn构建?

目前我这个映射如下

map <F3> :! mvn build<CR> 

但由于这种试图做构建在我当前的工作目录(目前java开发,所以我在src我深深的包通常)

我该如何走上目录结构,这样mvn build命令才能正常工作?

预先感谢您

回答

3

的vim脚本功能finddir()可以用来寻找src目录。在第二个参数(path)使用的语法有一些augmentations to basic path specification,其中之一是使用;指定一个向上搜索的能力:

let src_dir = finddir('src', ';') 

这将找到src目录下,如果它是当前目录之上。

为此目录中的一个版本,您可以运行

exec '!cd' shellescape(src_dir) '&& mvn build' 

我不认为这会工作在Windows下。在这种情况下,我想你应该使用vim的cd命令临时更改目录,运行命令,然后使用:cd -更改回来。

您可以将这些命令组合成一个功能

function! RunMavenInSrcDir() 
    let src_dir = finddir('src', ';') 
    exec 'cd' fnameescape(src_dir) 
    !mvn build 
    cd - 
endfunction 

运行此功能将重挫vim的一个当前目录的副作用:换句话说,做:cd -事后不一定会改变的相同的目录它会有。

你可以安排有由映射调用函数与

map <F3> :call RunMavenInSrcDir()<CR> 

或用

command! RunMavenInSrcDir call RunMavenInSrcDir() 
+0

优良的命令 - 如果我想CD了1多个目录(1起来自SRC那就是) - 我该如何修改该功能?谢谢! – JimmyBond 2011-04-12 12:30:25

+0

@JimmyBond:你可以在第一个'let'之后'​​let src_dir = fnamemodify(src_dir,':p:h')'。 – intuited 2011-04-12 13:15:16

+0

没关系 - 它看起来像一个简单的执行'CD ..'后cd进入src作品!再次感谢! – JimmyBond 2011-04-12 13:17:08