Advertisement
Guest User

Untitled

a guest
Feb 19th, 2017
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.04 KB | None | 0 0
  1. "
  2. " ~/.config/nvim/init.vim
  3. "
  4. " Plugins
  5. let g:plugins_file_path = '~/.vim/plugins.vim'
  6.  
  7. if filereadable(expand(g:plugins_file_path))
  8. exe ':source ' . g:plugins_file_path
  9. endif
  10.  
  11. "" General
  12. let mapleader = "," " Remap <leader>
  13. set completeopt=menu,preview,longest " Insert mode completion
  14. set hidden " Allow buffer switching without saving
  15. set linebreak " Don't cut words on wrap
  16. set list " Displaying listchars
  17. set noshowmode " Hide mode cmd line
  18. set noexrc " Don't use other .*rc(s)
  19. set nostartofline " Keep cursor column pos
  20. set nowrap " Do not wrap long lines
  21. set splitbelow " Split windows to the bottom
  22. set splitright " Split windows to the right
  23. set ttyfast " For faster redraws etc
  24. set foldcolumn=0 " Hide folding column
  25. set foldmethod=indent " Folds using indent
  26. set foldnestmax=10 " Max 10 nested folds
  27. set foldlevelstart=99 " Folds open by default
  28. set gdefault " Default s//g (global)
  29. set matchtime=2 " Time to blink match {}
  30. set matchpairs+=<:> " For ci< or ci>
  31. set showmatch " Show matching brackets/parenthesis
  32. set mat=2 " Tenths of seconds to blink when matching brackets
  33. set lazyredraw " Don't redraw while executing macros
  34. set magic " For regular expressions turn magic on
  35. set shell=zsh
  36.  
  37. " Wildmode/wildmenu command-line completion
  38. set wildignore+=*.bak,*.swp,*.swo
  39. set wildignore+=*.a,*.o,*.so,*.pyc,*.class
  40. set wildignore+=*.jpg,*.jpeg,*.gif,*.png,*.pdf
  41. set wildignore+=*/.git*,*.tar,*.zip
  42. set wildmenu
  43. set wildmode=longest:full,list:full
  44.  
  45. "" Interface
  46.  
  47. " Colorscheme from plugin
  48. colorscheme gruvbox
  49. let g:gruvbox_contrast_dark='hard'
  50.  
  51. " Enable 256 colors to stop the CSApprox warning and make urxvt vim shine
  52. if &term == 'urxvtc' || &term == 'tmux'
  53. set t_Co=256
  54. endif
  55.  
  56. set background=dark " We're using a dark bg
  57. set cursorline " Highlight cursor line
  58. set number " Line numbers
  59. set numberwidth=4 " 9999 lines
  60. set showcmd " Show cmds being typed
  61. set title " Window title
  62.  
  63. "" Files
  64. set autochdir " Always use curr. dir.
  65. set confirm " Confirm changed files
  66. set noautowrite " Never autowrite
  67. set nobackup " Disable backups
  68. set undodir=$HOME/.local/share/nvim/undo/ " Where to store undofiles
  69. set undofile " Enable undofile
  70. set undolevels=500 " Max undos stored
  71. set undoreload=10000 " Buffer stored undos
  72. set directory^=$HOME/.local/share/nvim/swap/ " Default cwd for swap
  73. set swapfile " Enable swap files
  74. set updatecount=50 " Update swp after 50chars
  75.  
  76. "" Text
  77. set expandtab " Use spaces instead of tabs
  78. set shiftwidth=2 " Default 8
  79. set tabstop=2 " Replace <TAB> w/4 spaces
  80. set softtabstop=2 " Tab feels like <tab>
  81. set shiftround " Be clever with tabs
  82. set ignorecase " Ignore case when searching
  83. set smartcase " When searching try to be smart about cases
  84. set clipboard=unnamedplus " Use system clipboard
  85.  
  86. "" Keybindings
  87. noremap <leader>ve :edit $HOME/.config/nvim/init.vim<cr> " Edit init.vim
  88. noremap <leader>vs :source $HOME/.config/nvim/init.vim<cr> " Source init.vim
  89. nnoremap Y y$ " Yank(copy) to system clipboard
  90. nnoremap <silent> <Space> @=(foldlevel('.')?'za':"\<Space>")<cr> " Toggle folding
  91. nnoremap gV '[V'] " Highlight last inserted text
  92. nmap <leader>w :w!<cr> " Fast saving
  93. "command W w !sudo tee % > /dev/null " :W sudo saves the file
  94. map <space> / " <Space> to / (search)
  95. map <c-space> ? " Ctrl-<Space> to ? (backwards search)
  96. map <silent> <leader><cr> :noh<cr> " Disable highlight when <leader><cr> is pressed
  97. map <leader>q :e ~/buffer<cr> " Quickly open a buffer for scribble
  98. map <leader>x :e ~/buffer.md<cr> " Quickly open a markdown buffer for scribble
  99. map <leader>pp :setlocal paste!<cr> " Toggle paste mode on and off
  100. map <leader>te :tabedit <c-r>=expand("%:p:h")<cr>/ " Opens a new tab with the current buffer's path
  101. map <leader>cd :cd %:p:h<cr>:pwd<cr> " Switch CWD to the directory of the open buffer
  102. map 0 ^ " Remap VIM 0 to first non-blank character
  103.  
  104. " Buffers, preferred over tabs now with bufferline.
  105. nnoremap gn :bnext<cr>
  106. nnoremap gp :bprevious<cr>
  107. nnoremap gd :bdelete<cr>
  108. nnoremap gf <C-^>
  109.  
  110. " Visual mode pressing # searches for the current selection
  111. vnoremap <silent> # :<C-u>call VisualSelection('', '')<cr>?<C-R>=@/<cr><cr>
  112.  
  113. " Smart way to move between windows
  114. map <C-h> <C-W>h
  115. map <C-j> <C-W>j
  116. map <C-k> <C-W>k
  117. map <C-l> <C-W>l
  118.  
  119. " Useful mappings for managing tabs
  120. nnoremap <leader>tn :tabnew<cr>
  121. nnoremap <leader>to :tabonly<cr>
  122. nnoremap <leader>tc :tabclose<cr>
  123. nnoremap <leader>tm :tabmove
  124. nnoremap <leader>t<leader> :tabnext
  125.  
  126. " Let 'tl' toggle between this and the last accessed tab
  127. let g:lasttab = 1
  128. nmap <Leader>tl :exe "tabn ".g:lasttab<cr>
  129. au TabLeave * let g:lasttab = tabpagenr()
  130.  
  131. " Remember last location
  132. if has("autocmd")
  133. au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
  134. endif
  135.  
  136. "" Helper functions
  137.  
  138. " Don't close window, when deleting a buffer
  139. command! Bclose call <SID>BufcloseCloseIt()
  140. function! <SID>BufcloseCloseIt()
  141. let l:currentBufNum = bufnr("%")
  142. let l:alternateBufNum = bufnr("#")
  143.  
  144. if buflisted(l:alternateBufNum)
  145. buffer #
  146. else
  147. bnext
  148. endif
  149.  
  150. if bufnr("%") == l:currentBufNum
  151. new
  152. endif
  153.  
  154. if buflisted(l:currentBufNum)
  155. execute("bdelete! ".l:currentBufNum)
  156. endif
  157. endfunction
  158.  
  159. " Toggle syntax highlighting
  160. function! ToggleSyntaxHighlighthing()
  161. if exists("g:syntax_on")
  162. syntax off
  163. else
  164. syntax on
  165. "call CustomHighlighting()
  166. endif
  167. endfunction
  168. nnoremap <leader>s :call ToggleSyntaxHighlighthing()<cr>
  169.  
  170. " Toggle text wrapping, wrap on whole words
  171. function! WrapToggle()
  172. if &wrap
  173. set list
  174. set nowrap
  175. else
  176. set nolist
  177. set wrap
  178. endif
  179. endfunction
  180. nnoremap <leader>w :call WrapToggle()<cr>
  181.  
  182. " Remove multiple empty lines
  183. function! DeleteMultipleEmptyLines()
  184. g/^\_$\n\_^$/d
  185. endfunction
  186. nnoremap <leader>ld :call DeleteMultipleEmptyLines()<cr>
  187.  
  188. " Split to relative header/source
  189. function! SplitRelSrc()
  190. let s:fname = expand("%:t:r")
  191.  
  192. if expand("%:e") == "h"
  193. set nosplitright
  194. exe "vsplit" fnameescape(s:fname . ".cpp")
  195. set splitright
  196. elseif expand("%:e") == "cpp"
  197. exe "vsplit" fnameescape(s:fname . ".h")
  198. endif
  199. endfunction
  200. nnoremap <leader>le :call SplitRelSrc()<cr>
  201.  
  202. " Strip trailing whitespace, return to cursor at save
  203. function! StripTrailingWhitespace()
  204. let l = line(".")
  205. let c = col(".")
  206. %s/\s\+$//e
  207. call cursor(l, c)
  208. endfunction
  209.  
  210. augroup StripTrailingWhitespace
  211. autocmd!
  212. autocmd FileType c,cpp,cfg,conf,css,html,perl,python,sh,tex,yaml
  213. \ autocmd BufWritePre <buffer> :call
  214. \ StripTrailingWhitespace()
  215. augroup END
  216.  
  217. "" Plugins
  218.  
  219. " PHP.vim
  220. function! PhpSyntaxOverride()
  221. hi! def link phpDocTags phpDefine
  222. hi! def link phpDocParam phpType
  223. endfunction
  224.  
  225. augroup phpSyntaxOverride
  226. autocmd!
  227. autocmd FileType php call PhpSyntaxOverride()
  228. augroup END
  229.  
  230. " Emmet
  231. imap <expr> <tab> emmet#expandAbbrIntelligent("\<tab>")
  232.  
  233. " LightLine
  234. let g:lightline = {
  235. \ 'colorscheme': 'gruvbox',
  236. \ 'separator': { 'left': '', 'right': '' },
  237. \ 'subseparator': { 'left': '', 'right': '' },
  238. \ 'active': {
  239. \ 'left': [['mode', 'paste'], ['fugitive'], ['filename']],
  240. \ 'right': [[], ['filetype'], ['gutentags'], ['neomake']]
  241. \ },
  242. \ 'component_function': {
  243. \ 'neomake': 'neomake#statusline#LoclistStatus',
  244. \ 'filename': 'LightLineFilename',
  245. \ 'fugitive': 'fugitive#head',
  246. \ 'gutentags': 'gutentags#statusline'
  247. \ }
  248. \}
  249.  
  250. function! LightLineModified()
  251. if &filetype ==# 'help'
  252. return ''
  253. elseif &modified
  254. return '[+]'
  255. else
  256. return ''
  257. endif
  258. endfunction
  259.  
  260. function! LightLineFilename()
  261. return ('' !=# expand('%f') ? expand('%f') : '[No Name]') .
  262. \ ('' !=# LightLineModified() ? LightLineModified() : '')
  263. endfunction
  264.  
  265. " FZF
  266. noremap <leader>f :FZF<cr>
  267. nnoremap <silent> <Leader>b :Buffers<cr>
  268. " nnoremap <silent> <leader>t :Tags<cr>
  269.  
  270. " NerdTree
  271. let g:NERDTreeWinPos = "left"
  272. let g:NERDTreeWinSize = 35
  273. let NERDTreeShowHidden = 0
  274. let NERDTreeIgnore = ['\.py[cd]$', '\~$', '\.swo$', '\.swp$', '^\.git$', '^\.hg$', '^\.svn$', '\.bzr$']
  275. autocmd StdinReadPre * let s:std_in=1
  276. autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | exe 'NERDTree' argv()[0] | wincmd p | ene | endif
  277. autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
  278. map <leader>n :NERDTreeToggle<CR>
  279.  
  280. " Syntastic
  281. if has("nvim")
  282. autocmd! BufWritePost * Neomake
  283. let g:neomake_javascript_jshint_maker = {
  284. \ 'args': ['--verbose'],
  285. \ 'errorformat': '%A%f: line %l\, col %v\, %m \(%t%*\d\)',
  286. \ }
  287. let g:neomake_javascript_enabled_makers = ['jshint']
  288. " Add some bindings here...
  289. else
  290. let g:syntastic_mode_map = {
  291. \ 'mode': 'passive',
  292. \ 'active_filetypes':
  293. \ ['c', 'cpp'] }
  294. let g:syntastic_check_on_wq = 0
  295. noremap <silent><leader>ll :SyntasticCheck<cr>
  296. noremap <silent><leader>lo :Errors<cr>
  297. noremap <silent><leader>lc :lclose<cr>
  298. endif
  299.  
  300. " Session
  301. set sessionoptions=blank,buffers,curdir,folds,tabpages,winsize
  302. nmap <leader>sl :SessionList<cr>
  303. nmap <leader>ss :SessionSave<cr>
  304. nmap <leader>sc :SessionClose<cr>
  305.  
  306. " TagBar
  307. set tags=tags;/
  308. let g:tagbar_left = 0
  309. let g:tagbar_width = 30
  310. nnoremap <silent> <leader>tt :TagbarToggle<cr>
  311.  
  312. " UndoTree
  313. let g:undotree_SetFocusWhenToggle=1
  314. nnoremap <Leader>u :UndotreeToggle<cr>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement