summaryrefslogblamecommitdiffstats
path: root/vim/vimrc
blob: dc7631fbcd8b02df0a35526ac795b9097f6076ce (plain) (tree)
1
2
3
4
5
6
7
8

                  
         


                         
                   
 





































                                 
 










                                                            


                                               
 


                                                          
 





                                                          
 

                                              
 

                                                             
 








                                                               
 







                                                               
 
                 
                                

                                                   

                             


                           



                             
                                                 
                         
                         
                           

                           

                         
                         

               










































































                                                                      



                                            
 






                                                                                                          
 
                    
 

                                                        
 


                                                                        
 



                                               

                                                                                            
                           
 


                                                                       




                                 
                              

                                       
                                            


                                                 


                                                         

                                                                                      

                                                 




























                                                                    








                                         
                                          
                                           
                                                               



                                              
filetype plugin on
filetype indent on
syntax on

" leader
let maplocalleader = "\\"
let mapleader = ","

set nocompatible
set scrolloff=1
set history=799
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=yes
set colorcolumn=0
set equalalways
set showmode
set listchars=tab:»→,trail:␣
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

nnoremap <leader>q :call TaskWarriorAddCurrentLine()<CR>

" colorscheme goes here, outside source control
source ~/.vim/ephemera.vim
highlight SignColumn guibg=blue ctermbg=black

" macro to go to end of sentence and add a line break (for
" one-line-per-sentence vimming...)
let @s = ")i\<BS>\<CR>\<Esc>"

" 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

" disable folding by default with vim-markdown
let g:vim_markdown_folding_disabled = 1

" Open vimrc
nnoremap <leader>ev <C-w>s<C-w>j<C-w>L:e $HOME/.vim/vimrc<cr>

" 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

" 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

"keymap for Fern
nnoremap ;f :Fern . -drawer<cr>

call plug#begin()
"Plug 'vim-scripts/AutoComplPop'
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
Plug 'ycm-core/YouCompleteMe'
Plug 'airblade/vim-tailwind'
Plug 'lambdalisue/fern.vim'
Plug 'junegunn/goyo.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()

" 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

" 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>']
let g:ycm_python_interpreter_path = '.venv/bin/python3'
let g:ycm_auto_trigger = 0
let g:ycm_python_sys_path = []
let g:ycm_show_diagnostics_ui = 1
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 = 1

" ALE ale config
let g:ale_enabled = 1
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 = 0
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 = 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': ['pyright', 'flake8', 'mypy'],
\                    'ocaml': ['merlin'],
\                    'cpp': ['clang'],
\                    'yaml': ['yamllint'],
\                    'c': ['clang'],
\                    'go': ['gopls', 'golint', 'gofmt'],
 \}
let g:ale_fixers = {
\           'python': ['autoimport', '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
set omnifunc=ale#completion#OmniFunc

" Make :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 

" 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>

" '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 

" 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>

" 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 -n2'
let test#python#runner = 'pytest'
let test#vimterminal#term_position = "belowright"

" clear search highlights
nnoremap <leader><space> :noh<cr>:call clearmatches()<cr>

runtime macros/matchit.vim	"allows jumping between brackets with % in normal mode

" remap :W to :w - :W was previous Windows in fzf
command! W w

" 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>
  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>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>
  imap <C-x><C-f> <plug>(fzf-complete-file-ag)
  imap <C-x><C-l> <plug>(fzf-complete-line)