aboutsummaryrefslogtreecommitdiff
path: root/.vimrc
blob: 6ac8fccb3ef601ad1f223f4d72fcba9ebae82cc9 (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
""
" Basics

filetype on
syntax on
set encoding=utf-8

""
" Global stuff

" Show matched result.
set showmatch

" Don't show the current command in the lower right corner.
set showcmd

" Show numbers.
set number
set relativenumber

" Don't show the mode, since this will be shown by the status line.
set noshowmode

" Make sure that unsaved buffers that are to be put in the background are
" allowed to go in there (ie. the "must save first" error doesn't come up)
set hidden

" Allow backspacing over everything in insert mode
set backspace=indent,eol,start

" Don't wrap lines
set nowrap

" I don't like the backup and the swapfile thingies.
set nobackup
set noswapfile

" Use always the clipboard.
" NOTE: this only works if you have vim with clipboard support. You can check
" this by calling vim --version and see if you have +clipboard.
set clipboard=unnamed

" Paste toggle
set pastetoggle=<f2>

""
" Colorscheme

set background=dark
colorscheme xoria256

""
" Setup the cursor for Konsole.
" NOTE: change this if you're not using Konsole or a program that makes use
" of the Konsole part. See
" http://vim.wikia.com/wiki/Change_cursor_shape_in_different_modes

let &t_SI = "\<Esc>]50;CursorShape=1\x7"
let &t_EI = "\<Esc>]50;CursorShape=0\x7"

""
" Status line

" Returns the mode we are currently.
function! Mode()
  redraw
  let l:mode = mode()

  if     mode ==# "n" | return "NORMAL"
  elseif mode ==# "i" | return "INSERT"
  elseif mode ==# "R" | return "REPLACE"
  elseif mode ==# "v" | return "VISUAL"
  elseif mode ==# "V" | return "VISUAL-LINE"
  elseif mode ==# "s" | return "SELECT"
  elseif mode ==# ""  | return "VISUAL-BLOCK"
  else                | return l:mode
  endif
endfunc

" My own status line.
set stl=\ %{Mode()}\ \|\ %f\ %m\ %r\ %=\ Line:\ %l\ Column:\ %v\ Buf:#%n

" Always show the status line.
set laststatus=2

""
" Searching stuff.

" Ignore the case on search by default.
set ignorecase

" Case sensitive if we start the search by an uppercase letter.
set smartcase

" Find as you type search.
set incsearch

""
" Tabs, Indentation

set textwidth=79
set tabstop=2
set shiftwidth=2
set cindent
set autoindent
set smarttab
set expandtab
set backspace=indent,eol,start

""
" Everything regarding filetypes: indentation rules, gofmt & friends.

source ~/.vim/autocmd.vim

""
" Re-mappings

let g:mapleader = ","

" Make window navigation easier.
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-h> <C-w>h
nnoremap <C-l> <C-w>l
nnoremap <leader>c :close<CR>
nnoremap <leader>v :vs<CR>
nnoremap <leader>V :vs<CR><C-w><C-l>

" <C-s> in normal/insert mode: switch to normal mode and write to disk.
inoremap <C-s> <ESC>:w<CR>
nnoremap <C-s> :w<CR>

" <C-q> is the same as @q (I use q to store macros).
nnoremap <C-q> @q

" Pressing ^ in order to move to the first non-blank character is inconvenient.
nnoremap <leader>, ^

" The default behavior for <C-z> is simply useless: why would I want to stop
" the current `vim` process ? (especially shitty if you miss useful commands
" like <C-x> ...).
"
" Before I was remapping this to <nop>, but since switching to Emacs, I've
" started to use <C-z> as escape there in order to not overlap with an
" extremely used prefix. For consistency's sake, I'm also applying this to Vim.
nnoremap <C-z> <ESC>
inoremap <C-z> <ESC>

" Do nothing for the <S-K> command. I never use it and it appears when I
" misstype <S-J>.
nnoremap K <nop>

" Do nothing for <c-o>. I don't use this feature and it confuses me whenever I
" misstype <c-p> (CtrlP plugin).
nnoremap <c-o> <nop>

" Set paste temporarily to just paste what we have on the registry.
nnoremap <leader>p :set paste<cr>p:set nopaste<cr>