好吧,我在知道发生的事情的严重程度之前就发布了这个问题。假设我混合了 Python 和 C++ 代码。我使用一个简单的 makefile,它将文件从我的编辑目录复制到编译的位置(使用单独的 makefile.txt)。
我的东西: cp source.c source.h /some/other/dir Pushd/一些/其他/目录; make && su -c "make install";波普德
最初我正在编辑 source.c,运行 :make,然后用 /some/other/dir/source.h 在当前窗口中打开一个新缓冲区(替换 source.c)。然后,我在编辑 some_python.py 并运行 :make 时再次尝试此操作,但它再次打开了 /some/other/dir/source.h。谁能解释一下吗?我要疯了吗?
大家好,
我在使用 Vim 时遇到了这个恼人的问题。我喜欢这样一个事实:我可以编辑文件,然后输入 :make 来自动执行同一目录中的 Makefile。然而,Vim 在执行后正在更改我的目录。例如,如果我的源文件是/some/dir/source.c并且需要在/some/dir/library/中编译它,我的makefile首先将文件复制到库文件夹中,然后执行另一个makefile。
move_files:
cp /some/dir/source.c /some/dir/library/
pushd /some/dir/libary/; make && su -c "make install"; popd
编译完成后出现问题。如果我以“vim /some/dir/source.c”启动 vim,然后使用 :make,当编译完成时,我将看到“/some/dir/libary/source.c”。我想查看原始位置的文件。
这有道理吗?我可以做什么来禁用此行为?
谢谢!
更新 我之前犯过错误——当 make 完成时,我的窗口中会打开一个新的缓冲区,其中包含复制的头文件(即使我在编译之前正在编辑 .c)。所以我打开 /some/dir/source.c,然后执行 :make,然后在当前窗口中使用 /some/dir/library/source.h 打开一个新缓冲区。诡异的?原始缓冲区仍然打开,但我需要切换回它,因为它现在在后台。
答案1
看起来你的 makefile (stdout/stderr) 输出触发了默认值快速修复模式你的vim。
也许/some/other/dir/source.h
是由递归 make 调用编译的,并生成警告,并且快速修复模式跳转到其位置。或者文件名是其他 makefile 输出的一部分,并且快速修复模式将其误认为是编译器的警告/错误消息。
您可以尝试禁用会话的快速修复模式(如果不需要),更改错误格式或更改 makefile 以生成更少的输出。