diff --git a/after/ftplugin/help.vim b/after/ftplugin/help.vim index a766e81..ccd86d5 100644 --- a/after/ftplugin/help.vim +++ b/after/ftplugin/help.vim @@ -1,4 +1,8 @@ " Disable spell checking which is enabled for text files setlocal nospell + " Don't keep cursor from buffer edges setlocal scrolloff=0 + +" Don't display line numbers +setlocal nonumber norelativenumber diff --git a/plugin/autocmds.vim b/plugin/autocmds.vim new file mode 100644 index 0000000..cb5ba04 --- /dev/null +++ b/plugin/autocmds.vim @@ -0,0 +1,8 @@ +augroup reopen_at_last_cursor + autocmd! + " Reopening a file at last curson position + au FocusGained * set relativenumber + au FocusLost * set norelativenumber + au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") + \ | exe "normal! g'\"" | endif +augroup END diff --git a/plugin/functions.vim b/plugin/functions.vim new file mode 100644 index 0000000..5b92783 --- /dev/null +++ b/plugin/functions.vim @@ -0,0 +1,80 @@ +" Strip trailing whitespace +function! <SID>StripWhitespace() + let l = line(".") + let c = col(".") + %s/\s\+$//e + call cursor(l, c) +endfunction +command! StripWhitespace :call <SID>StripWhitespace() +augroup strip_white_space + " Strip whitespace on buffer write + autocmd! + autocmd BufWritePre * :call <SID>StripWhitespace() +augroup END + +" Show highlight group under cursor +map \hi :echo "hi<" . synIDattr(synID(line("."),col("."),1),"name") . + \ '> trans<' . synIDattr(synID(line("."),col("."),0),"name") . "> lo<" + \ . synIDattr(synIDtrans(synID(line("."),col("."),1)),"name") . ">"<CR> + +" Stringify +" Make a code block in to a C string literal +function! <SID>Stringify() + " Escape existing escape characters + execute 's/\\/\\\\/ge' + " Escape quotes + execute 's/"/\\"/ge' + " Prepend quote + execute 's/^/"/g' + " Append carriage return, quote + execute 's/$/\\n"/g' + noh +endfunction +map <silent> <leader>s :call <SID>Stringify()<CR> +" Make a C string literal in to a code block +function! <SID>Destringify() + " Remove final quote and carriage return + execute 's/\\n"\s*$//ge' + " Remove first quote + execute 's:^\(\s*\)":\1:ge' + " Remove quote escapes + execute 's/\\"/"/ge' + " Remove escapes of escapes characters + execute 's/\\\\/\\/ge' + noh +endfunction +map <silent> <leader>S :call <SID>Destringify()<CR> + +" Invoke terminal command without prompt and then redraw. +command! -nargs=+ Silent execute 'silent <args>' | redraw! + +" Set the tab width for the current filetype +function! <SID>TabWidth(width) + execute "set tabstop=".a:width + execute "set shiftwidth=".a:width + execute "set softtabstop=".a:width + echo "Tab width is now ".a:width +endfunction +command! -nargs=1 TabWidth :call <SID>TabWidth(<f-args>) + +" Toggle task list bullet +function! <SID>TaskToggle() + " Get current line + let l:line = getline('.') + + " Get the ' ' or 'x' character from within the task bullet + let l:pattern = '[-\*+] \[\zs[ x]\ze]' + let l:char = matchstr(l:line, l:pattern) + + " Toggle the ' ' or 'x' character + if l:char == 'x' + let l:char = ' ' + else + let l:char = 'x' + endif + + " Replace the current line with a new one + call setline(line('.'), substitute(l:line, l:pattern, l:char, '')) +endfunction +command! TaskToggle :call <SID>TaskToggle() +nnoremap <leader>x :TaskToggle<CR> diff --git a/plugin/mappings.vim b/plugin/mappings.vim new file mode 100644 index 0000000..8d1f104 --- /dev/null +++ b/plugin/mappings.vim @@ -0,0 +1,59 @@ +" YouCompleteMe +nnoremap <leader>fx :YcmCompleter FixIt<CR> +nnoremap <leader>jd :YcmCompleter GoTo<CR> +nnoremap <leader>gt :YcmCompleter GetType<CR> +nnoremap <leader>gp :YcmCompleter GetParent<CR> +nnoremap <leader>gd :YcmCompleter GetDoc<CR> +nnoremap <leader>sd :YcmShowDetailedDiagnostic<CR> + +" DoxygenToolkit +nnoremap <leader>d :Dox<CR> + +" Treat long lines as line containing breaks +nnoremap j gj +nnoremap k gk +" Quick write +map <leader>w :w!<CR> + +" Switch panes +nnoremap <C-h> <C-w>h +nnoremap <C-j> <C-w>j +nnoremap <C-k> <C-w>k +nnoremap <C-l> <C-w>l + +" Quick tabs +exec "nmap <leader>tn :tabnew " +nmap <leader>tc :tabclose<CR> +nmap <leader>to :tabonly<CR> +exec "nmap <leader>tm :tabmove " + +" Clear search highlights +map <leader><Space> :noh<CR> + +" Quick clipboard yank/put +map <leader>y "+y +map <leader>Y "+Y +map <leader>p "+p +map <leader>P "+P + +" Jump to current location list item +nmap <leader>ll :ll<CR> +" Jump to next location list item +nmap <leader>ln :lnext<CR> +" Jump to previous location list item +nmap <leader>lp :lprevious<CR> + +" Quickly access spelling menu +imap <C-s> <C-g>u<C-X>s +nmap <C-s> i<C-g>u<C-X>s + +" Disable 'Q' from opening Ex mode +nmap Q <nop> +" Disable 'K' from loading man pages in normal mode +nmap K <nop> +" Disable 'K' from loading man pages in visual mode +vmap K <nop> + +" Split line at the cursor +nnoremap [j i<CR><Esc> +nnoremap ]j a<CR><Esc> diff --git a/plugin/options.vim b/plugin/options.vim new file mode 100644 index 0000000..58a2a97 --- /dev/null +++ b/plugin/options.vim @@ -0,0 +1,61 @@ +" Enable all mouse features +set mouse=a + +" Don't show completeopt preview buffer +set completeopt-=preview + +" Set window title to titlestring +set title + +" Show relative line numbers & current line number +set number + +" Keep cursor from buffer edges +set scrolloff=8 + +" Turn backup off +set nobackup nowritebackup noswapfile + +" Wrap to whole words +set wrap linebreak nolist + +" Don't add 2 spaces after end of sentence +set nojoinspaces + +" Use Unix as standard file type +set fileformats=unix,dos,mac + +" Allow : in filenames to allow gf to specify line numbers +set isfname-=: + +" Highlight search matches & show search matches while typing +set hlsearch + +" Set ignore search case unless mixed +set ignorecase smartcase + +" Allow buffers with changes to be hidden +set hidden + +" Open new splits on the other side of the axis +set splitbelow splitright + +" Indicates a fast terminal connection +set ttyfast + +" Set syntax as default fold method +set foldmethod=syntax foldlevel=20 + +" Automatically write changes to files +set autowrite + +" Format text +" r - insert comment leader on 'o' and 'O' +" q - allow formatting with 'gq' +set formatoptions+=rq + +" Enable modeline +set modeline + +" Don't redraw during execution macros, registers, commands, etc. +set lazyredraw diff --git a/vimrc b/vimrc index fb63079..49b866d 100644 --- a/vimrc +++ b/vimrc @@ -1,162 +1,183 @@ -" Config {{{ -if platform#is_windows() - set rtp+=~/.vim -endif - -" Plugins {{{ -call plug#begin('~/.vim/plugs') - -" vim-airline improved status bar +call plug#begin('~/.vim/plugs') +" statusline, tabline {{{ +" vim-airline - improved status bar Plug 'vim-airline/vim-airline' let g:airline_left_sep='' let g:airline_right_sep='' -" tabline.vim sanely numbered tabs -Plug 'mkitt/tabline.vim' -" TODO Find YouCompleteMe Windows setup that works +" tabline.vim - sanely numbered tabs +Plug 'mkitt/tabline.vim' +" }}} +" completion {{{ +" YouCompleteMe {{{ if !platform#is_windows() " YouCompleteMe with parameter completion Plug 'oblitum/YouCompleteMe', {'do': './install.py --clang-completer'} -endif -let g:ycm_min_num_of_chars_for_completion=1 -let g:ycm_complete_in_comments=1 -let g:ycm_complete_in_strings=1 -let g:ycm_collect_identifiers_from_comments_and_strings=1 -let g:ycm_autoclose_preview_window_after_insertion = 1 -let g:ycm_seed_identifiers_with_syntax=1 -let g:ycm_always_populate_location_list=1 -let g:ycm_error_symbol="-▸" -let g:ycm_warning_symbol="-▸" -set completeopt-=preview -nnoremap <leader>fx :YcmCompleter FixIt<CR> -nnoremap <leader>jd :YcmCompleter GoTo<CR> -nnoremap <leader>gt :YcmCompleter GetType<CR> -nnoremap <leader>gp :YcmCompleter GetParent<CR> -nnoremap <leader>gd :YcmCompleter GetDoc<CR> -nnoremap <leader>sd :YcmShowDetailedDiagnostic<CR> -" Quick toggle quickfix & location list -Plug 'Valloric/ListToggle' -" UltiSnips snippet engine + let g:ycm_min_num_of_chars_for_completion=1 + + let g:ycm_complete_in_comments=1 + let g:ycm_complete_in_strings=1 + let g:ycm_collect_identifiers_from_comments_and_strings=1 + let g:ycm_seed_identifiers_with_syntax=1 + + let g:ycm_autoclose_preview_window_after_insertion = 1 + let g:ycm_always_populate_location_list=1 + + let g:ycm_error_symbol="-▸" + let g:ycm_warning_symbol="-▸" + " TODO Find YouCompleteMe Windows setup that works +endif +" }}} + +" ultisnips - snippet engine Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets' -" CMake completions & syntax -Plug 'richq/vim-cmake-completion' | Plug 'rperier/vim-cmake-syntax' +" vim-cmake-completion - completion & help +Plug 'richq/vim-cmake-completion' -" Completion for vimscript +" vimomni - Completion for vimscript Plug 'vim-scripts/vimomni', {'for': ['vim']} - -" format.vim format with text objects +" }}} +" format {{{ +" format.vim - format with text objects if platform#is_linux() Plug 'git@bitbucket.org:infektor/format.vim.git' else Plug '~/Sandbox/format' endif - -" delimitMate paired delimiters -Plug 'jiangmiao/auto-pairs' -" Improved % matching -Plug 'opennota/vim-matchit' -" Tabulaize text with regex -Plug 'godlygeek/tabular' -" Display xterm color table -Plug 'guns/xterm-color-table.vim' -" Sane insert mode pasting from system clipboard -Plug 'ConradIrwin/vim-bracketed-paste' -" Open file:line at line from terminal -Plug 'bogado/file-line' -" Open file:line at line from command -Plug 'kopischke/vim-fetch' - -" fzf CLI FuZzy Finder wrapper -Plug 'junegunn/fzf', {'dir': '~/.fzf', 'do': './install --all --no-update-rc'} -Plug 'junegunn/fzf.vim' -exec 'nmap <C-f>f :Files ' -nmap <C-f>g :GitFiles<CR> -exec 'nmap <C-f>a :Ag ' -nmap <C-f>b :Buffers<CR> -nmap <C-f>l :BLines<CR> -nmap <C-f>c :Commits<CR> -nmap <C-f>h :Helptags<CR> -nmap <C-f>s :Snippets<CR> - -" Library for creating text objects +" }}} +" text objects {{{ +" vim-textobj-user - library for creating text objects Plug 'kana/vim-textobj-user' -" Entire file text object. + +" vim-textobj-entire - Entire file text object let g:textobj_entire_no_default_key_mappings = 1 Plug 'kana/vim-textobj-entire' xmap a% <Plug>(textobj-entire-a) omap a% <Plug>(textobj-entire-a) xmap i% <Plug>(textobj-entire-i) omap i% <Plug>(textobj-entire-i) -" Parameter text object + +" vim-textobj-parameter - Parameter text object Plug 'sgur/vim-textobj-parameter' -" Underscope text object + +" vim-textobj-underscore - Underscope text object Plug 'lucapette/vim-textobj-underscore' -" Comment block text object + +" vim-textobj-comment - Comment block text object Plug 'glts/vim-textobj-comment' -" Conflict marker text object + +" vim-textobj-conflict - Conflict marker text object Plug 'rhysd/vim-textobj-conflict' - -" vim-commentary toggle comments +" }}} +" tpope {{{ +" vim-commentary - toggle comments Plug 'tpope/vim-commentary' -" vim-surround edit delimiters + +" vim-surround - edit delimiters Plug 'tpope/vim-surround' -" vim-repeat better dot command + +" vim-repeat - better dot command Plug 'tpope/vim-repeat' -" vim-fugitive git wrapper + +" vim-fugitive - git wrapper Plug 'tpope/vim-fugitive' -" vim-eunuch unix warppers + +" vim-eunuch - unix command warppers Plug 'tpope/vim-eunuch' -" vim-vinegar improved directory browser + +" vim-vinegar - improved directory browser Plug 'tpope/vim-vinegar' -" vim-abolish camelCase to under_score & stuff + +" vim-abolish - camelCase to under_score & stuff Plug 'tpope/vim-abolish' -" vim-unimpaired for pairs of tasks + +" vim-unimpaired - for pairs of tasks Plug 'tpope/vim-unimpaired' -" vim-sensible sane default settings + +" vim-sensible - sane default settings Plug 'tpope/vim-sensible' -" vim-speeddating + +" vim-speeddating - sane date manipulation Plug 'tpope/vim-speeddating' +" }}} +" utility {{{ +" fzf.vim - Fuzzy finder {{{ +Plug 'junegunn/fzf', {'dir': '~/.fzf', 'do': './install --all --no-update-rc'} +Plug 'junegunn/fzf.vim' +exec 'nnoremap <C-f>f :Files ' +nnoremap <C-f>g :GitFiles<CR> +exec 'nnoremap <C-f>a :Ag ' +nnoremap <C-f>b :Buffers<CR> +nnoremap <C-f>l :BLines<CR> +nnoremap <C-f>c :Commits<CR> +nnoremap <C-f>h :Helptags<CR> +nnoremap <C-f>s :Snippets<CR> +" }}} -" DoxygenToolkit documentation stubs -Plug 'vim-scripts/DoxygenToolkit.vim' -let g:DoxygenToolkit_commentType="C++" -map <leader>d :Dox<CR> - -" vim-notes easy note taking +" vim-notes - easy note taking {{{ Plug 'xolox/vim-notes' | Plug 'xolox/vim-misc' + let g:notes_directories = ['~/Sync/Notes'] let g:notes_title_sync = 'rename_file' let g:notes_word_boundries = 1 + hi link notesTodo Todo hi link notesDoneMarker Note hi link notesXXX Important +" }}} if !platform#is_windows() " Seemless vim/tmux pane navigation Plug 'christoomey/vim-tmux-navigator' + " Enable focus events when in tmux session Plug 'tmux-plugins/vim-tmux-focus-events' endif -" Markdown live browser preview +" ListToggle - toggle quickfix and location lists +Plug 'Valloric/ListToggle' + +" auto-pairs - paired delimiters +Plug 'jiangmiao/auto-pairs' + +" vim-matchit - Improved % matching +Plug 'opennota/vim-matchit' + +" tabular - Tabulaize text with regex +Plug 'godlygeek/tabular' + +" xterm-color-table.vim - view term and hex colors +Plug 'guns/xterm-color-table.vim' +" }}} +" syntax {{{ +" Improved syntax for C/C++ +Plug 'kbenzie/vim-native-syntax' +let g:native_syntax#highlight_operators=1 + +" DoxygenToolkit.vim - documentation stubs +Plug 'vim-scripts/DoxygenToolkit.vim' +let g:DoxygenToolkit_commentType="C++" + +" markdown live browser preview Plug 'suan/vim-instant-markdown' -" Markdown folding + +" markdown folding Plug 'nelstrom/vim-markdown-folding' let g:markdown_fenced_languages=['cpp', 'c', 'cmake', 'sh', 'vim', 'python'] -" Foling form python +" SimplyFold - python folding Plug 'tmhedberg/SimpylFold' + " Syntax checking for python Plug 'nvie/vim-flake8', {'for': ['python']} " Folding for json Plug 'elzr/vim-json' -" Improved syntax for C/C++ -Plug 'kbenzie/vim-native-syntax' -let g:native_syntax#highlight_operators=1 +" cmake - syntax +Plug 'rperier/vim-cmake-syntax' " GLSL syntax Plug 'tikhomirov/vim-glsl' @@ -166,209 +187,11 @@ Plug 'beyondmarc/hlsl.vim' " OpenCL C syntax Plug 'frasercrmck/opencl.vim' - -" spir-vim in development -Plug '~/spir-vim' -" jira.vim in development -Plug '~/jira.vim' - -call plug#end() " }}} - -" Mappings {{{ -" Enable all mouse features -set mouse=a - -" Treat long lines as line containing breaks -map j gj -map k gk -" Quick write -map <leader>w :w!<CR> - -" Switch panes -nnoremap <C-h> <C-w>h -nnoremap <C-j> <C-w>j -nnoremap <C-k> <C-w>k -nnoremap <C-l> <C-w>l - -" Quick tabs -exec "nmap <leader>tn :tabnew " -nmap <leader>tc :tabclose<CR> -nmap <leader>to :tabonly<CR> -exec "nmap <leader>tm :tabmove " - -" Clear search highlights -map <leader><Space> :noh<CR> - -" Quick clipboard yank/put -map <leader>y "+y -map <leader>Y "+Y -map <leader>p "+p -map <leader>P "+P - -" Jump to current location list item -nmap <leader>ll :ll<CR> -" Jump to next location list item -nmap <leader>ln :lnext<CR> -" Jump to previous location list item -nmap <leader>lp :lprevious<CR> - -" Quickly access spelling menu -imap <C-s> <C-g>u<C-X>s -nmap <C-s> i<C-g>u<C-X>s - -" Disable 'Q' from opening Ex mode -nmap Q <nop> -" Disable 'K' from loading man pages in normal mode -nmap K <nop> -" Disable 'K' from loading man pages in visual mode -vmap K <nop> - -" Split line at the cursor -nnoremap [j i<CR><Esc> -nnoremap ]j a<CR><Esc> -" Mappings }}} - -" Behaviour {{{ -" Set window title to titlestring -set title -" Show relative line numbers & current line number -set number -" Keep cursor from buffer edges -set scrolloff=8 -" Turn backup off -set nobackup nowritebackup noswapfile - -" Wrap to whole words -set wrap linebreak nolist -" Don't add 2 spaces after end of sentence -set nojoinspaces - -" Use Unix as standard file type -set fileformats=unix,dos,mac -" Allow : in filenames to allow gf to specify line numbers -set isfname-=: - -" Highlight search matches & show search matches while typing -set hlsearch -" Set ignore search case unless mixed -set ignorecase smartcase - -" Allow buffers with changes to be hidden -set hidden -" Open new splits on the other side of the axis -set splitbelow splitright -" Indicates a fast terminal connection -set ttyfast -" Set syntax as default fold method -set foldmethod=syntax -set foldlevel=20 - -" Automatically write changes to files -set autowrite - -" Format text -" r - insert comment leader on 'o' and 'O' -" q - allow formatting with 'gq' -set formatoptions+=rq - -" Enable modeline -set modeline - -" Don't redraw during execution macros, registers, commands, etc. -set lazyredraw -" Behaviour }}} - -" Autocommands {{{ -augroup reopen_at_last_cursor - autocmd! - " Reopening a file at last curson position - au FocusGained * set relativenumber - au FocusLost * set norelativenumber - au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") - \ | exe "normal! g'\"" | endif -augroup END -" Autocommands }}} - -" Functions {{{ -" Strip trailing whitespace -function! <SID>StripWhitespace() - let l = line(".") - let c = col(".") - %s/\s\+$//e - call cursor(l, c) -endfunction -command! StripWhitespace :call <SID>StripWhitespace() -augroup strip_white_space - " Strip whitespace on buffer write - autocmd! - autocmd BufWritePre * :call <SID>StripWhitespace() -augroup END - -" Show highlight group under cursor -map \hi :echo "hi<" . synIDattr(synID(line("."),col("."),1),"name") . - \ '> trans<' . synIDattr(synID(line("."),col("."),0),"name") . "> lo<" - \ . synIDattr(synIDtrans(synID(line("."),col("."),1)),"name") . ">"<CR> - -" Stringify -" Make a code block in to a C string literal -function! <SID>Stringify() - " Escape existing escape characters - execute 's/\\/\\\\/ge' - " Escape quotes - execute 's/"/\\"/ge' - " Prepend quote - execute 's/^/"/g' - " Append carriage return, quote - execute 's/$/\\n"/g' - noh -endfunction -map <silent> <leader>s :call <SID>Stringify()<CR> -" Make a C string literal in to a code block -function! <SID>Destringify() - " Remove final quote and carriage return - execute 's/\\n"\s*$//ge' - " Remove first quote - execute 's:^\(\s*\)":\1:ge' - " Remove quote escapes - execute 's/\\"/"/ge' - " Remove escapes of escapes characters - execute 's/\\\\/\\/ge' - noh -endfunction -map <silent> <leader>S :call <SID>Destringify()<CR> - -" Invoke terminal command without prompt and then redraw. -command! -nargs=+ Silent execute 'silent <args>' | redraw! - -" Set the tab width for the current filetype -function! <SID>TabWidth(width) - execute "set tabstop=".a:width - execute "set shiftwidth=".a:width - execute "set softtabstop=".a:width - echo "Tab width is now ".a:width -endfunction -command! -nargs=1 TabWidth :call <SID>TabWidth(<f-args>) - -" Toggle task list bullet -function! <SID>TaskToggle() - " Get current line - let l:line = getline('.') - - " Get the ' ' or 'x' character from within the task bullet - let l:pattern = '[-\*+] \[\zs[ x]\ze]' - let l:char = matchstr(l:line, l:pattern) - - " Toggle the ' ' or 'x' character - if l:char == 'x' - let l:char = ' ' - else - let l:char = 'x' - endif - - " Replace the current line with a new one - call setline(line('.'), substitute(l:line, l:pattern, l:char, '')) -endfunction -command! TaskToggle :call <SID>TaskToggle() -nnoremap <leader>x :TaskToggle<CR> -" Functions }}} +" local {{{ +" spir-vim +Plug '~/spir-vim' +" jira.vim +Plug '~/jira.vim' +" }}} +call plug#end()