My favorite VIM based IDE !!

christianchiarulli b797c2398f Merge branch 'rolling' of github.com:ChristianChiarulli/LunarVim into rolling 4 years ago
.github 5f6f5a735d [Feature] Add an installer for Stylua (#977) 4 years ago
colors e780972b30 spacegray now in lua 4 years ago
ftdetect 21c515d8e3 [LANG] add basic files for Fish (#968) 4 years ago
ftplugin 113f69c447 [Feature] Add R support (#965) 4 years ago
lua b797c2398f Merge branch 'rolling' of github.com:ChristianChiarulli/LunarVim into rolling 4 years ago
utils 59106e860e [Refactor] Make default keybindings configurable (#988) 4 years ago
.gitignore 47ede1e2c2 add temporal and backup files to gitignore. (#983) 4 years ago
.luacheckrc dd5de4217d configure luacheck to better undersant LV code (#998) 4 years ago
CONTRIBUTING.md 1f5fd93f80 [Refactor] nvimtree to be configurable (#970) 4 years ago
LICENSE d3e94f3086 update license 4 years ago
README.md 56f17cebd4 [Feature] Allow users to inspect all settings inside LV (#984) 4 years ago
init.lua 6f9c521e22 Split plugin loading logic from the configuration (#796) 4 years ago

README.md

LunarVim Demo

Install In One Command!

Make sure you have the newest version of Neovim (0.5).

bash <(curl -s https://raw.githubusercontent.com/ChristianChiarulli/lunarvim/master/utils/installer/install.sh)

If you help to develop Lunarvim, you can install a specific branch branch directly

LVBRANCH=rolling bash <(curl -s https://raw.githubusercontent.com/ChristianChiarulli/lunarvim/rolling/utils/installer/install.sh)

If your installation is stuck on Ok to remove? [y/N], it means there are some leftovers, \ you can run the script with --overwrite but be warned this will remove the following folders:

  • ~/.config/nvim
  • ~/.cache/nvim
  • ~/.local/share/nvim/site/pack/packer

    curl -s https://raw.githubusercontent.com/ChristianChiarulli/lunarvim/rolling/utils/installer/install.sh | LVBRANCH=rolling bash -s -- --overwrite
    

    then run nvim and wait for treesitter to finish the installation

    Installing LSP for your language

    Just enter :LspInstall followed by <TAB> to see your options

    NOTE I recommend installing lua for autocomplete in lv-config.lua

    Configuration file

    To activate other plugins and language features use the lv-config.lua file provided in the nvim folder (~/.config/nvim/lv-config.lua)

    Example:

    -- O is the global options object
    
    -- THESE ARE EXAMPLE CONFIGS FEEL FREE TO CHANGE TO WHATEVER YOU WANT
    -- general
    -- O.format_on_save = false -- to disbale formatting on save
    -- O.lint_on_save = false -- to disable formatting on save
    O.completion.autocomplete = true
    O.default_options.relativenumber = true
    O.colorscheme = 'spacegray'
    O.default_options.timeoutlen = 100
    
    -- keymappings 
    O.keys.leader_key = "space"
    -- overwrite the key-mappings provided by LunarVim for any mode, or leave it empty to keep them
    O.keys.normal_mode = {
    -- Page down/up
    {'[d', '<PageUp>'},
    {']d', '<PageDown>'},
    
    -- Navigate buffers
    {'<Tab>', ':bnext<CR>'},
    {'<S-Tab>', ':bprevious<CR>'},
    }
    -- if you just want to augment the existing ones then use the utility function
    require("lv-utils").add_keymap_insert_mode({ silent = true }, {
    { "<C-s>", ":w<cr>" },
    { "<C-c>", "<ESC>" }
    })
    
    -- you can also use the native vim way directly
    vim.api.nvim_set_keymap("i", "<C-Space>", "compe#complete()", { noremap = true, silent = true, expr = true })
    
    -- After changing plugin config it is recommended to run :PackerCompile
    O.plugin.dashboard.active = true
    O.plugin.terminal.active = true
    O.plugin.zen.active = true
    
    -- if you don't want all the parsers change this to a table of the ones you want
    O.treesitter.ensure_installed = "all"
    O.treesitter.ignore_install = {"haskell"}
    O.treesitter.highlight.enabled = true
    
    -- lua
    O.lang.lua.autoformat = false
    O.lang.lua.formatter = 'lua-format'
    
    -- javascript
    O.lang.tsserver.formatter = 'prettier'
    O.lang.tsserver.linter = nil
    O.lang.tsserver.autoformat = true
    
    -- python
    O.lang.python.diagnostics.virtual_text = true
    O.lang.python.analysis.use_library_code_types = true
    -- to change default formatter from yapf to black
    -- O.lang.python.formatter.exe = "black"
    -- O.lang.python.formatter.args = {"-"}
    -- To change enabled linters
    -- https://github.com/mfussenegger/nvim-lint#available-linters
    -- O.lang.python.linters = { "flake8", "pylint", "mypy", ... }
    
    -- go
    -- to change default formatter from gofmt to goimports
    -- O.lang.formatter.go.exe = "goimports"
    
    -- Additional Plugins
    -- O.user_plugins = {
    --   {"folke/tokyonight.nvim"},
    --   {
    --     "ray-x/lsp_signature.nvim",
    --     config = function()
    --       require"lsp_signature".on_attach()
    --     end,
    --     event = "InsertEnter"
    --   },
    -- }
    
    -- }
    
    -- Autocommands (https://neovim.io/doc/user/autocmd.html)
    -- O.user_autocommands = {{ "BufWinEnter", "*", "echo \"hi again\""}}
    
    -- Additional Leader bindings for WhichKey
    -- O.user_which_key = {
    --   A = {
    --     name = "+Custom Leader Keys",
    --     a = { "<cmd>echo 'first custom command'<cr>", "Description for a" },
    --     b = { "<cmd>echo 'second custom command'<cr>", "Description for b" },
    --   },
    -- }
    
    -- To link your init.vim (until you find Lua replacements)
    -- vim.cmd('source ' .. CONFIG_PATH .. '/lua/lv-user/init.vim')
    

In case you want to see all the settings inside LunarVim, run the following:

cd ~/.config/nvim
nvim --headless +'lua require("lv-utils").generate_settings()' +qa && sort -o lv-settings.lua{,}

and then inspect ~/.config/nvim/lv-settings.lua file

Updating LunarVim

In order to update you should be aware of three things Plugins, LunarVim and Neovim

To update plugins:

:PackerUpdate

To update LunarVim:

cd ~/.config/nvim && git pull

To update Neovim use your package manager

Project Goals

  1. Provide basic functionalities required from an IDE
    • LSP
    • Formatting/Linting
    • Debugging
    • Treesitter
    • Colorschemes
  2. Be as fast and lean as possible
    • Lazy loading
    • Not a single extra plugin
    • User configurable lang/feature enable/disable
  3. Provide a simple and easy way for users to share their own configuration or use others.
  4. Hot reload of configurations
    • Hot install of lsp/treesitter/formatter required upon openning a filetype for the first time
  5. Provide a stable & maintainable error free configuration layer over neovim
    • With the help of the community behind it
    • Github workflow testing
    • Freezing plugin versions
  6. Provide detailed documentation
    • Video series on how to configure LunarVim as an IDE for each lang
  7. Valhalla

Resources

Testimonials

"I have the processing power of a potato with 4 gb of ram and LunarVim runs perfectly."

  • @juanCortelezzi, LunarVim user.

"My minimal config with a good amount less code than LunarVim loads 40ms slower. Time to switch."

  • @mvllow, Potential LunarVim user.
[![Lua](https://img.shields.io/badge/Made%20with%20Lua-blue.svg?style=for-the-badge&logo=lua)](#madewithlua)