Files
scripts/vim/vimrc
2019-08-01 13:45:35 +01:00

677 lines
19 KiB
VimL
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Behaviour.
"
" All our scripts and files are here.
if filereadable(expand("~/devel/scripts/vim/vimrc"))
set runtimepath+=~/devel/scripts/vim
endif
" Set 'nocompatible' to ward off unexpected things that your distro might
" have made, as well as sanely reset options when re-sourcing .vimrc
set nocompatible
" Line ending is UNIX.
set fileformat=unix
" Swap files go here.
"set directory="~/tmp,." console version complains all the time.
" Don't backup files.
set nobackup
"set backupdir="~/tmp,." git commit doesn't work.
" Try to set up UTF-8 encoding.
if has('multi_byte')
if &termencoding == ""
let &termencoding = &encoding
endif
set encoding=utf-8
setglobal fileencoding=utf-8
"setglobal bomb
set fileencodings=ucs-bom,utf-8,latin1
endif
" Make tabes to be equal to 4 space chars.
set tabstop=4
" Number of spaces a <Tab> counts. If different from tabstop a combination of
" tabs and spaces will be inserted.
set softtabstop=4
" For indentation shift by 4 chars.
set shiftwidth=4
" When on <Tab> insert shiftwidth space in front of line. When off <Tab> inserts
" blanks according to softtabstop.
set smarttab
" Don't expand tabs.
set expandtab
if has('autocmd')
" Unset expandtab for make files in any case.
autocmd FileType make setlocal noexpandtab
" Set expandtab for python files in any case.
autocmd FileType python setlocal expandtab
endif
" Attempt to determine the type of a file based on its name and possibly its
" contents. Use this to allow intelligent auto-indenting for each filetype,
" and for plugins that are filetype specific.
filetype indent plugin on
" When opening a new line and no filetype-specific indenting is enabled, keep
" the same indent as the line you're currently on. Useful for READMEs, etc.
set autoindent
" Allow backspacing over autoindent, line breaks and start of insert action
set backspace=indent,eol,start
" Stop certain movements from always going to the first character of a line.
" While this behaviour deviates from that of Vi, it does what most users
" coming from other editors would expect.
set nostartofline
" Try to not cross 80 char boundary.
set textwidth=80
" Existing long lines are not broken.
set formatoptions+=l
" Auto-wrap comments using textwidth.
set formatoptions=cq
" Insert comment leader if <Enter> is hit in insert mode or 'o' in Normal mode.
set formatoptions+=ro
"set formatoptions-=o " don't autoformat on 'o' e.g. comment wrapping
"
" C++ oriented.
"
"do not auto insert single line comments
set comments-=://
" Auto-insert multi-line comment continuations
set comments+=f://
" Do not indent after namespace XX{
set cino+=N-s
" Match open-bracket indentation when breaking parameter lists over multiple
" lines.
set cino+=(0
" enable omni completion
set omnifunc=syntaxcomplete#Complete
" If modlines available then turn it on so each file could set its settings.
" ex. # vim: set expandtab:
if exists('+modeline')
set modeline
set modelines=5
endif
" read/write a .viminfo file, don't store more
if exists('+viminfo')
set viminfo='20,\"50
endif
" than 50 lines of registers
let g:netrw_preview = 1 " netrw open window to the right
let g:netrw_browse_split = 3 " open in a tab
set ttyfast "tf "smooths redraw by using more bandwidth
"set sessionoptions-=options
"show shortmessages
"set shortmess+=atIW
" Set timeout for detecting command key sequence
set timeoutlen=400
" Quickly time out on keycodes, but never time out on mappings
set notimeout ttimeout ttimeoutlen=200
" Use <F11> to toggle between 'paste' and 'nopaste'
"set pastetoggle=<F11>
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Display
"
" Configure coloring on command line terminals.
if &term=="xterm"
" enable 256 colors
set t_Co=256
" set t_Co=8
set t_Sb=[4%dm
set t_Sf=[3%dm
endif
"
" Configure color theme, fonts and other graphics.
"
if &t_Co > 16
" set color scheme
colorscheme darkblue
"set guioptions-=m
"set guioptions-=T
"set lines=50
"set columns=85
" Set the font.
if has("win32") || has("win64")
"set guifont=FreeMono:h14:cANSI
"set guifont=Courier\ AM:h12
else
"set guifont=Bitstream\ Vera\ Sans\ Mono\ 12
set guifont=Monospace\ 12
endif
endif
" Switch syntax highlighting on, when the terminal has colors
" Also switch on highlighting the last used search pattern.
if &t_Co > 2 || has('gui_running')
syntax on
set hlsearch
endif
" wrap text at window edge without modifying buffer
set nowrap
" Scroll this much chars when scrolled horizontally.
set sidescroll=1
" break at a suitable character (as in breakat)
"set linebreak
" Begin scrolling this lines from window edge.
set scrolloff=0
" Set the command window height to 2 lines, to avoid many cases of having to
" press <Enter> to continue"
set cmdheight=2
" Always display the status line, even if only one window is displayed
set laststatus=2
" Display the cursor position on the last line of the screen or in the status
" line of a window
if exists('+ruler')
set ruler
endif
" Instead of failing a command because of unsaved changes, raise a dialogue
" asking if you wish to save changed files.
if exists('+confirm')
set confirm
endif
" Use visual bell instead of beeping when doing something wrong
if exists('+visualbell')
set visualbell
" And reset the terminal code for the visual bell. If visualbell is set, and
" this line is also included, vim will neither flash nor beep. If visualbell
" is unset, this does nothing.
set t_vb=
endif
" Display line numbers on the left
if exists('+number')
set number
endif
" Turn on spell check.
if exists('+spell') && !&diff
set spell
highlight clear SpellBad
highlight SpellBad cterm=underline ctermfg=red gui=undercurl guisp=Red
endif
" Show 80th column.
if exists('+colorcolumn')
set colorcolumn=+1 " color textwidth+1-th line
endif
" Show command-line completion above the command line.
set wildmenu
" wildmenu ignore list
set wildignore=*.o,*.obj,*.bak,*.exe,*.d,*.dd
" Complete to longest common string
set wildmode=longest:full
" remember more history
set history=1000
" Highlight searched string as typed.
set incsearch
" Enable syntax highlighting
highlight DiffAdd cterm=none ctermfg=Black ctermbg=Green gui=none guifg=Black guibg=Green
highlight DiffDelete cterm=none ctermfg=Black ctermbg=Red gui=none guifg=Black guibg=Red
highlight DiffChange cterm=none ctermfg=Black ctermbg=Yellow gui=none guifg=Black guibg=Yellow
highlight DiffText cterm=none ctermfg=Black ctermbg=Magenta gui=none guifg=Black guibg=Magenta
" Display tabs and trailing spaces visually
set list
set listchars=tab:>-,trail
" In many terminal emulators the mouse works just fine, thus enable it.
if has('mouse')
" set mouse=n
endif
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" vimdiff
"
" Turn on spell check.
if &diff
"turn off spelling
set nospell
" ignore whitespaces
set diffopt+=iwhite
endif
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" TODO: review
"
" One such option is the 'hidden' option, which allows you to re-use the same
" window and switch from an unsaved buffer without saving it first. Also allows
" you to keep an undo history for multiple files when re-using the same window
" in this way. Note that using persistent undo also lets you undo in multiple
" files even in the same window, but is less efficient and is actually designed
" for keeping undo history after closing Vim entirely. Vim will complain if you
" try to quit without saving, and swap files will keep you safe if your computer
" crashes.
if exists('&hidden')
set hidden
endif
" Set fold method if supported
if has('folding')
set nofoldenable
set foldmethod=indent "fold based on indent
set foldnestmax=3
set foldminlines=4
set foldlevel=1
set foldcolumn=2 " foldcolumn is width 2
if has("autocmd")
autocmd FileType vim setlocal foldmethod=marker
autocmd FileType c setlocal foldmethod=syntax
autocmd FileType h setlocal foldmethod=syntax
autocmd FileType cpp setlocal foldmethod=syntax
endif
endif
" Only do this part when compiled with support for autocommands.
if has('autocmd')
" Enable file type detection.
" Use the default filetype settings, so that mail gets 'tw' set to 72,
" 'cindent' is on in C files, etc.
" Also load indent files, to automatically do language-dependent indenting.
filetype plugin indent on
" start with all folds open
au BufRead,BufNewFile,BufWinEnter * normal zR
" highlight lone colon characters
highlight WarnChar ctermbg=yellow ctermfg=red guibg=#FFCC33 guifg=#FF0000
"apply highlight when opening a file, changing text (N or I), or opening a split
au BufRead,InsertCharPre *.cpp 2mat WarnChar /\w\+;\?:;\?\w\+/
" Put these in an autocmd group, so that we can delete them easily.
augroup vimrcEx
au!
" When editing a file, always jump to the last known cursor position.
" Don't do it when the position is invalid or when inside an event handler
" (happens when dropping a file on gvim).
" Also don't do it when the mark is in the first line, that is the default
" position when opening a file.
autocmd BufReadPost *
\ if line("'\"") > 1 && line("'\"") <= line("$") |
\ exe "normal! g`\"" |
\ endif
augroup END
endif " has("autocmd")
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Commands
"
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Key Mappings
"
"
"
if has('gui_running')
":tab drop {file}
" Hide show menu and toolbar.
map <silent> <C-F2> :if &guioptions =~# 'm' <Bar>
\set guioptions-=m <Bar>
\set guioptions-=T <Bar>
\set showtabline=0 <Bar>
\else <Bar>
\set guioptions+=m <Bar>
\set guioptions+=T <Bar>
\set showtabline=1 <Bar>
\endif <CR>
endif
" open ctag definition in new tab
map <C-\> :tab split<CR>:exec("tag ".expand("<cword>"))<CR>
" Create a new tab.
"map <silent> <C-F3> :tabnew<CR>
"
" Grep the word under cursor.
"
" Grep options affect GNU grep. The intend is that greps not supporting the
" options will continue working without options.
"
let $GREP_OPTIONS.=' --exclude-dir=.git --exclude-dir=.svn'
let $GREP_OPTIONS.=' --exclude=tags --exclude=*.o --exclude=*.log'
let $GREP_OPTIONS.=' --exclude=*.swp'
let $GREP_OPTIONS.=' --exclude-dir=llcalc* --exclude-dir=00*'
"let $GREP_OPTIONS.=' --include *.sh'
"let $GREP_OPTIONS.=' --include *.php'
"let $GREP_OPTIONS.=' --include *.h --include *.cpp --include *.c'
"let $GREP_OPTIONS.=' --include *.py'
"let $GREP_OPTIONS.=' --include *.java'
"let $GREP_OPTIONS.=' --include *.f'
"let $GREP_OPTIONS.=' --include *.xsd --include *.xml'
"let $GREP_OPTIONS.=' --include Makefile'
map af :execute "grep! ".expand("<cword>")." -r ." <Bar> cw<CR>
"
" CTRL-U in insert mode deletes a lot. Use CTRL-G u to first break undo,
" so that you can undo CTRL-U after inserting a line break.
"
inoremap <C-U> <C-G>u<C-U>
"
" Move through wrapped lines instead of buffer lines.
"
noremap <Up> gk
noremap <Down> gj
"imap <Up> <C-O>gk
"imap <Down> <C-O>gj
"
" Working with tabs especially if using console version.
"
nnoremap th :tabfirst<CR>
nnoremap tj :tabnext<CR>
nnoremap tk :tabprev<CR>
nnoremap tl :tablast<CR>
nnoremap tm :tabm<Space>
nnoremap td :tabclose<CR>
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Plugins
"
"
" Detect Vundle
"
let s:vundle_path = '~/.vim/bundle/Vundle.vim'
if filereadable(expand('C:/devel/scripts/vim/bundle/Vundle.vim/README.md'))
let s:vundle_path = 'C:/devel/scripts/vim/bundle/Vundle.vim'
endif
"
" Vundle stuff here.
"
if filereadable(expand(s:vundle_path.'/README.md'))
filetype off
let &rtp=&rtp.','.s:vundle_path
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
"
" Adds nice status and tabline.
"
Plugin 'vim-airline/vim-airline'
"Plugin 'vim-airline/vim-airline-themes'
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#left_sep = ' '
let g:airline#extensions#tabline#left_alt_sep = '|'
let g:airline_powerline_fonts = 1
"
"
"
Plugin 'scrooloose/nerdtree'
let g:NERDTreeQuitOnOpen = 1
let g:NERDTreeDirArrows = 1
let g:NERDTreeDirArrowExpandable = '+'
let g:NERDTreeDirArrowCollapsible = '-'
let g:NERDTreeIgnore = ['\.o$', '\.so$', '\.tsk$']
map at :NERDTreeToggle<CR>
"map am :NERDTreeFind<CR>
"
" Commented out in favour of NERDTree
"
"Plugin 'eiginn/netrw'
"let g:netrw_altv = 1
"let g:netrw_fastbrowse = 2
"let g:netrw_keepdir = 0
"let g:netrw_liststyle = 3
"let g:netrw_retmap = 1
"let g:netrw_silent = 1
"let g:netrw_special_syntax= 1
"map <C-n> :Explore<CR>
"map <C-m> :Explore %:p:h<CR>
"
" Manipulation with buffers and tabs.
"
Plugin 'vim-scripts/Buffergator'
let g:buffergator_autodismiss_on_select = 0
let g:buffergator_autoupdate = 1
let g:buffergator_suppress_keymaps = 1
let g:buffergator_viewport_split_policy = "L"
map ab :BuffergatorToggle<CR>
"map at :BuffergatorTabsToggle<CR>
"
" :A switches to the header file (or vise versa)
" :AS splits and switches
" :AV vertical splits and switches
" :AT new tab and switches
" :AN cycles through matches
" :IH switches to file under cursor
" :IHS splits and switches
" :IHV vertical splits and switches
" :IHT new tab and switches
" :IHN cycles through matches
" <Leader>ih switches to file under cursor
" <Leader>is switches to the alternate file of file under
" cursor (e.g. on <foo.h> switches to foo.cpp)
" <Leader>ihn cycles through matches
"
Plugin 'vim-scripts/a.vim'
let g:alternateExtensions_h = "cpp,c"
let g:alternateExtensions_cpp = "h"
let g:alternateExtensions_c = "h"
map ah :A<CR>
"
" Tmux integration.
"
Plugin 'benmills/vimux'
"
" Extends modeline to variables.
" Needed by CF5 compile to read options right from file.
"
Plugin 'vim-scripts/let-modeline.vim'
"
" CF5 compile.
" Compiling cpp files without make file.
"
Plugin 'vishap/cf5-compile'
map <silent> ac :call CF5CompileOnly()<CR>
map <silent> ar :call CF5CompileAndRun()<CR>
"
" Provide templates
"
Plugin 'aperezdc/vim-template'
"let g:templates_no_autocmd = 1
let g:templates_no_builtin_templates = 1
"
" Local vimrc
"
Plugin 'embear/vim-localvimrc'
let g:localvimrc_name = [ ".vimrc.local" ]
let g:localvimrc_ask = 0
"
" Comment code.
" gc - visual mode - comment selection.
"
Plugin 'tpope/vim-commentary'
nmap al <Plug>CommentaryLine
vmap al <Plug>Commentary
"
" Git wrapper.
"
Plugin 'tpope/vim-fugitive'
nmap git :Git
nmap gst :Gstatus
"
" Shows git diff.
" [c - jump prev diff
" ]c - jump nex diff
" <Leader>hs - stage the hunk
" <Leader>hr - revert the hunk
" :GitGutterNextHunk
" :GitGutterPrevHunk
" :GitGutterStageHunk
" :GitGutterRevertHunk
" :GitGutterToggle
" :GitGutterLineHighlightsToggle
"
Plugin 'airblade/vim-gitgutter'
let g:gitgutter_map_keys = 0
let g:gitgutter_realtime = 0
let g:gitgutter_eager = 0
let g:gitgutter_async = 1
"
" Check syntaxis on fly.
"
"Plugin 'scrooloose/syntastic'
"let g:syntastic_cpp_compiler_options = ' -std=c++1y'
"let g:syntastic_mode_map = {
" \ "mode": "active",
" \ "active_filetypes": ["ruby", "php"],
" \ "passive_filetypes": ["c", "cpp"] }
"
" Nice colorschemes.
" Actual colorscheme is set outside as vundle resets it.
"
if &t_Co >= 256 || has('gui_running')
Plugin 'nanotech/jellybeans.vim'
let g:jellybeans_use_lowcolor_black = 0
let g:jellybeans_use_gui_italics = 0
"colorscheme jellybeans
endif
if &t_Co >= 256 || has('gui_running')
Plugin 'altercation/vim-colors-solarized.git'
let g:solarized_termcolors=256
"set backgroung=dark
"set backgroung=light
"colorscheme solarized
endif
if &t_Co >= 256 || has('gui_running')
Plugin 'morhetz/gruvbox.git'
"set backgroung=dark
"set backgroung=light
"colorscheme solarized
endif
"
" :set syntax=cpp.doxygen to highlight doxygen comments.
"
Plugin 'vim-scripts/DoxyGen-Syntax'
"
" In vim, place the cursor on the line and
" :DoxLic - generates license comment.
" :DoxAuthor - skeleton and leave the cursor just after @author tag.
" :Dox - generates function/class comment.
" :DoxUndoc(DEBUG) - if you want to ignore all code fragment ifdefed with
" DEBUG.
" :DoxBlock -
"
Plugin 'vim-scripts/DoxygenToolkit.vim'
"
" Color table and picker.
" :XtermColorTable
" press: # to yank, t to toggle, f to set text color
"
"Plugin 'xterm-color-table.vim'
" Promising GDB manager.
"
Plugin 'vim-scripts/gdbmgr'
"
call vundle#end()
filetype plugin indent on
filetype plugin on
endif
"
" Vundle resets this if set inside vundle section.
"
if &t_Co >= 256 || has('gui_running')
colorscheme jellybeans
hi clear SpellBad
hi SpellBad cterm=underline, ctermfg=red
endif
if exists("dddd")
"Plugin 'Rip-Rip/clang_complete'
"Plugin 'flazz/vim-colorschemes'
"Plugin 'Valloric/YouCompleteMe'
"Plugin 'rhysd/vim-clang-format'
Plugin 'vim-scripts/Mark'
Plugin 'danro/rename.vim'
Plugin 'kana/vim-operator-user'
Plugin 'kien/ctrlp.vim'
let g:ctrlp_root_markers = ['.ctrlp']
let g:ctrlp_custom_ignore = {
\ 'file': '\v\.(o|d|dd)$',
\ }
Plugin 'majutsushi/tagbar'
map <C-t> :TagbarToggle<CR>
let g:tagbar_autoclose = 1
let g:tagbar_autofocus = 1
let g:tagbar_autoshowtag = 1
let g:tagbar_compact = 1
let g:tagbar_indent = 1
let g:tagbar_sort = 1
let g:tagbar_width = 60
let g:tagbar_ctags_bin = "/opt/swt/bin/ctags"
Plugin 'mattn/emmet-vim'
Plugin 'tmhedberg/matchit'
Plugin 'tpope/vim-dispatch'
Plugin 'tpope/vim-unimpaired'
Plugin 'vim-scripts/Align'
Plugin 'vim-scripts/taglist.vim'
Plugin 'vim-scripts/xml.vim'
Plugin 'junegunn/vim-easy-align'
Plugin 'ntpeters/vim-better-whitespace'
let g:strip_whitespace_on_save = 1
"Plugin 'vim-scripts/TagHighlight'
"Plugin 'gcmt/taboo.vim'
"let g:taboo_tab_format = "[%m:%N:%W] %f"
" - - - - - - - - - - - - - -
" powerline
" - - - - - - - - - - - - - -
let g:Powerline_symbols = "unicode"
" Ack
Plugin 'mileszs/ack.vim'
let g:ack_default_options = " --ignore-file=is:tags -s -H --nocolor --nogroup --column"
let g:ack_highlight = 1
endif