A community-driven vim distribution

Home | About | Quick start guide | Documentation | Development | Community | Sponsors

Blogs » Use Vim as a C/C++ IDE

This is a general guide for using SpaceVim as a C/C++ IDE, including layer configuration and usage. Each of the following sections will be covered:

Enable language layer

To add C/C++ language support in SpaceVim, you need to enable the lang#c layer. Press SPC f v d to open SpaceVim configuration file, and add following configuration:

  name = "lang#c"

for more info, you can read the lang#c layer documentation.

Syntax highlighting

The basic syntax highlighting is based on regular expression, If you want clang based syntax highlighting. Enable enable_clang_syntax_highlight layer option:

    name = 'lang#c'
    enable_clang_syntax_highlight = true

This option requires +python or +python3 enabled and libclang has been installed.

code completion

By default the autocomplete layer has been enabled, so after loading lang#c layer, the code completion for C/C++ language should works well.

If the autocomplete_method is deoplete, then Shougo/deoplete-clangx will be loaded in lang#c layer.

If the autocomplete_method is asyncomplete, then wsdjeg/asyncomplete-clang.vim will be loaded.

If the autocomplete_method is neocomplete, Then Rip-Rip/clang_complete will be loaded.

You can check the value of autocomplete_method via :SPSet autocomplete_method.

alternate file jumping

To manage the alternate file for a project, you may need to create a .project_alt.json file in the root of your project.

for exmaple, add following content into the .project_alt.json file:

  "*.c": {"alternate": "{}.h"},
  "*.h": {"alternate": "{}.c"}

with this configuration, you can jump between the alternate file via command :A

code running

The default code running key binding is SPC l r. It will compile and run current file asynchronously. And the stdout will be shown on a runner buffer.


The default runner compile option is defineded in clang_std and clang_flag option. If you want to use c11, you can change clang_std option to:

  name = "lang#c"
    cpp = "c11"

You can also create a .clang file in the root directory of you project. Within this file, all compile option should be defineded in it. for example:


Syntax lint

The checker layer provides syntax checking for many programming languages. Including C/C++, and the default plugin is neomake. The default lint for C/C++ is gcc/g++. These commands also read configuration in .clang file.

code format

The format layer use neoformat as default tool to format code, it will format current file. And the default key binding is SPC b f.

  name = "format"

REPL support

Start a igcc inferior REPL process with SPC l s i. After the REPL process being started, you can send code to inferior process, all key bindings prefix with SPC l s, including sending line, sending selection or even send whole buffer.


Powered by Jekyll, Help improve this page