| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425 |
- set nocompatible " Don't have to try to be compatible with old vi
- set encoding=utf-8
- """"""""
- "" Plugin Loading with Pathogen
- """""""""""""""""""""""""""""""""""""""""""""""""""
- call pathogen#infect()
- call pathogen#helptags()
- """"""""
- "" General Behaviours
- """""""""""""""""""""""""""""""""""""""""""""""""""
- set splitbelow " New splits appear below current window instead of above
- set splitright " New splits appear right of current window
- set ttyfast " Smooth movement
- set ttymouse=xterm2
- set mouse=a
- set scrolloff=4 " keep distance from top and bottom for current line
- set cursorline " ensure that there is a cursor line
- " Persistent undo
- if has("persistent_undo")
- set undofile
- set undodir=~/.vim/undo
- endif
- """"""""
- "" Autocommands
- """""""""""""""""""""""""""""""""""""""""""""""""""
- if has("autocmd")
- " Enable filetype specific features
- filetype plugin indent on
- " Clear existing autocmd
- autocmd!
- " When editing a file, always jump to the last cursor position
- " (from Ubuntu's `/etc/vim/vimrc`)
- autocmd BufReadPost *
- \ if line("'\"") > 0 && line ("'\"") <= line("$") |
- \ exe "normal! g'\"" |
- \ endif
- " Show trailing white space
- autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
- autocmd InsertLeave * match ExtraWhitespace /\s\+$/
- " Source the vimrc file after saving it
- autocmd BufWritePost .vimrc nested source $MYVIMRC
- " QuickFix - Local remaps:
- " - `q` to close qf buffer
- " - `o` to open location entry under cursor
- autocmd FileType qf nnoremap <silent> <buffer> q :ccl<CR>:lcl<CR>
- autocmd FileType qf nnoremap <silent> <buffer> o <CR>
- " QuickFix - Global remaps:
- " - `<TAB>` and `\` for previous and next location entry
- " - unmaps when qf buffer is closed.
- autocmd BufWinEnter quickfix
- \ setlocal nocursorline |
- \ let g:qfix_win = bufnr("$") |
- \ call MapQfPrevNext()
- autocmd BufWinLeave *
- \ if exists("g:qfix_win") && expand("<abuf>") == g:qfix_win |
- \ unlet! g:qfix_win |
- \ call UnmapQfPrefNext() |
- \ endif
- " QuickFix - Open window after any grep invocation (Glog and Ggrep)
- autocmd QuickFixCmdPost *grep* cwindow |
- \ setlocal nocursorline |
- \ let g:qfix_win = bufnr("$") |
- \ call MapQfPrevNext()
- " Fugitive - Go up to previous tree object while exploring git tree with '..'
- autocmd User fugitive
- \ if fugitive#buffer().type() =~# '^\%(tree\|blob\)$' |
- \ nnoremap <buffer> .. :edit %:h<CR> |
- \ endif
- " Fugitive - Delete buffers when they are not active
- autocmd BufReadPost fugitive://* set bufhidden=delete
- " PHP - Offline docs, manpage-style, using `K`.
- " - needs pman installed through PEAR: `pear install doc.php.net/pman`
- if executable('pman')
- autocmd FileType php set keywordprg=pman
- endif
- else
- set autoindent on
- endif
- """"""""
- "" Tabs and Text Formatting
- """"""""""""""""""""""""""""""""""""""""""""""""""""""
- set expandtab " change to single spaces
- set tabstop=2 " actual tab press distance
- set shiftround " indent to nearest tabstops
- set shiftwidth=2 " amount to indent with > and <
- set smarttab " backspace tabs where appropriate even if spaces
- set softtabstop=2 " let backspace delete by indents
- set nowrap " do not wrap long lines of text
- set backspace=eol,start,indent "backspace over everything
- set textwidth=80 " try to keep text within 80 characters
- set colorcolumn=+1 " mark out the limits of the textwidth
- set listchars=trail:_,tab:>.,eol:$
- """"""""
- "" UI - Colours
- """"""""""""""""""""""""""""""""""""""""""""""""""""""
- syntax enable
- colorscheme solarized
- set t_Co=16
- set background=dark
- " set colour for folded lines
- highlight Folded term=none cterm=none ctermfg=darkred ctermbg=none
- " show trailing white space
- highlight ExtraWhitespace ctermfg=red ctermbg=red guifg=red guibg=red
- " reverse indent guides highlighting
- highlight IndentGuidesOdd ctermbg=darkgrey
- highlight IndentGuidesEven ctermbg=black
- """"""""
- "" UI - Numbering
- """"""""""""""""""""""""""""""""""""""""""""""""""""""""
- set number " show line numbers
- """"""""
- "" UI - Statusline (now using powerline)
- """"""""""""""""""""""""""""""""""""""""""""""""""""""""
- set laststatus=2 " status line is second last line (not hidden by commands)
- """"""""
- "" UI - Code Folding
- """"""""""""""""""""""""""""""""""""""""""""""""""""""""
- set foldmethod=indent
- set foldlevel=10
- set foldtext=FoldText()
- """"""""
- "" UI - Search
- """"""""""""""""""""""""""""""""""""""""""""""""""""""""
- set hlsearch " make searches highlighted
- set incsearch " vim will search as you type!
- set ignorecase " ignore case for searches
- set smartcase " well, unless a user puts in uppercase search characters
- set magic " enables wildcard searching
- " use ack for grepping if available
- if executable('ack-grep')
- set grepprg=ack-grep\ --with-filename\ --nocolor\ --nogroup
- elseif executable('ack')
- set grepprg=ack\ --with-filename\ --nocolor\ --nogroup
- endif
- set shellpipe=&> " don't display ack/grep terminal output. NOTE: not reliable
- " https://github.com/mileszs/ack.vim/issues/18
- """"""""
- "" Key Remaps
- """"""""""""""""""""""""""""""""""""""""""""""""""""""""
- let mapleader = "," " easier to use than \
- " More convenient escape
- inoremap kj <ESC>
- inoremap jk <ESC>
- " Yank to end of line, like D deletes to end of line
- nnoremap Y y$
- " Add extra lines up and down
- nnoremap <leader>j o<Esc>k
- nnoremap <leader>k O<Esc>j
- " Edit .vimrc
- nnoremap <leader>v :e $MYVIMRC<CR>
- " Clear trailing white space
- nnoremap <silent> <leader>$ :%s/\s\+$//g<CR>
- " Convert tabs to spaces
- nnoremap <silent> <leader><TAB> :%s/<TAB>/ /g<CR>
- " Space as a Folding toggle in normal mode.
- nnoremap <silent> <space> @=(foldlevel('.')?'za':"\<space>")<CR>
- " Backspace to clear current search (and stop highlighting)
- nnoremap <silent> <backspace> :call ClearSearch()<CR>
- nnoremap <silent> <leader>n :set number!<CR>
- nnoremap <silent> <leader>w :set wrap!<CR>
- nnoremap <silent> <leader>80 gggqG<C-o><C-o>
- " Toggle paste mode - no autoindenting of pasted material
- nnoremap <silent> <leader>p :set paste! paste?<CR>
- " Toggle visible whitespace characters
- nnoremap <silent> <leader>l :set list!<CR>
- " Toggle keyboard layout
- nnoremap <silent> <leader><space> :call CycleKeymap()<CR>
- " Toggle scrollbind for moving multiple splits in sync together
- nnoremap <silent> <leader>s :set scrollbind! scrollbind?<CR>
- " Toggle mouse support.
- nnoremap <silent> <leader>m :call ToggleMouse()<CR>
- " Toggle NERDTree file browser
- nnoremap <silent> <leader>d :NERDTreeToggle<CR>
- " Toggle Commenting out lines with NERDCommenter
- nnoremap <silent> <leader>, :call NERDComment("n", "toggle")<CR>
- vnoremap <silent> <leader>, <ESC>:call NERDComment("x", "toggle")<CR>
- " Traverse undo tree with Gundo
- nnoremap <silent> <leader>u :GundoToggle<CR>
- " Git commands with Fugitive
- nnoremap <silent> <leader>gs :Gstatus<CR>
- nnoremap <silent> <leader>gc :Gcommit -v<CR>
- nnoremap <silent> <leader>gl :Glog<CR><CR>
- nnoremap <silent> <leader>gap :Git add -p<CR>
- nnoremap <silent> <leader>b :Gblame<CR>
- nnoremap <silent> <leader>gd :Gdiff<CR>
- " Ack with Ctrl-F
- nnoremap <C-F> :Grep<space>
- " Code heirarchy with Tagbar
- nnoremap <silent> <leader>t :TagbarToggle<CR>
- """"""""
- "" Key Remaps - Movement and Windows
- """"""""""""""""""""""""""""""""""""""""""""""""""""""""
- " jump to beginning and end of line easier
- nnoremap H ^
- nnoremap L $
- vnoremap H ^
- vnoremap L $
- " Smart way to move between windows
- nnoremap <C-j> <C-W>j
- nnoremap <C-k> <C-W>k
- nnoremap <C-h> <C-W>h
- nnoremap <C-l> <C-W>l
- " mapping to make movements operate on 1 screen line in wrap mode
- onoremap <silent> <expr> j ScreenMovement("j")
- onoremap <silent> <expr> k ScreenMovement("k")
- onoremap <silent> <expr> 0 ScreenMovement("0")
- onoremap <silent> <expr> ^ ScreenMovement("^")
- onoremap <silent> <expr> $ ScreenMovement("$")
- nnoremap <silent> <expr> j ScreenMovement("j")
- nnoremap <silent> <expr> k ScreenMovement("k")
- nnoremap <silent> <expr> 0 ScreenMovement("0")
- nnoremap <silent> <expr> ^ ScreenMovement("^")
- nnoremap <silent> <expr> $ ScreenMovement("$")
- xnoremap <silent> <expr> j ScreenMovement("j")
- xnoremap <silent> <expr> k ScreenMovement("k")
- xnoremap <silent> <expr> 0 ScreenMovement("0")
- xnoremap <silent> <expr> ^ ScreenMovement("^")
- xnoremap <silent> <expr> $ ScreenMovement("$")
- """"""""
- "" Plugin options
- """"""""""""""""""""""""""""""""""""""""""""""""""""""""
- """"""""" NERDTree
- let g:NERDTreeQuitOnOpen = 1 " close sidebar after we go to selection
- """"""""" Gundo
- let g:gundo_width = 30
- let g:gundo_preview_height = 12
- let g:gundo_preview_bottom = 1
- """"""""" Powerline
- set rtp+=~/dotfiles/powerline/powerline/powerline/bindings/vim
- set noshowmode " don't show e.g. --INSERT-- since we're using powerline
- """"""""" Tagbar
- let g:tagbar_autoclose = 1 " close sidebar after we go to selection
- """"""""" EasyGrep
- let g:EasyGrepCommand = 1 " don't use the built in vimgrep, which is slow
- " Caveat about using ack: cannot search unsaved changes in buffer, unlike vimgrep
- let g:EasyGrepJumpToMatch = 0
- let g:EasyGrepHighlightQfMatches = 1
- let g:EasyGrepRecursive = 1 " always start trying to recurse through directories
- """"""""" Indent Guides
- let g:indent_guides_enable_on_vim_startup = 1
- let g:indent_guides_auto_colors = 0
- """"""""" SuperTab
- let g:SuperTabDefaultCompletionType = 'context'
- """"""""" Syntastic
- let g:syntastic_auto_jump = 1
- """"""""" CtrlP
- let g:ctrlp_working_path_mode = 'rw'
- let g:ctrlp_user_command = {
- \ 'types': {
- \ 1: ['.git', 'cd %s && git ls-files'],
- \ 2: ['.hg', 'hg --cwd %s locate -I .']
- \ },
- \ 'fallback': 'find %s -type f'
- \ }
- """"""""" Vdebug
- let g:vdebug_options = {
- \ 'break_on_open' : 0,
- \ 'watch_window_style' : 'compact',
- \ 'path_maps' : {"/usr": "/jails/alcatraz/usr"}
- \ }
- """"""""" Vim Markdown
- let g:vim_markdown_folding_disabled = 1
- """"""""" Sparkup
- let g:sparkupNextMapping = '<leader>n' " resolve conflict with vim-multiple-cursors
- """"""""
- "" Functions
- """"""""""""""""""""""""""""""""""""""""""""""""""""""""
- function! FoldText()
- let line = getline(v:foldstart)
- let indent = indent(v:foldstart)
- let indentOnly = strpart(line, 0, indent-1)
- let linecount = v:foldend+1 - v:foldstart
- let foldtext = '+'.indentOnly.'... ('.linecount.' More lines)'
- return foldtext
- endfunction
- function! ToggleMouse()
- if &mouse == 'a'
- set mouse=
- echo "Mouse usage disabled"
- else
- set mouse=a
- echo "Mouse usage enabled"
- endif
- endfunction
- function! ScreenMovement(movement)
- if &wrap
- return "g" . a:movement
- else
- return a:movement
- endif
- endfunction
- function! ClearSearch()
- if (@/ != "")
- let @/=""
- redraw
- endif
- endfunction
- function! CycleKeymap()
- if has('keymap')
- if (&keymap == '')
- set keymap=colemak
- echo "Colemak keymap selected"
- elseif (&keymap == 'colemak')
- set keymap=dvorak
- echo "Dvorak keymap selected"
- else
- set keymap=
- echo "Qwerty keymap selected"
- endif
- else
- echo "Keymaps not supported"
- endif
- endfunction
- function! MapQfPrevNext()
- exec "nmap <silent> <tab> :cprev<CR>"
- exec "nmap <silent> <bslash> :cnext<CR>"
- endfunction
- function! UnmapQfPrefNext()
- exec "nunmap <tab>"
- exec "nunmap <bslash>"
- endfunction
|