【问题标题】:Compiling and Running a C++ Program with Vim [duplicate]使用 Vim 编译和运行 C++ 程序 [重复]
【发布时间】:2026-01-27 16:25:02
【问题描述】:

我知道这听起来很愚蠢,但我已经在 Vim 编辑器上编写了 C++ 代码,我终生无法弄清楚如何编译和运行它。我知道这非常简单,但我已经醒太久了 感谢您的帮助!

【问题讨论】:

  • 嗯... Vim 是一个文本编辑器。你必须使用 compiler 来编译你的程序 ;-).
  • 你可以看到这个[问题][1],但我认为使用 IDE 会更好。 [1]:*.com/questions/2627886/…
  • @SergeyKoklyuev 使用 IDE 或文本编辑器是个人选择,没有好坏之分。这可能更容易,因为 OP 听起来像初学者(无意冒犯)。
  • 您可以添加一个映射序列来编译您正在编辑的单一来源,并添加一个序列来运行它。在我的~/.vimrc 中,我添加了map \g <Esc>:!gcc -Wall -Wextra -pedantic -std=c11 -Wshadow -Ofast -o %< % <CR>,它将编译映射到\g(由[ctrl]+v 访问,然后\g)然后运行文件,为map \r <Esc>:!./%< <CR> 添加一个映射(由[ctrl]+v 访问然后@ 987654330@)。所以基本上是\ggcc\r 运行。

标签: c++ vim


【解决方案1】:

:make 确实是 Jon said 的方式。

在安装了 gnumake 的类 Linux(它也适用于 cygwin,但不适用于 windows 上的 mingw)系统上,如果您的项目中没有 Makefile,并且如果您的项目仅由一个文件组成,只需输入:make。就足够了(您可以使用$CXXFLAGS$CFLAGS$LDFLAGS 来调整编译选项)。然后运行程序,输入:!./%< (IIRC)。

如果您的项目由多个文件组成,那么您将需要一个 Makefile 来利用 :make

如果您使用 CMake 管理您的项目,并且如果您在源代码树之外的一个目录(或多个 -> 调试、发布等)中编译您的项目,那么集成将需要一个插件。 AFAIK,我是唯一提出这样一个插件的人:BuildToolsWrapper 集成了 CMake 的管理(构建目录的选择,在调试、发布或任何构建目录之间进行选择的可能性)。它必须与local_vimrc 插件之一结合使用。

在所有情况下,直接从 Vim 内部(或外部)使用 :!g++ -o %< % 或我们 15 年前在 vi 上所做的任何事情直接调用编译器。 Vim 有一个很棒的特性:它可以集成(是的,就像在 IDE 中一样)编译器。见:h quickfix。直接从编辑器中导航错误比用我们的眼睛提取一个错误行、在编辑器中输入行号、返回 shell 以查看究竟被拒绝的内容要容易得多,......在 C 中可能就足够了,但是在 C++ 中,当我们“试图调用不存在的重载”时,我们不能这样工作(在编辑器和 shell 之间来回切换)。

【讨论】:

  • 这应该是公认的答案。
  • 这为我每 30 分钟的 C/C++/Java 编码节省了 5 秒。
【解决方案2】:

只需输入vim:

:wq

然后,在您的命令行中,调用不是vim 而是g++clang++ 或类似的编译器

g++ -o myCode myCode.cpp

编辑:所有反对的选民请阅读由 Bram Moolenaar 本人撰写的 vim 用户手册第 21 节,标题为:“走开,回来”。 :help user-manual 会带你到那里。他基本上说在 vim 中编译或保存并退出,编译然后返回很酷。根据本节的标题,我认为布拉姆更喜欢后者。他肯定已经精心设计了 vim 以最出色的方式处理后者。当我“返回”到任何文件时:光标在同一行和同一列,我可以像以前一样撤消和重做,我的所有历史记录、搜索、寄存器和一切都与我离开时完全一样。和我走的时候基本看不出有什么区别!

重新编辑:再次向所有反对的选民致意 - 出于许多不同的原因,窥视者以多种不同的方式使用 vim。我一直在 shell 级别做这么多事情,以至于一直呆在 vim 中会非常愚蠢。显然,你的选民在完全不同的情况下工作,你最好留在编辑器中。请不要再认为所有窥视者的工作方式都和你一样。

【讨论】:

  • +1...感谢您的回覆..我完全忘记了。我们在大学实验室中经常这样做..;)
  • 这不是很 vim。每次要编译时关闭和重新打开 vim 效率很低。你最好使用像:make 这样的内置命令(见我的回答)。
  • @PaulEvans 你的 vim 高尔夫差点一定很可怕。但请不要冒犯。我并不是说退出是错误的,只是效率降低了……我们可怜的 OP 可能打开了 50 个缓冲区……当然,会再见的。
  • 至少只是做ctrl-z 暂时退出vim!然后fg 回到你正在做的事情。也就是说,我不断关闭并重新打开 vim。不过我认为这是一个坏习惯。
  • 为什么投反对票?
【解决方案3】:

这取决于您构建软件的方式。如果你使用 make,你可以在 vim 提示符中输入:make。输入 :h make 以查看选项和支持命令,让您循环查看代码中的错误。

【讨论】:

  • 文本编辑器应该用于操作文本,Unix 哲学