diff options
-rw-r--r-- | nvim-vim9-compat/UltiSnips/markdown.snippets | 3 | ||||
-rw-r--r-- | nvim-vim9-compat/init.vim | 507 |
2 files changed, 510 insertions, 0 deletions
diff --git a/nvim-vim9-compat/UltiSnips/markdown.snippets b/nvim-vim9-compat/UltiSnips/markdown.snippets new file mode 100644 index 0000000..f20bf95 --- /dev/null +++ b/nvim-vim9-compat/UltiSnips/markdown.snippets @@ -0,0 +1,3 @@ +snippet swowdev "Test snippet" +- @~SWOWdev (`date +"%c"`): $0 +endsnippet diff --git a/nvim-vim9-compat/init.vim b/nvim-vim9-compat/init.vim new file mode 100644 index 0000000..ed03e3d --- /dev/null +++ b/nvim-vim9-compat/init.vim @@ -0,0 +1,507 @@ +set nocompatible +syntax on "turn syntax highlighting on +filetype plugin indent on "load plugin and indent files associated a detected filetype + +" macro to go to end of sentence and add a line break (for +" one-line-per-sentence vimming...) +let @s = ")i\<BS>\<CR>\<Esc>" + +" leader +let maplocalleader = "\\" +let mapleader = " " + +" Underline the current line, based on its length. +noremap <silent> <leader>ul mmyypVr-<Esc>`m +" +" Show the 'list' characters. +noremap <silent> <leader>ls :set list!<CR> + +" Remove double- or single-quotes, or graves wrapped around a string. +noremap <silent> <leader>rdq mmF"xf"x`m +noremap <silent> <leader>rsq mmF'xf'x`m +noremap <silent> <leader>rg mmF`xf`x`m + +" Jump up or down by 10 lines. +noremap <silent> J 10j +noremap <silent> K 10k + +" Place timestamps, be it date (YYYY-MM-DD) or time (HH:MM:SS). +if (exists("*strftime")) + noremap <silent> <leader>date "=strftime("%F")<CR>p9h + noremap <silent> <leader>time "=strftime("%X")<CR>p7h +endif +" +" Execute the current line with BASH. +noremap <silent> <leader>rl :.w !bash<CR> + +" Run the current file with PERL, Python, BASH, or a Bourne Shell derivative. +noremap <silent> <leader>rpl :!clear; perl %<CR> +noremap <silent> <leader>rpy :!clear; python %<CR> +noremap <silent> <leader>rb :!clear; bash %<CR> +noremap <silent> <leader>rs :!clear; sh %<CR> + +" essential plugins +call plug#begin() +Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } +Plug 'junegunn/fzf.vim' +Plug 'sheerun/vim-polyglot' +Plug 'jayli/vim-easycomplete' +Plug 'preservim/vim-markdown' +Plug 'mhinz/vim-signify' +Plug 'vim-test/vim-test' +Plug 'ledger/vim-ledger' +Plug 'jlanzarotta/bufexplorer' +Plug 'tpope/vim-fugitive' +Plug 'tpope/vim-dispatch' +Plug 'tpope/vim-commentary' +"Plug 'ycm-core/YouCompleteMe' +Plug 'rose-pine/vim' +Plug 'SirVer/UltiSnips' +Plug 'honza/vim-snippets' +Plug 'dense-analysis/ale' +call plug#end() + +" easycomplete +nnoremap gr :EasyCompleteReference<CR> +nnoremap gd :EasyCompleteGotoDefinition<CR> +nnoremap rn :EasyCompleteRename<CR> +nnoremap gb :BackToOriginalBuffer<CR> + +let g:easycomplete_diagnostics_enable = 1 +let g:easycomplete_signature_enable = 1 +let g:easycomplete_tabnine_enable = 1 +let g:easycomplete_cursor_word_hl = 1 +let g:easycomplete_scheme = "blue" +let g:easycomplete_menu_skin = { + \ "buf": { + \ "kind":"羅", + \ "menu":"[B]", + \ }, + \ "snip": { + \ "kind":"", + \ "menu":"[S]", + \ }, + \ "dict": { + \ "kind":"", + \ "menu":"[D]", + \ }, + \ "tabnine": { + \ "kind":"", + \ }, + \ } +let g:easycomplete_sign_text = { + \ 'error': "", + \ 'warning': "", + \ 'information': '', + \ 'hint': '' + \ } + +let g:easycomplete_filetypes = {"r": { + \ "whitelist": [] + \ }} +let g:easycomplete_tabnine_config = { + \ 'line_limit': 800, + \ 'max_num_result': 10, + \ } + +let g:easycomplete_lsp_type_font = { + \ 'class': "", 'color': "", + \ 'constant': "", 'constructor': "", + \ 'enum': "", 'enummember': "", + \ 'field': "料", 'file': '', + \ 'folder': "", 'function': "ƒ", + \ 'interface': "", 'keyword': "", + \ 'snippet': "", 'struct': "פּ", + \ 'text': "", 'typeparameter': "", + \ 'variable': "", 'module':'', + \ 'event': '', + \ 'r':'', 't':'', + \ 'f':'', 'c':'', + \ 'u':'𝘶', 'e':'𝘦', + \ 's':'פּ', 'v':'', + \ 'i':'𝘪', 'm':'', + \ 'p':'', 'k':'𝘬', + \ 'o':"𝘰", 'd':'𝘥', + \ 'l':"𝘭", 'a':"𝘢", + \ } + +" python +let g:python3_host_prog = '/usr/bin/python3' + +" YCM +let g:ycm_enable_inlay_hints = 1 +nnoremap <silent> <localleader>h <Plug>(YCMToggleInlayHints) +nnoremap gd :YcmCompleter GoToDefinition<CR> +nnoremap <leader>gr :YcmCompleter GoToReferences<CR> +nnoremap K :YcmCompleter GetDoc<CR> +" this will disable tab, allowing it to be used for ultisnips +let g:ycm_key_list_select_completion = ['<C-n>', '<Down>'] +let g:ycm_key_list_previous_completion = ['<C-p>', '<Up>'] + + +" snippets +" Trigger configuration. You need to change this to something other than <tab> if you use one of the following: +" - https://github.com/Valloric/YouCompleteMe +" - https://github.com/nvim-lua/completion-nvim +let g:UltiSnipsExpandTrigger="<tab>" +let g:UltiSnipsJumpForwardTrigger="<c-b>" +let g:UltiSnipsJumpBackwardTrigger="<c-z>" + +" If you want :UltiSnipsEdit to split your window. +let g:UltiSnipsEditSplit="vertical" + +" vim-test +nmap <silent> tn :TestNearest<CR> +nmap <silent> tf :TestFile<CR> +nmap <silent> ts :TestSuite<CR> +nmap <silent> <leader>tl :TestLast<CR> +nmap <silent> <leader>tv :TestVisit<CR> +let test#strategy = "basic" +let test#python#pytest#options = '-q -s' +let test#python#runner = 'pytest' +let test#vimterminal#term_position = "belowright" + +" to run tests automatically +"augroup test +" autocmd! +" autocmd BufWrite * if test#exists() | +" \ TestFile | +" \ endif +"augroup END + +set shell=/bin/sh +set hi=500 +set scrolloff=0 +set novisualbell +set relativenumber "show line numbers +set wildignore=**/__pycache*/** +set wildmenu "enable a menu that shows tab completion options in the status bar +set wildchar=<TAB> +set showmatch "highlights matching brackets on cursor hover +set ruler "show cursor position in status bar +set showcmd "shows the normal mode command before it gets executed +set encoding=utf-8 +set fileformats=unix,dos,mac +set nohlsearch "highlights searches +set incsearch "incremental search (searches character by character) +set ignorecase "ignores the case of a search +set smartcase "only ignores case if there are no capital letters in search (only works after ignorecase has been set) +set tabstop=4 "the amount of spaces that vim will equate to a tab character +set softtabstop=4 "like tabstop, but for editing operations (insert mode) +set splitbelow " split horiz below +set noswapfile +set splitright " split new to the right when doing vertical +set shiftwidth=4 "used for autoindent and << and >> operators in normal mode +set autoindent "copies indent from current line to the next line +set expandtab "tabs will expand to whitespace characters +set ttimeoutlen=20 "timeout for a key code mapping +set timeoutlen=1000 "time(ms) to wait for key mappings +set hidden +set t_Co=256 +"set t_Co=0 - switches off all colours +set path+=** +set more +set colorcolumn=0 +set equalalways +set showmode +set nobackup +set listchars=tab:»→,trail:␣ +if executable('rg') + set grepprg=rg\ --color=never\ --vimgrep +endif + +" From Practical Vim p101 - Easy expansion of Active File Directory +cnoremap <expr> %% getcmdtype() == ':' ? expand('%:h').'/' : '%%' + +" i don't bother with folding, but it's here if i need it. +if has('folding') + set foldmethod=marker + set foldmarker=#\ {{{,#\ }}} + set viewoptions=folds,options,cursor,unix,slash +endif + +" from https://www.reddit.com/r/vim/comments/f5gi2g/vim_notetaking_automatic_link_creation_between/ +" copies a link from file from previous buffer for pasting into +" next buffer with "ap +function! s:copy_filename_as_mdlink() + let fname=expand("%") + let @a="[" . fname . "](./" . fname. ")" +endfunction +autocmd BufLeave * call s:copy_filename_as_mdlink() + +" Ultisnips +let g:UltiSnipsExpandTrigger="<tab>" +let g:UltiSnipsJumpForwardTrigger="<c-j>" +let g:UltiSnipsJumpBackwardTrigger="<c-k>" + +" YouCompleteMe +let g:ycm_python_interpreter_path = '.venv/bin/python3' +let g:ycm_python_sys_path = [] +let g:ycm_extra_conf_vim_data = [ + \ 'g:ycm_python_interpreter_path', + \ 'g:ycm_python_sys_path' + \] +let g:ycm_global_ycm_extra_conf = '~/.global_extra_conf.py' +nnoremap <leader>jd :YcmCompleter GoTo<CR> + +" vim-test +" use vim-dispatch to run tests in the quickfix window +" from Modern Vim Ch.4 +" the mappings below are from vim-test +" https://github.com/vim-test/vim-test +" dispatch opens send test output to quickfix window +let test#strategy = "basic" +let test#python#runner = "pytest" +let test#vim#term_position = "topleft 10" +let test#python#pytest#options = '--tb=short' +let test#go#runner = 'gotest' +"let test#go#gotest#options = '-v' +" To run mypy using vim-dispath -with Dispatch +autocmd FileType python let b:dispatch = 'mypy --ignore-missing-imports' + +" Set wrap option for Markdown files +autocmd FileType markdown setlocal linebreak + +" test +nmap <silent> tn :TestNearest<CR> +nmap <silent> ts :TestSuite<CR> +nmap <silent> tf :TestFile<CR> +nmap <silent> <S-F10> :TestLast<CR> +nmap <silent> t<C-g> :TestVisit<CR> + +" disable folding by default with vim-markdown +let g:vim_markdown_folding_disabled = 1 +" +" ALE ale config +let g:ale_echo_msg_format = '[%linter%] %s [%severity%]' +let g:ale_sign_error = '✘' +let g:ale_sign_warning = '⚠' +let g:ale_lint_on_text_changed = 0 +let g:ale_hover_cursor = 1 +let g:ale_enabled = 1 +let g:ale_sign_column_always = 1 +let g:ale_open_list = 0 +let g:ale_set_highlights = 1 +let g:ale_set_signs = 1 +let g:ale_set_loclist = 1 +let g:ale_set_quickfix = 0 +let g:ale_echo_cursor = 1 +let g:ale_echo_msg_error_str = 'Error' +let g:ale_echo_msg_format = '%linter% - %code: %%s' +let g:ale_loclist_msg_format = '%linter% - %code: %%s' +let g:ale_echo_msg_warning_str = 'Warning' +let g:ale_linters = {'python': ['ruff', 'flake8', 'mypy'], +\ 'ocaml': ['merlin'], +\ 'cpp': ['clang'], +\ 'yaml': ['yamllint'], +\ 'c': ['clang'], +\ 'go': ['gopls', 'golint', 'gofmt'], + \} +let g:ale_fixers = { +\ 'python': ['ruff', 'isort', 'yapf', 'black'], +\ 'go': ['gofmt'], +\ 'rust': ['rustfmt'] +\ } +let g:ale_python_mypy_ignore_invalid_syntax = 1 +let g:ale_python_mypy_executable = 'mypy' +let g:ale_python_mypy_options = '--config-file mypy.ini' +" let g:ale_sign_error = '>>' +let g:ale_fix_on_save = 1 +let g:ale_linters_explicit = 0 + +" Python - keybindings +nnoremap <leader>Ts :setlocal makeprg=pytest\ -q\ %<cr> +nnoremap <leader>Tf :setlocal makeprg=flake8\ %<cr> +nnoremap <leader>Tb :setlocal makeprg=black\ %<cr> +nnoremap <leader>Tm :setlocal makeprg=mypy\ --ignore-missing-imports\ %<cr> +" then run the one set with this... +nnoremap <leader>Tt :make!<cr> + +" clear search highlights +nnoremap <leader><space> :noh<cr>:call clearmatches()<cr> + +" previews in netrw +let g:netrw_preview = 1 + +" journal stuff +autocmd BufNewFile,BufReadPost *.md map <leader>jj <Esc>:r! date +" - \%H:\%M: "<ENTER>kJA<Esc>$<space><Esc> +autocmd BufNewFile,BufReadPost *.md map <leader>jd <Esc>:r! date +"(\%Y-\%m-\%dT\%H:\%M)"<ENTER>i<backspace><space><Esc> + +syntax on "turn syntax highlighting on +filetype plugin indent on "load plugin and indent files associated a detected filetype +runtime macros/matchit.vim "allows jumping between brackets with % in normal mode + +" Go stuff +let g:go_highlight_fields = 1 +let g:go_highlight_functions = 1 +let g:go_highlight_function_calls = 1 +let g:go_highlight_extra_types = 1 +let g:go_highlight_operators = 1 +let g:go_doc_keywordprg_enabled = 1 +let g:go_list_height = 0 +let g:go_highlight_operators = 1 +let g:go_highlight_function_parameters = 1 +let g:go_doc_max_height = 50 +let g:go_doc_popup_window = 1 +let g:go_list_height = 10 + + +" vim-go debugger window settings +let g:go_debug_windows = { + \ 'vars': 'leftabove 40vnew', + \ 'stack': 'leftabove 20new', + \ 'goroutines': 'botright 10new', + \ 'out': 'botright 5new', +\ } + +" vim-go and gopls +let g:go_def_mode='gopls' +let g:go_info_mode='gopls' +let g:go_play_browser_command = 'firefox %URL% &' +let g:go_test_show_name = 1 +let g:go_auto_type_info = 1 +let test#go#runner = 'gotest' +let g:go_term_mode = "split" +let g:go_term_height = 50 +let g:go_highlight_fields = 1 +let g:go_highlight_functions = 1 + +"autocmd FileType go nmap <leader>r :w<CR>:split <bar> terminal go run %<CR> +autocmd FileType go nmap <leader>R :GoRun<CR> +" highlights the variable in the file for you.. +"let g:go_auto_sameids = 1 +" auto import... +let g:go_fmt_command = "goimports" +" automatic type info on cursor +let g:go_auto_type_info = 2 +let g:go_snippet_engine = "ultisnips" +au Filetype go nmap <leader>ga <Plug>(go-alternate-edit) +au Filetype go nmap <leader>gah <Plug>(go-alternate-split) +au Filetype go nmap <leader>gav <Plug>(go-alternate-vertical) +au Filetype go nmap <leader>gaf <Plug>(go-fmt) +au Filetype go nmap <leader>gal <Plug>(go-lint) +au Filetype go nmap <leader>gbx <Plug>(go-deps) +au FileType go nmap <F8> :GoTestFunc -short<cr> +au FileType go nmap <F10> :GoTest -short<cr> +au FileType go nmap <F9> :DlvToggleBreakpoint<CR> +au FileType go nmap <S-F9> :DlvTest<CR> +au FileType go nmap <F11> :DlvDebug<CR> +au FileType go nmap <S-F5> :GoRename<CR> + +" FZF +" This is the default extra key bindings +let g:fzf_action = { + \ 'ctrl-t': 'tab split', + \ 'ctrl-x': 'split', + \ 'ctrl-v': 'vsplit' } + +" - FZF Popup window (center of the screen) +let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6 } } + +" Customize fzf colors to match your color scheme +let g:fzf_colors = +\ { 'fg': ['fg', '#f8f8f2'], + \ 'bg': ['bg', '#282a36'], + \ 'hl': ['fg', '#bd93f9'], + \ 'fg+': ['fg', 'CursorLine', 'CursorColumn', 'Normal'], + \ 'bg+': ['bg', 'CursorLine', 'CursorColumn'], + \ 'hl+': ['fg', 'Statement'], + \ 'info': ['fg', '#ffb86c'], + \ 'prompt': ['fg', '#50fa7b'], + \ 'pointer': ['fg', 'Exception'], + \ 'marker': ['fg', 'Keyword'], + \ 'spinner': ['fg', '#ffb86c'], + \ 'header': ['fg', '#6272a4'] } +" More fzf settings +" (https://github.com/zenbro/dotfiles/blob/master/.nvimrc#L151-L187) + let g:fzf_nvim_statusline = 0 " disable statusline overwriting + + " copy the path of the current file into the system clipboard +"nnoremap <leader>y :let @+=expand('%:p')<CR>:call system("true")<CR>:let @"=@+<CR>:echo "File path copied to clipboard: " . @+<CR> +nnoremap <leader>y :let @*=expand('%:p')<CR>:call system("true")<CR>:let @+=@*<CR>:echo "File path copied to clipboard: " . @+<CR> + +" Alternatively, format is as Markdown link +nnoremap <leader>Y :let @+=printf("[%s](%s)", expand('%:t'), "file://" . expand('%:p'))<CR>:call system("true")<CR>:let @"=@+<CR>:echo "Markdown link copied to clipboard: " . @+<CR> + +" command history is :History: + nnoremap <C-s> :GFiles!<CR> + nnoremap <leader><C-p> :<C-u>FZF!<CR> + nnoremap <leader>t :Files<CR> + nnoremap <leader>o :Tags<CR> + nnoremap <leader>h :History<CR> + nnoremap <silent> <leader>0 :Files<CR> + nnoremap <silent> <leader>; :BLines<CR> + nnoremap <silent> <leader>l :Lines<CR> + nnoremap <silent> <leader>o :BTags<CR> + nnoremap <silent> <leader>bu :Buffers<CR> + nnoremap <silent> <leader>? :History:<CR> + " nnoremap <silent> <leader>/ :execute 'Ag ' . input('Ag/')<CR> + nnoremap <silent> <leader>ft :Filetypes<CR> + nnoremap <silent> <leader>CC :Commands<CR> + imap <C-x><C-f> <plug>(fzf-complete-file-ag) + imap <C-x><C-l> <plug>(fzf-complete-line) + +" ghetto note system +" Go to index of notes +nnoremap <leader>ni :e $NOTES_DIR/index.md<CR>:cd $NOTES_DIR<CR> +" Depends on grepprg being set to rg +command! -nargs=1 Ngrep grep "<args>" -g "*.md" $NOTES_DIR +nnoremap <leader>nn :Ngrep + +" open quicklist vertical +command! Vlist botright vertical copen | vertical resize 50 +nnoremap <leader>v :Vlist<CR> + +" Search with ripgrep +command! -bang -nargs=* Rg + \ call fzf#vim#grep( + \ 'rg --column --line-number --no-heading --color=always --ignore-case '.shellescape(<q-args>), 1, + \ <bang>0 ? fzf#vim#with_preview('up:60%') + \ : fzf#vim#with_preview('right:50%:hidden', '?'), + \ <bang>0) + +nnoremap <C-p>a :Rg + +"" Quick Editing vimrc +nnoremap <leader>ev <C-w>s<C-w>j<C-w>L:e $MYVIMRC<cr> + +syntax enable +let g:solarized_termcolors=256 +let g:gruvbox_termcolors=256 +let g:gruvbox_contrast_dark='hard' +let g:gruvbox_contrast_light='hard' +let g:gruvbox_hls_cursor='orange' +let g:gruvbox_sign_column='bg0' +let g:gruvbox_number_column='bg0' +let g:gruvbox_invert_signs='0' +let g:gruvbox_improved_strings='0' +set background=dark +"colorscheme hipster +colorscheme rose-pine + +" manual highlights +" highlight Visual ctermfg=black ctermbg=LightMagenta +" highlight SignColumn ctermbg=black ctermfg=white +" highlight Comment ctermfg=DarkGray +" highlight DiffAdd term=bold ctermfg=yellow ctermbg=black +" highlight DiffDelete term=bold ctermfg=red ctermbg=black +" highlight DiffChange term=bold ctermfg=black ctermbg=DarkGreen + +augroup general + autocmd! + "keep equal proportions when windows resized + autocmd VimResized * wincmd = + "save cursor position in a file + autocmd BufReadPost * if line("'\"") > 1 && line("'\"") + \ <= line("$") | exe "normal! g'\"" | endif +augroup END + +augroup languages + autocmd! + autocmd BufNewFile,BufRead *.bash set syntax=sh + autocmd FileType python xnoremap <leader>r <esc>:'<,'>:w !python3<CR> + autocmd FileType go set noexpandtab + autocmd FileType html :syntax sync fromstart + autocmd FileType html,javascript,css,json,yaml,sh + \ setlocal ts=2 sts=2 sw=2 expandtab +augroup END |