diff --git a/neovim/neovim.md b/neovim/neovim.md index 55c3ecc..c1c83a1 100644 --- a/neovim/neovim.md +++ b/neovim/neovim.md @@ -1,49 +1,39 @@ -set nocompatible " Required to read a vim (not vi) config correctly -set completeopt=preview " Completation mode: preview +# Neovim config (general/development) -" Vim-airline settings -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 - -" Python settings -let g:python3_host_prog = '/usr/bin/python3.9' -let g:loaded_python_provider = 0 - - -" Default 4 tab spaces +## Global settings +```vim +set nocompatible +set completeopt=preview set tabstop=4 set shiftwidth=4 set expandtab -" change it based on filetype -autocmd Filetype ruby setlocal ts=2 sw=2 -autocmd Filetype slim setlocal ts=2 sw=2 - -" set cindent +``` +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 set encoding=utf-8 set nu set hidden set noshowmode -" Disabling backups and swap files (cause problem in servers, messy dirs etc.) -" You might want to comment this if you are on an unstable system +``` +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 set nobackup set nowritebackup set noswapfile +``` +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. -" Use Ctrl+Q to close buffer -noremap :bd -" Map Ctrl+N for NerdTree -map :NERDTreeToggle -inoremap pumvisible() ? "\" : "\" -" Map ; to search files (fd) -map ; :Files -" Map , to match in files (ripgrep) -map ' :Rg -" Map /ln to disable highlighting -nmap ln :noh -" Windows splitting and movement (move windows with hjkl keys) -function! WinMove(key) +## 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) let t:curwin = winnr() exec "wincmd ".a:key if (t:curwin == winnr()) @@ -60,24 +50,63 @@ nnoremap :call WinMove('h') nnoremap :call WinMove('j') nnoremap :call WinMove('k') nnoremap :call WinMove('l') +``` +This function and remap lets us use Ctrl + hjkl keys to move windows in neovim +### Key bindings +``` +noremap :bd +map :NERDTreeToggle +map ; :Files +map ' :Rg +nmap ln :noh +``` - -" Using Plug for plugins +- `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 call plug#begin('~/.vim/plugged') - -Plug 'preservim/nerdtree' " NerdTree for browsing directories -Plug 'neoclide/coc.nvim', { 'branch': 'release' } " CoC for completion, works similar to VSCode -Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } " Fuzzy finder +Plug 'preservim/nerdtree' +Plug 'neoclide/coc.nvim', { 'branch': 'release' } +Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } Plug 'junegunn/fzf.vim' -Plug 'vim-airline/vim-airline' " Status/tabline for vim +Plug 'vim-airline/vim-airline' 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() +``` +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: - -filetype plugin indent on -syntax enable - +- [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