2021-04-10 17:41:44 +02:00
# Neovim config (general/development)
2021-04-10 16:35:32 +02:00
2021-04-10 17:41:44 +02:00
## Global settings
```vim
set nocompatible
set completeopt=preview
2021-04-10 16:35:32 +02:00
set tabstop=4
set shiftwidth=4
set expandtab
2021-04-10 17:41:44 +02:00
```
These standard vim settings will make the tab key insert 4 spaces instead of using a tab character, and
use preview mode instead of auto-completing when using completion plugins.
```vim
2021-04-10 16:35:32 +02:00
set encoding=utf-8
set nu
set hidden
set noshowmode
2021-04-10 17:41:44 +02:00
```
We set the encondig to UTF-8 and show the number line. Setting hidden allows you to quit a buffer without saving it. \
We don't need showmode since we will be using vim-airline for status.
```vim
2021-04-10 16:35:32 +02:00
set nobackup
set nowritebackup
set noswapfile
2021-04-10 17:41:44 +02:00
```
Backups, swapfiles and others are disabled. If your system is unstable, you might want to delete those lines, however it can cause problems with servers and cause messy folders.
2021-04-10 16:35:32 +02:00
2021-04-10 17:41:44 +02:00
## Custom settings
```vim
autocmd Filetype ruby setlocal ts=2 sw=2
autocmd Filetype slim setlocal ts=2 sw=2
filetype plugin indent on
```
Using tabspaces of 2 on ruby files. (Maybe should use some plugin to manage this, WIP)
```vim
funcion! WinMove(key)
2021-04-10 16:35:32 +02:00
let t:curwin = winnr()
exec "wincmd ".a:key
if (t:curwin == winnr())
if (match(a:key,'[jk]'))
wincmd v
else
wincmd s
endif
exec "wincmd ".a:key
endif
endfunction
nnoremap < silent > < C-h > :call WinMove('h')< CR >
nnoremap < silent > < C-j > :call WinMove('j')< CR >
nnoremap < silent > < C-k > :call WinMove('k')< CR >
nnoremap < silent > < C-l > :call WinMove('l')< CR >
2021-04-10 17:41:44 +02:00
```
This function and remap lets us use Ctrl + hjkl keys to move windows in neovim
### Key bindings
```
noremap < C-q > :bd< CR >
map < C-n > :NERDTreeToggle< CR >
map ; :Files< CR >
map ' :Rg< CR >
nmap < leader > ln :noh< CR >
```
2021-04-10 16:35:32 +02:00
2021-04-10 17:41:44 +02:00
- `CTRL+Q` -> Close buffer
- `CTRL+N` -> Open NERDTree
- `\ln` -> Disable highlighting
- `'` -> Search by matching inside files (using fzf + ripgrep)
- `;` -> Search by matching name of files (using fzf + fd)
## Plugin settings
```vim
2021-04-10 16:35:32 +02:00
call plug#begin('~/.vim/plugged')
2021-04-10 17:41:44 +02:00
Plug 'preservim/nerdtree'
Plug 'neoclide/coc.nvim', { 'branch': 'release' }
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
2021-04-10 16:35:32 +02:00
Plug 'junegunn/fzf.vim'
2021-04-10 17:41:44 +02:00
Plug 'vim-airline/vim-airline'
2021-04-10 16:35:32 +02:00
Plug 'vim-airline/vim-airline-themes'
Plug 'jiangmiao/auto-pairs' " Brackets management plugins
Plug 'machakann/vim-sandwich'
Plug 'airblade/vim-gitgutter' " Git plugin
call plug#end()
2021-04-10 17:41:44 +02:00
```
We use vim-plug for plugin management. More information on how to set it up on its [GitHub repo ](https://github.com/junegunn/vim-plug )
#### Plugin list:
2021-04-10 16:35:32 +02:00
2021-04-10 17:41:44 +02:00
- [NERDTree ](https://github.com/preservim/nerdtree ) for browsing directories as trees
- [ConquerOfCompletion ](https://github.com/neoclide/coc.nvim ) as a completion engine (compatible with VSCode ones)
- [fzf ](https://github.com/junegunn/fzf ) as a fuzzy file finder
- [vim-airline ](https://github.com/vim-airline/vim-airline ) as a status line
- [vim-gitgutter ](https://github.com/airblade/vim-gitgutter ) minimalist git plugin
- [vim-sandwich ](https://github.com/machakann/vim-sandwich ) and [auto-pairs ](https://github.com/jiangmiao/auto-pairs ) for brackets management
### Vim-airline settings
```vim
let g:airline_powerline_fonts = 1
let g:airline#extensions#tabline#enabled = 1
let g:airline_theme='term'
let g:airline#extensions#whitespace#enabled = 0
```
Enable powerline fonts
### Fzf settings/tips
In order to use fd (fast rust alternative to find) with Fzf, install `fd` and add this to your `.bashrc` :
```
export FZF_DEFAULT_COMMAND='fd --type f --hidden --exclude .git --exclude .vim'
```
To use ripgrep, simply install it and use `:Rg` (or the shortcut `'` )
### CoC (ConquerOfCompletion) settings/tips
In order to install a particular langauge completion, use `:CocInstall` \
Here is a small list:
- `coc-go` Golang completion
- `coc-rls` Rust completion
- `coc-pyright` Python completion and static analyzer
- `coc-sh` Bash completion