2013-10-08 30 views
5

我有一台linux机器用于构建我的项目(C++/make)。我在我的Mac机器上安装了项目目录,我使用macvim进行编辑。Vim quickfix和远程编译

我设法设置makeprg设置,以便:make将在我的linux机器上发出远程编译。不过,我也想使用vim的quickfix功能。我唯一的问题是文件路径不匹配。

例如在远程机器上,源文件和生成文件驻留在~/repos/myproject中,在我的Mac中安装到/net/mylinuxmachine/home/myuser/repos/myproject。这会导致vim无法在出现编译错误的情况下正确打开受影响的文件。

我已经把我的makeprg这样的:

:set makeprg=ssh\ mylinuxmachine\ \"make\ -C\ repos/myproject\" 

有什么我可以做,以使这项工作?

在此先感谢!

回答

2

明白了。英戈把我推向了正确的方向。

在试验我厌倦了所有逃逸的,所以我创建了下面的小shell脚本:

project=$1 
ssh mylinuxmachine "make -C repos/$myproject" 2>&1 | sed "s#/home/myuser/repos/$project/##g" 

这将调用给定的项目目录make -C,合并输出和错误(因为错误消息经问世stderr),并将其转换为sed,它将简单地删除错误消息中的绝对路径(这将导致从项目的根目录 - 我的密码通常位于vim内的受影响文件的相对路径)。

然后我设置makeprg与项目的执行脚本我想建立:

:set makeprg=./makeprg.sh\ myproject 

作品像现在一个魅力!

感谢

+1

指出我很高兴你已经找到了解决办法!使用':let&makeprg ='...''而不是':set'可以缓解转义,但是提取shell脚本看起来也是一种很好的方法! –

6

既然你操纵'makeprg'选项,反正,我想补充一个自定义过滤器(例如用sed),其将远程文件规范到本地安装点,就像这样:

:set makeprg=ssh\ mylinuxmachine\ \"make\ -C\ repos/myproject\"\|sed\ \"s#/home/myuser#/net/mylinuxmachine/home/myuser#g\" 
+0

给予好评,因为你在正确的方向 – DeX3