diff --git a/stow/vim/.vim/autocmds.vim b/stow/vim/.vim/autocmds.vim new file mode 100644 index 0000000..7baff00 --- /dev/null +++ b/stow/vim/.vim/autocmds.vim @@ -0,0 +1,43 @@ +"autocmds +"--------{{{ +if has("autocmd") + "global + augroup global + autocmd! + "keep equal proportions when windows resized + autocmd VimResized * wincmd = + "save cursor position in a file + autocmd BufReadPost * if line("'\"") > 1 && line("'\"") + \ <= line("$") | exe "normal! g'\"" | endif + augroup END + + augroup filetype_bash + autocmd! BufNewFile,BufRead *.bash call BashSettings() + augroup END + + augroup filetype_python + autocmd! FileType python call PythonSettings() + augroup END + + augroup filetype_go + autocmd! FileType go call GoSettings() + augroup END + + augroup filetype_html + autocmd! FileType html call HtmlSettings() + augroup END + + augroup filetype_spell + autocmd! FileType markdown call SpellSettings() + augroup END + + augroup filetype_halftab + autocmd! FileType html,javascript,css,json,yaml,sh call HalftabSettings() + augroup END + + augroup lsp_install + autocmd! + autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled() + augroup END +endif +"}}} diff --git a/stow/vim/.vim/colorschemes.vim b/stow/vim/.vim/colorschemes.vim new file mode 100644 index 0000000..0ffc24f --- /dev/null +++ b/stow/vim/.vim/colorschemes.vim @@ -0,0 +1,16 @@ +"colorschemes +" {{{ +" colorscheme 1989 +" colorscheme PaperColor +" colorscheme gruvbox +" colorscheme jellybeans +" colorscheme molokai +" colorscheme Benokai +" colorscheme Monokai +" colorscheme badwolf +" colorscheme wombat256 +" colorscheme yuejiu +" colorscheme wargrey +" colorscheme Tomorrow-Night-Bright +" colorscheme monokai-phoenix +" }}} diff --git a/stow/vim/.vim/commands.vim b/stow/vim/.vim/commands.vim new file mode 100644 index 0000000..dc85a80 --- /dev/null +++ b/stow/vim/.vim/commands.vim @@ -0,0 +1,10 @@ +"custom commands +"---------------{{{ +"common typos and abbreviations +cnoremap w!! w !sudo tee % > /dev/null +command! W w !sudo tee % > /dev/null +command! Trim %s/\s\+$// +command! Q q +command! WQ wq +command! Q1 q! +"}}} diff --git a/stow/vim/.vim/functions.vim b/stow/vim/.vim/functions.vim new file mode 100644 index 0000000..958749c --- /dev/null +++ b/stow/vim/.vim/functions.vim @@ -0,0 +1,75 @@ +"toggle functions +"----------------{{{ +function! ToggleColorColumn() + if &cc == '' + set cc=80 + else + set cc= + endif +endfunction + +function! ToggleLineBreak() + if &lbr == '' + set fo+=t "Autowraps text with textwidth + set fo-=l "Wraps long lines in --insert-- mode + set lbr + else + set fo-=t + set fo+=l + set lbr! + endif +endfunction + +function! ToggleWrap() + if &wrap == '' + set wrap + else + set nowrap + endif +endfunction + +function! ToggleNetrw() "make netrw toggleable + if g:NetrwIsOpen + let i = bufnr("$") + while (i >= 1) + if (getbufvar(i, "&filetype") == "netrw") + silent exe "bwipeout " . i + endif + let i-=1 + endwhile + let g:NetrwIsOpen=0 + else + let g:NetrwIsOpen=1 + silent Lexplore + endif +endfunction +"}}} + +"filetype functions +"------------------{{{ +function BashSettings() + set syntax=sh +endfunction + +function PythonSettings() + xnoremap r :'<,'>:w !python3 +endfunction + +function GoSettings() + set noexpandtab + let g:go_auto_type_info = 1 + let g:go_imports_autosave = 1 +endfunction + +function HtmlSettings() + syntax sync fromstart +endfunction + +function SpellSettings() + setlocal spell +endfunction + +function HalftabSettings() + setlocal ts=2 sts=2 sw=2 expandtab +endfunction +"}}} diff --git a/stow/vim/.vim/keybinds.vim b/stow/vim/.vim/keybinds.vim new file mode 100644 index 0000000..3476138 --- /dev/null +++ b/stow/vim/.vim/keybinds.vim @@ -0,0 +1,65 @@ +"leader key +let mapleader=' ' + +"normal keybinds +"-------------{{{ +"paste and search +nnoremap :let @/ = "" +nnoremap p :set invpaste + +"toggles +nnoremap lb :call ToggleLineBreak() +nnoremap wr :call ToggleWrap() +nnoremap cc :call ToggleColorColumn() + +"dates +nnoremap ts "=strftime("%F %T%z") +nnoremap dt :r !date + +"rc files +nnoremap rc :vsplit $MYVIMRC +nnoremap so :source $MYVIMRC + +"formatting tools +nnoremap =j :%!python -m json.tool +"}}} + +"insert mode +"-----------{{{ +"abbrevations +inoreabbrev #!! "#!/usr/bin/env" +"}}} + +"plugin keybinds +"{{{ +"netrw +nnoremap e :call ToggleNetrw() + +"openbrowser +nmap gx (openbrowser-smart-search) +vmap gx (openbrowser-smart-search) + +"ale +nnoremap at :ALEToggle +nmap af (ale_fix) +nmap aK (ale_hover) +nmap agd (ale_go_to_definition) +nmap agd (ale_go_to_definition) + +"lsp +function! s:on_lsp_buffer_enabled() abort + setlocal omnifunc=lsp#complete + setlocal signcolumn=yes + if exists('+tagfunc') | setlocal tagfunc=lsp#tagfunc | endif + nmap gd (lsp-definition) + nmap gr (lsp-references) + nmap gi (lsp-implementation) + nmap gt (lsp-type-definition) + nmap rn (lsp-rename) + nmap [g (lsp-previous-diagnostic) + nmap ]g (lsp-next-diagnostic) + nmap K (lsp-hover) + nmap lf (lsp-document-format) + nmap lst (lsp-status) +endfunction +"}}} diff --git a/stow/vim/.vim/plugins.vim b/stow/vim/.vim/plugins.vim new file mode 100644 index 0000000..be0a5aa --- /dev/null +++ b/stow/vim/.vim/plugins.vim @@ -0,0 +1,50 @@ +"plugins (vim-plug) +"------------------ +"vim-plug paths +let plugDir = expand("$HOME/.vim/autoload/plug.vim") +let pluginDir = expand("$HOME/.vim/plugged") +let plugRemote = "https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim" + +"ensure vim-plug is installed on VimEnter +if empty(glob(plugDir)) + silent execute "!curl -fLo " . shellescape(expand(plugDir)) . " --create-dirs " . shellescape(plugRemote) + autocmd VimEnter * PlugInstall --sync | source $MYVIMRC +endif + +call plug#begin(pluginDir) + Plug 'junegunn/vim-plug' + " quality of life + "normal mode keybinds + Plug 'tpope/vim-commentary' + Plug 'tpope/vim-surround' + Plug 'tpope/vim-unimpaired' + "command mode keybinds + Plug 'tpope/vim-rsi' + Plug 'tpope/vim-eunuch' + Plug 'tpope/vim-repeat' + "git + Plug 'tpope/vim-fugitive' + + " syntax and colorscheme packs + Plug 'flazz/vim-colorschemes' + Plug 'sheerun/vim-polyglot' + + " linting and lsp + Plug 'w0rp/ale' + " Plug 'prabirshrestha/vim-lsp' + " Plug 'mattn/vim-lsp-settings' + + " extra language plugins + "go + Plug 'fatih/vim-go' + "html + Plug 'mattn/emmet-vim' + + " other useful things + "editorconfig + Plug 'editorconfig/editorconfig-vim' + "browser/url opener + Plug 'tyru/open-browser.vim' + "tables + Plug 'godlygeek/tabular' +call plug#end() diff --git a/stow/vim/.vim/settings.vim b/stow/vim/.vim/settings.vim new file mode 100644 index 0000000..4aa5da0 --- /dev/null +++ b/stow/vim/.vim/settings.vim @@ -0,0 +1,130 @@ +"source system defaults +"----------------------{{{ +if filereadable(expand('$VIMRUNTIME/defaults.vim')) + unlet! g:skip_defaults_vim + source $VIMRUNTIME/defaults.vim +endif +"}}} + +"general settings +"----------------{{{ +"encoding/format +set encoding=utf-8 +set fileformats=unix,dos,mac + +"file/buffer +set autoread +set autowrite +set confirm + +"display +set background=dark +set number +set wrap +set foldmethod=marker +set listchars=tab:→\ ,extends:›,precedes:‹,nbsp:·,space:·,trail:·,eol:¬ +" set list + +"drawing +set lazyredraw +set regexpengine=1 +set redrawtime=10000 + +"tab/indent +set tabstop=4 +set softtabstop=4 +set shiftwidth=4 +set expandtab +set autoindent + +"status bar +set showcmd +set wildmenu +set ruler +set laststatus=2 + +"search +set incsearch +set hlsearch +set ignorecase +set smartcase + +"cursor behaviour +set virtualedit=block +set backspace=indent,eol,start +set showmatch +set scrolloff=2 +set sidescrolloff=4 + +"input/timeout +set esckeys +set timeoutlen=1000 "for mappings +set ttimeoutlen=20 "for keycodes + +"window behaviour (ltr) +set splitbelow +set splitright +"}}} + +"os/gui settings +"---------------{{{ +if has('win32') + let &runtimepath.=",$HOME/.vim" +endif + +if has("gui_running") + set guioptions -=m + set guioptions -=T + if has("gui_gtk2") + set guifont=Inconsolata\ 12 + elseif has("gui_macvim") + set guifont=Menlo\ Regular:h14 + elseif has("gui_win32") + set guifont=Consolas:h10 + " set guifont=Cascadia\ Code:h10 + + "start full-screened + augroup WINGUI + autocmd! GUIEnter * simalt ~x + augroup END + endif +endif +"}}} + +"syntax/filetype/matchit +"-----------------------{{{ +syntax on +filetype plugin indent on +runtime macros/matchit.vim +"}}} + +"file cleanup +"------------{{{ +"swap +let mySwapDir = expand("$HOME/.vim/.swap") +if !isdirectory(mySwapDir) + silent! call mkdir(mySwapDir, "p") +endif +let &directory=mySwapDir + +"undo +if has('persistent_undo') + let myUndoDir = expand("$HOME/.vim/.undo") + if !isdirectory(myUndoDir) + silent! call mkdir(myUndoDir, "p") + endif + let &undodir=myUndoDir + set undofile +endif + +"backup +if has('writebackup') + let myBackupDir = expand("$HOME/.vim/.backup") + if !isdirectory(myBackupDir) + silent! call mkdir(myBackupDir, "p") + endif + let &backupdir=myBackupDir + set backup +endif +"}}} + diff --git a/stow/vim/.vim/vimrc b/stow/vim/.vim/vimrc index 90eb114..edc99ae 100644 --- a/stow/vim/.vim/vimrc +++ b/stow/vim/.vim/vimrc @@ -3,440 +3,10 @@ " \ V /| | | | | | | | | (__ " " \_/ |_|_| |_| |_|_| \___|" -"source system defaults -"{{{ -if filereadable(expand('$VIMRUNTIME/defaults.vim')) - unlet! g:skip_defaults_vim - source $VIMRUNTIME/defaults.vim -endif -"}}} - -"os/gui settings -"{{{ -if has('win32') - let &runtimepath.=",$HOME/.vim" -endif - -if has("gui_running") - set guioptions -=m - set guioptions -=T - if has("gui_gtk2") - set guifont=Inconsolata\ 12 - elseif has("gui_macvim") - set guifont=Menlo\ Regular:h14 - elseif has("gui_win32") - set guifont=Consolas:h10 - " set guifont=Cascadia\ Code:h10 - - "start full-screened - augroup WINGUI - autocmd! GUIEnter * simalt ~x - augroup END - endif -endif -"}}} - -"general settings -"{{{ -"encoding/format -set encoding=utf-8 -set fileformats=unix,dos,mac - -"file/buffer -set autoread -set autowrite -set confirm - -"display -set background=dark -set number -set wrap -set foldmethod=marker -set listchars=tab:→\ ,extends:›,precedes:‹,nbsp:·,space:·,trail:·,eol:¬ -" set list - -"drawing -set lazyredraw -set regexpengine=1 -set redrawtime=10000 - -"tab/indent -set tabstop=4 -set softtabstop=4 -set shiftwidth=4 -set expandtab -set autoindent - -"status bar -set showcmd -set wildmenu -set ruler -set laststatus=2 - -"search -set incsearch -set hlsearch -set ignorecase -set smartcase - -"cursor behaviour -set virtualedit=block -set backspace=indent,eol,start -set showmatch -set scrolloff=2 -set sidescrolloff=4 - -"input/timeout -set esckeys -set timeoutlen=1000 "for mappings -set ttimeoutlen=20 "for keycodes - -"window behaviour (ltr) -set splitbelow -set splitright -"}}} - -"cleanup messy (swap, undo, backup) files created by vim -"{{{ -"swap -let mySwapDir = expand("$HOME/.vim/.swap") -if !isdirectory(mySwapDir) - silent! call mkdir(mySwapDir, "p") -endif -let &directory=mySwapDir - -"undo -if has('persistent_undo') - let myUndoDir = expand("$HOME/.vim/.undo") - if !isdirectory(myUndoDir) - silent! call mkdir(myUndoDir, "p") - endif - let &undodir=myUndoDir - set undofile -endif - -"backup -if has('writebackup') - let myBackupDir = expand("$HOME/.vim/.backup") - if !isdirectory(myBackupDir) - silent! call mkdir(myBackupDir, "p") - endif - let &backupdir=myBackupDir - set backup -endif -"}}} - -"plugins (vim-plug) -"{{{ -"vim-plug paths -let plugDir = expand("$HOME/.vim/autoload/plug.vim") -let pluginDir = expand("$HOME/.vim/plugged") -let plugRemote = "https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim" - -"ensure vim-plug is installed on VimEnter -if empty(glob(plugDir)) - silent execute "!curl -fLo " . shellescape(expand(plugDir)) . " --create-dirs " . shellescape(plugRemote) - autocmd VimEnter * PlugInstall --sync | source $MYVIMRC -endif - -call plug#begin(pluginDir) - Plug 'junegunn/vim-plug' - " quality of life - "normal mode keybinds - Plug 'tpope/vim-commentary' - Plug 'tpope/vim-surround' - Plug 'tpope/vim-unimpaired' - "command mode keybinds - Plug 'tpope/vim-rsi' - Plug 'tpope/vim-eunuch' - Plug 'tpope/vim-repeat' - "git - Plug 'tpope/vim-fugitive' - - " syntax and colorscheme packs - Plug 'flazz/vim-colorschemes' - Plug 'sheerun/vim-polyglot' - - " linting and lsp - Plug 'w0rp/ale' - Plug 'prabirshrestha/vim-lsp' - Plug 'mattn/vim-lsp-settings' - - " extra language plugins - "go - Plug 'fatih/vim-go' - "html - Plug 'mattn/emmet-vim' - - " other useful things - "editorconfig - Plug 'editorconfig/editorconfig-vim' - "browser/url opener - Plug 'tyru/open-browser.vim' - "tables - Plug 'godlygeek/tabular' -call plug#end() -"}}} - -"plugin settings -"{{{ -"netrw -let g:netrw_banner = 0 -let g:netrw_winsize = 24 -let g:netrw_liststyle = 3 -let g:netrw_preview = 1 -let g:netrw_alto = 0 -let g:netrw_usetab = 1 -let g:netrw_browsex_viewer = "xdg-open" -let g:NetrwIsOpen = 0 "for toggle function -let g:netrw_nogx = 1 - -"ale -let g:ale_linters = { -\ 'python': ['flake8'], -\ 'javascript': ['eslint'], -\ 'markdown': ['mdl', 'write-good'] -\} - -let g:ale_fixers = { -\ '*': ['remove_trailing_lines', 'trim_whitespace'], -\ 'python': ['yapf', 'black'], -\ 'javascript': ['prettier', 'eslint'], -\ 'css': ['prettier'], -\ 'html': ['prettier'], -\ 'markdown': ['prettier'] -\} - -let g:ale_sign_error = '->' -let g:ale_sign_warning = '--' -let g:ale_lint_on_save = 1 -let g:ale_fix_on_save_ignore = 1 -highlight clear SignColumn - -"vim-markdown -let g:vim_markdown_folding_disabled = 1 -let g:vim_markdown_no_default_key_mappings = 1 -let g:vim_markdown_toc_autofit = 1 - -"vim-emmet -let g:user_emmet_leader_key = ',' -"}}} - -"syntax/filetype settings (just in case they haven't been set yet) -"{{{ -syntax on -filetype plugin indent on -runtime macros/matchit.vim -"}}} - -"colorschemes -" {{{ -" colorscheme 1989 -" colorscheme PaperColor -" colorscheme gruvbox -" colorscheme jellybeans -" colorscheme molokai -" colorscheme Benokai -" colorscheme Monokai -" colorscheme badwolf -" colorscheme wombat256 -" colorscheme yuejiu -" colorscheme wargrey -" colorscheme Tomorrow-Night-Bright -" colorscheme monokai-phoenix -" }}} - -"custom commands -"{{{ -"common typos and abbreviations -cnoremap w!! w !sudo tee % > /dev/null -command! W w !sudo tee % > /dev/null -command! Trim %s/\s\+$// -command! Q q -command! WQ wq -command! Q1 q! -"}}} - -"keybinds -"{{{ -"leader key -let mapleader=' ' - -"paste and search -nnoremap :let @/ = "" -nnoremap p :set invpaste - -"toggles -nnoremap lb :call ToggleLineBreak() -nnoremap wr :call ToggleWrap() -nnoremap cc :call ToggleColorColumn() - -"dates -nnoremap ts "=strftime("%F %T%z") -nnoremap dt :r !date - -"rc files -nnoremap rc :vsplit $MYVIMRC -nnoremap so :source $MYVIMRC - -"insert mode -inoreabbrev #!! "#!/usr/bin/env" - -"formatting tools -nnoremap =j :%!python -m json.tool -"}}} - -"plugin keybinds -"{{{ -"netrw -nnoremap e :call ToggleNetrw() - -"openbrowser -nmap gx (openbrowser-smart-search) -vmap gx (openbrowser-smart-search) - -"ale -nnoremap at :ALEToggle -nmap af (ale_fix) -nmap aK (ale_hover) -nmap agd (ale_go_to_definition) -nmap agd (ale_go_to_definition) - -"lsp -function! s:on_lsp_buffer_enabled() abort - setlocal omnifunc=lsp#complete - setlocal signcolumn=yes - if exists('+tagfunc') | setlocal tagfunc=lsp#tagfunc | endif - nmap gd (lsp-definition) - nmap gr (lsp-references) - nmap gi (lsp-implementation) - nmap gt (lsp-type-definition) - nmap rn (lsp-rename) - nmap [g (lsp-previous-diagnostic) - nmap ]g (lsp-next-diagnostic) - nmap K (lsp-hover) - nmap lf (lsp-document-format) - nmap lst (lsp-status) -endfunction - -"}}} - -"toggle functions -"{{{ -function! ToggleColorColumn() - if &cc == '' - set cc=80 - else - set cc= - endif -endfunction - -function! ToggleLineBreak() - if &lbr == '' - set fo+=t "Autowraps text with textwidth - set fo-=l "Wraps long lines in --insert-- mode - set lbr - else - set fo-=t - set fo+=l - set lbr! - endif -endfunction - -function! ToggleWrap() - if &wrap == '' - set wrap - else - set nowrap - endif -endfunction - -function! ToggleNetrw() "make netrw toggleable - if g:NetrwIsOpen - let i = bufnr("$") - while (i >= 1) - if (getbufvar(i, "&filetype") == "netrw") - silent exe "bwipeout " . i - endif - let i-=1 - endwhile - let g:NetrwIsOpen=0 - else - let g:NetrwIsOpen=1 - silent Lexplore - endif -endfunction -"}}} - -"filetype functions -"{{{ -function BashSettings() - set syntax=sh -endfunction - -function PythonSettings() - xnoremap r :'<,'>:w !python3 -endfunction - -function GoSettings() - set noexpandtab - let g:go_auto_type_info = 1 - let g:go_imports_autosave = 1 -endfunction - -function HtmlSettings() - syntax sync fromstart -endfunction - -function SpellSettings() - setlocal spell -endfunction - -function HalftabSettings() - setlocal ts=2 sts=2 sw=2 expandtab -endfunction -"}}} - -"autocommands -"{{{ -if has("autocmd") - "global - augroup global - autocmd! - "keep equal proportions when windows resized - autocmd VimResized * wincmd = - "save cursor position in a file - autocmd BufReadPost * if line("'\"") > 1 && line("'\"") - \ <= line("$") | exe "normal! g'\"" | endif - augroup END - - augroup filetype_bash - autocmd! BufNewFile,BufRead *.bash call BashSettings() - augroup END - - augroup filetype_python - autocmd! FileType python call PythonSettings() - augroup END - - augroup filetype_go - autocmd! FileType go call GoSettings() - augroup END - - augroup filetype_html - autocmd! FileType html call HtmlSettings() - augroup END - - augroup filetype_spell - autocmd! FileType markdown call SpellSettings() - augroup END - - augroup filetype_halftab - autocmd! FileType html,javascript,css,json,yaml,sh call HalftabSettings() - augroup END - - augroup lsp_install - autocmd! - autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled() - augroup END -endif -"}}} +source ~/.vim/settings.vim +source ~/.vim/plugins.vim +source ~/.vim/functions.vim +source ~/.vim/commands.vim +source ~/.vim/keybinds.vim +source ~/.vim/colorschemes.vim +source ~/.vim/autocmds.vim