305 lines
6.6 KiB
VimL
305 lines
6.6 KiB
VimL
vim9script
|
|
|
|
source $VIMRUNTIME/defaults.vim
|
|
set scrolloff=0
|
|
|
|
set hlsearch
|
|
|
|
set directory=~/.vim/swapfiles
|
|
|
|
set undofile
|
|
set undodir=~/.vim/undofiles
|
|
|
|
set ignorecase smartcase
|
|
set smartindent
|
|
|
|
set autoindent
|
|
set shiftwidth=4
|
|
set tabstop=4
|
|
set expandtab smarttab
|
|
|
|
set nowrap
|
|
set relativenumber number
|
|
|
|
set viminfofile=~/.vim/viminfo
|
|
set omnifunc=syntaxcomplete#Complete
|
|
|
|
set nrformats+=unsigned
|
|
|
|
set diffopt+=indent-heuristic
|
|
set diffopt+=algorithm:histogram
|
|
|
|
# Not working in ubuntu
|
|
# set diffopt+=linematch:40
|
|
|
|
# Avoids delay in loading signcolumn/foldcolumn later
|
|
set signcolumn=yes
|
|
set foldcolumn=1
|
|
|
|
autocmd Filetype man setlocal signcolumn=no
|
|
|
|
set ttymouse=sgr
|
|
|
|
set termguicolors
|
|
|
|
#" colorscheme stuff{{{
|
|
|
|
# https://vim.fandom.com/wiki/256_colors_in_vim
|
|
# set t_Co=256
|
|
|
|
# https://github.com/crusoexia/vim-monokai
|
|
if 0
|
|
silent! colorscheme monokai
|
|
else
|
|
set background=dark
|
|
g:everforest_background = 'hard'
|
|
g:everforest_better_performance = 1
|
|
colorscheme everforest
|
|
endif
|
|
|
|
#" }}}
|
|
|
|
set wildmode=longest,list,full # https://stackoverflow.com/q/526858
|
|
|
|
if exists("&smoothscroll")
|
|
set smoothscroll
|
|
endif
|
|
|
|
set splitkeep=screen
|
|
|
|
packadd! cfilter
|
|
packadd! matchit
|
|
|
|
#" isfname {{{
|
|
# https://vim.fandom.com/wiki/Open_file_under_cursor
|
|
# Removes '=' from filename chars. This allows paths to be opened with 'gf'
|
|
# when assigned to a shell variable. E.g. FOO=/tmp/foo
|
|
|
|
set isfname-==
|
|
#" }}}
|
|
|
|
set laststatus=2 # always show status bar
|
|
|
|
set virtualedit=block
|
|
|
|
set updatetime=100 # For gitgutter to refresh quickly
|
|
set autowrite
|
|
set autoread
|
|
|
|
g:gitgutter_preview_win_floating = 1
|
|
g:link_heading = ""
|
|
|
|
set splitbelow splitright
|
|
|
|
g:mapleader = ' '
|
|
|
|
autocmd Filetype gitcommit setlocal spell
|
|
|
|
# Use mouse in normal mode only
|
|
set mouse=n
|
|
|
|
nnoremap <Leader>n :cnext<CR>
|
|
nnoremap <Leader>m :cprevious<CR>
|
|
|
|
g:fzf_command_prefix = 'Fz'
|
|
|
|
nnoremap <Leader>f :FzFiles<CR>
|
|
nnoremap <Leader>g :FzGFiles<CR>
|
|
nnoremap <Leader>b :FzBuffers<CR>
|
|
|
|
command -nargs=1 -complete=dir Tp :tabedit | :tcd <args> | :FzFiles
|
|
|
|
set modeline # Debian default is off
|
|
|
|
set history=1000
|
|
|
|
# The following to save the file as root {{{
|
|
# :w !sudo tee %
|
|
|
|
cnoremap w!! w !sudo tee % > /dev/null
|
|
|
|
# }}}
|
|
|
|
set dictionary=/usr/share/dict/words
|
|
|
|
# Remove "You discovered the command-line window" message {{{
|
|
# $VIMRUNTIME/defaults.vim:123
|
|
autocmd! vimHints
|
|
# }}}
|
|
|
|
# https://stackoverflow.com/a/6728687
|
|
# "vert copen" no longer works, use Ctrl W L to move to vertical split
|
|
autocmd filetype qf wincmd J
|
|
|
|
# TODO: Figure out how to check if that plugin is active
|
|
# vim-markdown plugin conceals clutter in markdown and folds sections
|
|
autocmd filetype markdown setlocal spell conceallevel=2
|
|
autocmd filetype markdown norm zR
|
|
|
|
autocmd filetype sh,bash setlocal autoindent noexpandtab tabstop=2 shiftwidth=4
|
|
autocmd filetype html setlocal shiftwidth=2 tabstop=2
|
|
|
|
g:lightline = {
|
|
active: {
|
|
left: [ [ 'mode', 'paste' ], [ 'readonly', 'relativepath', 'modified' ] ],
|
|
},
|
|
inactive: {
|
|
left: [ [ 'readonly', 'relativepath', 'modified' ] ],
|
|
}
|
|
}
|
|
|
|
command -bang -range=% -nargs=* Sortc :<line1>,<line2>sort<bang> <args> /\%.v/
|
|
|
|
command GitBlameLine {
|
|
printf("git blame -L %s,%s %s", line('.'), line('.'), expand('%'))
|
|
->system()
|
|
->substitute("^\^", "", "")
|
|
->printf("git log --stat -1 %.8s")
|
|
->systemlist()
|
|
->popup_atcursor({ "padding": [0, 1, 1, 1] })
|
|
->winbufnr()->((bnr) => setbufvar(bnr, '&filetype', 'git'))()
|
|
}
|
|
nnoremap <silent><leader>hb :GitBlameLine<CR>
|
|
|
|
def ToggleMouse()
|
|
if &mouse == "n"
|
|
set mouse=
|
|
popup_notification("Mouse OFF", {})
|
|
else
|
|
set mouse=n
|
|
popup_notification("Mouse ON", {})
|
|
endif
|
|
enddef
|
|
|
|
nnoremap <silent><leader>om :call <SID>ToggleMouse()<CR>
|
|
|
|
vnoremap G 10000j
|
|
|
|
|
|
def AllClear()
|
|
cclose
|
|
lclose
|
|
pclose
|
|
helpclose
|
|
popup_clear()
|
|
silent! bd goterm://*
|
|
enddef
|
|
|
|
nnoremap <silent><leader>c :call <SID>AllClear()<CR>
|
|
|
|
def g:Tapi_TabOpen(bufnum: number, fname: string)
|
|
execute "tab drop" fname
|
|
enddef
|
|
|
|
def SendRangeToTerminal(start_line: number, end_line: number, _ = 0)
|
|
const terms = term_list()
|
|
if terms->empty()
|
|
echomsg "No Terminal windows found"
|
|
return
|
|
endif
|
|
var line_num = start_line
|
|
for line in getline(start_line, end_line)
|
|
line_num += 1
|
|
const spl_cmd = line->matchlist('\vVIMST (sleep|ctrl) ([0-9]+|[a-z])?')
|
|
if !spl_cmd->empty()
|
|
const [_, cmd, arg1; _] = spl_cmd
|
|
if cmd == "sleep"
|
|
timer_start(arg1->str2nr(), funcref('SendRangeToTerminal', [line_num, end_line]))
|
|
return
|
|
elseif cmd == "ctrl"
|
|
terms[0]->term_sendkeys(nr2char(arg1->char2nr() - 96))
|
|
continue
|
|
endif
|
|
endif
|
|
terms[0]->term_sendkeys(line .. "\<CR>")
|
|
endfor
|
|
enddef
|
|
|
|
command -range -bar SendToTerm :call <SID>SendRangeToTerminal(<line1>, <line2>)
|
|
vnoremap <silent><leader>s :SendToTerm<CR>
|
|
nnoremap <silent><leader>s :SendToTerm<CR>
|
|
|
|
command -range=% -nargs=? -bang Tb {
|
|
if "<bang>" == "!"
|
|
:<line1>,<line2>s/\v"[^"]*"/\=substitute(submatch(0), " ", "•", "g")/ge
|
|
endif
|
|
if "<args>" == ""
|
|
:<line1>,<line2>!column -t
|
|
else
|
|
:<line1>,<line2>!column -t -s'<args>'
|
|
endif
|
|
if "<bang>" == "!"
|
|
:<line1>,<line2>s/•/ /ge
|
|
endif
|
|
}
|
|
|
|
command -nargs=* -complete=option ModeLine {
|
|
if "<args>" == ""
|
|
keeppatterns :%s/\%$/\r\r# vim: set filetype=bash foldmethod=marker:/
|
|
else
|
|
keeppatterns :%s/\%$/\r\r# vim: set <args>:/
|
|
endif
|
|
}
|
|
|
|
# Custom text objects
|
|
|
|
xnoremap <silent> i/ T/ot/
|
|
onoremap <silent> i/ :normal vi/<CR>
|
|
|
|
xnoremap <silent> i, T,ot,
|
|
onoremap <silent> i, :normal vi,<CR>
|
|
|
|
xnoremap <silent> il ^og_
|
|
onoremap <silent> il :normal vil<CR>
|
|
|
|
# Recent vim removed this mapping
|
|
#
|
|
autocmd Filetype man nnoremap <buffer> <silent> q :q<CR>
|
|
|
|
command RemoveTrailingSpaces keeppatterns :%s/\v +$//ge
|
|
|
|
command -range TmuxSend {
|
|
for l in getline(<line1>, <line2>)
|
|
l->printf("%s \r")
|
|
->str2list()
|
|
->reduce( (s, c) => printf("%s %x", s, c), "")
|
|
->printf("tmux send -Ht .! %s")
|
|
->system()
|
|
endfor
|
|
}
|
|
|
|
command DateUp keeppatterns s/Last run \zs.*EDT/\=system("date")->trim()/
|
|
|
|
command -bar LineUp keeppatterns %s/Bala here at \zs[^\"']*\ze[\"']/\=$'{expand("%")}:{line(".")}'/e
|
|
|
|
# shfmt {{{
|
|
|
|
def ShFmt()
|
|
const win_view = winsaveview()
|
|
:%!shfmt
|
|
winrestview(win_view)
|
|
enddef
|
|
|
|
augroup ShFmtAG
|
|
augroup END
|
|
|
|
command EnableShFmt {
|
|
autocmd! ShFmtAG BufWrite <buffer> call ShFmt()
|
|
}
|
|
|
|
command DisableShFmt {
|
|
autocmd! ShFmtAG BufWrite <buffer>
|
|
}
|
|
|
|
# }}}
|
|
|
|
## nvim defaults
|
|
|
|
set nojoinspaces
|
|
set define=
|
|
set sidescroll=1
|
|
|
|
defcompile
|
|
|
|
# vim: set fdm=marker:
|