From 79ad1e633c4e84791eead8923c46788eb2ed4eac Mon Sep 17 00:00:00 2001 From: Matthew Lemon Date: Wed, 19 Apr 2023 10:20:09 +0100 Subject: Trying a vimrc-based neovim set up This has to be symlinked from ~/.config/nvim. This is a non-lua-based configuration. --- nvim-vim9-compat/init.vim | 507 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 507 insertions(+) create mode 100644 nvim-vim9-compat/init.vim (limited to 'nvim-vim9-compat/init.vim') 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\\\" + +" leader +let maplocalleader = "\\" +let mapleader = " " + +" Underline the current line, based on its length. +noremap ul mmyypVr-`m +" +" Show the 'list' characters. +noremap ls :set list! + +" Remove double- or single-quotes, or graves wrapped around a string. +noremap rdq mmF"xf"x`m +noremap rsq mmF'xf'x`m +noremap rg mmF`xf`x`m + +" Jump up or down by 10 lines. +noremap J 10j +noremap K 10k + +" Place timestamps, be it date (YYYY-MM-DD) or time (HH:MM:SS). +if (exists("*strftime")) + noremap date "=strftime("%F")p9h + noremap time "=strftime("%X")p7h +endif +" +" Execute the current line with BASH. +noremap rl :.w !bash + +" Run the current file with PERL, Python, BASH, or a Bourne Shell derivative. +noremap rpl :!clear; perl % +noremap rpy :!clear; python % +noremap rb :!clear; bash % +noremap rs :!clear; sh % + +" 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 +nnoremap gd :EasyCompleteGotoDefinition +nnoremap rn :EasyCompleteRename +nnoremap gb :BackToOriginalBuffer + +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 h (YCMToggleInlayHints) +nnoremap gd :YcmCompleter GoToDefinition +nnoremap gr :YcmCompleter GoToReferences +nnoremap K :YcmCompleter GetDoc +" this will disable tab, allowing it to be used for ultisnips +let g:ycm_key_list_select_completion = ['', ''] +let g:ycm_key_list_previous_completion = ['', ''] + + +" snippets +" Trigger configuration. You need to change this to something other than if you use one of the following: +" - https://github.com/Valloric/YouCompleteMe +" - https://github.com/nvim-lua/completion-nvim +let g:UltiSnipsExpandTrigger="" +let g:UltiSnipsJumpForwardTrigger="" +let g:UltiSnipsJumpBackwardTrigger="" + +" If you want :UltiSnipsEdit to split your window. +let g:UltiSnipsEditSplit="vertical" + +" vim-test +nmap tn :TestNearest +nmap tf :TestFile +nmap ts :TestSuite +nmap tl :TestLast +nmap tv :TestVisit +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= +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 %% 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="" +let g:UltiSnipsJumpForwardTrigger="" +let g:UltiSnipsJumpBackwardTrigger="" + +" 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 jd :YcmCompleter GoTo + +" 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 tn :TestNearest +nmap ts :TestSuite +nmap tf :TestFile +nmap :TestLast +nmap t :TestVisit + +" 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 Ts :setlocal makeprg=pytest\ -q\ % +nnoremap Tf :setlocal makeprg=flake8\ % +nnoremap Tb :setlocal makeprg=black\ % +nnoremap Tm :setlocal makeprg=mypy\ --ignore-missing-imports\ % +" then run the one set with this... +nnoremap Tt :make! + +" clear search highlights +nnoremap :noh:call clearmatches() + +" previews in netrw +let g:netrw_preview = 1 + +" journal stuff +autocmd BufNewFile,BufReadPost *.md map jj :r! date +" - \%H:\%M: "kJA$ +autocmd BufNewFile,BufReadPost *.md map jd :r! date +"(\%Y-\%m-\%dT\%H:\%M)"i + +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 r :w:split terminal go run % +autocmd FileType go nmap R :GoRun +" 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 ga (go-alternate-edit) +au Filetype go nmap gah (go-alternate-split) +au Filetype go nmap gav (go-alternate-vertical) +au Filetype go nmap gaf (go-fmt) +au Filetype go nmap gal (go-lint) +au Filetype go nmap gbx (go-deps) +au FileType go nmap :GoTestFunc -short +au FileType go nmap :GoTest -short +au FileType go nmap :DlvToggleBreakpoint +au FileType go nmap :DlvTest +au FileType go nmap :DlvDebug +au FileType go nmap :GoRename + +" 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 y :let @+=expand('%:p'):call system("true"):let @"=@+:echo "File path copied to clipboard: " . @+ +nnoremap y :let @*=expand('%:p'):call system("true"):let @+=@*:echo "File path copied to clipboard: " . @+ + +" Alternatively, format is as Markdown link +nnoremap Y :let @+=printf("[%s](%s)", expand('%:t'), "file://" . expand('%:p')):call system("true"):let @"=@+:echo "Markdown link copied to clipboard: " . @+ + +" command history is :History: + nnoremap :GFiles! + nnoremap :FZF! + nnoremap t :Files + nnoremap o :Tags + nnoremap h :History + nnoremap 0 :Files + nnoremap ; :BLines + nnoremap l :Lines + nnoremap o :BTags + nnoremap bu :Buffers + nnoremap ? :History: + " nnoremap / :execute 'Ag ' . input('Ag/') + nnoremap ft :Filetypes + nnoremap CC :Commands + imap (fzf-complete-file-ag) + imap (fzf-complete-line) + +" ghetto note system +" Go to index of notes +nnoremap ni :e $NOTES_DIR/index.md:cd $NOTES_DIR +" Depends on grepprg being set to rg +command! -nargs=1 Ngrep grep "" -g "*.md" $NOTES_DIR +nnoremap nn :Ngrep + +" open quicklist vertical +command! Vlist botright vertical copen | vertical resize 50 +nnoremap v :Vlist + +" Search with ripgrep +command! -bang -nargs=* Rg + \ call fzf#vim#grep( + \ 'rg --column --line-number --no-heading --color=always --ignore-case '.shellescape(), 1, + \ 0 ? fzf#vim#with_preview('up:60%') + \ : fzf#vim#with_preview('right:50%:hidden', '?'), + \ 0) + +nnoremap a :Rg + +"" Quick Editing vimrc +nnoremap ev sjL:e $MYVIMRC + +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 r :'<,'>:w !python3 + 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 -- cgit v1.2.3