aboutsummaryrefslogtreecommitdiff
path: root/.vim/vimrc
blob: 5d3417b320184e547ab1a2914a1cb221cbbc9340 (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
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
" vi:columns=160:list:ts=2:sts=2:sw=2
"================================================================================
" Vundle: plugin manager...
set nocompatible                                      | " do not try to be vi, be vim (required by Vundle)
filetype off                                          | " Vundle needs this
set rtp+=~/.vim/plugins/Vundle.vim                    | " set runtimepath (required by Vundle)
call vundle#begin('~/.vim/plugins/')                  | " location where Vundle searches&installs plugins

" Plugin dependant configurations...
Plugin 'VundleVim/Vundle.vim'                         | " Vundle itself (required)
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
let html_use_css = 1                                  | " when using :TOhtml no font-tags will be used, but proper css

call vundle#end()             | " required by Vundle
filetype plugin indent on     | " required by Vundle
behave mswin
"================================================================================ 
" custom config
colorscheme coderonline
syntax enable

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 selectmode=mouse          | " avoid using select mode (only with mouse)
set selection=exclusive       | " includes last character of the selection into following command (like x or d)

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 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 wildmenu wildmode=full    | " wildmenu code completion

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

set novisualbell              | " don't beep
set noerrorbells              | " don't beep
set clipboard=unnamedplus     | " makes copy and paste work (autoselectplus might work as well)
set number                    | " toggle line numbers

if has("multi_byte")
  set encoding=utf-8          | " we need default utf-8 encoding to use cool chars as line break and so on (see below)
  scriptencoding utf-8        | " tell vim that we are using utf-8 here
  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)
endif

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 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=
  autocmd BufNewFile,BufReadPost *.config set filetype=xml | " visual studio config file
  autocmd BufNewFile,BufReadPost *.csproj set filetype=xml | " visual studio project file
  autocmd BufNewFile,BufReadPost *.sln set filetype=xml    | " visual studio solution file
endif

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


if has("gui_running")
  set mouse=a                   | " use mouse in gui-mode (which is default)
  set mouseshape+=n:beam,v:beam | " display a text input cursor even in normal and selection mode
  set guicursor=n-v-c:ver30-Cursor-blinkon500-blinkoff500  | " how the caret looks like
  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
  "set columns=80               | " set initial window width (so that it fits the terminals)
else
  if &term =~? 'mlterm\|xterm\|screen'
    set t_Co=256                | " fixes incompatibilities with our color scheme
  endif
  set mouse=nh                  | " limits mouse usage to normal mode and help files, so that middle click text insertion works in insert mode
  set title                     | " set the terminal caption
  set icon                      | " sets the terminal icon to vim
  set ttyfast                   | " modern terminals are all fast in a way
  "set titleold="vim ended"      | " set terminal title after closing vim
  "set titlestring="VIM-CONSOLE" | " set window title
  "if has('mouse')
  "endif
endif


"================================================================================ 
" 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

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
function ExtendedHome()
    let column = col('.')
    normal! ^
    if column == col('.')
        normal! 0
    endif
endfunction
noremap <Home> ^
noremap <silent> <Home> :call ExtendedHome()<CR>

nnoremap <C-z> u



" 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)


set makeprg=make\ test
nnoremap <F5> :!make<CR>|              " classic key binding: press F5 to compile and execute (if you have a Makefile with make test doing that)


"================================================================================
" 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>
"
..