如何在vim中剥离文件类型扩展名

如何在vim中剥离文件类型扩展名,vim,Vim,在my.vimrc中,我根据源文件类型设置了不同的makeprg,如下所示: au BufRead,BufNewFile /home/me/cpp/**/**.cc set makeprg=g++\ %" au BufRead,BufNewFile /home/me/c/**/**.c set makeprg=gcc\ %\" 这是很好的练习,但并不完美。此设置的问题在于,您可以在某个目录下使用默认名称a.out的on二进制文件 更清楚地说,假设在同一目录下有client.c和server.c

在my.vimrc中,我根据源文件类型设置了不同的makeprg,如下所示:

au BufRead,BufNewFile /home/me/cpp/**/**.cc set makeprg=g++\ %"
au BufRead,BufNewFile /home/me/c/**/**.c set makeprg=gcc\ %\"
这是很好的练习,但并不完美。此设置的问题在于,您可以在某个目录下使用默认名称a.out的on二进制文件

更清楚地说,假设在同一目录下有client.c和server.c。 在vim中编译完client.c之后,应该先将a.out重命名为其他名称 可以编辑server.c并编译它。否则,现有的a.out将被覆盖

因此,我希望通过向gcc或g++添加-o选项来改进设置,以显式地为二进制文件命名,而不是将其命名为“a.out”。我还想使用不带fiel类型扩展名的源文件名作为gvien源文件的二进制名称。例如,对于client.c,生成的二进制文件的名称将只是client


只需要你的帮助,告诉我如何在vim中实现这一点。提前感谢。

请参阅
:帮助展开。如果执行
%:r
操作,将获得当前文件名,减去其上的最后一个扩展名。您更改的命令是:

au BufRead,BufNewFile /home/me/cpp/**/**.cc set makeprg=g++\ %\ -o\ %:r
au BufRead,BufNewFile /home/me/c/**/**.c set makeprg=gcc\ %\ -o\ %:r

您的命令末尾似乎有一些额外的
字符?@太多的php:True。复制了原始命令行并对其进行了修改。但是,当我测试它们时,它们工作正常。额外的引号似乎没有什么害处,但无论如何都会删除它。干杯!
是Vim中的注释字符,就像CAh中的
/
。我忘了。谢谢,太多了。