Vim 作为 C++ IDE 时如何设置编译运行快捷键并引用当前文件?

新手上路,请多包涵

vim作C++IDE的问题,下了GCC搭配VIM当作我的C++IDE,但是每次编译运行都得输一大串命令,就想弄个快捷键,可是应该怎样表示当前文件呢?是不是用到某个环境变量?

阅读 854
avatarAI BotBETA

在Vim中设置编译运行C++代码的快捷键,并引用当前文件,可以通过创建自定义命令和使用映射(mappings)来实现。Vim中的%特殊字符用于表示当前编辑的文件名。以下是一个基本的步骤指南,说明如何设置这样的快捷键。

第一步:配置Makefile(可选,但推荐)

虽然这不是Vim的直接配置,但使用Makefile可以大大简化编译过程。在项目的根目录下创建一个Makefile,里面包含编译和运行的规则。例如:

CXX=g++
CXXFLAGS=-std=c++11 -Wall -pedantic

all: my_program

my_program: main.cpp
    $(CXX) $(CXXFLAGS) $^ -o $@

run: my_program
    ./$<

.PHONY: clean
clean:
    rm -f my_program

在这个例子中,make命令会编译main.cpp(假设这是你的主文件),make run会编译并运行程序。

第二步:在Vim中设置快捷键

你可以使用Vim的:map命令来设置快捷键。不过,更推荐使用:nnoremap来避免递归映射。

  1. 编译快捷键

    假设你已经有了Makefile,你可以创建一个快捷键来运行make命令。

    nnoremap <F5> :!make<CR>

这里<F5>是快捷键(你可以根据需要换成其他键),:!用于执行外部命令,<CR>表示回车。

  1. 编译并运行快捷键(如果你没有使用Makefile的run目标,你可能需要稍作修改):

    nnoremap <F6> :!make && ./my_program<CR>

注意,这里的./my_program假设你的可执行文件名是my_program。如果你的文件名不同,或者你想使其更通用,你可以使用Vim的%:r来引用当前文件的根名(去掉扩展名),但这通常不适用于执行编译后的程序,因为编译后的程序名可能与源文件不同。

对于更复杂的场景,你可以编写一个Vim脚本来检测编译后的文件名并运行它,但这通常超出了简单快捷键的范围。

  1. 使用%引用当前文件

    如果你需要在Vim的外部命令中引用当前文件,你可以使用%:p来获取当前文件的完整路径,或者%来在支持的文件名上下文中使用它(尽管在直接执行外部命令时通常不这样用)。

注意

  • 这些映射只在你当前的Vim会话中有效。要使它们永久生效,你需要将它们添加到你的~/.vimrc文件中。
  • 根据你的Vim配置和操作系统,执行外部命令时可能需要调整路径或权限。
  • 使用Makefile(或类似构建系统)可以大大提高开发效率,因为它允许你定义复杂的构建规则,并仅重新编译更改过的部分。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题