summaryrefslogtreecommitdiff
path: root/nvim/init.vim
blob: 73fea0536f5bd0b8367a0ce4b8c5dddd9344f691 (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
" Manage plugins using vim-plug
if ! filereadable(system('echo -n "${XDG_CONFIG_HOME:-$HOME/.config}/nvim/autoload/plug.vim"'))
	echo "Downloading junegunn/vim-plug to manage plugins..."
	silent !mkdir -p ${XDG_CONFIG_HOME:-$HOME/.config}/nvim/autoload/
	silent !curl "https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim" > ${XDG_CONFIG_HOME:-$HOME/.config}/nvim/autoload/plug.vim
	autocmd VimEnter * PlugInstall
endif

call plug#begin(system('echo -n "${XDG_CONFIG_HOME:-$HOME/.config}/nvim/plugged"'))
Plug 'jiangmiao/auto-pairs'
Plug 'junegunn/goyo.vim'
Plug 'alvan/vim-closetag'
Plug 'ap/vim-css-color'
Plug 'vimwiki/vimwiki'
call plug#end()

" Basic options
set autochdir			" Always change directory to current file
set autoindent			" Keeps indentation on new lines
set hlsearch			" Highlight search hits
set ignorecase			" Case-insensitive search...
set linebreak			" Word wrap
set mouse=a			" Because sometimes it's just easier to use the mouse
set number relativenumber	" Enable relative line numbers
set smartcase			" ...Unless the search term is capital
set splitbelow splitright	" Open splits on bottom/right instead of top/left
set termguicolors		" Enable GUI colors for the terminal to get truecolor
set wildmode=longest,list,full	" Enable file auto-complete
syntax on			" Enable syntax highlighting

" VimWiki options
let g:vimwiki_list = [{'path': '~/docs/school/docs/wiki/', 'path_html': '~/docs/school/docs/wiki/site/'}]

" Keybindings
 " Set leader-key to comma
let mapleader =","
 " Invoke goyo with comma-m
nmap <leader>m :Goyo<CR>
 " Invoke spellcheck mode with comma-o
nmap <leader>l :setlocal spell! spelllang=en_us<CR>
 " Invoke spellcheck mode with comma-o
nmap <leader>c :set cursorcolumn!<CR>
 " Send cursor to top or bottom currently visible line with ctrl-jk
" map <C-j> :call cursor(line('w$'),col('.'))<CR>
" map <C-k> :call cursor(line('w0'),col('.'))<CR>
 " Navigate faster than hjkl with ctrl-hjlk
nmap <C-h> 0
nmap <C-j> <C-d>
nmap <C-k> <C-u>
nmap <C-l> $
 " Faster split navigation (alt-hjlk, as opposed to ctrl-w + hjlk)
"map <A-h> <C-w>h
"map <A-j> <C-w>j
"map <A-k> <C-w>k
"map <A-l> <C-w>l
 " Streamlined tab navigation with chromium inspired keybindings
nmap <TAB> gt
nmap <S-TAB> gT
nmap <C-T> :tabnew<CR>
 " Copy, paste, and cut with standard bindings
map <C-c> "+y
"map <C-v> "+gp
map <C-x> "+x

" Colorscheme for root and normal users (since vimrc is just symlinked to the root user's home)
if ($USER) == 'root'
	colorscheme zellner
else
	if empty($DISPLAY)
		colorscheme default
	else
		set bg=dark
		let g:gruvbox_contrast_dark = 'hard'
		colorscheme gruvbox-timmy
	endif
endif

" Behaviors exclusive to either the tty or a terminal emulator in a graphical environment
if empty($DISPLAY)
	" Clear the tty screen after exiting vim
	"autocmd QuitPre * :!clear
else
	set cursorline			" Highlight current line
	" Change the terminal emulator's window title and class name to vim
	autocmd BufEnter * :set title
	autocmd VimEnter * :silent exec "!/home/timmy/scripts/st/settitle Vim"
	autocmd VimLeave * :silent exec "!/home/timmy/scripts/st/settitle st"
	let &titleold="st"
endif

" Set the cursor on a per-mode basis (Not needed in NVIM)
"let &t_SI.="\<Esc>[6 q" " Insert mode
"let &t_SR.="\<Esc>[4 q" " Replace mode
"let &t_EI.="\<Esc>[2 q" " Normal mode
"let &t_ti.="\<Esc>[2 q" " Cursor on startup

" Automatically deletes all trailing whitespace on save
function DelWS()
	:let ccc=col('.')	" Set current cursor column
	:let ccl=line('.')	" Set current cursor line
	:%s/\s\+$//e		" Find and remove trailing whitespace on each line
	:call cursor(ccl,ccc)	" Move cursor to previous position
endfunction
autocmd BufWritePre * call DelWS()

" Disables automatic commenting on newline:
	autocmd FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o
" Perform dot commands over visual blocks:
	vnoremap . :normal .<CR>
" Save file as sudo on files that require root permission
	cnoremap w!! execute 'silent! write !doas tee % >/dev/null' <bar> edit!

" Plugin options
 " closetag
let g:closetag_filenames = '*.html,*.xhtml,*.phtml'

" Get rid of the pointless .viminfo files that clutter the home directory
let skip_defaults_vim=1
set viminfo=""