407 lines
11 KiB
Plaintext
407 lines
11 KiB
Plaintext
" vim settings
|
||
|
||
if (!exists('vimrc_already_sourced'))
|
||
filetype off
|
||
set rtp+=~/.vim/bundle/vundle/
|
||
call vundle#rc()
|
||
|
||
" let vundle manage vundle
|
||
Bundle 'gmarik/vundle'
|
||
|
||
" my vim plugins
|
||
Bundle 'kien/ctrlp.vim'
|
||
Bundle 'scrooloose/nerdtree'
|
||
Bundle 'mileszs/ack.vim'
|
||
Bundle 'Raimondi/delimitMate'
|
||
Bundle 'tpope/vim-commentary'
|
||
Bundle 'tpope/vim-unimpaired'
|
||
Bundle 'tpope/vim-endwise'
|
||
Bundle 'tpope/vim-fugitive'
|
||
Bundle 'othree/html5.vim'
|
||
Bundle 'pangloss/vim-javascript'
|
||
Bundle 'itspriddle/vim-jquery'
|
||
Bundle 'tpope/vim-markdown'
|
||
Bundle 'mmalecki/vim-node.js'
|
||
" Bundle 'Lokaltog/vim-powerline'
|
||
Bundle 'tpope/vim-ragtag'
|
||
Bundle 'tpope/vim-surround'
|
||
Bundle 'duff/vim-scratch'
|
||
" Bundle 'sjl/vitality.vim'
|
||
Bundle 'cakebaker/scss-syntax.vim'
|
||
Bundle 'kchmck/vim-coffee-script'
|
||
Bundle 'groenewege/vim-less'
|
||
Bundle 'tsaleh/vim-matchit'
|
||
Bundle 'benmills/vimux'
|
||
Bundle 'mattn/zencoding-vim'
|
||
Bundle 'ap/vim-css-color'
|
||
" Bundle 'nicknisi/ir-whack'
|
||
Bundle 'flazz/vim-colorschemes'
|
||
Bundle 'editorconfig/editorconfig-vim'
|
||
Bundle 'juvenn/mustache.vim'
|
||
Bundle 'tclem/vim-arduino'
|
||
Bundle 'bling/vim-airline'
|
||
|
||
filetype plugin indent on
|
||
endif
|
||
|
||
|
||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||
" => General
|
||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||
|
||
"""" Abbreviations
|
||
abbr funciton function
|
||
abbr teh the
|
||
abbr tempalte template
|
||
|
||
"set winwidth=120
|
||
|
||
set nocompatible " not compatible with vi
|
||
set autoread " detect when a file is changed
|
||
|
||
" make backspace behave in a sane manner
|
||
set backspace=indent,eol,start
|
||
|
||
" set a map leader for more key combos
|
||
let mapleader = ","
|
||
let g:mapleader = ","
|
||
|
||
" change history to 1000
|
||
set history=10000
|
||
|
||
" Tab control
|
||
set smarttab
|
||
set expandtab
|
||
set shiftwidth=4
|
||
set tabstop=4
|
||
set softtabstop=4
|
||
|
||
" if has('mouse')
|
||
" set mouse=a
|
||
" endif
|
||
|
||
set clipboard=unnamed
|
||
|
||
" faster redrawing
|
||
set ttyfast
|
||
|
||
" allow matching of if/end, etc. with %
|
||
" runtime macros/matchit.vim
|
||
|
||
" highlight conflicts
|
||
match ErrorMsg '^\(<\|=\|>\)\{7\}\([^=].\+\)\?$'
|
||
|
||
" file type specific settings
|
||
if has("autocmd")
|
||
autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab
|
||
autocmd FileType make setlocal ts=8 sts=8 sw=8 noexpandtab
|
||
autocmd FileType ruby setlocal ts=2 sts=2 sw=2 expandtab
|
||
autocmd FileType html setlocal ts=4 sts=4 sw=4 expandtab indentkeys-=*<return>
|
||
autocmd FileType jade setlocal ts=2 sts=2 sw=2 noexpandtab
|
||
"autocmd WinEnter * setlocal cursorline
|
||
"autocmd WinLeave * setlocal nocursorline
|
||
|
||
" automatically resize panes on resize
|
||
autocmd VimResized * exe "normal! \<c-w>="
|
||
autocmd BufWritePost .vimrc source %
|
||
autocmd BufWritePost .vimrc.local source %
|
||
" save all files on focus lost, ignoring warnings about untitled buffers
|
||
autocmd FocusLost * silent! wa
|
||
autocmd BufNewFile,BufRead *.json set filetype=javascript
|
||
autocmd BufNewFile,BufRead *.ejs set filetype=html
|
||
endif
|
||
|
||
" code folding settings
|
||
set foldmethod=syntax " fold based on indent
|
||
set foldnestmax=10 " deepest fold is 10 levels
|
||
set nofoldenable " don't fold by default
|
||
set foldlevel=1
|
||
|
||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||
" => User Interface
|
||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||
|
||
set so=7 " set 7 lines to the cursors - when moving vertical
|
||
set wildmenu " enhanced command line completion
|
||
set hidden " current buffer can be put into background
|
||
set showcmd " show incomplete commands
|
||
set noshowmode " don't show which mode disabled for PowerLine
|
||
set wildmode=list:longest " complete files like a shell
|
||
set scrolloff=3 " lines of text around cursor
|
||
set shell=$SHELL
|
||
set ruler " show postiion in file
|
||
set rulerformat=%30(%=\:b%n%y%m%r%w\ %l,%c%V\ %P%) " a ruler on steroids"
|
||
set cmdheight=1 " command bar height
|
||
|
||
set title " set terminal title
|
||
|
||
" Searching
|
||
set ignorecase " case insensitive searching
|
||
set smartcase " case-sensitive if expresson contains a capital letter
|
||
set hlsearch
|
||
set incsearch " set incremental search, like modern browsers
|
||
set nolazyredraw " don't redraw while executing macros
|
||
|
||
set magic " Set magic on, for regex
|
||
|
||
set showmatch " show matching braces
|
||
set mat=2 " how many tenths of a second to blink
|
||
|
||
" error bells
|
||
set noerrorbells
|
||
set visualbell
|
||
set t_vb=
|
||
set tm=500
|
||
|
||
" switch syntax highlighting on
|
||
syntax on
|
||
|
||
set encoding=utf8
|
||
set t_Co=256 " Explicitly tell vim that the terminal supports 256 colors"
|
||
set background=dark
|
||
colorscheme ir_black
|
||
|
||
" set number " show line numbers
|
||
set relativenumber " show relative line numbers
|
||
|
||
set wrap " turn on line wrapping
|
||
"set nowrap "turn off line wrapping
|
||
set wrapmargin=8 " wrap lines when coming within n characters from side
|
||
set linebreak " set soft wrapping
|
||
set showbreak=… " show ellipsis at breaking
|
||
|
||
set autoindent " automatically set indent of new line
|
||
|
||
try
|
||
lang en_US
|
||
catch
|
||
endtry
|
||
|
||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||
" => Files, backups, and undo
|
||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||
|
||
"set nobackup
|
||
"set nowritebackup
|
||
"set noswapfile
|
||
set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp
|
||
set directory=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp
|
||
|
||
|
||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||
" => StatusLine
|
||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||
|
||
set laststatus=2 " show the satus line all the time
|
||
|
||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||
" => Mappings
|
||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||
" General mappings/shortcuts for functionality
|
||
" Additional, plugin-specific mappings are located under
|
||
" the plugins section
|
||
|
||
" clear search results on escape
|
||
nnoremap <silent> <esc> :nohlsearch<cr><esc>
|
||
|
||
" remap esc
|
||
inoremap jk <esc>
|
||
|
||
" remove extra whitespace
|
||
nmap <leader><space> :%s/\s\+$<cr>
|
||
|
||
" shortcut to save
|
||
nmap <leader>, :w<cr>
|
||
|
||
" set paste toggle
|
||
set pastetoggle=<F6>
|
||
|
||
" toggle paste
|
||
map <leader>v :set paste!<cr>
|
||
|
||
" edit ~/.vimrc
|
||
map <leader>e :e! ~/.vimrc<cr>
|
||
|
||
" clear highlighted search
|
||
noremap <space> :set hlsearch! hlsearch?<cr>
|
||
|
||
" toggle invisible characters
|
||
set invlist
|
||
set listchars=tab:▸\ ,eol:¬,trail:⋅,extends:❯,precedes:❮
|
||
set showbreak=↪
|
||
nmap <leader>l :set list!<cr>
|
||
|
||
" Textmate style indentation
|
||
vmap <leader>[ <gv
|
||
vmap <leader>] >gv
|
||
nmap <leader>[ <<
|
||
nmap <leader>] >>
|
||
|
||
" buffer shortcuts
|
||
nmap <leader>n :bn<cr> " go to next buffer
|
||
nmap <leader>p :bp<cr> " go to prev buffer
|
||
nmap <leader>q :bd<cr> " close the current buffer
|
||
" switch between current and last buffer
|
||
nmap <leader>. <c-^>
|
||
|
||
" enable . command in visual mode
|
||
vnoremap . :normal .<cr>
|
||
|
||
" Window movement shortcuts
|
||
" move to the window in the direction shown, or create a new window
|
||
function! WinMove(key)
|
||
let t:curwin = winnr()
|
||
exec "wincmd ".a:key
|
||
if (t:curwin == winnr())
|
||
if (match(a:key,'[jk]'))
|
||
wincmd v
|
||
else
|
||
wincmd s
|
||
endif
|
||
exec "wincmd ".a:key
|
||
endif
|
||
endfunction
|
||
|
||
map <silent> <C-h> :call WinMove('h')<cr>
|
||
map <silent> <C-j> :call WinMove('j')<cr>
|
||
map <silent> <C-k> :call WinMove('k')<cr>
|
||
map <silent> <C-l> :call WinMove('l')<cr>
|
||
|
||
map <leader>wc :wincmd q<cr>
|
||
|
||
" equalize windows
|
||
map <leader>= <C-w>=
|
||
|
||
" toggle cursor line
|
||
nnoremap <leader>i :set cursorline!<cr>
|
||
|
||
" scroll the viewport faster
|
||
nnoremap <C-e> 3<C-e>
|
||
nnoremap <C-y> 3<C-y>
|
||
|
||
" moving up and down work as you would expect
|
||
nnoremap <silent> j gj
|
||
nnoremap <silent> k gk
|
||
|
||
function! ToggleNuMode()
|
||
if (&rnu == 1)
|
||
setlocal nu
|
||
else
|
||
setlocal rnu
|
||
endif
|
||
endfunction
|
||
|
||
nnoremap <leader>/ :call ToggleNuMode()<cr>
|
||
|
||
" find out what syntax stack a statement belongs to
|
||
nmap <leader>s :call <SID>SynStack()<cr>
|
||
function! <SID>SynStack()
|
||
if !exists("*synstack")
|
||
return
|
||
endif
|
||
echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")')
|
||
endfunction
|
||
|
||
function! ApplyLocalSettings(dirname)
|
||
" convert windows paths to unix style
|
||
let l:curDir = substitute(a:dirname, "\\", "/", "g")
|
||
|
||
" walk to the top of the dir tree
|
||
let l:parentDir = strpart(l:curDir, 0, strridx(l:curDir, "/"))
|
||
if isdirectory(l:parentDir)
|
||
call ApplyLocalSettings(l:parentDir)
|
||
endif
|
||
|
||
" now walk back down the path and source .vimsettings as you find them.
|
||
" child directories can inherit from their parents
|
||
let l:settingsFile = a:dirname . "/.vimrc.local"
|
||
if filereadable(l:settingsFile)
|
||
exec ":source" . l:settingsFile
|
||
endif
|
||
endfunction
|
||
autocmd! BufEnter * call ApplyLocalSettings(expand("<afile>:p:h"))
|
||
|
||
" smart tab completion
|
||
function! Smart_TabComplete()
|
||
let line = getline('.') " current line
|
||
|
||
let substr = strpart(line, -1, col('.')+1) " from the start of the current
|
||
" line to one character right
|
||
" of the cursor
|
||
let substr = matchstr(substr, "[^ \t]*$") " word till cursor
|
||
if (strlen(substr)==0) " nothing to match on empty string
|
||
return "\<tab>"
|
||
endif
|
||
let has_period = match(substr, '\.') != -1 " position of period, if any
|
||
let has_slash = match(substr, '\/') != -1 " position of slash, if any
|
||
if (!has_period && !has_slash)
|
||
return "\<C-X>\<C-P>" " existing text matching
|
||
elseif ( has_slash )
|
||
return "\<C-X>\<C-F>" " file matching
|
||
else
|
||
return "\<C-X>\<C-O>" " plugin matching
|
||
endif
|
||
endfunction
|
||
inoremap <tab> <c-r>=Smart_TabComplete()<CR>
|
||
|
||
map <leader>r :call RunCustomCommand()<cr>
|
||
map <leader>s :call SetCustomCommand()<cr>
|
||
let g:silent_custom_command = 0
|
||
|
||
function! RunCustomCommand()
|
||
up
|
||
if g:silent_custom_command
|
||
execute 'silent !' . s:customcommand
|
||
else
|
||
execute '!' . s:customcommand
|
||
endif
|
||
endfunction
|
||
|
||
function! SetCustomCommand()
|
||
let s:customcommand = input('Enter Custom Command$ ')
|
||
endfunction
|
||
|
||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||
" => Plugins
|
||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||
|
||
" Powerline settings
|
||
" must have modified font installed to enable fancy
|
||
" let g:Powerline_symbols = 'fancy'
|
||
|
||
" let g:Powerline_stl_path_style = 'filename'
|
||
|
||
" close NERDTree after a file is opened
|
||
let g:NERDTreeQuitOnOpen=1
|
||
" Toggle NERDTree
|
||
nmap <silent> <leader>k :NERDTreeToggle<cr>
|
||
" expand to the path of the file in the current buffer
|
||
nmap <silent> <leader>y :NERDTreeFind<cr>
|
||
|
||
" map fuzzyfinder (CtrlP) plugin
|
||
" nmap <silent> <leader>t :CtrlP<cr>
|
||
nmap <silent> <leader>r :CtrlPBuffer<cr>
|
||
let g:ctrlp_map='<leader>t'
|
||
let g:ctrlp_dotfiles=1
|
||
let g:ctrlp_working_path_mode = 'ra'
|
||
|
||
" Fugitive Shortcuts
|
||
nmap <silent> <leader>gs :Gstatus<cr>
|
||
nmap <leader>ge :Gedit<cr>
|
||
|
||
" CtrlP ignore patterns
|
||
let g:ctrlp_custom_ignore = {
|
||
\ 'dir': '\.git$\|node_modules$\|\.hg$\|\.svn$',
|
||
\ 'file': '\.exe$\|\.so$'
|
||
\ }
|
||
|
||
" search the nearest ancestor that contains .git, .hg, .svn
|
||
let g:ctrlp_working_path_mode = 2
|
||
|
||
" airline options
|
||
let g:airline_left_sep=''
|
||
let g:airline_right_sep=''
|
||
let g:airline_theme='dark'
|
||
|
||
let vimrc_already_sourced = 1
|