Vim Improvement Plan: Getting Started

See information about the Vim Improvement Plan here.

The Rules

  1. We'll start with an empty ~/.vimrc and ~/.vim; the system vimrc will be untouched from installation. By "empty" I mean I'm filling it in right now.
  2. All other rules have been deleted thus far...

Though I'm using Windows for this, you'll notice I use UN*X-y filenames and directory layouts; I try to keep my systems set up the same as much as possible. On Windows, my vimrc is ~/.vimrc, etc. This allows me to keep everything in sync via git without renaming files (yes, git hooks will do it, but this is simpler).

Open up and... gvim's default view on a 4K display is unreadable. Let's fix the font and re-source (`:so $MYVIMRC`), though I'll later move this into the plugins folder:

if has("gui_running")
	if has("gui_gtk2")
		set guifont=Inconsolata\ 12
	elseif has("gui_macvim")
		set guifont=Menlo\ Regular:h14
	elseif has("gui_win32")
        set guifont=Fira\ Code:h11
        set renderoptions=type:directx
	endif
else
	set t_Co=256
endif

We'll make a few other changes I know I want and install Vundle as my plugin manager, which gives us the following .vimrc and .vim/ (yes, it's a lot for a "clean slate", but it's mostly just paint on the fence):

" [~/.vimrc]
set nocompatible

" From romainl - https://gist.github.com/romainl/4df4cde3498fada91032858d7af213c2
if !exists('g:env')
	if has('win64') || has('win32') || has('win16')
		let g:env = 'WINDOWS'
	else
		let g:env = toupper(substitute(system('uname'), '\n', '', ''))
	endif
endif

" I use ~/.vim folder on all systems - including Windows.
if g:env =~ 'WINDOWS'
    let &runtimepath="$HOME/.vim,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,$HOME/.vim/after"
endif

" Vundle configuration.
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'

" Plugins go here.

call vundle#end()

filetype plugin indent on
syntax on

" Convenient leader.
let mapleader=' '

" I default to UNIX line endings, even on Windows. Vim handles them just fine.
set fileformat=unix
set fileformats=unix,dos
set encoding=utf-8
set fileencoding=utf-8
set autoread

set backspace=indent,eol,start
set expandtab
set smarttab
set smartindent
set shiftwidth=4
set tabstop=4
set cpoptions+=n

set noswapfile
set undodir="~/.vim/undo"
set undofile
set undolevels=500
set history=1000

" Treat wrapped lines as unwrapped.
nnoremap j gj
nnoremap k gk

" Search settings
set ignorecase
set smartcase
set incsearch

" Set guide columns.
set cc=81,121

set laststatus=2
set scrolloff=5
set showmatch

set nu
" I want to see 82 characters, regardless of the size of the gutter; this gives 
" me a 3-char margin on the right, which looks nice, and we won't wrap once the
" left gutter expands by one.
" From http://superuser.com/a/330352
au BufRead * let &numberwidth = float2nr(log10(line("$"))) + 4
	\| let &columns = &numberwidth + 83

set nostartofline " Keep the cursor's column position.

" [.vim/myprefs/gui.vim]
if !has("gui_running")
	set t_Co=256
    finish
endif

if has("gui_gtk2")
    set guifont=Inconsolata\ 12
elseif has("gui_macvim")
    set guifont=Menlo\ Regular:h14
elseif has("gui_win32")
    set guifont=Fira\ Code:h11
    set renderoptions=type:directx
endif

" [.vim/myprefs/typos.vim]
" Fix common typos.
command! W :w

I have also added the lightlineprevim, and vimwiki plugins:

call vundle#begin()
Plugin 'VundleVim/Vundle.vim'

Plugin 'itchyny/lightline.vim'
Plugin 'previm/previm'
Plugin 'vimwiki/vimwiki'

call vundle#end()