summaryrefslogtreecommitdiff
path: root/nvim/init.vim
blob: 8c46c3ad0dcfd172964d3e64a7821e56406ea58a (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
" 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
set listchars=tab:⇥\ \,space:·	" Highlight tabs and spaces
set list			" Show whitespace characters defined in listchars
syntax on			" Enable syntax highlighting

" Filetype options
autocmd BufRead,BufNewFile *.tex set filetype=tex
au Filetype tex let b:autopairs_enabled = 0
au Filetype tex setlocal indentexpr=
au BufRead,BufNewFile *.tssg set filetype=tssg

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

" Keybindings
 " Set leader-key to comma
let mapleader =","
 " Invoke goyo with comma-m
nmap <leader>m :Goyo 120x<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 (leader-wasd, as opposed to ctrl-w + hjlk)
map <leader>a <C-w>h
map <leader>s <C-w>j
map <leader>w <C-w>k
map <leader>d <C-w>l
 " Streamlined tab navigation with chromium inspired keybindings
nmap <leader><TAB> gt
nmap <leader>t :tabnew<CR>
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
function GetTermPID(temu)
	let pinfo = ['', getpid(), '']
	while !(pinfo[2] =~ a:temu)
		let pinfo = split(system('ps h -o pid,ppid,command= -p' . pinfo[1]))
	endwhile
	return pinfo[0]
endfunction

function SetTermClassName(termpid, name)
	silent exec "!settitle " . a:termpid . " " . a:name
endfunction

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
	let temu = "st"
	let temupid = GetTermPID(temu)
	autocmd BufEnter * :set title
	autocmd VimEnter * call SetTermClassName(temupid, "Vim")
	autocmd VimLeave * call SetTermClassName(temupid, "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=""