aboutsummaryrefslogtreecommitdiff
path: root/vimrc
blob: 4090dad793e100e1d533b014b1f4dea551cb93d4 (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
"================================================================================ 
" 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
inoremap <buffer> ( <C-X><C-o>(
"if !exists("g:ycm_semantic_triggers")
"   let g:ycm_semantic_triggers = {}
"endif
"let g:ycm_semantic_triggers['c'] = ['(']                             | " 


call vundle#end()             | " required
filetype plugin indent on     | " required

"================================================================================ 
" custom config

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
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 showcmd		                | " displays status line messages while selecting (matrix size)
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 showbreak=| " symbol used in the beginning of a wrapped line
set listchars=tab:▸\ ,eol:¬   | " symbols used when using :set list (which displays non-printable chars)


set virtualedit=onemore         " one character beyond the line length should be navigatable (options: all,insert,block,onemore)
nnoremap <End> g$|              " and make the <End> key position the cursor after the last char of that line:w

" 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

"================================================================================ 
" plugin hotkeys
nnoremap <C-l> :TlistToggle<CR>|                                     " bind TagList to Hotkey Ctrl+L

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

" custom commands...
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...
map <C-h> <C-w>h|map <C-j> <C-w>j|map <C-k> <C-w>k|map <C-l> <C-w>l| " window navigation shortcut


"================================================================================ 
" deactivated on-demand commands (just in case one needs them one day)
" 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>
..