From 5a49dd95b2243a2feae7c4019238aebdbd31f45f Mon Sep 17 00:00:00 2001 From: David Tomaschik Date: Tue, 10 Feb 2026 13:00:03 -0800 Subject: [PATCH] Refactor --- dotfiles/vim/plugin/hexedit.vim | 40 +++++++++ dotfiles/vimrc | 142 +++++++++----------------------- install.sh | 2 +- 3 files changed, 81 insertions(+), 103 deletions(-) create mode 100644 dotfiles/vim/plugin/hexedit.vim diff --git a/dotfiles/vim/plugin/hexedit.vim b/dotfiles/vim/plugin/hexedit.vim new file mode 100644 index 0000000..cb816cd --- /dev/null +++ b/dotfiles/vim/plugin/hexedit.vim @@ -0,0 +1,40 @@ +" Mediocre Hex editing in vim +" Source: http://vim.wikia.com/wiki/Improved_hex_editing + +command -bar Hexmode call ToggleHex() +function ToggleHex() + " hex mode should be considered a read-only operation + " save values for modified and read-only for restoration later, + " and clear the read-only flag for now + let l:modified=&mod + let l:oldreadonly=&readonly + let &readonly=0 + let l:oldmodifiable=&modifiable + let &modifiable=1 + if !exists("b:editHex") || !b:editHex + " save old options + let b:oldft=&ft + let b:oldbin=&bin + " set new options + setlocal binary " make sure it overrides any textwidth, etc. + let &ft="xxd" + " set status + let b:editHex=1 + " switch to hex editor + %!xxd + else + " restore old options + let &ft=b:oldft + if !b:oldbin + setlocal nobinary + endif + " set status + let b:editHex=0 + " return to normal editing + %!xxd -r + endif + " restore values for modified and read only state + let &mod=l:modified + let &readonly=l:oldreadonly + let &modifiable=l:oldmodifiable +endfunction diff --git a/dotfiles/vimrc b/dotfiles/vimrc index 33dbb18..c75aa7d 100644 --- a/dotfiles/vimrc +++ b/dotfiles/vimrc @@ -9,17 +9,6 @@ if !isdirectory($HOME . '/.cache/vim/swap') silent !mkdir -p ~/.cache/vim/{backup,swap,undo} endif -" vim-plug plugin list -call plug#begin('~/.vim/plugged') - -Plug 'lifepillar/vim-solarized8' -Plug 'tpope/vim-surround' -Plug 'editorconfig/editorconfig-vim' -Plug 'tpope/vim-fugitive' -Plug 'ctrlpvim/ctrlp.vim' - -call plug#end() - " Make sure files get completely written, but don't write backups set nobackup set writebackup @@ -41,6 +30,20 @@ inoremap set number set ruler +" Load vim-plug plugins, if vim-plug is installed + +if !empty(globpath(&rtp, 'autoload/plug.vim')) + call plug#begin('~/.vim/plugged') + Plug 'lifepillar/vim-solarized8' + Plug 'tpope/vim-surround' + Plug 'editorconfig/editorconfig-vim' + Plug 'tpope/vim-fugitive' + Plug 'ctrlpvim/ctrlp.vim' + Plug 'ycm-core/YouCompleteMe', { 'do': './install.py --all' } + Plug 'vim-syntastic/syntastic' + call plug#end() +endif + " Setup viminfo for recording positions, etc. if !has('nvim') set viminfo='10,\"100,:20,%,n~/.viminfo @@ -97,50 +100,8 @@ set smartcase " Optional highlighting nmap hs :set hlsearch! hlsearch? -" Toggle paste mode -nmap :set invpaste:set paste? -imap :set invpaste:set paste? -" Mediocre Hex editing in vim -" Source: http://vim.wikia.com/wiki/Improved_hex_editing -" TODO: move to an include -command -bar Hexmode call ToggleHex() -function ToggleHex() - " hex mode should be considered a read-only operation - " save values for modified and read-only for restoration later, - " and clear the read-only flag for now - let l:modified=&mod - let l:oldreadonly=&readonly - let &readonly=0 - let l:oldmodifiable=&modifiable - let &modifiable=1 - if !exists("b:editHex") || !b:editHex - " save old options - let b:oldft=&ft - let b:oldbin=&bin - " set new options - setlocal binary " make sure it overrides any textwidth, etc. - let &ft="xxd" - " set status - let b:editHex=1 - " switch to hex editor - %!xxd - else - " restore old options - let &ft=b:oldft - if !b:oldbin - setlocal nobinary - endif - " set status - let b:editHex=0 - " return to normal editing - %!xxd -r - endif - " restore values for modified and read only state - let &mod=l:modified - let &readonly=l:oldreadonly - let &modifiable=l:oldmodifiable -endfunction + " Options for syntastic let g:syntastic_enable_signs = 1 @@ -161,44 +122,20 @@ autocmd BufReadPost * " Have F5 run the tests and display errors nnoremap :SyntasticCheck :Errors -" Load vim-ycm if installed on the system level -" Currently only works on debian-based systems... -" It also does not play nicely with virtual envs, so we skip it then -if isdirectory("/usr/share/vim-youcompleteme") && empty($VIRTUAL_ENV) - set runtimepath+=/usr/share/vim-youcompleteme + +" Load vim-ycm if installed and compiled +if filereadable(expand('~/.vim/plugged/YouCompleteMe/python/ycm/ycm_core.so')) + let g:ycm_autoclose_preview_window_after_insertion=1 + " Add rust settings + let g:tmp_rust_path=trim(system("rustc --print sysroot")) + if isdirectory(g:tmp_rust_path) + let g:ycm_rust_toolchain_root=g:tmp_rust_path + endif + unlet! g:tmp_rust_path +else + echom "YCM plugin found but core library is not compiled. Run :PlugInstall or check build dependencies." endif -let g:ycm_autoclose_preview_window_after_insertion=1 -" Add rust settings -let g:tmp_rust_path=trim(system("rustc --print sysroot")) -if isdirectory(g:tmp_rust_path) - let g:ycm_rust_toolchain_root=g:tmp_rust_path -endif -unlet! g:tmp_rust_path -" Enable vim-bracketed-paste mode -" From -" https://github.com/ConradIrwin/vim-bracketed-paste/blob/master/plugin/bracketed-paste.vim -if exists("g:loaded_bracketed_paste") - finish -endif -let g:loaded_bracketed_paste = 1 - -let &t_ti .= "\[?2004h" -let &t_te = "\e[?2004l" . &t_te - -function! XTermPasteBegin(ret) - set pastetoggle= - set paste - return a:ret -endfunction - -execute "set =\[200~" -execute "set =\[201~" -map XTermPasteBegin("i") -imap XTermPasteBegin("") -vmap XTermPasteBegin("c") -cmap -cmap " Include a .vimrc.local if it exists if filereadable(glob("~/.vimrc.local")) @@ -235,20 +172,21 @@ filetype plugin indent on " Disable bell set belloff=all -" Fix trailing whitespace -function! SaveFixSpace() - let l:denylist = ['diff', 'patch', 'mail', 'gitcommit', 'markdown'] - if index(l:denylist, &filetype) != -1 +" Fix trailing whitespace on save +function! StripTrailingWhitespace() + " Don't modify files that are read-only, or certain filetypes + if &readonly || index(['diff', 'patch', 'mail', 'gitcommit', 'markdown'], &filetype) != -1 return endif - let l:save = winsaveview() - " Execute the substitution on the range provided to the command - execute a:firstline . ',' . a:lastline . 's/\s\+$//e' - call winrestview(l:save) + let l:view = winsaveview() + " Using silent! to suppress errors if no matches are found + silent! %s/\s\+$//e + call winrestview(l:view) endfunction -augroup CleanWhitespace + +augroup StripTrailingWhitespaceGroup autocmd! - " This calls the command on the whole file (%) before writing the buffer - autocmd BufWritePre * :FixSpace + autocmd BufWritePre * call StripTrailingWhitespace() augroup END -command! -range=% FixSpace ,call SaveFixSpace() + +command! StripSpace call StripTrailingWhitespace() diff --git a/install.sh b/install.sh index 57a29e4..6169fa6 100755 --- a/install.sh +++ b/install.sh @@ -283,7 +283,7 @@ install_main() { if [[ ! -d "${TPM_DIR}" ]]; then verbose "Installing TPM (Tmux Plugin Manager)..." if have_command git; then - git clone "${TPM_REPO}" "${TPM_DIR}" + git clone --depth 1 "${TPM_REPO}" "${TPM_DIR}" else echo "Error: git not found. Cannot install TPM." >&2 fi