" plugins
packloadall
"syntax
syntax on
" indentation
filetype plugin indent on
"set title
set tabstop=3
set shiftwidth=3
set expandtab
set autoindent
set smartindent
set smarttab
set shm=filmnwxosTIc
" cursor
set guicursor=n-v-c:block,i-ci-ve:ver25,r-cr-o:hor20
set guicursor+=v:hor20-CursorVisual
set laststatus=2
"set statusline=%<%F\ %h%m%r%y%=%-14.(%l,%c%V%)\ %P
" no modeline
set noml
" no show mode
set nosmd
" no ruler
set noru
" searches
set gdefault
set hlsearch
set incsearch
set nowrapscan
set ignorecase
set smartcase " search is case sensitive iff contain uppercase chars
set path+=** " recursive search with :find (provides tab completion for all file related searches)
set mmp=200000 " maxmempattern
" persistent undo
set undofile " Save undos after file closes
set undodir=$HOME/.vim/undo " where to save undo histories
set undolevels=1000 " How many undos
set undoreload=10000 " number of lines to save for undo
" misc
set shm+=Fs
set t_Co=16 " nvim lua sets this to 256
set t_u7=
set swapfile
set writebackup
set nobackup
set directory=$HOME/.vim/swapfiles//
set updatetime=750
set showcmd
set encoding=utf-8
set showmatch
set linebreak
set scrolloff=7
set nowrap
set foldmethod=indent
set foldnestmax=1
set foldminlines=1
set foldlevel=1
set foldtext=
set fillchars+=vert:\|
"set cmdheight=0 " hide cmdline but get Hit Enter prompts
" hidden characters
set list
set listchars=tab:·\ ,trail:·
" wild
set wildmode=longest:full,full
set wildmenu
" exclude newline from v$
set selection=old
" sign column
set scl=yes
" abs + rel line numbers
set nu rnu
" cursor line
set cul
" cul_toggle
function CulOn()
augroup cul_toggle
au!
au InsertEnter,WinLeave,FocusLost * setl nocul
au InsertLeave,WinEnter,FocusGained * setl cul
augroup end
set cul
endfunction
function CulOff()
au! cul_toggle
augroup! cul_toggle
set nocul
endfunction
function CulToggle()
if exists('#cul_toggle')
:silent! call CulOff()
else
:silent! call CulOn()
endif
endfunction
silent! call CulOn()
command Cul call CulToggle()
nnoremap <leader>C :Cul<cr>
" signcolumn toggle
nnoremap <leader>D :let currwin=win_getid() \| windo execute 'setlocal signcolumn=' . (&signcolumn ==# 'no' ? 'auto' : 'no') \| call win_gotoid(currwin) \| redraw! \| echon (&signcolumn ==# 'no' ? 'diffs off' : 'diffs on')<CR>
" numbers_toggle
function NumbersOn()
augroup numbers_toggle
au!
au insertleave,winenter,focusgained * if &buftype !=# 'terminal' | setl nu rnu | endif
au insertenter,winleave,focuslost * if &buftype !=# 'terminal' | setl nu nornu | endif
augroup end
windo set nu rnu
echo "numbers on"
endfunction
function NumbersOff()
au! numbers_toggle
augroup! numbers_toggle
windo set nonu nornu
echo "numbers off"
endfunction
function NumbersToggle()
let currwin=win_getid()
if exists('#numbers_toggle')
:silent! call NumbersOff()
else
:silent! call NumbersOn()
endif
call win_gotoid(currwin)
endfunction
silent! call NumbersOff()
command Numbers call NumbersToggle()
nnoremap <leader>N :Numbers<cr>
" if exists('##TermOpen')
" au TermOpen * setl nonu nornu
" au TermOpen * setl scrolloff=0
" au TermEnter * match IncSearch ""
" endif
" " hide line numbers on Terminal Insert mode
" if exists('##TermOpen')
" au TermOpen * setl scrolloff=0
" au TermOpen * setl nu rnu
" au TermEnter * match IncSearch ""
" au TermEnter * setl nonu nornu
" au TermLeave * setl nu rnu
" endif
" " start :term in insert mode : causes trouble
" if exists('##TermOpen')
" au TermOpen * startinsert
" endif
" terminal normal mode window command on ^w
tnoremap <C-w> <C-\><C-n><C-w>
"tnoremap <esc><esc> <C-\><C-n><C-w><esc>
" vertical shift variations of default commands
nnoremap <C-w>N :vnew<cr>
nnoremap <C-w>S :vsplit<cr>
" open a new terminal window
nnoremap <C-w>t :horizontal :terminal<cr>
nnoremap <C-w>T :vertical :terminal<cr>
nnoremap <C-w><cr> :horizontal :terminal<cr>
nnoremap <C-w><S-cr> :vertical :terminal<cr>
" ^w w goes to previous
nnoremap <C-w>w <C-w>p
nnoremap <C-w><C-w> <C-w>p
" go to previous buffer
nnoremap <leader><tab> :b#<cr>
" infer suffixes on gf, ...
set sua=.js,.hs,.rs,.py,.nim,.go
" auto :noh
" (remapping ESC causes weird behaviour)
nnoremap <leader><space> :noh<cr>
nnoremap <leader><esc> :noh<cr>
nnoremap <esc> :noh<cr>
" hilight current word
nnoremap <leader><leader> #*
" global substitute
nnoremap <leader>s :%s/
" global substitute current selection
vnoremap <leader>s y:%s/<C-r>"/
" hilight current selection
vnoremap <cr> y/<C-r>"<cr>gv<esc>
" disable auto comment
au FileType * set formatoptions-=cro
" neovim: incremental :s
if exists('+inccommand')
set inccommand=nosplit
endif
" default cursors
let &t_SI = "\e[6 q"
let &t_SR = "\e[4 q"
let &t_EI = "\e[2 q"
" change cursor to pipe in insert mode
"au InsertEnter * silent exe "!echo -en \<esc>[6 q"
"au InsertLeave * silent exe "!echo -en \<esc>[2 q"
" block cursor on open
" au VimEnter * silent exe "!echo -en \<esc>[2 q"
" dont display the banner
let g:netrw_banner=0
" start netrw in tree view (iterate: i)
let g:netrw_liststyle=3
" hide dot files on start
"let g:netrw_list_hide='\(^\|\s\s\)\zs\.\s\+'
let g:netrw_list_hide='^\..*'
let g:netrw_hide=0
" auto-size netrw window
let g:netrw_winsize= 16
" close unmodified buffers
au FileType netrw setl bufhidden=delete "or use :qa!
" Y yanks until the end of line
nnoremap Y y$
" go to marked columns
nnoremap ' `
nnoremap ` '
" " vimgrep current word
" nnoremap gK :exe 'lvimgrep /\<'.expand('<cword>').'\>\C/j **/*.'.expand('%:e').' \| lw'<cr>
" vnoremap gK "vy:lvimgrep /\V<C-r>v/j **/* \| lw<cr>
" gp, gP pastes from "0
nnoremap <leader>p "0p
nnoremap <leader>P "0P
vnoremap <leader>p "0p
vnoremap <leader>P "0P
" put delimiters around selection
vnoremap ( c()<esc>Pgvo<esc>
vnoremap ) c(<esc>pa)<esc>
vnoremap g( c( <esc>pa )<esc>'[
vnoremap g) c( <esc>pa )<esc>
" vnoremap " <C-v>c""<esc>P% " prevents yanking to register
vnoremap [ c[]<esc>Pgvo<esc>
vnoremap g[ c[ <esc>pa ]<esc>'[
vnoremap ] c[]<esc>P<esc>
vnoremap g] c[ <esc>pa ]<esc>
"vnoremap { c{}<esc>Pgvo<esc>
"vnoremap g{ c{ <esc>pa }<esc>'[
"vnoremap } c{}<esc>P<esc>
"vnoremap g} c{ <esc>pa }<esc>
vnoremap < <gv
vnoremap > >gv
" move selection up and down with K and J in visual mode
"vnoremap K :m '<-2<cr>gv=gv
"vnoremap J :m '>+1<cr>gv=gv
"vnoremap K k
"vnoremap J j
" no accidental :Windows on :W
command! W w
" no accidental ex mode (use gQ)
nnoremap Q @@
"nnoremap gx <cmd>exec 'new +term\ echo\ -n\ '.escape(expand('<cfile>'), '#').'\ \|\ xclip\ -sel\ clip\ &&\ w3m\ '.escape(expand('<cfile>'), '#')<cr>
"nnoremap gX <cmd>exec '!open '.escape(expand('<cfile>'), '#')<cr>
" remove trailing whitespace on save
function! RemoveTrailingWhitespace()
let l = line(".")
let c = col(".")
%s/\s\+$//e
call cursor(l, c)
endfun
au BufWritePre * call RemoveTrailingWhitespace()
" share system clipboard
set clipboard=unnamedplus
" disable mouse
set mouse=
" aliases in :!commands
let $BASH_ENV = "~/.bash_aliases"
" " autowrite mode
" nnoremap <leader>a :call Autowrite()<cr>
"
" function! Autowrite()
" if exists('#autowrite')
" au! autowrite
" augroup! autowrite
" echo "autowrite off"
" else
" augroup autowrite
" au!
" au TextChanged,InsertLeave <buffer> silent update
" echo "autowrite on"
" augroup end
" endif
" endfunction
colorscheme zero
"set termguicolors
nnoremap <leader>c :set tgc!<cr>
" reveal syntax highlight group
nnoremap <F10> :echo "hi<" . synIDattr(synID(line("."),col("."),1),"name") . '> trans<' . synIDattr(synID(line("."),col("."),0),"name") . "> lo<" . synIDattr(synIDtrans(synID(line("."),col("."),1)),"name") . ">"<cr>
" filetypes
au BufRead,BufNewFile *.sls,*.sch,*sc,*.sps,*sps7 setfiletype scheme
au BufRead,BufNewFile *.sw setfiletype swarm
" abbreviate
au FileType scheme inoreabbrev <buffer> lambda λ