vim

Posted 2012-03-02 with tags Vim, Reference, cheatsheet

Core Functionality (Vocabulary)

  • C delete current line (after current cursor position) and enter insert mode
  • D delete current line (after current cursor position)
  • dd delete current line

  • ciw delete the current word

  • cit delete between the current html tag
  • ci) delete between the ()

  • 1) Cursor movement commands (hjkl)

  • 2) Move by word (w and b) and page (^f and ^b)
  • 3) Search for word under cursor (forward * and backward #)
  • 4) File commands (:w, :new)
  • 5) Split buffer (:split) and buffer movement (^w and hjkl)
  • 6) Tab commands (:tabnext, :tabnext etc, bound to ",tn", ",n", ",p" etc)
  • 7) File explorer (:Explore(), bound to ,f)
  • 8) Move to start and end of file (gg and G)
  • 9) Switch modes (v, V for linewise, i, esc)
  • 10) Basic register operations (dd, y, p, P)

  • C - delete until end of line and enter insert mode.

  • > i B - increase indentation of current block

  • ctrl + ] jump to tag definition

Registers

https://stackoverflow.com/questions/1497958/how-do-i-use-vim-registers

Great in depth answer about registers: https://stackoverflow.com/a/3997110

Leader Key(s)

A great explanation of leader keys: https://tuckerchapman.com/2018/06/16/how-to-use-the-vim-leader-key/

Plugin Managers

vim-plug

If vim plug is acting up; force it to download the latest version with: :PlugUpdate! fzf

Plugins

Linting

ALE - Asynchronous Lint Engine

https://github.com/w0rp/ale

Seems like it requires VIM 8.0 or greater at this point; so install vim from source or use this PPA which seems semi-legit: https://launchpad.net/~jonathonf/+archive/ubuntu/vim

Neomake

Currently using https://github.com/neomake/neomake but should look into using ALE instead as neomake seems a bit buggy in my experience.

Tags

See here for good info on how to generate tags: https://github.com/shawncplus/phpcomplete.vim/wiki/Getting-better-tags

It sounds like the original ctags program is abandoned, so it's best to use https://github.com/universal-ctags/ctags or possibly https://github.com/vim-php/phpctags (obviously if you only need PHP tags). Seems like universal-ctags is a fairly active project so it seems like a good option.

universal-ctags

Available as a snap for linux: https://github.com/universal-ctags/ctags-snap though there are some caveats due to security restrictions, including the inability to generate tags for projects outside of the user's home directory.

Compiling from source https://github.com/universal-ctags/ctags/blob/master/docs/autotools.rst instead, since there isn't a good PPA or ubuntu package:

git clone https://github.com/universal-ctags/ctags.git
cd ctags
./autogen.sh 
./configure
make
sudo make install
Tips on MacOS

https://gist.github.com/nazgob/1570678

brew install ctags

vim-gutentags

Automatically regenerate tag files with https://github.com/ludovicchabant/vim-gutentags

Snippets

https://github.com/SirVer/ultisnips

Autocomplete

coc.nvim / coc.vim

https://github.com/neoclide/coc.nvim

:CocInfo to debug

:CocInstall coc-phpls for php language server

List of extensions and extension docs: https://github.com/neoclide/coc.nvim/wiki/Using-coc-extensions

Snippets Support:
:CocInstall coc-snippets

Discussion about setup for PHP / Laravel: https://github.com/neoclide/coc.nvim/issues/590

phpcomplete

https://github.com/shawncplus/phpcomplete.vim

Useful to install supertab which maps tab to the control-x + control-o hotkey that triggers omnicomplete, in a way that is compatible with snippets. Good article here on setup: https://jordaneldredge.com/blog/setting-up-php-completion-in-vim/

phpcd

Maybe a better version of phpcomplete: https://github.com/lvht/phpcd.vim

Enhanced Statusline Options

lightline

https://github.com/itchyny/lightline.vim seems like a good option.

lightline color schemes: https://github.com/itchyny/lightline.vim/blob/master/colorscheme.md

Misc.

vim-markdown

https://github.com/preservim/vim-markdown

Install it just for the :Toc command, which brings up a sidebar table of contents for the current markdown document.

Generate a table of contents and insert into document: :InsertToc

Config entries for .vimrc:

let g:vim_markdown_toc_autofit = 1 
let g:vim_markdown_folding_disabled = 1 
let g:vim_markdown_frontmatter = 1

surround.vim Plugin

Commands
  • ds' delete the surrounding single quotes
  • cs'" changing the surrounding single quote for double quote
  • / incremental search
  • o/O inserting new lines
  • yss add surrounding character(s) to current line
Resources
  • http://www.catonmat.net/blog/vim-plugins-surround-vim/

PHP-Indenting-for-VIm

Official PHP indentation plugin for VIm: https://github.com/2072/PHP-Indenting-for-VIm

:help php-indent 

investigate.vim

https://github.com/keith/investigate.vim - cool plugin that launches various docs for the keyword under the cursor

Defaults to gK

eunuch.vim

Vim wrapper for UNIX shell commands:

  • :Delete: Delete a buffer and the file on disk simultaneously.
  • :Unlink: Like :Delete, but keeps the now empty buffer.
  • :Move: Rename a buffer and the file on disk simultaneously.
  • :Rename: Like :Move, but relative to the current file's containing directory.
  • :Chmod: Change the permissions of the current file.
  • :Mkdir: Create a directory, defaulting to the parent of the current file.
  • :Cfind: Run find and load the results into the quickfix list.
  • :Clocate: Run locate and load the results into the quickfix list.
  • :Lfind/:Llocate: Like above, but use the location list.
  • :Wall: Write every open window
  • :SudoWrite: Write a privileged file with sudo.
  • :SudoEdit: Edit a privileged file with sudo.
  • File type detection for sudo -e is based on original file name.
  • New files created with a shebang line are automatically made executable.

Guides

  • https://robertbasic.com/blog/current-vim-setup-for-php-development/
  • https://statico.github.io/vim3.html
  • https://thevaluable.dev/vim-php-ide/

Notable .vimrc Examples

  • https://github.com/junegunn/dotfiles/blob/master/vimrc

Misc. Resources

  • https://www.vi-improved.org/vim-proverbs/
  • https://romainl.github.io/the-patient-vimmer/
  • https://www.vi-improved.org/help-with-help/
  • https://www.vi-improved.org/recommendations/
  • good simple cheatsheet: http://fprintf.net/vimCheatSheet.html
  • attempt at a graphical cheatsheet: http://www.viemu.com/vi-vim-cheat-sheet.gif
  • attempt at a graphical cheatsheet: http://michael.peopleofhonoronly.com/vim/vim_cheat_sheet_for_programmers_screen.pdf
  • a good text cheatsheet: http://vimsheet.com/ and advanced: http://vimsheet.com/advanced.html
  • An interesting "out-of-the-box" vim setup including some common plugins and features (looks a bit neglected / out of date): https://github.com/carlhuda/janus