Vim:多文件编辑-在不同的分割中具有不同的品牌

Vim:多文件编辑-在不同的分割中具有不同的品牌,vim,project-management,makefile,Vim,Project Management,Makefile,我是最近的vim转换(来自像eclipse这样的奇特IDE) 我喜欢vim中的:make命令并广泛使用它;但是,我也喜欢编辑多个项目(使用单独的makefile) 所以通常我会编辑多个项目 pushd project1 vim project1.cpp [suspend signal] pushd ../project2 vim project2.cpp 现在我可以使用ctrl+z在两个项目之间切换,即suspend signal和fg 当我想在另一个项目的上下文中打开一个项目,以便可以进行复

我是最近的vim转换(来自像eclipse这样的奇特IDE)

我喜欢vim中的
:make
命令并广泛使用它;但是,我也喜欢编辑多个项目(使用单独的makefile)

所以通常我会编辑多个项目

pushd project1
vim project1.cpp
[suspend signal]
pushd ../project2
vim project2.cpp
现在我可以使用
ctrl+z
在两个项目之间切换,即suspend signal和
fg

当我想在另一个项目的上下文中打开一个项目,以便可以进行复制/粘贴时,这会成为一个问题。因此,如果在上述情况下,我会这样做

pushd project1
vim project1.cpp
:vsp ../project2/project2.cpp
我可以在同一个vim进程中同时编辑这两个项目,但是我无法使用
:make
命令有效地构建其中一个,它将只构建项目1


是否有人有某种方案可以让他们两全其美:能够同时编辑,同时仍然能够使用
:make
命令从同一个vim进程构建多个项目?

vim
:make
命令实际上只是执行配置为
makeprg
的程序在当前目录中(
make
默认设置)

通过启动项目目录中的每个
vim
进程,您可以间接地为该
vim
会话设置当前目录,但您当然可以在正在运行的会话中更改当前目录,例如,当您在
project1/
中启动时,您可以将
cd
简化为
project2/
并在
vim
中使用

:cd project2
:make
或者,如果您只想更改当前窗口的目录,请按照Jefromi的建议执行

:lcd project2
:make

有一些插件说它们使这变得更容易(其中一个似乎很流行),但我从来不需要使用它们。

vim
:make
命令实际上只是执行当前目录中配置为
makeprg
的程序(
make

通过启动项目目录中的每个
vim
进程,您可以间接地为该
vim
会话设置当前目录,但您当然可以在正在运行的会话中更改当前目录,例如,当您在
project1/
中启动时,您可以将
cd
简化为
project2/
并在
vim
中使用

:cd project2
:make
或者,如果您只想更改当前窗口的目录,请按照Jefromi的建议执行

:lcd project2
:make

有一些插件说它们使这变得更容易(其中一个似乎很流行),但我从来都不需要使用它们。

您希望对每个插件执行相同的make命令吗?那么问题只是当前目录?您可以使用
:lcd
仅更改当前窗口的目录,以便它将在每个窗口的相应目录中运行。为了使此操作更加自动化,您可以设置一个自动命令(我认为是在
bufwinter
上),以便在创建拆分窗口时运行
:lcd expand('%:h')
,或者如果不想总是这样做,只需将一个键映射到该窗口即可

(您还可以映射一个键/为
lcd
make
组合创建一个自定义命令,可能会保存击键,但在每个make之前不必要地进行cd'ing。这并不需要很长时间。)


另外,我询问make命令是否相同的原因是,您实际上可以在本地设置
makeprg
和其他相关选项(使用
:setlocal
而不是
:set
)。

您希望对每个命令执行相同的make命令吗?那么问题只是当前目录?您可以使用
:lcd
仅更改当前窗口的目录,以便它将在每个窗口的相应目录中运行。为了使此操作更加自动化,您可以设置一个自动命令(我认为是在
bufwinter
上),以便在创建拆分窗口时运行
:lcd expand('%:h')
,或者如果不想总是这样做,只需将一个键映射到该窗口即可

(您还可以映射一个键/为
lcd
make
组合创建一个自定义命令,可能会保存击键,但在每个make之前不必要地进行cd'ing。这并不需要很长时间。)


另外,我之所以问make命令是否相同,是因为您可以在本地设置
makeprg
和其他相关选项(使用
:setlocal
而不是
:set
)。

这就是我要找的!太棒了,这就是我要找的!