diff options
Diffstat (limited to 'vim/vimrc-full-config-left-may30_24')
-rw-r--r-- | vim/vimrc-full-config-left-may30_24 | 475 |
1 files changed, 475 insertions, 0 deletions
diff --git a/vim/vimrc-full-config-left-may30_24 b/vim/vimrc-full-config-left-may30_24 new file mode 100644 index 0000000..6100b50 --- /dev/null +++ b/vim/vimrc-full-config-left-may30_24 @@ -0,0 +1,475 @@ +" Setup {{{ +set nocompatible +filetype indent on +filetype plugin on +" syntax on +runtime macros/matchit.vim "allows jumping between brackets with % in normal mode +" }}} +" Leaders {{{ +let maplocalleader = "\\" +let mapleader = "," +nnoremap <silent> <leader>idate :.!date +"\%F"<CR>Ea<space> +nnoremap <leader>q :call TaskWarriorAddCurrentLine()<CR> +" nnoremap <C-h> :tabprevious<cr> +" nnoremap <C-l> :tabnext<cr> +" switch between tabs.... +nnoremap <tab> gt +" pandoc command to generate weekly plan page in Firefox (or not, if we just +" wish to refresh) +nnoremap <leader>w :!pandoc /home/lemon/Documents/Notes/MOD/Projects/weekly_planning.md --css /home/lemon/.local/share/pandoc/templates/mystyles.css -s -o /tmp/toss.html; firefox /tmp/toss.html &<cr> +nnoremap <leader>W :!pandoc /home/lemon/Documents/Notes/MOD/Projects/weekly_planning.md --css /home/lemon/.local/share/pandoc/templates/mystyles.css -s -o /tmp/toss.html<cr> +" Open vimrc +nnoremap <leader>ev <C-w>s<C-w>j<C-w>L:e $HOME/.vim/vimrc<cr> +" 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 + +" 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 +" Generate ctags for current working directory +nnoremap <leader>tt :silent !ctags -R . <CR>:redraw!<CR> +" notes stuff - from https://www.edwinwenink.xyz/posts/43-notes_tagging/ +" Go to index of notes and set working directory to my notes +nnoremap <leader>ni :e $NOTES_DIR/index.md<CR>:cd $NOTES_DIR<CR> +" related to https://oleksii.shmalko.com/2014/using-vim-as-c-cpp-ide/ +" to enable putting a config file in the proejct directory +" clear search highlights +nnoremap <leader><space> :noh<cr>:call clearmatches()<cr> +nnoremap <leader><C-p> :<C-u>FZF!<CR> +nnoremap <C-p>g :Files<CR> +nnoremap <C-p>p :GitFiles<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 <C-p>b :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> +" Open quickfix list in a right vertical split (good for Ngrep results) +command! Vlist botright vertical copen | vertical resize 50 +nnoremap <leader>v : Vlist<CR> +" }}} +" Options {{{ +set clipboard=unnamed,unnamedplus " just past in with out needing "* +set autoread +set exrc +set nocuc +set secure +set scrolloff=1 +set history=799 +set encoding=utf-8 +set wrap +set wrapmargin=0 +set wildignore=**/__pycache*/** +set wildoptions=pum +set wildmenu +set wildchar=<TAB> +set showmatch +set ruler +set showcmd +set nohlsearch +set incsearch +set ignorecase +set smartindent +set smartcase +set tabstop=4 +set softtabstop=4 +set shiftwidth=4 +set splitbelow +set noswapfile +set nobackup +set splitright +set autoindent +set expandtab +set hidden +set path+=** +" set relativenumber +set number +set more +set signcolumn=number +set colorcolumn=0 +set equalalways +set showmode +set nolist +set listchars=tab:»-,trail:␣,leadmultispace:---+,eol:\\U000021b5 +set shortmess+=c +set tags+=./tags +set background=dark +set completeopt=menuone,longest +" }}} +" Function to allow adding a line of text to taskwarrior {{{ +function! TaskWarriorAddCurrentLine() + let current_line = getline('.') + silent execute ":!task add " . shellescape(current_line) + redraw! + echo "Task added: " . current_line + delete +endfunction +" }}} +" Folding {{{ +if has('folding') + set foldmethod=marker " default + " set foldmethod=syntax +" set foldmarker=#\ {{{,#\ }}} + set viewoptions=folds,options,cursor,unix,slash +endif +" disable folding by default with vim-markdown +let g:vim_markdown_folding_disabled = 1 +" }}} +" Remaps {{{ +let @x = 'o- [ ] ' +noremap <silent> J 10j +noremap <silent> K 10k +" macro to go to end of sentence and add a line break (for +" one-line-per-sentence vimming...) +let @s = ")i\<BS>\<CR>\<Esc>" +" remap :W to :w - :W was previous Windows in fzf +command! W w +" Open Fern with Ctrl-N +nnoremap <C-n> :Fern -drawer .<CR> <C-w>l +" }}} +" Plugins {{{ +call plug#begin() +"Plug 'vim-scripts/AutoComplPop' +Plug 'mattn/emmet-vim', +Plug 'lambdalisue/fern.vim', +Plug 'tpope/vim-rails', +" Plug 'ycm-core/YouCompleteMe' +Plug 'vim-ruby/vim-ruby', +Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } +Plug 'junegunn/fzf.vim' +Plug 'ayu-theme/ayu-vim' +Plug 'airblade/vim-tailwind' +Plug 'vim-perl/vim-perl', { 'for': 'perl', 'do': 'make clean carp dancer highlight-all-pragmas moose test-more try-tiny' } +Plug 'morhetz/gruvbox' +Plug 'eemed/sitruuna.vim' +" Plug 'sheerun/vim-polyglot' +Plug 'preservim/vim-markdown' +Plug 'mhinz/vim-signify' +Plug 'vim-test/vim-test' +Plug 'ledger/vim-ledger' +Plug 'fatih/vim-go', {'do': ':GoUpdateBinaries' } +Plug 'tpope/vim-dispatch' +Plug 'tpope/vim-surround' +Plug 'tpope/vim-commentary' +Plug 'tpope/vim-unimpaired' +Plug 'tpope/vim-fugitive' +Plug 'SirVer/UltiSnips' +Plug 'honza/vim-snippets' +Plug 'dense-analysis/ale' +call plug#end() +" }}} +" 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="<S-t>" +" let g:UltiSnipsJumpForwardTrigger="<S-f>" +" let g:UltiSnipsJumpBackwardTrigger="<S-b>" +" let g:ycm_key_list_select_completion=[] +" let g:ycm_key_list_previous_completion=[] +" +" }}} +" {{{ emmet +" being very explicit, which is not required +autocmd FileType css imap html <tab> <plug>(emmet-expand-abbr) +let g:user_emmet_leader_key = '<C-b>' +let g:user_emmet_expandabbr_key = '<C-b>,' +let g:user_emmet_expandword_key = '<C-b>;' +let g:user_emmet_update_tag = '<C-b>u' +let g:user_emmet_balancetaginward_key = '<C-b>d' +let g:user_emmet_balancetagoutward_key = '<C-b>D' +let g:user_emmet_next_key = '<C-b>n' +let g:user_emmet_prev_key = '<C-b>N' +let g:user_emmet_imagesize_key = '<C-b>i' +let g:user_emmet_togglecomment_key = '<C-b>/' +let g:user_emmet_splitjointag_key = '<C-b>j' +let g:user_emmet_removetag_key = '<C-b>k' +let g:user_emmet_anchorizeurl_key = '<C-b>a' +let g:user_emmet_anchorizesummary_key = '<C-b>A' +let g:user_emmet_mergelines_key = '<C-b>m' +let g:user_emmet_codepretty_key = '<C-b>c' +"}}} +" vim-tailwind {{{ +function! s:is_tailwind() + return !empty(findfile('tailwind.config.js', '.;')) || + \ !empty(findfile('theme/static_src/tailwind.config.js', '.;')) +endfunction + +nmap <silent> <buffer> gk <Plug>(tailwind-lookup) + +autocmd BufEnter *.html,*.slim if s:is_tailwind() | + \ setlocal omnifunc=tailwind#Complete | + \ endif +" }}} +" ALE {{{ +let g:ale_enabled = 1 +let g:ale_set_balloons = 0 +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 = 1 +let g:ale_hover_cursor = 1 +let g:ale_virtualtext_cursor = 'disabled' +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 = 1 +let g:ale_echo_cursor = 1 +let g:ale_echo_msg_error_str = 'ALE Error' +let g:ale_echo_msg_format = 'ALE: %linter% - %code: %%s' +let g:ale_loclist_msg_format = 'ALE: %linter% - %code: %%s' +let g:ale_echo_msg_warning_str = 'ALE Warning' +let g:ale_linters = {'python': ['pyright', 'ruff', 'flake8', 'mypy'], +\ 'ocaml': ['merlin'], +\ 'javascript': ['eslint'], +\ 'cpp': ['clangd'], +\ 'yaml': ['yamllint'], +\ 'c': ['clangd'], +\ 'go': ['gopls', 'golint', 'gofmt'], + \} +let g:ale_fixers = { +\ 'python': ['autoimport', 'ruff', 'isort', 'yapf', 'black'], +\ 'javascript': ['eslint'], +\ 'go': ['gofmt', 'goimports', 'gopls'], +\ 'cpp': ['clang-format'], +\ 'c': ['clang-format'], +\ '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 +let g:ale_completion_enabled = 0 +" Map movement through errors without wrapping. +" nmap <silent> <C-k> <Plug>(ale_previous) +" nmap <silent> <C-j> <Plug>(ale_next) +" OR map keys to use wrapping. +nmap <silent> <C-k> <Plug>(ale_previous_wrap) +nmap <silent> <C-j> <Plug>(ale_next_wrap) +set omnifunc=ale#completion#OmniFunc +" }}} +" :grep use ripgrep {{{ +if executable('rg') + set grepprg=rg\ --color=never\ --vimgrep +endif + +" and 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 +" }}} +" 'Notes Grep' with ripgrep (see grepprg) {{{ +" -i case insensitive +" -g glob pattern +" ! to not immediately open first search result +"command! -nargs=1 Ngrep :silent grep! "<args>" -i -g '*.md' $NOTES_DIR | execute ':redraw!' +command! -nargs=1 Ngrep vimgrep "<args>" $NOTES_DIR/**/*.md +nnoremap <leader>nn :Ngrep +" }}} +" vim-test {{{ +nmap <silent> tn :TestNearest<CR> +nmap <silent> tf :TestFile<CR> +nmap <silent> ts :TestSuite<CR> +nmap <silent> tl :TestLast<CR> +nmap <silent> <leader>tv :TestVisit<CR> +let test#strategy = "basic" +let test#python#pytest#options = '-q -s' +let test#python#runner = 'django' +let test#vimterminal#term_position = "belowright" +" }}} +" Titbits {{{ +" " Increment an ordered (numbered) list with <leader><cr> +" inoremap <leader><cr> <esc>yyp<C-a> +" " sudo write +" command! S :w !sudo tee % + +"nnoremap <Tab> % +nnoremap <C-@> :call system("wl-copy", @")<CR> +xnoremap <silent> <C-@> :w !wl-copy<CR><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 + + nnoremap <C-s> :GFiles!<CR> + imap <C-x><C-f> <plug>(fzf-complete-file-ag) + imap <C-x><C-l> <plug>(fzf-complete-line) +" }}} +" Colorscheme {{{ +" This is imported from the old ephemera.vim file which has now been removed +" +" I got the following from gruvbox docs +"Use 24-bit (true-color) mode in Vim/Neovim when outside tmux. +"If you're using tmux version 2.2 or later, you can remove the outermost $TMUX check and use tmux's 24-bit color support +"(see < http://sunaku.github.io/tmux-24bit-color.html#usage > for more information.) +if (has("nvim")) +"For Neovim 0.1.3 and 0.1.4 < https://github.com/neovim/neovim/pull/2198 > + let $NVIM_TUI_ENABLE_TRUE_COLOR=1 +endif +"For Neovim > 0.1.5 and Vim > patch 7.4.1799 < https://github.com/vim/vim/commit/61be73bb0f965a895bfb064ea3e55476ac175162 > +"Based on Vim patch 7.4.1770 (`guicolors` option) < https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd > +" < https://github.com/neovim/neovim/wiki/Following-HEAD#20160511 > +if (has("termguicolors")) + set termguicolors +endif + +"ayu theme +" let ayucolor="light" " for light version of theme +" let ayucolor="mirage" " for mirage version of theme +let ayucolor="dark" " for dark version of theme + +"colorscheme gruber-darker +let g:gruvbox_contrast_dark = "hard" +let g:gruvbox_italicize_strings = 1 +let g:gruvbox_improved_strings = 1 +let g:gruvbox_improved_warnings = 1 +let g:gruvbox_invert_indent_guides = 0 +let g:gruvbox_invert_signs = 0 +let g:gruvbox_italic = 0 + +"colorscheme evening +"colorscheme sitruuna +colorscheme ayu +"colorscheme gruvbox +" }}} +" GPG files {{{ +" from https://vim.fandom.com/wiki/Edit_gpg_encrypted_files +" Don't save backups of *.gpg files +set backupskip+=*.gpg +" To avoid that parts of the file is saved to .viminfo when yanking or +" deleting, empty the 'viminfo' option. +set viminfo= + +augroup encrypted + au! + " Disable swap files, and set binary file format before reading the file + autocmd BufReadPre,FileReadPre *.gpg + \ setlocal noswapfile bin + " Decrypt the contents after reading the file, reset binary file format + " and run any BufReadPost autocmds matching the file name without the .gpg + " extension + autocmd BufReadPost,FileReadPost *.gpg + \ execute "'[,']!gpg --decrypt --default-recipient-self" | + \ setlocal nobin | + \ execute "doautocmd BufReadPost " . expand("%:r") + " Set binary file format and encrypt the contents before writing the file + autocmd BufWritePre,FileWritePre *.gpg + \ setlocal bin | + \ '[,']!gpg --encrypt --default-recipient-self + " After writing the file, do an :undo to revert the encryption in the + " buffer, and reset binary file format + autocmd BufWritePost,FileWritePost *.gpg + \ silent u | + \ setlocal nobin +augroup END +" }}} +" Golang {{{ +augroup golang + autocmd! + autocmd FileType go + \ set tabstop=8 | + \ set softtabstop=8 | + \ set shiftwidth=8 +augroup END +" }}} +" GitFZF {{{ +" from https://git.sr.ht/~sircmpwn/dotfiles/tree/master/item/.vimrc +function! GitFZF() + let path = trim(system('cd '.shellescape(expand('%:p:h')).' && git rev-parse --show-toplevel')) + exe 'FZF ' . path +endfunction +command! GitFZF call GitFZF() +nnoremap <leader><C-f> :GitFZF<CR> +" }}} +" Switching off colours {{{ +"syntax off +" hi Visual term=reverse ctermbg=7 ctermfg=black guifg=black guibg=LightPink +" hi SpellBad term=reverse ctermbg=224 gui=undercurl guisp=Red guibg=Red +" hi SpellCap term=reverse ctermbg=224 gui=undercurl guisp=Red guibg=Red +" hi SpellRare term=reverse ctermbg=224 gui=undercurl guisp=Red guibg=Blue +" hi Search term=reverse ctermbg=11 guifg=black guibg=Green +"}}} +" Turn spelling on for text files {{{ +" from - https://dmerej.info/blog/post/syntax-highlighting-is-useless/ +augroup textfiles + autocmd! + autocmd filetype markdown setlocal spell spelllang=en +augroup end +" }}} +" Read man pages in vim {{{ +runtime! ftplugin/man.vim +" }}} +"" YouCompleteMe {{{ +"" -"" *** STARTING AND ENABLING *** +"" Don't start on start - or use show_diagnostics below +"let g:loaded_youcompleteme = 1 +"" with this set to 0, YCM doesn't load/start +"let g:ycm_show_diagnostics_ui = 1 +"" ****************************** +"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=[] +"" let g:ycm_key_list_previous_completion=[] +"let g:ycm_key_list_select_completion = ['<C-n>', '<Down>'] +"let g:ycm_key_list_previous_completion = ['<C-p>', '<Up>'] +"let g:ycm_python_interpreter_path = '.venv/bin/python3' +"let g:ycm_auto_trigger = 1 +"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> +"imap <silent> <C-l> <Plug>(YCMToggleSignatureHelp)'. + +"let g:ycm_enable_inlay_hints = 0 +"" }}} |