{ pkgs, lib, ... }: { programs.vim = { enable = true; # defaultEditor = true; settings = { background = "dark"; expandtab = true; number = true; shiftwidth = 2; tabstop = 2; }; plugins = with pkgs.vimPlugins; [ nerdcommenter vim-go vim-sensible vim-trailing-whitespace ]; extraConfig = '' " Tmux integration to switch panes with Ctrl+{hkjl} if exists('$TMUX') function! TmuxOrSplitSwitch(wincmd, tmuxdir) let previous_winnr = winnr() silent! execute "wincmd " . a:wincmd if previous_winnr == winnr() call system("tmux select-pane -" . a:tmuxdir) redraw! endif endfunction let previous_title = substitute(system("tmux display-message -p '#{pane_title}'"), '\n', "", "") let &t_ti = "\<Esc>2;vim\<Esc>\\" . &t_ti let &t_te = "\<Esc>2;". previous_title . "\<Esc>\\" . &t_te nnoremap <silent> <C-h> :call TmuxOrSplitSwitch('h', 'L')<cr> nnoremap <silent> <C-j> :call TmuxOrSplitSwitch('j', 'D')<cr> nnoremap <silent> <C-k> :call TmuxOrSplitSwitch('k', 'U')<cr> nnoremap <silent> <C-l> :call TmuxOrSplitSwitch('l', 'R')<cr> else map <C-h> <C-w>h map <C-j> <C-w>j map <C-k> <C-w>k map <C-l> <C-w>l endif " coding preference filetype off filetype plugin indent on syntax on set backspace=indent,eol,start set noautoindent set noswapfile set ruler set showmatch set smarttab set sts=2 let g:NERDSpaceDelims=1 let mapleader="," if has("autocmd") autocmd FileType go set ts=2 sw=2 sts=2 noet nolist autowrite endif ''; }; }