aboutsummaryrefslogtreecommitdiff
path: root/vimrc
blob: 7a0910f988857b53427f300e9456ad032bcea21b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
"================================================================================ 
" Vundle: plugin manager...
set nocompatible|               " do not try to be vi, be vim
filetype off|                   " Vundle needs this
set rtp+=~/.vim/plugins/Vundle.vim
call vundle#begin('~/.vim/plugins/')

" Plugin dependant configurations...
Plugin 'VundleVim/Vundle.vim'
Plugin 'cscope_plus.vim'      | " run cscope -R -b in project folder then use
Plugin 'autoload_cscope.vim'  | " CTRL+\ s searches word under cursor, CTRL+T back
Plugin 'tpope/vim-fugitive'   | " the most complete GIT integration plugin
Plugin 'taglist-plus'         | " quick code navigator
let Tlist_Compact_Format = 1                          | " 
let Tlist_GainFocus_On_ToggleOpen = 1                 | "
let Tlist_Close_On_Select = 1                         | "
Plugin 'Valloric/YouCompleteMe'                       | " syntax checker and code completion
let g:ycm_global_ycm_extra_conf = ''                  | " fallback, right one should be in the applications path
let g:ycm_confirm_extra_conf = 0                      | " disable 'do you really want to execute .py?'
let g:ycm_key_select_completion = '<Tab>'             | " key completion key
let g:ycm_error_symbol = '✖'                          | " insert this as an error symbol in the gutter bar
let g:ycm_warning_symbol = '➔'                        | " insert this as a warning symbol in the gutter bar
let g:ycm_collect_identifiers_from_tags_files = 1     | " 
let g:ycm_autoclose_preview_window_after_insertion=1  | " close the window when leaving insert mode
"let g:ycm_semantic_triggers = {'c' : ['(', ',']}     | " add additional triggers (not recommend)

let b:html_omni_flavor='xhtml'                        | " prever xhtml over html because that makes inline php code possible without hassle

call vundle#end()             | " required
filetype plugin indent on     | " required
"================================================================================ 
" custom config
scriptencoding utf-8          | " tell vim that we are using utf-8 here 

set noswapfile                | " noundofile, nobackup, nowritebackup
set backupdir=~/.vim/temp     | " using :set backup will copy current file to this directory
set directory=~/.vim/temp     | " 
set undodir=~/.vim/temp       | " 

set ts=2 sts=2 sw=2 expandtab | " indentation which i like (abbr: tabstop, softtabstop, shiftwidth)
set autoindent                | " always set autoindenting on
set copyindent                | " copy the previous indentation on autoindenting
set scrolloff=2               | " always keeps at least two lines visible (when seeking)

set clipboard=unnamedplus     | " makes copy and paste work (autoselectplus might work as well)
set number                    | " toggle line numbers
set whichwrap=b,s,<,>,[,]     | " beyond beginning/end line causes cusor to wrap
set backspace=indent,eol,start| " allow backspacing over everything in insert mode, not needed with whichwrap
set diffopt+=iwhite,filler    | " lets diff ignore white spaces
set spell| set spelllang=en,de| " enable spell checker 
set virtualedit=onemore         " one character beyond the line length should be navigatable (options: all,insert,block,onemore)
set breakindent cpoptions+=n  | " when wrapping lines indent wrapped line to align with the previews
set linebreak                 | " do not wrap in the middle of words
set showcmd                   | " displays status line messages while selecting (matrix size)
set nofoldenable              | " do not fold code automatically
set tags+=~/.vim/systags      | " ctags -R -f ~/.vim/systags /usr/include /usr/local/include

set encoding=utf-8            | " we need default utf-8 encoding to use cool chars as line break and so on (see below)
set showbreak+=| " symbol used in the beginning of a wrapped line
set listchars=eol:| " symbols used when using :set list (which displays non-printable chars)
set listchars+=trail:·        | " symbols used when using :set list (which displays non-printable chars)
set listchars+=precedes:«     | " symbols used when using :set list (which displays non-printable chars)
set listchars+=extends:»      | " symbols used when using :set list (which displays non-printable chars)
set listchars+=tab:▸\         | " symbols used when using :set list (which displays non-printable chars)


nnoremap $ g$|                  " and make the $ key position the cursor after the last char of that line, not before 
nnoremap <End> g$|              " and make the <End> key position the cursor after the last char of that line

" search...
set ignorecase|set smartcase    " if search pattern contains uppercase then search is case sensitive
set incsearch                   " do incremental searching
set showmatch|set matchtime=4   " blinks matching braces 

set novisualbell                " don't beep
set noerrorbells                " don't beep
set guicursor=n-v-c:ver30-Cursor-blinkon500-blinkoff500   " how the caret looks like

