Vim: Delightful settings and plugins
Tags: vim, productivity, programming, showdev
Published: 2021-12-15 19:20:27

Hi everyone, lately I have been enjoying my **[neovim](https://neovim.io/)** setup a lot so I decided to share some settings and plugins that you might find neat and helpful. Let's go!

## Mappings

Here the mappings I consider important in my vim configuration. 

First, I like to map the leader to **space**. This feels way more natural than using `\` when typing.

```
let mapleader = "\<space>"
```

We continue with:

```
inoremap <C-c> <esc>
nnoremap ; :

" quick-save
nmap <leader>w :w<CR>

" close buffer without changing window layout
nnoremap :: :bp\|bd #<CR>
```

A feature I use a lot in `vscode` is the ability to move lines up and down. Thanks to [the primeagen](https://www.twitch.tv/theprimeagen) (I love his energy and his vim skills are super human) I got to learn about these mappings to achieve the same result

```
" Moving lines up or down preserving format {
vnoremap J :m '>+1<CR>gv=gv
vnoremap K :m '<-2<CR>gv=gv
inoremap <C-j> <esc>:m .+1<CR>==gi
inoremap <C-k> <esc>:m .-2<CR>==gi
nnoremap <leader>j :m .+1<CR>==
nnoremap <leader>k :m .-2<CR>==
" }
```

Another mappings that make life easier

```
" set a column at position 100
set colorcolumn=100
highlight ColorColumn ctermbg=0 guibg=lightgrey
" select everything
nnoremap <C-A> ggVG
" open new file adjacent to current file
nnoremap <leader>o :e <C-R>=expand("%:p:h") . "/" <CR>
" toggle between buffers current and prev buffer
nnoremap <leader><leader> <c-^>
```

## Plugins

Note: I personally use [vim-plug](https://github.com/junegunn/vim-plug) but any vim plugin manager should work as well.

#### [NERDCommenter](https://github.com/preservim/nerdcommenter)

Not much to say about this one. I have it mapped to `Ctrl+/` in this way

```
nmap <C-_> <Plug>NERDCommenterToggle
vmap <C-_> <Plug>NERDCommenterToggle<CR>gv
```

#### [Vim-Airline](https://github.com/vim-airline/vim-airline)

With this configuration

```
" Airline {
let g:airline_theme='papercolor'
" show git branch
let g:airline#extensions#branch#enabled=1
let g:airline#extensions#hunks#enabled=0
let g:airline_powerline_fonts=1
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#fnamemod = ':t'
" }
```

![Vim Airline](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vi42k4kyt4l2ngfl732e.png)
 

#### [Fugitive](https://github.com/tpope/vim-fugitive)

Git integration. These are my configs

```
" Fugitive {
function! ToggleGStatus()
    if buflisted(bufname('.git/index'))
        bd .git/index
    else
			vertical Git | vertical resize 40
    endif
endfunction
command ToggleGStatus :call ToggleGStatus()
nmap <F3> :ToggleGStatus<CR>
nmap <leader>gj :diffget //3<CR>
nmap <leader>gf :diffget //2<CR>
" }
```

#### [Telescope](https://github.com/nvim-telescope/telescope.nvim)

I'm just amazed but the amount of features of this plugin. Here my config that can give you some idea what is it about

```
" Telescope {
nnoremap <leader>ff <cmd>Telescope find_files<cr>
" open in current file pwd
nnoremap <leader>fc :lua require('telescope.builtin').file_browser({cwd = vim.fn.expand('%:p:h')})
nnoremap <leader>fg <cmd>Telescope live_grep<cr>
nnoremap <leader>fr :lua require('telescope.builtin').registers()<CR>
nnoremap <leader>fb <cmd>Telescope buffers<cr>
" display help tags for all extensions
nnoremap <leader>fh <cmd>Telescope help_tags<cr>
nnoremap <leader>fk :lua require('telescope.builtin').keymaps()<CR>
nnoremap <leader>fz :lua require('telescope.builtin').current_buffer_fuzzy_find()<CR>
" show all your colorschemes to try
nnoremap <leader>ft :lua require('telescope.builtin').colorscheme()<CR>
" }
```

#### [vim-visual-multi](https://github.com/mg979/vim-visual-multi)

Let's you have multiple cursor as in `vscode`



## Color Schemes

I have installed [awesome-vim-colorschemes](https://github.com/rafi/awesome-vim-colorschemes) and I love `PaperColor` at the moment. Here an example of a `go` file.

![vim color scheme](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2xvoqlu5pdx8uywx68qy.png) 


That's all.
You can check my  `init.vim` at my [dotfiles repo](https://github.com/protiumx/dotfiles).

Do you have any awesome config to share? Please leave a comment :rocket: