set nocompatible set backspace=start,eol,indent set hidden set hlsearch syntax on filetype plugin on set tabstop=4 shiftwidth=4 autoindent smartindent expandtab set mouse=v set ttymouse=xterm let mapleader="," """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " " Numbering of lines " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " set relativenumber set number """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " " Runtimepath variables " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " call -> set rtp? show the runtime path let $RTP=split(&runtimepath, ',')[0] let $RC="$HOME/.vimrc" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " " Move Swap,Backup and undo files into .vim directory " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" set directory^=$HOME/.vim/.swap// set backupdir^=$HOME/.vim/.backup// set undodir^=$HOME/.vim/.undo// """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " " Split to the right and below " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" set splitbelow set splitright """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " " Folding " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" set foldenable foldlevelstart=20 foldmethod=indent """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " " Rebind shortcut to switch splits " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" nmap h nmap j nmap k nmap l """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " " Finding files " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" set path+=** set wildmenu set wildmode=longest:full,full """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " " Create Tags thorugh :MakeTags " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" command! MakeTags !ctags -R . set autochdir set tags=tags; """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " " File browsing through a tree on the left side " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" let g:netrw_banner=0 let g:netrw_browse_split=4 let g:netrw_altv=1 let g:netrw_liststyle=3 let g:netrw_list_hide=netrw_gitignore#Hide() let g:netrw_list_hide.=',\(\^\|\s\s\)\zs\.\S\+' map :Lex vertical resize 30 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " " Cursorline on the cursor " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" set cursorline hi CursorLine cterm=NONE ctermbg=darkgrey ctermfg=white """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " " Status Line on the bottom " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Statusline " function! gitbranch() " return system("git rev-parse --abbrev-ref head 2>/dev/null | tr -d '\n'") " endfunction " " function! statuslinegit() " let l:branchname = gitbranch() " return strlen(l:branchname) > 0?' '.l:branchname.' ':'' " endfunction function! UpdateGitBranch() let l:branchname = system("git rev-parse --abbrev-ref HEAD 2>/dev/null | tr -d '\n'") let b:branchstatus = strlen(l:branchname) > 0? ' '.l:branchname.' ':'' endfunction augroup UPDATE_GITBRANCH " clear previous commands autocmd! " Update git branch autocmd BufWritePre * :call UpdateGitBranch() autocmd BufReadPost * :call UpdateGitBranch() autocmd BufEnter * :call UpdateGitBranch() augroup end function! LinterStatus() abort let l:counts = ale#statusline#Count(bufnr('')) let l:all_errors = l:counts.error + l:counts.style_error let l:all_non_errors = l:counts.total - l:all_errors return l:counts.total == 0 ? 'OK' : printf( \ 'Lint: %dW %dE', \ all_non_errors, \ all_errors \) endfunction set laststatus=2 set statusline= set statusline+=%#PmenuSel# " set statusline+=%{StatuslineGit()} set statusline+=%{b:branchstatus} set statusline+=%#BufTabLineCurrent# set statusline+=\ %M set statusline+=\ %r set statusline+=\ %F set statusline+=%= "Right side settings set statusline+=\ [%{LinterStatus()}\] set statusline+=\ %y set statusline+=%#CursorColumn# set statusline+=\ %{&fileencoding?&fileencoding:&encoding} set statusline+=\[%{&fileformat}\] set statusline+=\ %c:%l/%L set statusline+=\ %p%% set statusline+=\ [%n] """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " " Colors " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" set termguicolors " colorscheme gruvbox colorscheme catppuccin_macchiato set bg=dark " tmux color correction if exists('+termguicolors') let &t_8f = "\[38;2;%lu;%lu;%lum" let &t_8b = "\[48;2;%lu;%lu;%lum" set termguicolors endif """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " " tagbar, press F8 " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" nmap :TagbarToggle """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " " Selection Highlighting " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " hlsearch colors highlight Search ctermbg=black ctermfg=darkgrey ctermbg=grey " Highlight all instances of word under cursor, when idle. function! AutoHighlightToggle() let @/ = '' augroup auto_highlight au! au CursorHold * let @/ = '\V\<'.escape(expand(''), '\').'\>' augroup end setl updatetime=1600 endfunction call AutoHighlightToggle() """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " " Code Completion " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" set lazyredraw set splitright let g:ale_enabled = 1 let g:ale_hover_enabled = 1 let g:ale_set_balloons = 1 let g:ale_sign_error = '✗' " let g:ale_sign_warning = '' let g:ale_completion_enabled = 1 let g:ale_completion_autoimport = 1 " let g:ale_floating_window_border = ['│', '─', '╭', '╮', '╯', '╰', '│', '─'] " let g:ale_floating_window_border = repeat([''], 8) let g:ale_close_preview_on_insert = 1 let g:ale_hover_to_preview = 1 let g:ale_echo_msg_error_str = 'E' let g:ale_echo_msg_warning_str = 'W' let g:ale_echo_msg_format = '[%linter%], [%severity%] %s' " let g:ale_popup_menu_enabled = 1 nmap gr :ALEFindReferences nmap T :ALEHover " nmap gd :ALEGoToDefinition " set completeopt+=menuone " set completeopt+=noselect " set completeopt+=noinsert set shortmess+=c " Shut off completion messages set belloff+=ctrlg " Add only if Vim beeps during completion let g:mucomplete#enable_auto_at_startup = 1 let g:mucomplete#completion_delay = 0 " set omnifunc=syntaxcomplete#Complete " set omnifunc=ale#completion#Complete " set omnifunc=ale#completion#OmniFunc "let g:ale_completion_enabled=1 "function! OpenCompletion() " if !pumvisible() && ((v:char >= 'a' && v:char <= 'z') || (v:char >= 'A' && v:char <= 'Z')) " call feedkeys("\\", "n") " endif "endfunction " "autocmd InsertCharPre * call OpenCompletion() " set completeopt+=longest,menu,menuone,preview,noselect,noinsert " set splitkeep=screen "" set completeopt+=menuone,noselect,noinsert "" " autocmd InsertLeave,CompleteDone * if pumvisible() == 0 | pclose | endif " " " --This puts the preview window to the right of the screen " " augroup previewWindowPosition " au! " autocmd BufWinEnter * call PreviewWindowPosition() " augroup END " function! PreviewWindowPosition() " if &previewwindow " wincmd L " endif " endfunction """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " " undotree " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" nnoremap :UndotreeToggle """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " " Remove conceal from Markdown when Insert mode is set " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" autocmd InsertEnter *.{markdown,md} set conceallevel=0 autocmd InsertLeave *.{markdown,md} set conceallevel=2 autocmd InsertEnter *.{json} set conceallevel=0 autocmd InsertLeave *.{json} set conceallevel=2 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " " Load all packages and activate tags " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" packadd! vim-polyglot packadd! vim-log-highlighting packloadall " Load all of the helptags now, after plugins have been loaded. " All messages and errors will be ignored. silent! helptags ALL silent! helptags ALE silent! helptags vim-gitgutter/doc """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " " FZF Integration " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" set rtp+=$HOME/.fzf nnoremap b :Buffers nnoremap :Files nnoremap r :Files ~ nnoremap f :Rg nnoremap / :BLines nnoremap ' :Marks nnoremap g :Commits nnoremap H :Helptags nnoremap hh :History nnoremap h: :History: nnoremap h/ :History/ " Customize fzf colors to match your color scheme " - fzf#wrap translates this to a set of `--color` options let g:fzf_colors = \ { 'fg': ['fg', 'Normal'], \ 'bg': ['bg', 'Normal'], \ 'hl': ['fg', 'Comment'], \ 'fg+': ['fg', 'CursorLine', 'CursorColumn', 'Normal'], \ 'bg+': ['bg', 'CursorLine', 'CursorColumn'], \ 'hl+': ['fg', 'Statement'], \ 'info': ['fg', 'PreProc'], \ 'border': ['fg', 'Ignore'], \ 'prompt': ['fg', 'Conditional'], \ 'pointer': ['fg', 'Exception'], \ 'marker': ['fg', 'Keyword'], \ 'spinner': ['fg', 'Label'], \ 'header': ['fg', 'Comment'] } " xnoremap c =:'<,'>:w ! base64p " Function to base64 encode the exact selected text and replace it without a newline function! Base64EncodeSelection() normal! gv"vy let l:selected_text = getreg('"') let l:encoded_text = system('echo -n ' . shellescape(l:selected_text) . ' | base64 -w0') let l:encoded_text = trim(l:encoded_text) execute "normal! gv\"_c" . l:encoded_text endfunction xnoremap be :call Base64EncodeSelection() function! Base64DecodeSelection() normal! gv"vy let l:selected_text = getreg('"') let l:encoded_text = system('echo -n ' . shellescape(l:selected_text) . ' | base64 -d') let l:encoded_text = trim(l:encoded_text) execute "normal! gv\"_c" . l:encoded_text endfunction xnoremap bd :call Base64DecodeSelection()