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
|
" Settings
"""""""""""""""""""""""""""
" Leave boomer mode
set nocompatible
set history=1000
" Backspace in insert mode
set backspace=indent,eol,start
" Hide buffer when abandoned (you can gd away, etc)
set hid
" Searching
" NOTE: ignorecase and smartcase must be used together (see :h 'smartcase')
set incsearch gdefault ignorecase smartcase nohlsearch
" Only auto-continue comments when i_<cr> is pressed (not n_o)
" Must be set after :filetype-plugin-on
filetype plugin indent on
au FileType * setlocal fo-=o fo+=r
" Enable syntax highlighting
syn on
" Colorscheme
" au VimEnter * ++nested colorscheme ansi_linus
" Persistent undo
set undofile
" Line numbers
set number relativenumber
" Improve macro performance
set lazyredraw
" Show matching brackets
set showmatch
set matchtime=2
set listchars=tab:>-,eol:$,space:.,trail:@,nbsp:%
" Enable mouse input
set mouse=a
" sussy sus the sussy sus
set nowrap
" Mappings
"""""""""""""""""""""""""""
let g:mapleader = "\<space>"
" Some keys are hard to press with the Danish layout. Luckily, we have some
" spare keys! Note that ctrl and esc are swapped at the OS level.
nnoremap æ $
nnoremap Æ 0
" Switching windows
" TODO: make this work with iTerm2 panes
nnoremap <c-h> <c-w><c-h>
nnoremap <c-j> <c-w><c-j>
nnoremap <c-k> <c-w><c-k>
nnoremap <c-l> <c-w><c-l>
" tnoremap <c-h> <c-\><c-n><c-w><c-h>
" tnoremap <c-j> <c-\><c-n><c-w><c-j>
" tnoremap <c-k> <c-\><c-n><c-w><c-k>
" tnoremap <c-l> <c-\><c-n><c-w><c-l>
" Resize windows
nnoremap + <c-w>+
nnoremap - <c-w>-
" Switching tabs
nnoremap <silent> <leader>tt :tabnext<CR>
nnoremap <silent> <leader>tn :tabnew<CR>
nnoremap <silent> <leader>to :tabonly<CR>
nnoremap <silent> <leader>tc :tabclose<CR>
nnoremap <silent> <leader>tm :tabmove
" Just use gt and gT
" nnoremap <silent> <leader>tl :tabn<CR>
" nnoremap <silent> <leader>th :tabN<CR>
nnoremap <silent> <leader>t<S-L> :tabl<CR>
nnoremap <silent> <leader>t<S-H> :tabr<CR>
" Fast macros (qq to record)
nnoremap Q @q
vnoremap Q :norm! @q<cr>
" Make Y act like C and D
nnoremap <s-y> y$
vnoremap <s-y> $y
" Indent using tab key
nnoremap <Tab> >l
nnoremap <S-Tab> <l
vnoremap <Tab> >gv
vnoremap <S-Tab> <gv
noremap! <C-j> <down>
noremap! <C-k> <up>
noremap! <C-h> <left>
noremap! <C-l> <right>
" Toggle showing 'listchars'
nnoremap <silent> <leader>l :set list!<cr>
" Escape in terminal mode
tnoremap <esc><esc> <c-\><c-n>
" Seamlessly enter/leave terminal buffer.
tnoremap <c-w> <c-\><c-n><c-w>
au BufEnter term://* norm! i
" Join to end of line below
" This is already used by the window switching mappings
" nnoremap <c-j> ddpkJ
" Commands
"""""""""""""""""""""""""""
" Create a temporary buffer
" NOTE: relied on by other commands
command Temp new | setlocal buftype=nofile bufhidden=wipe noswapfile nomodified nobuflisted
command TempTab tabnew | setlocal buftype=nofile bufhidden=wipe noswapfile nomodified nobuflisted
" Reverse lines
command! -bar -range=% Reverse <line1>,<line2>g/^/m<line1>-1|nohl
" Redraw screen
" CTRL-L mapping is used in other thing
command Redraw norm!
" Run buffer contents as vimscript
command! -bar -range=% Run execute 'silent!' . <line1> . ',' . <line2> . 'y|@"'
" Output the result of a command to the buf
command! -nargs=+ -complete=command Output
\ redir => output |
\ silent execute <q-args> |
\ redir END |
\ tabnew |
\ setlocal buftype=nofile bufhidden=wipe noswapfile nobuflisted nomodified |
\ silent put=output |
\ if <q-args> =~ ':!' |
\ silent 1,2delete _ |
\ else |
\ silent 1,4delete _ |
\ endif
" Copy buffer to system clipboard
command! Copy silent w !pbcopy
" Copy the location of the current file
command! CopyDir !echo %:r | pbcopy
" View in-memory changes before writing to disk
command! DiffOnDisk
\ let orig_filetype=&ft |
\ vert new |
\ read ++edit # | 0d_ |
\ setlocal bt=nofile bh=wipe nobl noswf ro |
\ let &l:filetype = orig_filetype |
\ diffthis |
\ wincmd p |
\ diffthis
" Miscellaneous
"""""""""""""""""""""""""""
" Show the color column only if insert mode (and only if cc is set)
augroup ShowCCInInsertMode
au!
au InsertEnter * if &tw != 0 | let &cc = &tw + 1 | endif
au InsertLeave * let &cc = 0
augroup END
" Auto-refresh vim config
" au BufWritePost $XDG_CONFIG_HOME/*.{vim,lua} so %
" Jump to last editing location when opening files
au BufReadPost *
\ if line("'\"") > 0 && line("'\"") <= line("$") |
\ exe "normal! g'\"" |
\ endif
" TODO: Ignore in term:// buffers.
augroup Sus
au!
au VimEnter,ColorScheme * hi SusWhitespace ctermbg=red guibg=red
au BufWinEnter * match SusWhitespace /\s\+$/
\ | 2match SusWhitespace /\%u00A0/
au InsertEnter * match SusWhitespace /\s\+\%#\@<!$/
au InsertLeave * match SusWhitespace /\s\+$/
au BufWinLeave * call clearmatches()
augroup END
|