{ 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 = "\2;vim\\\" . &t_ti let &t_te = "\2;". previous_title . "\\\" . &t_te nnoremap :call TmuxOrSplitSwitch('h', 'L') nnoremap :call TmuxOrSplitSwitch('j', 'D') nnoremap :call TmuxOrSplitSwitch('k', 'U') nnoremap :call TmuxOrSplitSwitch('l', 'R') else map h map j map k map 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 ''; }; }