I finally gave Vim (Neovim) a try after a co-worker insisted that using Vim as a code editor was the “only way”. I already knew basic navigation commands from rebasing and squashing with git, so that part wasn’t so bad. What was overwhelming was the amount of setup required to get basic functionality working, things that come by default in most editors.
My goal was to get Vim working similarly to what I had in Vscode. The basic things I needed were:
- A color scheme with syntax highlights
- File search, find, and replace
- Quick tab switching
- Linting on save
To start, I used my co-worker’s config as a base and learned about each plugin listed, line by line, while using Vim itself to edit the config.
After about 2 months or so, I finally got comfortable using Vim and found additional plugins for my setup. There’s a plugin for just about anything! I usually hop around editors depending on what I work on (Vscode, Sublime, RubyMine), and now Vim is on that list too. For front-end heavy work when I’m looking at designs on the side, I probably won’t use Vim. But for back-end work, I’ll use Vim fullscreen.
I definitely recommend giving Vim a try. This is the path I would take if you’re interested:
- Learn basic navigation
- Find a sample config
- Comment out every plugin in the config
- Uncomment and install one plugin at a time and learn its functionality
- Find plugins you need. Think “what can Vscode do that I would want to do in Vim”?
Here’s a list of plugins in my config. Find the full config here.
call plug#begin('~/.config/nvim/plugged')
" New Plugins here...
" Search
Plug 'nvim-lua/plenary.nvim' " co-dependent to telescope
Plug 'nvim-telescope/telescope.nvim', { 'tag': '0.1.4' }
Plug 'dyng/ctrlsf.vim' " search/replace like sublime text
Plug 'jlanzarotta/bufexplorer' " allows quicky deletion of buffers
Plug 'ctrlpvim/ctrlp.vim' " file finder, multi select open
" Efficiency
Plug 'andrewRadev/tagalong.vim' " Change an HTML(ish) opening tag and take the closing one along as well
Plug 'tpope/vim-surround' " delete/change/add parentheses/quotes/XML-tags/much more with ease
Plug 'tomtom/tcomment_vim' " An extensible & universal comment vim-plugin
Plug 'tpope/vim-endwise' "helps to end certain structures automatically. In Ruby, this means adding end after if, do, def and several other keywords.
Plug 'chaoren/vim-wordmotion' " More useful word motions for Vim
Plug 'Raimondi/delimitMate' " provides insert mode auto-completion for quotes, parens, brackets, etc.
Plug 'rhysd/clever-f.vim' " Extended f, F, t and T key mappings for Vim.
Plug 'tpope/vim-repeat' " repeat.vim: enable repeating supported plugin maps with .
Plug 'andrewradev/undoquit.vim' " reopen the last window you closed
" Plug 'ervandew/supertab' " Perform all your vim insert mode completions with Tab
Plug 'mg979/vim-visual-multi' " Multiple cursors plugin for vim/neovim, for vertical section enter v-block then shift+i insert mode
Plug 'tyru/open-browser.vim'
Plug 'tyru/open-browser-github.vim' " Open Github from code
Plug 'airblade/vim-gitgutter' " Diff changes on the side
" Misc
Plug 'tpope/vim-fugitive' " Git wrapper
Plug 'vim-airline/vim-airline' " Status bar
Plug 'vim-airline/vim-airline-themes' " Status bar themes
Plug 'voldikss/vim-floaterm' " floating terminal
Plug 'preservim/nerdtree' " Tree navigation
" Languages
Plug 'vim-test/vim-test'
Plug 'dense-analysis/ale'
Plug 'jlcrochet/vim-ruby'
Plug 'pangloss/vim-javascript'
Plug 'tpope/vim-rails'
Plug 'maxmellon/vim-jsx-pretty'
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" Make it pretty
Plug 'rktjmp/lush.nvim' " required for darcula-solid
Plug 'briones-gabriel/darcula-solid.nvim'
Plug 'rockyzhang24/arctic.nvim'
Plug 'vwxyutarooo/nerdtree-devicons-syntax'
Plug 'ryanoasis/vim-devicons' " Ensure it's the last plugin and install Nerd Font https://www.nerdfonts.com/font-downloads
call plug#end()