" Don't imitate vi.
set nocompatible
-" Show line numbers.
-set number
-set numberwidth=4
+" Make tab-completion work more like bash.
+set wildmenu
+set wildmode=list:full
-" Scroll five lines ahead of cursor.
-set scrolloff=5
+" Ignore certain file extensions when tab-completing.
+set wildignore=*.swp,*.bak,*.pyc,*.class,*.o,*.exe
+
+" Set filetype stuff to on.
+filetype on
+filetype plugin on
" Set up autoindentation.
set smartindent
filetype indent on
-" Set tabs to width 4.
-set softtabstop=4
-set tabstop=4
-set shiftwidth=4
-set noexpandtab
+" Example filetype-specific setting:
+" if has('autocmd')
+" autocmd filetype python set expandtab
+" endif
+
+" Allow folding.
+set foldenable
+set foldmethod=syntax
+set foldlevelstart=99
+
+" Scroll five lines ahead of cursor.
+set scrolloff=5
+
+" Turn off error bells and visual bell
+set noeb vb t_vb=
+
+" Set tabs to width 2.
+filetype plugin indent on
+set shiftwidth=2
+set softtabstop=2
+set tabstop=2
+set expandtab
+
+" language-specific settings: tab width is 4 for python
+autocmd FileType python setlocal shiftwidth=4 softtabstop=4 tabstop=4
+
+" Allow backspacing over everything in insert mode.
+set backspace=indent,eol,start
+
+"Highlight bad spacing.
+highlight BadSpacing term=standout ctermbg=cyan
+augroup Spacing
+ autocmd!
+ " Highlight tabulators and trailing spaces
+ autocmd BufNewFile,BufReadPre * match BadSpacing /\(\t\| *$\)/
+ " Only highlight trailing space in tab-filled formats
+ autocmd FileType help,make match BadSpacing / *$/
+augroup END
" Search as you type.
set incsearch
" Line wrapping off
set nowrap
+" Enlarge history and undo/redo buffers.
+set history=1000
+set undolevels=1000
+
" Reset colors to a clean state.
if !has('gui_running')
- set t_Co=8 t_md=
+ set t_Co=8 t_md=
endif
-" Enable syntax "highlighting.
+" Enable syntax highlighting.
syntax enable
-" Force vim to sync syntax "highlighting from the beginning of the file.
+" Force vim to sync syntax highlighting from the beginning of the file.
syn sync fromstart
-" Set the color scheme.
-hi Normal cterm=none ctermfg=white ctermbg=black " Plain text.
-
-hi Comment cterm=none ctermfg=darkblue ctermbg=black " Comment: // Hello, world
-
-hi Constant cterm=none ctermfg=blue ctermbg=black " Constant:
-hi String cterm=none ctermfg=blue ctermbg=black " String: "Hello, world"
-hi Character cterm=none ctermfg=blue ctermbg=black " Character: 'a'
-hi Number cterm=none ctermfg=blue ctermbg=black " Number: 234, 0xff
-hi Boolean cterm=none ctermfg=blue ctermbg=black " Boolean: TRUE, false
-hi Float cterm=none ctermfg=blue ctermbg=black " Float: 2.3e10
-
-hi Identifier cterm=none ctermfg=white ctermbg=black " Identifier: foo
-hi Function cterm=none ctermfg=white ctermbg=black " Function/method: foo()
-
-hi Statement cterm=none ctermfg=brown ctermbg=black " Statement:
-hi Conditional cterm=none ctermfg=brown ctermbg=black " Conditional: if, then, else, endif, switch
-hi Repeat cterm=none ctermfg=brown ctermbg=black " Repeat: for, do, while
-hi Label cterm=none ctermfg=brown ctermbg=black " Label: case, default
-hi Operator cterm=none ctermfg=brown ctermbg=black " Operator: sizeof, +, *
-hi Keyword cterm=none ctermfg=brown ctermbg=black " Keyword: register, const
-hi Exception cterm=none ctermfg=brown ctermbg=black " Exception: try, catch, throw
-
-hi PreProc cterm=none ctermfg=darkred ctermbg=black " Preprocessor directives:
-hi Include cterm=none ctermfg=darkred ctermbg=black " #include
-hi Define cterm=none ctermfg=darkred ctermbg=black " #define
-hi PreCondit cterm=none ctermfg=darkred ctermbg=black " #if, #else, #endif
-
-hi Type cterm=none ctermfg=darkgreen ctermbg=black " Types: int, long, char
-hi StorageClass cterm=none ctermfg=darkgreen ctermbg=black " Storage modifiers: static, register, volatile
-hi Structure cterm=none ctermfg=darkgreen ctermbg=black " User-defined types: struct, union, enum
-hi Typedef cterm=none ctermfg=darkgreen ctermbg=black " typedef
-
-hi Special cterm=none ctermfg=magenta ctermbg=black " Special symbols
-hi SpecialChar cterm=none ctermfg=magenta ctermbg=black " Special characters in a constant
-hi Delimiter cterm=none ctermfg=magenta ctermbg=black " Character that is highlighted
-hi SpecialComment cterm=none ctermfg=magenta ctermbg=black " Special things inside a comment
-hi Debug cterm=none ctermfg=magenta ctermbg=black " Debugging statements.
-
-hi Underlined cterm=underline ctermfg=magenta ctermbg=black " Underlined stuff (HTML links)
-
-hi Error cterm=none ctermfg=red ctermbg=black " Erroneous content
-
-hi Todo cterm=bold ctermfg=red ctermbg=black " TODO, FIXME, XXX comments.
+" Set the color scheme to desert.
+colorscheme desert
+
+" Set custom whitespace display
+set list
+set showbreak=↪\
+set listchars=tab:\ \ →,eol:↲,nbsp:␣,trail:•,extends:⟩,precedes:⟨
+
+" Unmap the arrow keys to prevent bad habits.
+noremap <Up> ""
+noremap! <Up> <Esc>
+noremap <Down> ""
+noremap! <Down> <Esc>
+noremap <Left> ""
+noremap! <Left> <Esc>
+noremap <Right> ""
+noremap! <Right> <Esc>
+
+" Automatically reload the .vimrc when changes are made to it
+au! BufWritePost .vimrc source %