Vim快速修复和远程编译

5

我有一台Linux机器,用于构建我的项目(c++/make)。我已经将项目目录挂载到我的Mac机器上,在那里使用Macvim进行编辑。

我成功地设置了makeprg设置,这样:make将在我的Linux机器上发出远程编译。然而,我也想使用vim的快速修复功能。我的唯一问题是文件路径不匹配。

例如,在远程机器上,源文件和Makefile位于~/repos/myproject,在我的Mac上挂载到/net/mylinuxmachine/home/myuser/repos/myproject。这导致vim在编译错误时不能正确地打开受影响的文件。

我像这样设置了我的makeprg:

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

有什么我可以做来使这个工作吗?
提前感谢!
2个回答

6

既然您已经在操作 'makeprg' 选项,那么我建议添加自定义过滤器(例如使用 sed),将远程文件路径转换为本地挂载点,像这样:

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

2

明白了。Ingo给了我正确的方向。

在实验过程中,我厌倦了所有的转义,因此创建了以下小型Shell脚本:

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

这将在给定的项目目录上调用make -C,合并stdout和stderr(因为错误消息通过stderr输出),并将其管道传输到sed中,简单地删除错误消息中的绝对路径(这将导致从项目基本根目录到受影响文件的相对路径 - 在vim中通常是我的pwd)。
然后我设置makeprg以执行我想要构建的项目脚本:
:set makeprg=./makeprg.sh\ myproject

现在完美运作!谢谢。

1
很高兴你找到了解决方案!使用 :let &makeprg='...' 而不是 :set 可以减轻一些转义的问题,但提取 shell 脚本也是一个好的方法! - Ingo Karkat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接