Git Product home page Git Product logo

lunarvim's Introduction

   _..._                             
 .'   (_`.    _                         __     ___           
:  .      :  | |   _   _ _ __   __ _ _ _\ \   / (_)_ __ ___  
:)    ()  :  | |  | | | | '_ \ / _` | '__\ \ / /| | '_ ` _ \ 
`.   .   .'  | |__| |_| | | | | (_| | |   \ V / | | | | | | |
  `-...-'    |_____\__,_|_| |_|\__,_|_|    \_/  |_|_| |_| |_|

GitHub license Open Source? Yes! PRs Welcome Patreon donate button follow on Twitter

LunarVim Demo

Table of contents

Project Goals

  • This project aims to help one transition away from VSCode, and into a superior text editing experience. (Just making this clear)

  • This is also a community project, if you would like to see support for a feature or language consider making a PR.

  • This project will do it's best to include core features you would expect from a modern IDE, while making it easy to add or remove what the user wants.

What's included?

LunarVim provides neovim configuration files that take advantage of tree-sitter and language server protocol. The configuration is written in lua.

Why do I want tree-sitter and LSP?

  • Normally, an editor uses regular expression parsing for things like highlighting and checking the syntax of your file. Each time you make a change, the editor must re-parse the entire file. Tree-sitter, on the other hand, transforms text into a syntax tree. Each time you make a change, only the parts of the code that change need to be parsed. This greatly improves the speed of parsing. This can make a huge difference when editing large files.

  • Neovim 0.5 including language server protocol means your editor can provide: code actions, completions, formatting, navigating to definitions, renaming, etc. The language server only has to be written once and will work on any editor that supports LSP. Any improvements made to the language server will immediately be used by all editors that support LSP.

Install In One Command!

Make sure you have the newest version of Neovim.

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

After installation run nvim and then :PackerInstall

Get the latest version of Neovim

Some operating systems package versions of Neovim 0.5. You can install those or you can follow the steps below to compile from source. Compiling from source is the recommended method.

First, get the dependencies. For distributions other than Ubuntu or Arch go here

#Ubuntu
sudo apt-get install gettext libtool libtool-bin autoconf automake cmake g++ pkg-config unzip build-essential
#Arch
sudo pacman -S base-devel cmake unzip ninja tree-sitter

Download and compile Neovim

cd ~
sudo rm -r neovim
git clone https://github.com/neovim/neovim
cd neovim
sudo make CMAKE_BUILD_TYPE=Release install
cd ~
sudo rm -r neovim

or if you are on Arch you can get it from the AUR

yay -S neovim-git

Getting started

Home screen

The home screen is a plugin called dashboard. It uses the Telescope plugin to find files or find words within files. The home screen provides a link to load saved Sessions. The home screen links to the settings file located at this path: ~/.config/nvim/lv-settings.lua

Leader and Whichkey

The default leader key is set to <Space>. Pressing it will also open up whichkey. Whichkey will help you easily access many of the default keybindings.

Other key bindings

Other key bindings can be found in ~/.config/nvim/lua/keymappings.lua

If you already have a set of keybindings in vimscript that you prefer, source your vimscript file from ~/.config/nvim/init.lua

Example:

vim.cmd('source ~/.config/nvim/vimscript/keymappings.vim')

Or you can translate your old bindings to lua and keep them in the provided keymappings file. Follow the lua guide available here

Important Configuration files

Path Description
~/.config/nvim/lv-settings.lua The main settings file
~/.config/nvim/lua/keymappings.lua Key bindings
~/.config/nvim/lua/plugins.lua Add or remove plugins here

Clipboard Support

  • On Mac pbcopy should be built-in

  • Ubuntu

    sudo apt install xclip
  • Arch

    sudo pacman -S xclip
  • WSL2

    Make sure ~/bin is in your path in this case.

    curl -sLo/tmp/win32yank.zip https://github.com/equalsraf/win32yank/releases/download/v0.0.4/win32yank-x64.zip
    unzip -p /tmp/win32yank.zip win32yank.exe > /tmp/win32yank.exe
    chmod +x /tmp/win32yank.exe
    mv /tmp/win32yank.exe ~/bin

LSP

To install a supported language server:

  :LspInstall <your_language_server>

Most common languages should be supported out of the box, if yours is not I would welcome a PR

For a more in depth LSP support: link

Useful Programs

LunarVim depends on the following:

ranger
ueberzug
ripgrep
pynvim
neovim-remote

EFM server

In order for linters and formatters to work you will need to install efm-langserver

:LspInstall efm

Formatters and Linters

Python

pip3 install --user flake8
pip3 install --user yapf

Lua

luarocks install --server=https://luarocks.org/dev luaformatter

Yaml, Json, Javascript, HTML, CSS

npm install -g prettier

Markdown

pandoc

De-bugging

To set up your particular debugger, look here: link

VSCodium

I recommend you support Free/Libre versions if you plan to use VSCode:

After installing the Neovim extension in VSCode

I recommend using this alongside the VSCode which-key extension

You will also need settings.json and keybindings.json which can be found in utils/vscode_config

Point the nvim path to your nvim binary

Point your init.vim path to:

$HOME/.config/nvim/vimscript/lv-vscode/init.vim

Useful commands for troubleshooting

Whether you plan on using LunarVim as is or as a base to configure your own neovim, the following commands may be useful. Any command that includes the symbol ':' is meant to be typed as a command in neovim. Make sure you're in normal mode not insert mode.

Command Description
:checkhealth Check the health of your neovim install
:checkhealth <pluginname> Check the health of a plugin
nvim -v checks your neovim version
nvim -V vebose output when running neovim. Prints out every event
:PackerCompile Must be run when you make plugin changes. (or, alternately run :PackerSync)
:PackerInstall Only install missing plugins
:PackerUpdate Update and install plugins
:PackerClean Remove any disabled or unused plugins
:PackerSync Performs 'PackerClean' then 'PackerUpdate'
:PackerStatus List the status of your plugins
:LspInstall <language> Install a language server for a specific programming language
:LspInfo List the status of active and configured language servers
:LspStart <language> Start the requested server name. Will only succesfully start if the command detects a root directory matching the current config. Pass autostart = false to your .setup{} call for a language server if you would like to launch clients solely with this command. Defaults to all servers matching current buffer filetype.
:LspStop Stops all buffer clients
:LspRestart Restarts all buffer clients
:map List keybindings
:nmap List normal mode keybindings
:vmap List visual mode keybindings
:imap List insert mode keybindings
:verbose imap <keybinding> Print out what a particular keybinding is mapped to
:messages Print error messages. Useful when messages get cut off
:scriptnames List all sourced files

TODO

HIGH PRIORITY

  • Move user config into config.lua ts-comment string for react
  • From here I will update for bug fixes and implement low priority features when I have time
  • different key to advance through snippets

LOW PRIORITY

PLUGIN BUGS

REACT COMMENTING IS A NIGHTMARE (the filetype is just not recognized idk why)

lunarvim's People

Contributors

ghmhd avatar jameswalmsley avatar gmardom avatar biserstoilov avatar chaesngmin avatar rebuilt avatar nawfalmrouyan avatar seocamo avatar fanmih avatar vladdoster avatar danielpower avatar christianchiarulli avatar alisonjenkins avatar midnightexigent avatar sansyrox avatar shubham-cpp avatar teepobharu avatar timbedard avatar walkability avatar wbunting avatar acemouty avatar kuator avatar haininhhoang94 avatar michaelslec avatar mvllow avatar przbadu avatar tiagovla avatar yibaba avatar qverkk avatar mandaputtra avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.