Compiler.nvim
Neovim compiler for building and running your code without having to configure anything
Install / Use
/learn @Zeioth/Compiler.nvimREADME
Compiler.nvim
Neovim compiler for building and running your code without having to configure anything.
Table of contents
- Why
- Supported languages
- Required system dependencies
- How to install
- Commands
- Basic usage
- Creating a solution (optional)
- Build automation utilities (optional)
- Quick start
- FAQ
Why
Those familiar with Visual Studio IDE will remember how convenient it was to just press a button and having your program compiled and running. I wanted to bring that same user experience to Neovim.
Supported languages
| Language | More info | |--|--| | asm x86-64| | | c || | c++ || |c# | +info | | dart | +info | | elixir | +info | | fortran | | | f# |+info | | gleam |+info | | flutter | +info | | go || | java | +info | | javascript | +info | | kotlin | +info | | lua || | make || | perl || | python | +info | | r || | ruby || | rust || | shell | +info | | swift || | typescript | +info | | visual basic dotnet | +info | | zig | +info |
Required system dependencies
Some languages require you manually install their compilers in your machine, so compiler.nvim is able to call them. Please check here, as the packages will be different depending your operative system.
How to install
lazy.nvim package manager
{ -- This plugin
"Zeioth/compiler.nvim",
cmd = {"CompilerOpen", "CompilerToggleResults", "CompilerRedo"},
dependencies = { "stevearc/overseer.nvim", "nvim-telescope/telescope.nvim" },
opts = {},
},
{ -- The task runner we use
"stevearc/overseer.nvim",
commit = "6271cab7ccc4ca840faa93f54440ffae3a3918bd",
cmd = { "CompilerOpen", "CompilerToggleResults", "CompilerRedo" },
opts = {
task_list = {
direction = "bottom",
min_height = 25,
max_height = 25,
default_detail = 1
},
},
},
Recommended mappings
-- Open compiler
vim.api.nvim_set_keymap('n', '<F6>', "<cmd>CompilerOpen<cr>", { noremap = true, silent = true })
-- Redo last selected option
vim.api.nvim_set_keymap('n', '<S-F6>',
"<cmd>CompilerStop<cr>" -- (Optional, to dispose all tasks before redo)
.. "<cmd>CompilerRedo<cr>",
{ noremap = true, silent = true })
-- Toggle compiler results
vim.api.nvim_set_keymap('n', '<S-F7>', "<cmd>CompilerToggleResults<cr>", { noremap = true, silent = true })
Commands
| Command | Description|
|--|--|
| :CompilerOpen | Shows the adecuated compiler for your buffer's filetype. |
| :CompilerToggleResults | Open or close the compiler results. |
| :CompilerRedo | Redo the last selected option. |
| :CompilerStop | Dispose all tasks. |
How to use (Basic usage)
This is what happen when you select build & run, build, or run in the compiler:
compiler.nvim will look for the conventional entry point file for the current language you are using. To achieve this, it searches in your current working directory for the next files
| Language | Default entry point | Default output | |--|--|--| | asm x86-64 | ./main.asm | ./bin/program | | c | ./main.c | ./bin/program | | c++ | ./main.cpp | ./bin/program | | c# | ./Program.cs | ./bin/Program.exe | | dart | ./lib/main.dart | ./bin/main | | elixir | ./mix.exs | ./_build/ | | fortran | ./fpm | ./build/ | | f# | see here | ./bin/ | | gleam | ./build.toml | ./build | | flutter | ./pubspec.yaml | ./build/ | | go | ./main.go | ./bin/program | | java | ./Main.java | ./bin/Main.class | | javascript | ./src/index.js | | | kotlin | ./Main.kt | ./bin/MainKt.class | | lua | ./main.lua | | | make | ./Makefile | | | perl | ./main.pl | | | python | ./main.py | ./bin/program | | r | ./main.r | | | ruby | ./main.rb | | | rust | ./main.rs | ./bin/program | | shell | ./main.sh | | | swift | ./main.swift | ./bin/program | | typescript | ./src/index.ts | | | visual basic .net | see here | ./bin/ | | zig | ./build.zig | ./zig-out/bin/build |
This is how the compilation results look after selecting Build & run program in c
For more info see wiki - when to use every option
Creating a solution (optional)
If you want to have more control, you can create a .solution.toml file in your working directory by using this template where every [entry] represents a program to compile
[HelloWorld]
entry_point = "/path/to/my/entry_point_file/main.c"
output = "/path/where/the/program/will/be/written/hello_world"
arguments = ""
[SOLUTION]
executable = "/program/to/execute/after/the/solution/has/compiled/my_program"
Build automation utilities (optional)
If any of these files exist in your current working directory, they will be automatically detected and displayed on Compiler.nvim:
| Build automation utility | File | More info |
|--|--|--|
| Make| ./Makefile | +info |
| CMake | ./CMakeLists.txt | +info |
| Gradle | ./build.gradle | +info |
| Maven | ./pom.xml | +info |
| NodeJS NPM | ./package.json | +info |
| [Meson](https:/
