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)
    1. Move by word (w and b) and page (^f and ^b)
    1. Search for word under cursor (forward * and backward #)
    1. File commands (:w, :new)
    1. Split buffer (:split) and buffer movement (^w and hjkl)
    1. Tab commands (:tabnext, :tabnext etc, bound to ",tn", ",n", ",p" etc)
    1. File explorer (:Explore(), bound to ,f)
    1. Move to start and end of file (gg and G)
    1. Switch modes (v, V for linewise, i, esc)
    1. 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


Great in depth answer about registers:

Leader Key(s)

A great explanation of leader keys:

Plugin Managers


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




:help fugitive

  • Browse historical versions of current file: :0Gclog


ALE - Asynchronous Lint Engine

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:


Currently using but should look into using ALE instead as neomake seems a bit buggy in my experience.


See here for good info on how to generate tags:

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


Available as a snap for linux: 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 instead, since there isn't a good PPA or ubuntu package:

git clone
cd ctags
sudo make install
Tips on MacOS

brew install ctags


Automatically regenerate tag files with



coc.nvim / coc.vim

:CocInfo to debug

:CocInstall coc-phpls for php language server

List of extensions and extension docs:


PHP CS Fixer via coc-php-cs-fixer

Customize settings via adding entries to :CocConfig file, ex.:


and run with:

:CocCommand php-cs-fixer.dryRunDiff :CocCommand php-cs-fixer.fix

Snippets Support:
:CocInstall coc-snippets

Discussion about setup for PHP / Laravel:


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:


Maybe a better version of phpcomplete:

Enhanced Statusline Options

lightline seems like a good option.

lightline color schemes:



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

  • 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


Official PHP indentation plugin for VIm:

:help php-indent 

investigate.vim - cool plugin that launches various docs for the keyword under the cursor

Defaults to gK


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.


Notable .vimrc Examples

Misc. Resources


 Vim  Reference  cheatsheet