LunarVim/README.md

298 lines
11 KiB
Markdown
Raw Normal View History

2021-04-15 06:17:48 +02:00
```
_..._
.' (_`. _ __ ___
: . : | | _ _ _ __ __ _ _ _\ \ / (_)_ __ ___
:) () : | | | | | | '_ \ / _` | '__\ \ / /| | '_ ` _ \
`. . .' | |__| |_| | | | | (_| | | \ V / | | | | | | |
`-...-' |_____\__,_|_| |_|\__,_|_| \_/ |_|_| |_| |_|
```
2021-03-15 02:51:54 +01:00
2021-03-30 07:43:05 +02:00
2021-04-15 06:23:45 +02:00
[![GitHub license](https://img.shields.io/github/license/ChristianChiarulli/LunarVim)](https://github.com/ChristianChiarulli/LunarVim/blob/master/LICENSE)
2021-04-15 06:17:48 +02:00
[![Open Source? Yes!](https://badgen.net/badge/Open%20Source%20%3F/Yes%21/blue?icon=github)](https://github.com/ChristianChiarulli/lunarvim)
2021-03-30 07:43:05 +02:00
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)
2021-03-30 07:57:52 +02:00
<a href="https://patreon.com/chrisatmachine" title="Donate to this project using Patreon"><img src="https://img.shields.io/badge/patreon-donate-yellow.svg" alt="Patreon donate button" /></a>
2021-03-30 08:10:40 +02:00
<a href="https://twitter.com/intent/follow?screen_name=chrisatmachine"><img src="https://img.shields.io/twitter/follow/chrisatmachine?style=social&logo=twitter" alt="follow on Twitter"></a>
2021-03-27 19:32:45 +01:00
2021-04-15 06:17:48 +02:00
![LunarVim Demo](./utils/media/demo.png)
2021-03-27 19:30:24 +01:00
# Table of contents
- [Project Goals](#project-goals)
- [What's included?](#whats-included)
- [Why do I want tree-sitter and LSP?](#why-do-i-want-tree-sitter-and-lsp)
- [Install In One Command!](#install-in-one-command)
- [Get the latest version of Neovim](#get-the-latest-version-of-neovim)
- [Getting started](#getting-started)
- [Home screen](#home-screen)
- [Leader and Whichkey](#leader-and-whichkey)
- [Important Configuration files](#important-configuration-files)
- [Clipboard Support](#clipboard-support)
- [LSP](#lsp)
- [Useful Programs](#useful-programs)
- [EFM server](#efm-server)
- [Formatters and Linters](#formatters-and-linters)
- [De-bugging](#de-bugging)
- [VSCodium](#vscodium)
- [Useful commands for troubleshooting](#useful-commands-for-troubleshooting)
- [TODO](#todo)
2021-03-27 19:28:02 +01:00
# Project Goals
* This project aims to help one transition away from VSCode, and into a superior text editing experience. (Just making this clear)
2021-03-27 19:23:59 +01:00
* This is also a community project, if you would like to see support for a feature or [language](https://github.com/neovim/nvim-lspconfig/blob/master/CONFIG.md) consider making a PR.
2021-03-29 23:00:11 +02:00
* 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.
2021-03-24 00:52:56 +01:00
# What's included?
2021-03-24 01:00:40 +01:00
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
2021-04-15 06:17:48 +02:00
bash <(curl -s https://raw.githubusercontent.com/ChristianChiarulli/lunarvim/master/utils/installer/install.sh)
2021-03-24 00:52:56 +01:00
```
2021-03-24 01:00:40 +01:00
After installation run `nvim` and then `:PackerInstall`
2021-03-20 22:22:44 +01:00
## Get the latest version of Neovim
2021-03-15 03:25:28 +01:00
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](https://github.com/neovim/neovim/wiki/Building-Neovim#build-prerequisites)
```bash
#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
2021-03-30 04:07:01 +02:00
```bash
2021-03-15 03:25:28 +01:00
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
```bash
yay -S neovim-git
```
2021-03-15 03:25:28 +01:00
# 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:
```lua
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](https://github.com/nanotee/nvim-lua-guide)
## 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 |
2021-03-15 17:58:57 +01:00
# Clipboard Support
2021-03-20 09:20:23 +01:00
2021-03-22 19:03:54 +01:00
- On Mac `pbcopy` should be built-in
2021-03-20 09:20:23 +01:00
- Ubuntu
2021-03-20 22:22:44 +01:00
```bash
sudo apt install xclip
2021-03-20 22:22:44 +01:00
```
2021-03-20 09:20:23 +01:00
- Arch
2021-03-20 22:22:44 +01:00
```bash
sudo pacman -S xclip
2021-03-20 22:22:44 +01:00
```
- WSL2
Make sure ~/bin is in your path in this case.
```bash
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
```
2021-03-20 09:20:23 +01:00
# LSP
2021-03-20 09:20:23 +01:00
2021-03-24 00:58:43 +01:00
To install a supported language server:
2021-03-20 09:20:23 +01:00
2021-03-24 04:52:35 +01:00
``` bash
:LspInstall <your_language_server>
2021-03-24 00:58:43 +01:00
```
2021-03-24 04:52:35 +01:00
2021-03-26 05:15:52 +01:00
Most common languages should be supported out of the box, if yours is not I would welcome a PR
2021-03-20 09:20:23 +01:00
2021-03-20 22:22:44 +01:00
For a more in depth LSP support:
[link](https://github.com/neovim/nvim-lspconfig/blob/master/CONFIG.md)
2021-03-20 09:20:23 +01:00
# Useful Programs
2021-03-19 04:47:03 +01:00
2021-04-15 06:17:48 +02:00
LunarVim depends on the following:
2021-03-20 22:22:44 +01:00
``` bash
2021-03-19 04:47:03 +01:00
ranger
ueberzug
ripgrep
2021-03-20 09:20:23 +01:00
pynvim
neovim-remote
2021-03-19 04:47:03 +01:00
```
# EFM server
2021-03-26 01:06:08 +01:00
In order for linters and formatters to work you will need to install
`efm-langserver`
```vim
:LspInstall efm
```
# Formatters and Linters
2021-03-24 00:58:43 +01:00
2021-03-19 04:47:03 +01:00
**Python**
2021-03-20 22:22:44 +01:00
``` bash
2021-03-24 00:58:43 +01:00
pip3 install --user flake8
pip3 install --user yapf
2021-03-19 04:47:03 +01:00
```
**Lua**
2021-03-20 22:22:44 +01:00
``` bash
2021-03-24 00:58:43 +01:00
luarocks install --server=https://luarocks.org/dev luaformatter
2021-03-19 04:47:03 +01:00
```
2021-03-20 09:20:23 +01:00
**Yaml, Json, Javascript, HTML, CSS**
2021-03-20 22:22:44 +01:00
``` bash
2021-03-24 00:58:43 +01:00
npm install -g prettier
2021-03-20 09:20:23 +01:00
```
2021-03-20 22:22:44 +01:00
**Markdown**
``` bash
pandoc
```
# De-bugging
2021-03-19 04:47:03 +01:00
2021-04-15 06:17:48 +02:00
To set up your particular debugger, look here:
[link](https://github.com/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation)
2021-03-19 04:47:03 +01:00
# VSCodium
2021-03-19 04:47:03 +01:00
2021-04-15 06:17:48 +02:00
I recommend you support Free/Libre versions if you plan to use VSCode:
2021-03-20 03:35:58 +01:00
2021-04-15 06:17:48 +02:00
- [VSCodium](https://vscodium.com/)
2021-03-20 03:35:58 +01:00
2021-04-15 06:17:48 +02:00
- Article to get you set up with VSCodium: [link](https://www.chrisatmachine.com/Neovim/22-vscodium-neovim/)
2021-03-23 03:09:11 +01:00
2021-04-15 06:17:48 +02:00
After installing the [Neovim
extension](https://github.com/asvetliakov/vscode-neovim) in VSCode
I recommend using this alongside the VSCode
[which-key](https://github.com/VSpaceCode/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:
``` vim
$HOME/.config/nvim/vimscript/lv-vscode/init.vim
```
2021-03-23 03:09:11 +01:00
# 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
2021-03-15 16:54:53 +01:00
**HIGH PRIORITY**
2021-03-20 22:22:44 +01:00
2021-04-07 06:30:22 +02:00
- Move user config into `config.lua` ts-comment string for react
- From here I will update for bug fixes and implement low priority
2021-03-24 05:53:36 +01:00
features when I have time
2021-04-07 06:30:22 +02:00
- different key to advance through snippets
2021-04-04 23:21:57 +02:00
2021-03-23 03:09:11 +01:00
**LOW PRIORITY**
2021-03-31 18:05:26 +02:00
- vim vsnips dir should be co-located with config
2021-04-04 23:21:57 +02:00
- list all binaries needed for formatters and linters (one day add in wiki)
2021-03-20 22:22:44 +01:00
- Implement what I can from this java config:
[link](https://github.com/mfussenegger/nvim-jdtls/wiki/Sample-Configurations)
- better ui for code actions - formatting
- setup junit tests for java
2021-03-22 19:03:54 +01:00
- look into emmet-ls
2021-03-22 04:14:19 +01:00
- vim ult test
2021-04-04 23:21:57 +02:00
- which-key all in lua
2021-03-22 06:46:06 +01:00
- what is `fzy`
2021-03-22 08:01:12 +01:00
- https://github.com/pwntester/octo.nvim
2021-03-22 20:15:12 +01:00
- configure surround
- Implement this for typescript https://github.com/jose-elias-alvarez/nvim-lsp-ts-utils
2021-03-27 01:28:08 +01:00
- look into tabnine
2021-03-22 01:59:02 +01:00
**PLUGIN BUGS**
2021-03-26 18:48:58 +01:00
REACT COMMENTING IS A NIGHTMARE (the filetype is just not recognized idk why)