diff options
Diffstat (limited to 'init.vim')
| -rw-r--r-- | init.vim | 331 |
1 files changed, 331 insertions, 0 deletions
diff --git a/init.vim b/init.vim new file mode 100644 index 0000000..b1aa0b1 --- /dev/null +++ b/init.vim @@ -0,0 +1,331 @@ +" When creating a custom .vimrc we need to re-enable the defaults +"unlet! skip_defaults_vim +"source $VIMRUNTIME/defaults.vim + +" Set utf-8 encoding early to prevent issues later on +set encoding=utf-8 +set fileencoding=utf-8 + +" ----- CUSTOM CONFIGURATION DIRECTORY ----- " +" If you don't care about changing the vim config directory then you can +" safely ignore this section + +" If you wish to use .config/vim directory instead make sure to add the +" following to your .bashrc: +" export VIMINIT="source ~/.config/vim/vimrc" +" and place this vimrc into `~/.config/vim/vimrc`. +" Otherwise Vim will configure itself automatically using default directories +" NOTE: NVim will also listen to this environment variable so remove it if you +" switch to nvim +if !has('nvim') + if "source ~/.config/vim/vimrc" == $VIMINIT + " Where to check for vimplug later on + let g:vimplug_dir = "~/.config/vim/autoload/plug.vim" + " Used for moving .vim into .config/vim + set viminfo+=n~/.config/vim/viminfo + " Create new runtime paths to .config/vim and enforce order + let rtp=&runtimepath + set runtimepath=~/.config/vim + let &runtimepath.=','.rtp.',~/.config/vim/after' + " Move .viminfo files to .config/vim as well + set viminfo+=n~/.config/vim/viminfo + " Write view files to .config/vim + set viewdir=~/.config/vim/view + else + " Where to check for vimplug later on + let g:vimplug_dir = "~/.vim/autoload/plug.vim" + endif +else + let g:vimplug_dir = "~/.config/nvim/autoload/plug.vim" +endif + +" ----- VANILLA CONFIG ----- " + +" -- CUSTOM SHORTCUTS -- " + +" Space is used as the 'modifier'/'leader' key +let mapleader = " " + +" For switching/opening buffers: +nnoremap <leader>e :e **/* + +" For switching buffers next/previous: +nnoremap <C-l> :bn<CR> +nnoremap <C-h> :bp<CR> + +" For cycling windows or jump to window: +" removed because conflicted with vimwiki bindings +" nnoremap <s-cr> <c-w>w +" nnoremap <number><S-CR> <number><c-w>w + +" Moving a line to a different spot +" Dont really use this and not sure what to map it to +" nnoremap <leader>k :m .-2<CR>== +" nnoremap <leader>j :m .+1<CR>== +" inoremap <leader>j <Esc>:m .+1<CR>==gi +" inoremap <leader>k <Esc>:m .-2<CR>==gi +" vnoremap <leader>j :m '>+1<CR>gv=gv +" vnoremap <leader>k :m '<-2<CR>gv=gv + +" No longer need to press shift to press : in normal and visual mode +nnoremap ; : +vnoremap ; : + +" `o` and `O` now only adds new line without going into insert mode +" TODO: broken in vimwiki +nnoremap o o<esc> +nnoremap O O<esc> + +" -- CUSTOM COMMANDS -- " +" Toggle spell check +let g:spellcheck_is_enabled = 0 +function! ToggleSpellCheck() + if g:spellcheck_is_enabled + let g:spellcheck_is_enabled = 0 + set nospell + set statusline=Spell\ Check\ Disabled + else + let g:spellcheck_is_enabled = 1 + set spell spelllang=en_ca + set statusline=Spell\ Check\ Enabled + endif +endfunction +command ToggleSpellCheck call ToggleSpellCheck() +" Enable Spellcheck automatically for relevant files +function! EnableSpellCheck() + let g:spellcheck_is_enabled = 1 + set spell spelllang=en_ca +endfunction +augroup enable_spellcheck_when_relevant + autocmd! + autocmd VimEnter,BufNewFile,BufRead *.md,*.mdown,*.tex, + \*.txt,*.wiki call EnableSpellCheck() +augroup END + +" Toggle Autoindenting Code on filesave +nnoremap g= :let b:PlugView=winsaveview()<CR>gg=G:call winrestview(b:PlugView) <CR> +function! ToggleAutoIndent() + if !exists('#autoindent_on_save#BufWritePre') + augroup autoindent_on_save + autocmd! + autocmd BufWritePre * :normal g= + set statusline=AutoIndent\ Enabled + augroup END + else + augroup autoindent_on_save + autocmd! + set statusline=AutoIndent\ Disabled + augroup END + endif +endfunction +command ToggleAutoIndent call ToggleAutoIndent() +"call ToggleAutoIndent() +" Remove autoindentation if you open a regular text file +" TODO: doesn't work for some reason +"function! DisableAutoIndent() +" augroup autoindent_on_save +" autocmd! +" set statusline=AutoIndent\ Disabled +" augroup END +"endfunction +"augroup remove_indent_text_files +" autocmd! +" autocmd VimEnter,BufNewFile,BufRead *.md,*.mdown, " *.tex, +" \*.txt,*.wiki call DisableAutoIndent() +"augroup END + +" -- OTHER -- " + +" Setting tab size +"set tabstop=3 +"set shiftwidth=3 +"set softtabstop=3 +set tabstop=4 +set shiftwidth=4 +set softtabstop=4 +"set expandtab + +" Show relative line numbers on sidebar +set nu +set relativenumber + +" Always shows at least 2 lines around the cursor +set scrolloff=2 + +" Makes `set list` visually more clear to show invisible chars +set listchars=eol:¬,tab:>·,trail:~,extends:>,precedes:<,space:‗ + +" Vim clipboard and System clipboard are shared +" (Requires vim to be compiled to support this to work) +" (On Arch this means you need GVim installed) +set clipboard=unnamedplus + +" Wrap to different line when reaching end or beginning of a line +set whichwrap=b,s,<,>,[,] + +" Keep indent when line wraps +set breakindent +set showbreak=\ \ · + +" Don't split words when wrapping +set linebreak + +" Faster Drawing +set ttyfast + +" Enable folding of code according to the syntax of the language +set foldmethod=syntax +" alternative: :set foldmethod=indent + +" Remember folds when switching buffers +augroup remember_folds + autocmd! + "autocmd BufLeave,BufWinLeave ?* mkview | filetype detect + "autocmd BufReadPost ?* silent! loadview | filetype detect + autocmd BufWinLeave ?* mkview + autocmd BufWinEnter ?* silent! loadview +augroup END + + +" Prefer to split below +set splitbelow + +" Enables undercurl and easier to read terminal +" set termguicolors + +" NVim Specific Configuration +if has('nvim') + " Allows using mouse to resize window borders + set mouse+=a +endif + +" ----- PLUGIN INITIALIZATION ----- " + +" Install VimPlug if it isn't installed +" It will also install all the plugins in this case +if !has('nvim') + if empty(glob(g:vimplug_dir)) + if "source ~/.config/vim/vimrc" == $VIMINIT + silent !curl -fLo ~/.config/vim/autoload/plug.vim --create-dirs + \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim + else + silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs + \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim + endif + autocmd VimEnter * PlugInstall --sync + endif +else + if empty(glob(g:vimplug_dir)) + silent !curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs + \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim + autocmd VimEnter * PlugInstall --sync + endif +endif + +" Start of adding Vim plugins +if !has('nvim') + if "source ~/.config/vim/vimrc" == $VIMINIT + call plug#begin('~/.config/vim/plugged') + else + call plug#begin('~/.vim/plugged') + endif +else + call plug#begin('~/.config/nvim/plugged') +endif +" Airline UI for top and bottom bars +Plug 'vim-airline/vim-airline' +Plug 'vim-airline/vim-airline-themes' +" Execute Projects and Terminal commands asynchronously +"Plug 'skywind3000/asyncrun.vim' +" Searches for custom .vimrc files for specific projects +"Plug 'krisajenkins/vim-projectlocal' +" Code Completion +"Plug 'neoclide/coc.nvim', {'branch': 'release'} +" Markdown Preview +Plug 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install() }, + \'for': ['markdown', 'vim-plug']} +" Latex Compiling and Preview +Plug 'lervag/vimtex' +" Vimwiki for writing down notes +"Plug 'vimwiki/vimwiki' +" Autogenerate Markdown Table of Contents +Plug 'mzlogin/vim-markdown-toc' +" Sophisticated Multi-Line Editing +Plug 'mg979/vim-visual-multi', {'branch': 'master'} + +" File Templates +Plug 'tibabit/vim-templates' + +" Fixed .vue indentation +"Plug 'leafOfTree/vim-vue-plugin' +" Fixed .svelte indentation +"Plug 'leafOfTree/vim-svelte-plugin' + +" Live Preview of HTML/CSS/JS +" outdated parser, but plugin in development +"Plug 'turbio/bracey.vim' +call plug#end() +" End of adding Vim plugins + +" ----- PLUGIN CONFIG ----- " +" The following is plugin configuration as well as +" vanilla vim settings tailored for the plugins installed + +" Search for first custom .vimrc Vim can find to load +" It does this by recursively looking up directories until it finds one +let g:projectlocal_project_markers = ['.vimrc'] +" When executing a project or terminal command +" automatically open a new Vim Window of size 7 +let g:asyncrun_open = 7 + + +" Sets Airline Theming +let g:airline_theme='distinguished' +let g:airline#extensions#tabline#enabled=1 +" Commands to change dark and light themes +command LightTheme AirlineTheme silver +command DarkTheme AirlineTheme distinguished + +" Theme Changes +" Disabled for now +" hi Pmenu ctermbg=black ctermfg=white +" hi PmenuSel guibg=yellow guifg=black +" hi Pmenu ctermbg=gray guibg=purple +" hi Folded guibg=#422552 guifg=#00dddd + +" Vimwiki configs +" change symbols used for checkboxes +let g:vimwiki_listsyms = ' ~✓' "✗○● +" Makes code completion suggestions work with vimwiki files +augroup ft_vimwiki + au! + au BufRead,BufNewFile *.wiki set filetype=vimwiki + au FileType vimwiki inoremap <silent> <buffer> <expr> <CR> complete_info()['selected'] > -1 ? "\<CR>" : "<Esc>:VimwikiReturn 1 5<CR>" + au FileType vimwiki inoremap <silent> <buffer> <expr> <S-CR> complete_info()['selected'] > -1 ? "\<S-CR>" : "<Esc>:VimwikiReturn 2 2<CR>" +augroup END + +" Coc configs +" Fix autocompletion adding a newline while in visual multi mode +augroup coc_autocomplete_newline + au! + autocmd User visual_multi_mappings imap <buffer><expr> <CR> pumvisible() ? "\<C-Y>" : "\<Plug>(VM-I-Return)" +augroup END + +" what program should vimtex use to show live edits +" let g:vimtex_view_method = 'zathura' +let g:vimtex_view_general_viewer = 'atril' +" what flavour vimtex should use for autocomplete +let g:tex_flavor = 'latex' +" function for counting words in a latex file +function! WC() + let filename = expand("%") + let cmd = "detex " . filename . " | wc -w | perl -pe 'chomp; s/ +//;'" + let result = system(cmd) + echo result . " words" +endfunction +" the command for calling the function +command WordCount call WC() + +" Make vimwiki use Markdown +let g:vimwiki_list = [{'path': '~/vimwiki/', + \ 'syntax': 'markdown', 'ext': '.md'}] |