if has("autocmd")
  set modeline                  " set variables specific to a file, like indentation by adding a comment
  set modelines=3               " how many lines in the beginning and end of the file can be mode lines?


  augroup resCur              | " make cursor appear in its previous position when reopening a file...
    "autocmd!
    autocmd BufReadPost * call setpos(".", getpos("'\""))
  augroup END

  augroup PreviewOnBottom     | " will open new windows below the current (only in insert mode, so that the preview window is drawn below)
    autocmd InsertEnter * set splitbelow
    autocmd InsertLeave * set splitbelow!
  augroup END

  augroup OmniFunc            | " this will enable omnicomplete just in case this configuration runs somewhere, where YouCompleteMe is not compiled
    if exists("+omnifunc")
      autocmd Filetype *
            \	if &omnifunc == "" |
            \		setlocal omnifunc=syntaxcomplete#Complete |
            \   setlocal completeopt=longest,menuone |
            \	endif
    endif
  augroup END

  autocmd FileType text setlocal textwidth=78   " text files: set 'textwidth' to 78
  autocmd FileType gitcommit set tw=72          " longer commit messages without auto line wrapping
  autocmd FileType LaTeX let g:tex_flavor = "latex" |set conceallevel=1| set concealcursor=
endif

"================================================================================ 
" gui stuff and appearance
if &t_Co > 2
  set hlsearch               " 
  set cursorline             " highlight currently selected line
endif

if has('mouse')
  set mouse=a
endif

if has("gui_running")
  set guitablabel=%t         " do not display full path as tabname
  set guioptions+=m          " menu bar
  set guioptions+=T          " toolbar
  set guioptions+=r          " right-hand scroll bar
  set guioptions-=c          " use console dialogs instead of popups
  set guioptions+=a          " autoselect: copy&paste using middleclick
  set guioptions+=e          " add tab pages
  set guioptions+=p          " use gui pointer callback for x11 
  set toolbariconsize=large  " make the icon toolbar as big as possible

else
  if &term =~? 'mlterm\|xterm\|screen' 
    set t_Co=256                | " fixes incompatibilities with our color scheme
  endif
  set title                     | " set the terminal caption 
  set titleold="vim ended"      | " set terminal title after closing vim
  set titlestring="VIM-CONSOLE" | " set window title
  set icon                      | " sets the terminal icon to vim
  set ttyfast                   | " modern terminals are all fast in a way
endif

colorscheme coderonline
syntax enable

"================================================================================ 
" custom commands...
map <C-h> <C-w>h|map <C-j> <C-w>j|     " window navigation shortcuts
map <C-k> <C-w>k|map <C-l> <C-w>l|     " window navigation shortcuts

cmap w!! w !sudo tee % >/dev/null|     " write :w!! to execute :w as root user

" custom hotkeys... 
nnoremap <C-Tab> :tabnext<CR>|         " lets one use CTRL+Tab to switch between tabs 
nnoremap <C-S-Tab> :tabprevious<CR>|   " use CTRL+Shift+Tab to switch to preview tab

nnoremap j gj|nnoremap k gk|           " do not jump over wrapped lines

" plugin hotkeys
map <C-l> :TlistToggle<CR>|       " bind TagList to Hotkey Ctrl+L
inoremap <buffer> ( <C-X><C-o><C-p>(|  " when opening a bracket: call the OmniComplete function, display the menu, but deselect the first entry (C-p)


"================================================================================ 
" deactivated on-demand commands (just in case one needs them one day)
"
" code completion: http://vim.wikia.com/wiki/Make_Vim_completion_popup_menu_work_just_like_in_an_IDE
" reacts on CTRL+P, CTRL+Space
"inoremap <expr> <CR>       pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>"
"inoremap <expr> <CR>       pumvisible() ? "\<C-y>" : "\<CR>"
"inoremap <expr> <Down>     pumvisible() ? "\<C-n>" : "\<Down>"
"inoremap <expr> <Up>       pumvisible() ? "\<C-p>" : "\<Up>"
"inoremap <expr> <PageDown> pumvisible() ? "\<PageDown>\<C-p>\<C-n>" : "\<PageDown>"
"inoremap <expr> <PageUp>   pumvisible() ? "\<PageUp>\<C-p>\<C-n>" : "\<PageUp>"
" set guiheadroom=0| " do not fill non-functional area of the empty editor with gtk background
" map shift-right to visually select and so on
"nnoremap <C-Right> El
"nnoremap <S-Right> vl
"nnoremap <S-Left> vj
"nnoremap <S-Up> vk
"nnoremap <S-Down> vj
" noremap % v% " jump between braces and highlight
"nnoremap <Home> ^
"vmap <Home> ^
"nnoremap <End> $
"vmap <End> $
"nnoremap <C-Tab> <C-PageDown>
"nnoremap <C-S-Tab> <C-PageUp>
":inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>"
"map <Esc>OA k|map <Esc>OB j|map <Esc>OC l|map <Esc>OD h|             " allow cursor keys in insert mode
"inoremap <expr> <Esc>      pumvisible() ? "\<C-e>" : "\<Esc>" " breaks cursor keys!
" binding ESC can easily break cursor key movement on the console (tricky, because gvim works)
"inoremap <C-Space> <C-x><C-o>
"inoremap <C-@> <C-Space>
..