From c9cd7f70af08f2087261facd8fb746e10315c38b Mon Sep 17 00:00:00 2001 From: Greg Hellings Date: Tue, 15 Nov 2022 23:31:05 -0600 Subject: [PATCH] Exteralized vimrc file --- home/vim.nix | 162 +++------------------------------------------------ home/vimrc | 151 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 158 insertions(+), 155 deletions(-) create mode 100644 home/vimrc diff --git a/home/vim.nix b/home/vim.nix index 6b66f96..9e53f1a 100644 --- a/home/vim.nix +++ b/home/vim.nix @@ -22,11 +22,15 @@ let }; in { - programs.vim = { + programs.neovim = { enable = true; + viAlias = true; + vimAlias = true; + vimdiffAlias = true; plugins = with pkgs.vimPlugins; [ ansible-vim bufexplorer + context-vim direnv-vim fzf-vim nerdtree @@ -34,164 +38,12 @@ in vim-flake8 vim-fugitive vim-indent-guides + vim-nix vim-packer vim-rooter vim-xonsh gruvbox - syntastic ]; - settings = { - background = "dark"; - copyindent = true; - expandtab = false; - hidden = true; - ignorecase = true; - mouse = "a"; - number = true; - relativenumber = true; - shiftwidth = 4; - smartcase = true; - tabstop = 4; - }; - extraConfig = '' -syntax enable -set preserveindent -set softtabstop=0 -set nowrap -set showcmd -set cursorline -set lazyredraw -set showmatch -set hlsearch -" Shows non-printing characters -set listchars=tab:→\ ,extends:→,precedes:←,trail:·,eol:¬ -set list - -" Set filetype to the way I want it -let g:nix_recommended_style = 0 - -" Highlights bad whitespace -autocmd ColorScheme * highlight ExtraWhitespace ctermbg=red guibg=red -autocmd BufWinEnter * match ExtraWhitespace /\s\+$/ -autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@ \be -map :NERDTreeToggle -silent !${pkgs.git}/bin/git rev-parse --is-inside-work-tree -if v:shell_error == 0 - map :GFiles --cached --others --exclude-standard - map :GFiles? -else - map :Files -endif -map :Files -" Allows navigating splits -map j -map k -map h -map l - -colorscheme gruvbox - -" ============================================================================ -" User functions to just make life easier -" ============================================================================ -" Toggle absolute line numbers when we don't have focus, and hybrid when -" we do have it -augroup numbertoggle - autocmd! - autocmd BufEnter,FocusGained,InsertLeave * set relativenumber - autocmd BufLeave,FocusLost,InsertEnter * set norelativenumber -augroup END -" syntax highlighting for Vagrantfiles -augroup vagrant - au! - au BufRead,BufNewFile Vagrantfile set filetype=ruby -augroup END -" Creates the directory for a file if it doesn't already exist. -function! s:MkNonExDir(file, buf) - if empty(getbufvar(a:buf, '&buftype')) && a:file!~#'\v^\w+\:\/' - let dir=fnamemodify(a:file, ':h') - if !isdirectory(dir) - call mkdir(dir, 'p') - endif - endif -endfunction -augroup BWCCreateDir - autocmd! - autocmd BufWritePre * :call s:MkNonExDir(expand(''), +expand('')) -augroup END - -" Return indent (all whitespace at start of a line), converted from -" tabs to spaces if what = 1, or from spaces to tabs otherwise. -" When converting to tabs, result has no redundant spaces. -function! Indenting(indent, what, cols) - let spccol = repeat(' ', a:cols) - let result = substitute(a:indent, spccol, '\t', 'g') - let result = substitute(result, ' \+\ze\t', ''', 'g') - if a:what == 1 - let result = substitute(result, '\t', spccol, 'g') - endif - return result -endfunction - -" Convert whitespace used for indenting (before first non-whitespace). -" what = 0 (convert spaces to tabs), or 1 (convert tabs to spaces). -" cols = string with number of columns per tab, or empty to use 'tabstop'. -" The cursor position is restored, but the cursor will be in a different -" column when the number of characters in the indent of the line is changed. -function! IndentConvert(line1, line2, what, cols) - let savepos = getpos('.') - let cols = empty(a:cols) ? &tabstop : a:cols - execute a:line1 . ',' . a:line2 . 's/^\s\+/\=Indenting(submatch(0), a:what, cols)/e' - call histdel('search', -1) - call setpos('.', savepos) -endfunction -command! -nargs=? -range=% Space2Tab call IndentConvert(,,0,) -command! -nargs=? -range=% Tab2Space call IndentConvert(,,1,) -command! -nargs=? -range=% RetabIndent call IndentConvert(,,&et,) - - -""""""""" -""" Unused, but kept in case I end up on a system where I can't use my preferred plugins -""""""""" - - - -" Base of search is ordered as -" r - searching up from here to the nearest marker (.git, .hg, .svn, etc) -" a - dir of current file, unless that's a subdirectory of CWD -" c - dir of current file -let g:ctrlp_working_path_mode = 'arc' -let g:ctrlp_switch_buffer = 0 -let g:ctrlp_cmd = 'CtrlPMixed' -let g:ctrlp_show_hidden = 1 -let g:ctrlp_user_command = { - \'types': { - \1: ['.git', '${pkgs.git}/bin/git ls-files --cached --exclude-standard --others' ], - \}, - \'fallback': '${pkgs.findutils}/bin/find . -type f | ${pkgs.gnugrep}/bin/grep -v -e "\.tox/" -e "\.git/"', -\} -" let g:ctrpl_match_func = { 'match': 'pymatcher#PyMatch' } -" map :CtrlP -''; + extraConfig = builtins.readFile ./vimrc; }; } diff --git a/home/vimrc b/home/vimrc new file mode 100644 index 0000000..5d93230 --- /dev/null +++ b/home/vimrc @@ -0,0 +1,151 @@ +set background=dark +set copyindent +set noexpandtab +set hidden +set ignorecase +set mouse="a" +set number +set relativenumber +set shiftwidth=4 +set smartcase +set tabstop=4 + +syntax enable +set preserveindent +set softtabstop=0 +set nowrap +set showcmd +set cursorline +set lazyredraw +set showmatch +set hlsearch +" Shows non-printing characters +set listchars=tab:→\ ,extends:→,precedes:←,trail:·,eol:¬ +set list + +" Set filetype to the way I want it +let g:nix_recommended_style = 0 + +" Highlights bad whitespace +autocmd ColorScheme * highlight ExtraWhitespace ctermbg=red guibg=red +autocmd BufWinEnter * match ExtraWhitespace /\s\+$/ +autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@ \be +map :NERDTreeToggle +silent !${pkgs.git}/bin/git rev-parse --is-inside-work-tree +if v:shell_error == 0 + map :GFiles --cached --others --exclude-standard + map :GFiles? +else + map :Files +endif +map :Files +" Allows navigating splits +map j +map k +map h +map l + +colorscheme gruvbox + +" ============================================================================ +" User functions to just make life easier +" ============================================================================ +" Toggle absolute line numbers when we don't have focus, and hybrid when +" we do have it +augroup numbertoggle + autocmd! + autocmd BufEnter,FocusGained,InsertLeave * set relativenumber + autocmd BufLeave,FocusLost,InsertEnter * set norelativenumber +augroup END +" syntax highlighting for Vagrantfiles +augroup vagrant + au! + au BufRead,BufNewFile Vagrantfile set filetype=ruby +augroup END +" Creates the directory for a file if it doesn't already exist. +function! s:MkNonExDir(file, buf) + if empty(getbufvar(a:buf, '&buftype')) && a:file!~#'\v^\w+\:\/' + let dir=fnamemodify(a:file, ':h') + if !isdirectory(dir) + call mkdir(dir, 'p') + endif + endif +endfunction +augroup BWCCreateDir + autocmd! + autocmd BufWritePre * :call s:MkNonExDir(expand(''), +expand('')) +augroup END + +" Return indent (all whitespace at start of a line), converted from +" tabs to spaces if what = 1, or from spaces to tabs otherwise. +" When converting to tabs, result has no redundant spaces. +function! Indenting(indent, what, cols) + let spccol = repeat(' ', a:cols) + let result = substitute(a:indent, spccol, '\t', 'g') + let result = substitute(result, ' \+\ze\t', ''', 'g') + if a:what == 1 + let result = substitute(result, '\t', spccol, 'g') + endif + return result +endfunction + +" Convert whitespace used for indenting (before first non-whitespace). +" what = 0 (convert spaces to tabs), or 1 (convert tabs to spaces). +" cols = string with number of columns per tab, or empty to use 'tabstop'. +" The cursor position is restored, but the cursor will be in a different +" column when the number of characters in the indent of the line is changed. +function! IndentConvert(line1, line2, what, cols) + let savepos = getpos('.') + let cols = empty(a:cols) ? &tabstop : a:cols + execute a:line1 . ',' . a:line2 . 's/^\s\+/\=Indenting(submatch(0), a:what, cols)/e' + call histdel('search', -1) + call setpos('.', savepos) +endfunction +command! -nargs=? -range=% Space2Tab call IndentConvert(,,0,) +command! -nargs=? -range=% Tab2Space call IndentConvert(,,1,) +command! -nargs=? -range=% RetabIndent call IndentConvert(,,&et,) + + +""""""""" +""" Unused, but kept in case I end up on a system where I can't use my preferred plugins +""""""""" + + + +" Base of search is ordered as +" r - searching up from here to the nearest marker (.git, .hg, .svn, etc) +" a - dir of current file, unless that's a subdirectory of CWD +" c - dir of current file +let g:ctrlp_working_path_mode = 'arc' +let g:ctrlp_switch_buffer = 0 +let g:ctrlp_cmd = 'CtrlPMixed' +let g:ctrlp_show_hidden = 1 +let g:ctrlp_user_command = { + \'types': { + \1: ['.git', '${pkgs.git}/bin/git ls-files --cached --exclude-standard --others' ], + \}, + \'fallback': '${pkgs.findutils}/bin/find . -type f | ${pkgs.gnugrep}/bin/grep -v -e "\.tox/" -e "\.git/"', +\} +" let g:ctrpl_match_func = { 'match': 'pymatcher#PyMatch' } +" map :CtrlP +