Vim setup 2021

Posted on Thu 22 July 2021 in vim

Feeling inspired by watching togglebit's Rust/Vim setup and having some spare time due to my summer vacation I started re-investigating my Vim setup. For my setup I was looking for the following features/areas to improve:

  • Git integration
  • Debugging projects in vim
  • Language server features, completion, go to definition, etc.
  • Searching through files/git repository/file system

Git integration

For Git integration I already used vim-futigive and vim-gitgutter. These still serve their purposes well, combined with a few handy keyboard shortcuts. So for git integration nothing really has changed.

Debugging

In the past I used vim-vdebug in combination with PHP's xdebug, while learning Rust I was curious to see if having debugger integration would help me learn and understand Rust better. Following togglebit's blog post on debugging Rust in vim, I've mostly copied his rust.vim setup.

vim rust debugging

This provides an easy way to launch a debugger instance using :call RunDebugger() which spawns a rust-gdb session in one window and another window for terminal output. Using termdebug's :Break a breakpoint can be set and other Gdb related actions. In my rust.vim I've set up the following keybinding to start a debug session nmap <F5> :call RunDebugger()<CR>.

Language Server

What I was really missing in the my editor was language features such as, go to definition, auto completion and displaying function information. I've tried vim-lsp and coc.vim but both seemed to require more effort and required me to switch away from ale.vim. Luckily it turns out ale.vim already supports language servers. For rust this worked out of the box, however I can recommend using rust-anaylzer. For Python python-language-server used to be the default but is now replaced with python-lsp-server which is not yet packaged in Arch Linux. For JavaScript everything works out of the box after installing typescript which provides the tsserver language server.

The following keybindings where added to my vimrc:

nmap gd :ALEGoToDefinition<CR>
nmap gr :ALEFindReferences<CR>
nmap gR :ALERename<CR>
nmap K :ALEHover<CR>

Further more adding rust.vim and togglebit's rust.vim adds the option to configure some useful keybindings for running :Cargo check, :Cargo run in a new Vim terminal pane.

Search

One of my biggest annoyances was finding things easily from vim, which was mostly solved by installing fzf.vim and the fzf package. With :Files the files in the current working directory are shown and can be filtered, for files tracked in git :GFiles. To find things in files I've added a keybinding for :Ag and installed the_Silver_searcher, the fzf plugin offers more functionality such as listing and searching through ultisnip snippets.

Conclusion

I'm fairly content with my new Vim setup, slowly becoming more efficient, building up muscle memory and started writing some vimscript for more automation. For example to bump pkgrel's easily in PKGBUILD's. There are some other plugins I have installed such as nerdtree and vim-surround and hardly use as I'm not that familiar with them yet. Lastly, I've started reading the help files of my plugins and already discovered some nice new tips / features.