summaryrefslogtreecommitdiff
path: root/README.md
blob: 416ddc6ed95b2ecf6841421c3355deeec9a34ff8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
![LunarVim Demo](./utils/media/lunarvim_logo_dark.png)

<div align="center"><p>
    <a href="https://github.com/ChristianChiarulli/LunarVim/releases/latest">
      <img alt="Latest release" src="https://img.shields.io/github/v/release/ChristianChiarulli/LunarVim" />
    </a>
    <a href="https://github.com/ChristianChiarulli/sniprun/releases">
      <img alt="Total downloads" src="https://img.shields.io/github/downloads/ChristianChiarulli/LunarVim/total" />
    </a>
    <a href="https://github.com/ChristianChiarulli/LunarVim/pulse">
      <img alt="Last commit" src="https://img.shields.io/github/last-commit/ChristianChiarulli/LunarVim"/>
    </a>
    <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>
    <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>
</p>
</div>

![LunarVim Demo](./utils/media/demo.png)

# Table of contents

- [What’s included?](#whats-included)
  * [Why do I want tree-sitter and LSP?](#why-do-i-want-tree-sitter-and-lsp)
- [Project Goals](#project-goals)
- [Install In One Command!](#install-in-one-command)
  * [Get the latest version of Neovim](#get-the-latest-version-of-neovim)
  * [Manual Install](#manual-install)
  * [Troubleshooting installation
    problems](#troubleshooting-installation-problems)
- [Getting started](#getting-started)
  * [Home screen](#home-screen)
  * [Leader and Whichkey](#leader-and-whichkey)
  * [Important Configuration files](#important-configuration-files)
- [Install your own plugins](#install-your-own-plugins)
  * [An example installation of the colorizer plugin](#an-example-installation-of-the-colorizer-plugin)
  * [Finding plugins](#finding-plugins)
- [Using Packer](#using-packer)
  * [Packer commands](#packer-commands)
  * [Packer reports missing plugins](#packer-reports-missing-plugins)
- [Clipboard Support](#clipboard-support)
- [LSP](#lsp)
  * [Lsp errors](#lsp-errors)
    + [Understanding LspInfo](#understanding-lspinfo)
    + [Example configurations](#example-configurations)
  * [Last resort](#last-resort)
- [Useful Programs](#useful-programs)
- [EFM server](#efm-server)
- [Formatters and Linters](#formatters-and-linters)
- [De-bugging](#de-bugging)
- [VSCodium](#vscodium)
- [Color Schemes](#color-schemes)
  * [Available colorschemes](#available-colorschemes)
  * [Switching colors](#switching-colors)
- [Useful commands for
  troubleshooting](#useful-commands-for-troubleshooting)
- [Uninstalling](#uninstalling)
- [Community links](#community-links)
- [TODO](#todo)

# 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.

# 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](https://github.com/neovim/nvim-lspconfig/blob/master/CONFIG.md)
  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.

# Install In One Command!

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

``` bash
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](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

``` bash
cd $(mktemp -d)
git clone https://github.com/neovim/neovim --depth 1
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
```


If you are on Gentoo you have to emerge the 9999 neovim version with luajit as the lua single target

## Manual install 

First make sure you have version [0.5 of
neovim](#get-the-latest-version-of-neovim).

Back up your current configuration files

```bash
mv ~/.config/nvim ~/.config/nvim.bak
```

Install xclip, python3, ripgrep, fzf, npm, nodejs, pip, and ranger with the package manager for your distribution.

```bash
# Ubuntu
sudo apt install xclip python3-pip nodejs npm ripgrep fzf ranger libjpeg8-dev zlib1g-dev python-dev python3-dev libxtst-dev python3-pip

# Arch
sudo pacman -S xclip python python-pip nodejs npm ripgrep fzf ranger

# Fedora
sudo dnf groupinstall "X Software Development"
sudo dnf install -y xclip python3-devel pip nodejs npm ripgrep fzf ranger 
pip3 install wheel ueberzug

# Gentoo
sudo emerge -avn sys-apps/ripgrep app-shells/fzf app-misc/ranger dev-python/neovim-remote virtual/jpeg sys-libs/zlib
sudo emerge -avn dev-python/pip
# Optional.   Enable npm USE flag with flaggie
sudo flaggie net-libs/nodejs +npm
sudo emerge -avnN net-libs/nodejs

# Mac
brew install lua node yarn ripgrep fzf ranger
sudo curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3 get-pip.py
rm get-pip.py
```

Install tree-sitter.  To globally install packages without the need for sudo
follow [this guide](https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally)

```bash
npm install -g tree-sitter-cli
```

Install ueberzug, neovim-remote, and pynvim with pip3

```bash
pip3 install ueberzug neovim neovim-remote pynvim --user
```

Clone LunarVim and Packer

```bash
git clone https://github.com/wbthomason/packer.nvim ~/.local/share/nvim/site/pack/packer/start/packer.nvim
git clone https://github.com/ChristianChiarulli/lunarvim.git ~/.config/nvim
```

Install plugins
```
nvim -u $HOME/.config/nvim/init.lua +PackerInstall
```

## Troubleshooting installation problems
If you encounter problems with the installation check the following: 
1. Make sure you have at least version 0.5 of neovim. 
2. Make sure neovim was compiled with luajit. 
  ```bash
  # The output of version information should include a line for: LuaJIT 
  nvim -v
  ```
3. If you ran the [quick-install script](#install-in-one-command) using sudo, follow the steps to [uninstall](#uninstalling) and try again without sudo. 
4. Make sure the [dependencies](#useful-programs) were installed.  
5. Make sure your plugins are installed and updated. Run :PackerSync

# Getting started

## Home screen

The home screen is a plugin called
[Dashboard](https://github.com/glepnir/dashboard-nvim). It uses the
[Telescope](https://github.com/nvim-telescope/telescope.nvim) 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 &lt;Space&gt;. Pressing it will also
open up [Whichkey](https://github.com/folke/which-key.nvim). Whichkey
will help you easily access many of the default keybindings. Whichkey
defines keymappings in this file:
\~/.config/nvim/lua/lv-which-key/init.lua

## 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 |

# Install your own plugins

The steps for configuring your own plugin are: 
1. Add the plugin to `plugins.lua`
2. If the plugin requires configuration, create a configuration file for it
3. If you created a configuration, require the file in `init.lua`
4. Use Packer to download and install the plugin

Please note that every plugin will require different configuration steps. 
Follow the instructions provided by the README of plugin you're interested in.  If 
those instructions are written in lua, copy and paste the code they provide.  
If the instructions are written in vimscript, either translate the code to 
lua or wrap the vimscript in this lua function:

```lua
vim.cmd([[ 
YOUR_VIMSCRIPT_GOES_HERE
]])
```

## An example installation of the colorizer plugin

'use' is a function provided by the Packer plugin.  In the example below, 
we tell Packer to optionally load the plugin. This means the plugin will not 
start unless some other function manually loads it.

The 'require_plugin' function is part of LunarVim.  It loads the plugin.

``` lua
# ~/.config/nvim/lua/plugins.lua
use {"norcalli/nvim-colorizer.lua", opt = true}
require_plugin("nvim-colorizer.lua")
```

From the [ README ](https://github.com/norcalli/nvim-colorizer.lua) we find out [ Colorizer ](https://github.com/norcalli/nvim-colorizer.lua) is written and configured in lua. 
Colorizer provides a setup function which must be called for the plugin to work correctly. So we create a folder 'lv-colorizer' and
a file 'init.lua'. And populate the file with the configuration mentioned in the
[ README ](https://github.com/norcalli/nvim-colorizer.lua)


``` lua
# ~/.config/nvim/lua/lv-colorizer/init.lua
require'colorizer'.setup()
```

We created the lua/lv-colorizer/init.lua file.  Creating this file means that we've created a module.  Now we need to make sure this module 
gets loaded when we start neovim.  'require' is a lua function that loads
a module.  

``` lua
# ~/.config/nvim/init.lua
require('lv-colorizer')
```

``` lua
:PackerCompile
:PackerInstall
```

The example above loads the plugin when neovim starts.  If you want to take advantage of Packer's built-in lazy loading, do not use the 'require_plugin' function.  Instead, define the loading strategy in Packer's 'use' method. For a more in-depth explantion, read the [Packer docs](https://github.com/wbthomason/packer.nvim)

## Finding plugins

If you want to find other plugins that take advantage of neovim’s latest
features go [here](https://github.com/rockerBOO/awesome-neovim)

# Using Packer

[Packer](https://github.com/wbthomason/packer.nvim) manages your
installed plugins. Any time you make changes to your list of plugins in
\~/.config/nvim/lua/plugins.lua you must first run the command
:PackerCompile then :PackerInstall. \#\# Packer commands

``` bash
-- You must run this or `PackerSync` whenever you make changes to your plugin configuration
:PackerCompile

-- Only install missing plugins
:PackerInstall

-- Update and install plugins
:PackerUpdate

-- Remove any disabled or unused plugins
:PackerClean

-- Performs `PackerClean` and then `PackerUpdate`
:PackerSync

-- View the status of your plugins
:PackerStatus
```

## Packer reports missing plugins

If you get an error message about missing plugins and the above commands
do not work, remove the plugin directory and reinstall from scratch.

``` bash
rm -rf ~/.local/share/nvim/site
:PackerCompile
:PackerInstall
```

# Clipboard Support

- On Mac `pbcopy` should be built-in

- Ubuntu

    ```bash
    sudo apt install xclip
    ```

- Arch

    ```bash
    sudo pacman -S xclip
    ```

- 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
    ```

# LSP

Neovim comes bundled with a language client but not a language server.
To install a supported language server:

``` md
  :LspInstall <your_language_server>
```

See [LspInstall](https://github.com/kabouzeid/nvim-lspinstall) for more
info.

In order for Java LSP to work, edit `~/.local/share/nvim/lspinstall/java/jdtls.sh` and replace `WORKSPACE="$1"` with `WORKSPACE="$HOME/workspace"`

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

## Lsp errors

LunarVim lists the attached lsp server in the bottom status bar. If it
says ‘No client connected’ use :LspInfo to troubleshoot.

### Understanding LspInfo

1.  Make sure there is a client attached to the buffer. 0 attached
    clients means lsp is not running
2.  Active clients are clients in other files you have open
3.  Clients that match the filetype will be listed. If installed with
    :LspInstall <servername> the language servers will be installed.  
4.  ‘cmd’ must be populated. This is the language server executable. If
    the ‘cmd’ isn’t set or if it’s not executable you won’t be able to
    run the language server.  
    * In the example below ‘efm-langserver’ is the name of the binary
    that acts as the langserver. If we run ‘which efm-langserver’ and we
    get a location to the executable, it means the langauge server is
    installed and available globally. 
    * If you know the command is installed AND you don’t want to install 
    it globally you’ll need to manually set 'cmd' in the language server 
    settings. 
    * Configurations are stored in ~/.config/nvim/lua/lsp/ 
    The settings will be stored in a file that matches the name of the language.
    e.g. python-ls.lua 
    * ‘identified root’ must also be populated. Most
    language servers require you be inside a git repository for the root
    to be detected. If you don’t want to initialize the directory as a
    git repository, an empty .git/ folder will also work.  
5.  Some language servers get set up on a per project basis so you may
    have to reinstall the language server when you move to a different
    project.

### Example configurations

[ ========  LSP NOT running  ======== ]

``` md
0 client(s) attached to this buffer:

0 active client(s):

Clients that match the filetype python:

  Config: efm
    cmd:               /Users/my-user/.local/share/nvim/lspinstall/efm/efm-langserver
    cmd is executable: True
    identified root:   None
    custom handlers:

  Config: pyright
    cmd:               /Users/my-user/.local/share/nvim/lspinstall/python/node_modules/.bin/pyright-langserver --stdio
    cmd is executable: True
    identified root:   None
    custom handlers:   textDocument/publishDiagnostics
```

---

[ ========  LSP IS running  ======== ]

``` md
2 client(s) attached to this buffer: pyright, efm

  Client: pyright (id 1)
  	root:      /home/my-user/workspace/canary
  	filetypes: python
  	cmd:       /home/my-user/.local/share/nvim/lspinstall/python/node_modules/.bin/pyright-langserver --stdio


  Client: efm (id 2)
  	root:      /home/my-user/workspace/canary
  	filetypes: lua, python, javascriptreact, javascript, typescript, typescriptreact, sh, html, css, json, yaml, markdown, vue
  	cmd:       /home/my-user/.local/share/nvim/lspinstall/efm/efm-langserver
```

### Last resort

If you still have problems after implementing the above measures, rule
out plugin problems with the following. This reinstalls your plugins and
language servers.

``` md
rm -rf ~/.local/share/nvim/site
:PackerCompile
:PackerInstall
:LspInstall python   <-- REPLACE WITH YOUR OWN LANGUAGE
:LspInstall efm      <-- REPLACE WITH YOUR OWN LANGUAGE
```

For a more in depth LSP support:
[link](https://github.com/neovim/nvim-lspconfig/blob/master/CONFIG.md)

# Useful Programs

LunarVim depends on the following:

``` bash
ranger
ueberzug
ripgrep
pynvim
neovim-remote
```

# EFM server

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

``` vim
:LspInstall efm
```

# Formatters and Linters

**Python**

``` bash
pip3 install --user flake8
pip3 install --user yapf
```

**Lua**

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

**Yaml, Json, Javascript, HTML, CSS**

``` bash
npm install -g prettier
```

**Markdown**

``` bash
pandoc
```

# De-bugging

To set up your particular debugger, look here:
[link](https://github.com/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation)

# VSCodium

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

- [VSCodium](https://vscodium.com/)

- Article to get you set up with VSCodium:
  [link](https://www.chrisatmachine.com/Neovim/22-vscodium-neovim/)

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
```

# Color schemes

Color schemes are provided by [this
repository](https://github.com/ChristianChiarulli/nvcode-color-schemes.vim).
Follow that link for information about editing specific colors for a
color scheme. The provided color schemes are compatible with tree-sitter
highlight groups. Color schemes are installed to
\~/.local/share/nvim/site/pack/packer/opt/nvcode-color-schemes.vim. If
you edit files in that directory, they will be overwritten the next time
Packer compiles your plugins.

## Available colorschemes:

``` bash
    nvcode (basically just dark+)
    onedark
    nord
    aurora (more colorful nord)
    gruvbox
    palenight
    snazzy (Based on hyper-snazzy by Sindre Sorhus)
```

## Switching colors

To switch color schemes on the fly, type the following command:

``` vim
:Telescope colorscheme
```

To change the color scheme permanently, modify
\~/.config/nvim/lv-settings.lua

``` lua
O.colorscheme = 'lunar'
```

# 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 &lt;pluginname&gt;  | 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 &lt;language&gt;     | Install a language server for a specific programming language                                                                                                                                                                                                                                                                |
| :LspInfo                         | List the status of active and configured language servers                                                                                                                                                                                                                                                                    |
| :LspStart &lt;language&gt;       | 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 &lt;keybinding&gt; | Print out what a particular keybinding is mapped to                                                                                                                                                                                                                                                                          |
| :messages                        | Print error messages. Useful when messages get cut off                                                                                                                                                                                                                                                                       |
| :scriptnames                     | List all sourced files                                                                                                                                                                                                                                                                                                       |

# Uninstalling

Changed your mind about LunarVim? To remove it entirely:

``` lua
# Delete the configuration files
rm -R ~/.config/nvim

# Delete the plugins
rm -Rf ~/.local/share/nvim

# Delete the logs
rm -R ~/.cache/nvim
```

# Community links

🕸️ Website: https://www.chrisatmachine.com

🐦 Twitter: https://twitter.com/chrisatmachine

💻 Github: https://github.com/ChristianChiarulli

📺 YouTube: https://www.youtube.com/channel/UCS97tchJDq17Qms3cux8wcA

📺 Odysee: https://odysee.com/@chrisatmachine:f

📺 Twitch: https://www.twitch.tv/chrisatmachine

🗨️ Matrix: https://matrix.to/#/+atmachine:matrix

🗨️ Discord: https://discord.gg/Xb9B4Ny

# 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**

- vim vsnips dir should be co-located with config
- list all binaries needed for formatters and linters (one day add in
  wiki)
- 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
- look into emmet-ls
- vim ult test
- which-key all in lua
- what is `fzy`
- https://github.com/pwntester/octo.nvim
- configure surround
- Implement this for typescript
  https://github.com/jose-elias-alvarez/nvim-lsp-ts-utils
- look into tabnine

**PLUGIN BUGS**

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

[![GitHub
license](https://img.shields.io/github/license/ChristianChiarulli/LunarVim)](https://github.com/ChristianChiarulli/LunarVim/blob/master/LICENSE)
[![Open Source?
Yes!](https://badgen.net/badge/Open%20Source%20%3F/Yes%21/blue?icon=github)](https://github.com/ChristianChiarulli/lunarvim)
[![PRs
Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)