dotfiles/home/features/cli/vim.nix

66 lines
1.8 KiB
Nix

{ 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
'';
};
}