[vim] change cursor shape based on mode
[~bandali/configs] / vim / .vimrc
... / ...
CommitLineData
1"set nocompatible " be iMproved, required
2"filetype off " required
3
4call plug#begin('~/.vim/plugged')
5
6Plug 'kien/rainbow_parentheses.vim'
7"Plug 'hsanson/vim-android'
8Plug 'scrooloose/nerdcommenter'
9Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets'
10"Plug 'kien/ctrlp.vim'
11"Plug 'tacahiroy/ctrlp-funky'
12Plug 'Raimondi/delimitMate'
13Plug 'Yggdroot/indentLine'
14"Plug 'tpope/vim-fugitive'
15Plug 'airblade/vim-gitgutter'
16"Plug 'altercation/vim-colors-solarized'
17Plug 'terryma/vim-multiple-cursors'
18"Plug 'elzr/vim-json'
19"Plug 'lervag/vim-latex'
20Plug 'tpope/vim-surround'
21Plug 'rust-lang/rust.vim'
22Plug 'phildawes/racer'
23Plug 'whatyouhide/vim-gotham'
24
25call plug#end()
26
27
28" Use the Solarized Dark theme
29set background=dark
30colorscheme gotham
31
32" Make Vim more useful
33set nocompatible
34" Use the OS clipboard by default (on versions compiled with `+clipboard`)
35set clipboard=unnamedplus
36" Enhance command-line completion
37set wildmenu
38" Allow cursor keys in insert mode
39set esckeys
40" Allow backspace in insert mode
41set backspace=indent,eol,start
42" Optimize for fast terminal connections
43set ttyfast
44" Add the g flag to search/replace by default
45set gdefault
46" Use UTF-8 without BOM
47set encoding=utf-8 nobomb
48" Change mapleader
49let mapleader=","
50" Don’t add empty newlines at the end of files
51set binary
52set noeol
53" Centralize backups, swapfiles and undo history
54set backupdir=~/.vim/backups
55set directory=~/.vim/swaps
56if exists("&undodir")
57 set undodir=~/.vim/undo
58endif
59set undofile
60
61" Don’t create backups when editing files in certain directories
62set backupskip=/tmp/*,/private/tmp/*
63
64" Respect modeline in files
65set modeline
66set modelines=4
67" Enable per-directory .vimrc files and disable unsafe commands in them
68set exrc
69set secure
70" Enable line numbers
71set number
72" Enable syntax highlighting
73syntax on
74" Highlight current line
75"set cursorline
76" Make tabs as wide as two spaces
77set tabstop=4
78" Show “invisible” characters
79set lcs=tab:▸\ ,eol:\ \,nbsp:_
80" set lcs=tab:▸\ ,trail:·,eol:¬,nbsp:_
81set list
82" Highlight searches
83set hlsearch
84" Ignore case of searches
85set ignorecase
86" Highlight dynamically as pattern is typed
87set incsearch
88" Always show status line
89set laststatus=2
90" Enable mouse in all modes
91set mouse=a
92" Disable error bells
93set noerrorbells
94" Don’t reset cursor to start of line when moving around.
95set nostartofline
96" Show the cursor position
97set ruler
98" Don’t show the intro message when starting Vim
99set shortmess=atI
100" Show the current mode
101set showmode
102" Show the filename in the window titlebar
103set title
104" Show the (partial) command as it’s being typed
105set showcmd
106" Use relative line numbers
107"if exists("&relativenumber")
108 "set relativenumber
109 "au BufReadPost * set relativenumber
110"endif
111" Start scrolling three lines before the horizontal window border
112set scrolloff=3
113
114" Strip trailing whitespace (,ss)
115function! StripWhitespace()
116 let save_cursor = getpos(".")
117 let old_query = getreg('/')
118 :%s/\s\+$//e
119 call setpos('.', save_cursor)
120 call setreg('/', old_query)
121endfunction
122noremap <leader>ss :call StripWhitespace()<CR>
123" Save a file as root (,W)
124noremap <leader>W :w !sudo tee % > /dev/null<CR>
125
126" Automatic commands
127if has("autocmd")
128 " Enable file type detection
129 filetype plugin indent on
130 " Treat .json files as .js
131 autocmd BufNewFile,BufRead *.json setfiletype json syntax=javascript
132endif
133
134" Enable pathogen
135"execute pathogen#infect()
136
137" swap ; and :
138 nnoremap ; :
139 nnoremap : ;
140 vnoremap ; :
141 vnoremap : ;
142
143":au FocusLost * :set number
144":au FocusGained * :set relativenumber
145autocmd InsertEnter * :set number
146autocmd InsertEnter * :set norelativenumber
147autocmd InsertLeave * :set relativenumber
148"autocmd InsertLeave * :set nonumber
149
150" Rainbow Parantheses
151au Syntax * RainbowParenthesesLoadRound
152au Syntax * RainbowParenthesesLoadSquare
153au Syntax * RainbowParenthesesLoadBraces
154noremap <leader>m :RainbowParenthesesToggle<CR>
155
156
157" ==== <UltiSnips> ====
158" Trigger configuration. Do not use <tab> if you use
159" https://github.com/Valloric/YouCompleteMe.
160let g:UltiSnipsExpandTrigger="<tab>"
161"let g:UltiSnipsJumpForwardTrigger="<c-b>"
162let g:UltiSnipsJumpForwardTrigger="<tab>"
163"let g:UltiSnipsJumpBackwardTrigger="<c-z>"
164let g:UltiSnipsJumpBackwardTrigger="<s-tab>"
165" ==== </UltiSnips> ====
166
167" Spaces FTW
168set shiftwidth=4
169set expandtab
170
171let g:ctrlp_map = '<space>'
172"let g:ctrlp_map = '<leader>p'
173set wildignore+=*/build/**
174let g:android_sdk_path= '/Applications/Android\ Studio.app/sdk/'
175let g:android_adb_tool= '/Applications/Android\ Studio.app/sdk/platform-tools/adb'
176let gradle_path= '~/.gradle/'
177let g:android_build_type= 'gradle'
178
179let delimitMate_expand_space=1
180let delimitMate_expand_cr=2
181
182let g:indentLine_enabled=1
183"let g:indentLine_color_term = 239
184"let g:indentLine_color_gui = '#09AA08'
185"let g:indentLine_char = '│'
186let g:indentLine_char = '¦'
187
188 " ctrlp {
189 if isdirectory(expand("~/.vim/bundle/ctrlp.vim/"))
190 let g:ctrlp_working_path_mode = 'ra'
191 nnoremap <silent> <D-t> :CtrlP<CR>
192 nnoremap <silent> <D-r> :CtrlPMRU<CR>
193 let g:ctrlp_custom_ignore = {
194 \ 'dir': '\.git$\|\.hg$\|\.svn$',
195 \ 'file': '\.exe$\|\.so$\|\.dll$\|\.pyc$' }
196
197" On Windows use "dir" as fallback command.
198 if executable('ag')
199 let s:ctrlp_fallback = 'ag %s --nocolor -l -g ""'
200 elseif executable('ack-grep')
201 let s:ctrlp_fallback = 'ack-grep %s --nocolor -f'
202 elseif executable('ack')
203 let s:ctrlp_fallback = 'ack %s --nocolor -f'
204 else
205 let s:ctrlp_fallback = 'find %s -type f'
206 endif
207 let g:ctrlp_user_command = {
208 \ 'types': {
209 \ 1: ['.git', 'cd %s && git ls-files . --cached --exclude-standard --others'],
210 \ 2: ['.hg', 'hg --cwd %s locate -I .'],
211 \ },
212 \ 'fallback': s:ctrlp_fallback
213 \ }
214
215 if isdirectory(expand("~/.vim/bundle/ctrlp-funky/"))
216" CtrlP extensions
217 let g:ctrlp_extensions = ['funky']
218
219"funky
220 nnoremap <Leader>fu :CtrlPFunky<Cr>
221 endif
222 endif
223"}
224"
225
226" change cursor shape based on mode
227if &term =~ "xterm\\|rxvt"
228 " use a solid vertical bar in insert mode
229 let &t_SI .= "\<Esc>[6 q"
230 " use a solid block otherwise
231 let &t_EI .= "\<Esc>[2 q"
232endif
233" eliminite the delay when switching modes
234set ttimeoutlen=0
235
236set pastetoggle=<leader>p
237
238"set conceallevel=0
239"let g:vim_json_syntax_conceal = 0
240"let g:indentLine_noConcealCursor=""
241" latex mode settings
242let g:Tex_DefaultTargetFormat = "pdf"
243
244set hidden
245let g:racer_cmd = "racer"
246let $RUST_SRC_PATH=expand('~/misc/rs/rust/src/')