From 8838f33cc4bedfe3f8e8d16708ef6f7c18b8a6d6 Mon Sep 17 00:00:00 2001 From: ksyasuda Date: Mon, 7 Feb 2022 21:27:27 -0800 Subject: [PATCH] add init.vim --- nvim/init.vim | 684 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 683 insertions(+), 1 deletion(-) mode change 120000 => 100644 nvim/init.vim diff --git a/nvim/init.vim b/nvim/init.vim deleted file mode 120000 index 859ac20..0000000 --- a/nvim/init.vim +++ /dev/null @@ -1 +0,0 @@ -/home/sudacode/.vimrc \ No newline at end of file diff --git a/nvim/init.vim b/nvim/init.vim new file mode 100644 index 0000000..ddc4b1b --- /dev/null +++ b/nvim/init.vim @@ -0,0 +1,683 @@ +syntax enable +filetype plugin on +set noshowmode "disable default vim insert text at bottom +set laststatus=2 +set number +set colorcolumn=80 +set tw=80 +set shiftwidth=4 +set tabstop=4 +set autoindent +set ignorecase +set smartcase +set incsearch +set smartindent +set hlsearch +set ignorecase +set noerrorbells +set title +set mouse=a +set relativenumber +set splitright +set cursorline +set scrolloff=8 +set sidescrolloff=8 +set wildmenu " show candidates for vim commands with tab +set wildignore=*.o,*.obj,*.bak,*.exe +set background=dark +set showmatch +set nocompatible " no more vi +set list +set listchars=tab:\ ,trail: +" set path from current directory and all directories under +set path=$PWD/** +set encoding=UTF-8 +set guifont=FiraCode\ Nerd\ Font\ 18 +set expandtab +" coc settings +set hidden +set nobackup +set nowritebackup +set cmdheight=2 +set updatetime=300 +" Don't pass messages to |ins-completion-menu|. +set shortmess+=c + +" lsp handled by coc +let g:ale_disable_lsp = 1 + +" Install vim-plug if not found +if empty(glob('~/.vim/autoload/plug.vim')) + silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs + \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim +endif + +" Run PlugInstall if there are missing plugins +autocmd VimEnter * if len(filter(values(g:plugs), '!isdirectory(v:val.dir)')) + \| PlugInstall --sync | source $MYVIMRC +\| endif + +call plug#begin('~/.vim/plugged') + +Plug 'tpope/vim-fugitive' +Plug 'tpope/vim-commentary' +Plug 'tpope/vim-surround' +Plug 'preservim/nerdtree' | Plug 'Xuyuanp/nerdtree-git-plugin' +Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } +Plug 'junegunn/fzf.vim' +Plug 'itchyny/lightline.vim' +Plug 'dense-analysis/ale' +Plug 'neoclide/coc.nvim', {'branch': 'release'} +Plug 'wakatime/vim-wakatime' +Plug 'voldikss/vim-floaterm' +Plug 'pechorin/any-jump.vim' +Plug 'jiangmiao/auto-pairs' +Plug 'ap/vim-css-color' +Plug 'prettier/vim-prettier', { 'do': 'yarn install' } +Plug 'sheerun/vim-polyglot' +Plug 'maximbaz/lightline-ale' +Plug 'liuchengxu/vim-which-key', { 'on': ['WhichKey', 'WhichKey!'] } +Plug 'osyo-manga/vim-over' +Plug 'mhinz/vim-startify' + +if has('nvim') + Plug 'akinsho/bufferline.nvim' + Plug 'kyazdani42/nvim-web-devicons' + + Plug 'NTBBloodbath/doom-one.nvim' + Plug 'Mofiqul/dracula.nvim' + Plug 'projekt0n/github-nvim-theme' +else + Plug 'ap/vim-buftabline' + Plug 'ryanoasis/vim-devicons' + " vim colorschemes + Plug 'joshdick/onedark.vim' + Plug 'kaicataldo/material.vim', { 'branch': 'main' } + Plug 'morhetz/gruvbox' + Plug 'vv9k/vim-github-dark' +endif + +call plug#end() + +if has('nvim') + source ~/.config/nvim/plugins/bufferline.lua + source ~/.config/nvim/plugins/doomone.lua + " source ~/.config/nvim/plugins/dracula.lua + " source ~/.config/nvim/plugins/github-theme.lua + + " makes fzf match colorscheme (I think) + augroup fzf_preview + autocmd! + autocmd User fzf_preview#rpc#initialized call s:fzf_preview_settings() " fzf_preview#remote#initialized or fzf_preview#coc#initialized + augroup END + + function! s:fzf_preview_settings() abort + let g:fzf_preview_command = 'COLORTERM=truecolor ' . g:fzf_preview_command + let g:fzf_preview_grep_preview_cmd = 'COLORTERM=truecolor ' . g:fzf_preview_grep_preview_cmd + endfunction + " make terminal not have line numbers + autocmd TermOpen * setlocal nonumber norelativenumber +endif + +"------------------------------------------------------------------------------ +" Enable :Man +"------------------------------------------------------------------------------ +runtime ftplugin/man.vim +"------------------------------------------------------------------------------ +" Force help/man buffers into vertical split +"------------------------------------------------------------------------------ +autocmd FileType help wincmd L +autocmd FileType man wincmd L +"------------------------------------------------------------------------------ +"jump to remembered position in file if available +"------------------------------------------------------------------------------ +if has("autocmd") + au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal! g`\"" | endif +endif + +"------------------------------------------------------------------------------ +"fzf +"------------------------------------------------------------------------------ + +" This is the default extra key bindings +let g:fzf_commands_expect = 'ctrl-enter' +let g:fzf_buffers_jump = 1 +let g:fzf_tags_command = 'ctags -R' +" This is the default option: +" - Preview window on the right with 50% width +" - CTRL-/ will toggle preview window. +" - Note that this array is passed as arguments to fzf#vim#with_preview function. +" - To learn more about preview window options, see `--preview-window` section of `man fzf`. +let g:fzf_preview_window = ['right:50%', 'ctrl-/'] +let g:fzf_layout = { 'window': { 'width': 0.8, 'height': 0.75 } } + +let g:fzf_action = { + \ 'ctrl-t': 'tab split', + \ 'ctrl-x': 'split', + \ 'ctrl-v': 'vsplit' } + +" An action can be a reference to a function that processes selected lines +function! s:build_quickfix_list(lines) + call setqflist(map(copy(a:lines), '{ "filename": v:val }')) + copen + cc +endfunction + +let g:fzf_action = { + \ 'ctrl-q': function('s:build_quickfix_list'), + \ 'ctrl-t': 'tab split', + \ 'ctrl-x': 'split', + \ 'ctrl-v': 'vsplit', + \ 'ctrl-n': 'next', + \} + +" 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'] } + +" Enable per-command history +" - History files will be stored in the specified directory +" - When set, CTRL-N and CTRL-P will be bound to 'next-history' and +" 'previous-history' instead of 'down' and 'up'. +let g:fzf_history_dir = '~/.local/share/fzf-history' + +command! -bang -nargs=? -complete=dir Files + \ call fzf#vim#files(, fzf#vim#with_preview({'options': ['--layout=reverse', '--info=inline']}), 0) + +" command! -bang -nargs=? -complete=dir Files +" \ call fzf#run(fzf#wrap('files', fzf#vim#with_preview({'dir': , 'sink': 'e', 'source': 'rg --files --hidden'}), 0)) + +command! -bang -nargs=? -complete=dir AllFiles + \ call fzf#run(fzf#wrap('allfiles', fzf#vim#with_preview({'dir': , 'sink': 'e', 'source': 'rg --files --hidden --no-ignore'}), 0)) + + +"------------------------------------------------------------------------------ +"ale +"------------------------------------------------------------------------------ + +let g:ale_sh_shellcheck_executable = '/usr/bin/shellcheck' +let g:ale_sh_shellcheck_options = '-s bash -o all -e 2250' +let g:ale_sh_shfmt_options = '-i=4 -ci -sr' +let g:ale_fix_on_save = 1 +" let g:ale_set_quickfix = 1 +let g:ale_virtualenv_dir_names = ['env'] + +let g:ale_linter_aliases = {'javascriptreact': ['css', 'javascript'], 'typescriptreact': ['css', 'javascript']} +let g:ale_linters = {'javascriptreact': ['css', 'javascript'], 'typescriptreact': ['css', 'javascript'], 'python': ['pylint','pycodestyle', 'pydocstyle'], 'sh': ['shellcheck']} +" Fix files with prettier, and then ESLint. +let g:ale_fixers = {'*': ['remove_trailing_lines', 'trim_whitespace'], 'javascript': ['prettier', 'eslint'], 'sh': ['shfmt'], 'typescript': ['eslint'], 'python': ['black']} + +"------------------------------------------------------------------------------ +"vim-closetag +"------------------------------------------------------------------------------ + +" filenames like *.xml, *.html, *.xhtml, ... +" These are the file extensions where this plugin is enabled. +let g:closetag_filenames = '*.html,*.xhtml,*.phtml,*.js,*.ts,*.jsx,*.tsx' + +" filenames like *.xml, *.xhtml, ... +" This will make the list of non-closing tags self-closing in the specified files. +" +let g:closetag_xhtml_filenames = '*.xhtml,*.jsx,*.tsx,*.js,*.ts' + +" filetypes like xml, html, xhtml, ... +" These are the file types where this plugin is enabled. +" +let g:closetag_filetypes = 'html,xhtml,phtml' + +" filetypes like xml, xhtml, ... +" This will make the list of non-closing tags self-closing in the specified files. +" +let g:closetag_xhtml_filetypes = 'xhtml,jsx,tsx,js' + +" integer value [0|1] +" This will make the list of non-closing tags case-sensitive (e.g. `` will be closed while `` won't.) +" +let g:closetag_emptyTags_caseSensitive = 1 + +" Disables auto-close if not in a "valid" region (based on filetype) + +let g:closetag_regions = { + \ 'typescript.tsx': 'jsxRegion,tsxRegion', + \ 'javascript.jsx': 'jsxRegion', + \ } + +"------------------------------------------------------------------------------ +" WAKATIME +"------------------------------------------------------------------------------ + +let g:wakatime_PythonBinary = '/usr/bin/python' " (Default: 'python') +let g:wakatime_OverrideCommandPrefix = '/usr/bin/wakatime' " (Default: '') + +"------------------------------------------------------------------------------ +"NERDTREE +"------------------------------------------------------------------------------ + +autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif +let g:NERDTreeWinPos = "right" "open nerdtree on the right +let NERDTreeShowHidden=0 "show hidden files use capital 'I' to toggle +let g:NERDTreeWinSize=45 +"autocmd VimEnter * wincmd p "put the cursor back into the editing pane on start +let g:NERDTreeGitStatusIndicatorMapCustom = { + \ 'Modified' :'✹', + \ 'Staged' :'✚', + \ 'Untracked' :'✭', + \ 'Renamed' :'➜', + \ 'Unmerged' :'═', + \ 'Deleted' :'✖', + \ 'Dirty' :'✗', + \ 'Ignored' :'☒', + \ 'Clean' :'✔︎', + \ 'Unknown' :'?', + \ } +let g:NERDTreeGitStatusUseNerdFonts = 1 +" If more than one window and previous buffer was NERDTree, go back to it. +autocmd BufEnter * if bufname('#') =~# "^NERD_tree_" && winnr('$') > 1 | b# | endif +"avoid crashes when calling vim-plug functions while the cursor is on the NERDTree window +let g:plug_window = 'noautocmd vertical topleft new' +" NERDTress File highlighting +function! NERDTreeHighlightFile(extension, fg, bg, guifg, guibg) + exec 'autocmd filetype nerdtree highlight ' . a:extension .' ctermbg='. a:bg .' ctermfg='. a:fg .' guibg='. a:guibg .' guifg='. a:guifg + exec 'autocmd filetype nerdtree syn match ' . a:extension .' #^\s\+.*'. a:extension .'$#' +endfunction +"NERDTree hilight files by extension +call NERDTreeHighlightFile('jade', 'green', 'none', 'green', '#282c34') +call NERDTreeHighlightFile('ini', 'yellow', 'none', 'yellow', '#282c34') +call NERDTreeHighlightFile('md', 'blue', 'none', '#3366FF', '#282c34') +call NERDTreeHighlightFile('yml', 'yellow', 'none', 'yellow', '#282c34') +call NERDTreeHighlightFile('config', 'yellow', 'none', 'yellow', '#282c34') +call NERDTreeHighlightFile('conf', 'yellow', 'none', 'yellow', '#282c34') +call NERDTreeHighlightFile('json', 'yellow', 'none', 'yellow', '#282c34') +call NERDTreeHighlightFile('html', 'red', 'none', 'yellow', '#282c34') +call NERDTreeHighlightFile('styl', 'cyan', 'none', 'cyan', '#282c34') +call NERDTreeHighlightFile('css', 'cyan', 'none', 'cyan', '#282c34') +call NERDTreeHighlightFile('coffee', 'Red', 'none', 'red', '#282c34') +call NERDTreeHighlightFile('js', 'yellow', 'none', '#ffa500', '#282c34') +call NERDTreeHighlightFile('jsx', 'yellow', 'none', '#ffa500', '#282c34') +call NERDTreeHighlightFile('tsx', 'yellow', 'none', '#ffa500', '#282c34') +call NERDTreeHighlightFile('php', 'Magenta', 'none', '#ff00ff', '#282c34') +call NERDTreeHighlightFile('cpp', 'blue', 'none', 'blue', '#282c34') +call NERDTreeHighlightFile('h', 'cyan', 'none', 'cyan', '#282c34') +call NERDTreeHighlightFile('txt', 'blue', 'none', 'red', '#282c34') +let g:NERDTreeColorMapCustom = { + \ "Modified" : ["#528AB3", "NONE", "NONE", "NONE"], + \ "Staged" : ["#538B54", "NONE", "NONE", "NONE"], + \ "Untracked" : ["#BE5849", "NONE", "NONE", "NONE"], + \ "Dirty" : ["#299999", "NONE", "NONE", "NONE"], + \ "Clean" : ["#87939A", "NONE", "NONE", "NONE"] + \ } + +"------------------------------------------------------------------------------ +"PRETTIER +"------------------------------------------------------------------------------ + +packloadall "enable prettier +let g:prettier#autoformat = 1 +let g:prettier#autoformat_require_pragma = 0 +let g:prettier#exec_cmd_path = "/usr/bin/prettier" + +"------------------------------------------------------------------------------ +" Lightline +"------------------------------------------------------------------------------ + +let g:lightline = {} +" 'one', 'material', 'darcula', 'deus' +let g:lightline.colorscheme = "deus" +" let g:lightline.colorscheme = "one" +" let g:lightline.colorscheme = "darcula" +let g:lightline.component_function = { + \ 'fugitive': 'MyFugitive', + \ 'readonly': 'Readonly', + \ 'modified': 'Modified', + \ 'filename': 'Filename', + \ 'cocstatus': 'coc#status', + \} + +let g:lightline.component = { 'charhexvalue': '0x%B' } +let g:lightline.separator = { 'left': "\ue0b0", 'right': "\ue0b2" } +let g:lightline.subseparator = { 'left': "\ue0b1", 'right': "\ue0b3" } + +let g:lightline.component_expand = { + \ 'linter_checking': 'lightline#ale#checking', + \ 'linter_infos': 'lightline#ale#infos', + \ 'linter_warnings': 'lightline#ale#warnings', + \ 'linter_errors': 'lightline#ale#errors', + \ 'linter_ok': 'lightline#ale#ok', + \ } + +let g:lightline.component_type = { + \ 'linter_checking': 'right', + \ 'linter_infos': 'right', + \ 'linter_warnings': 'warning', + \ 'linter_errors': 'error', + \ 'linter_ok': 'right', + \ } + +let g:lightline.active = { + \ 'left': [ [ 'mode', 'paste' ], + \ [ 'cocstatus', 'fugitive', 'filename' ] ], + \ 'right': [ [ 'linter_checking', 'linter_errors', 'linter_warnings', 'linter_infos', 'linter_ok' ], + \ [ 'lineinfo' ], + \ [ 'percent' ], + \ [ 'fileformat', 'fileencoding', 'filetype'] ] } + +let g:lightline#ale#indicator_checking = "\uf110 " +let g:lightline#ale#indicator_infos = "\uf129 " +let g:lightline#ale#indicator_warnings = "\uf071 " +let g:lightline#ale#indicator_errors = "\uf05e " +let g:lightline#ale#indicator_ok = "\uf00c " + +" Use autocmd to force lightline update. +autocmd User CocStatusChange,CocDiagnosticChange call lightline#update() +function! Modified() + if &filetype == "help" + return "" + elseif &modified + return "+" + elseif &modifiable + return "" + else + return "" + endif +endfunction + +function! Readonly() + if &filetype == "help" + return "" + elseif &readonly + return "\ue0a2" + else + return "" + endif +endfunction + +function! MyFugitive() + let _ = fugitive#head() + return strlen(_) ? "\ue0a0 "._ : '' +endfunction + +function! Filename() + return ('' != Readonly() ? Readonly() . ' ' : '') . + \ ('' != expand('%:t') ? expand('%:t') : '[No Name]') . + \ ('' != Modified() ? ' ' . Modified() : '') +endfunction + +"------------------------------------------------------------------------------ +"COLORSCHEME +"------------------------------------------------------------------------------ + +set t_Co=256 +if has('nvim') + set termguicolors + " colorscheme doom-one + " colorscheme dracula + colorscheme github_dark +else + " let g:onedark_termcolors=256 "enable 256 colors + " colorscheme onedark "set colorsheme as onedark + + "material theme + " let g:material_theme_style = 'default' | 'palenight' | 'ocean' | 'lighter' | 'darker' | 'default-community' | 'palenight-community' | 'ocean-community' | 'lighter-community' | 'darker-community' + " let g:material_terminal_italics = 1 + " let g:material_theme_style = 'darker' + " colorscheme material + let g:gruvbox_contrast_dark = "medium" "default + " let g:gruvbox_contrast_dark = "soft" + let g:gruvbox_improved_strings = 0 + let g:gruvbox_improved_warnings = 1 + colorscheme gruvbox +endif + + +"------------------------------------------------------------------------------ +"""bash language server +"------------------------------------------------------------------------------ +if executable('bash-language-server') + au User lsp_setup call lsp#register_server({ + \ 'name': 'bash-language-server', + \ 'cmd': {server_info->[&shell, &shellcmdflag, 'bash-language-server start']}, + \ 'allowlist': ['sh'], + \ }) +endif + +"------------------------------------------------------------------------------ +" NICE COC +"------------------------------------------------------------------------------ + +" Always show the signcolumn, otherwise it would shift the text each time +" diagnostics appear/become resolved. +if has("nvim-0.5.0") || has("patch-8.1.1564") + " Recently vim can merge signcolumn and number column into one + set signcolumn=number +else + set signcolumn=yes +endif +inoremap + \ pumvisible() ? "\" : + \ check_back_space() ? "\" : + \ coc#refresh() +inoremap pumvisible() ? "\" : "\" +function! s:check_back_space() abort + let col = col('.') - 1 + return !col || getline('.')[col - 1] =~# '\s' +endfunction +" Use to trigger completion. +if has('nvim') + inoremap coc#refresh() +else + inoremap coc#refresh() +endif +" Make auto-select the first completion item and notify coc.nvim to +" format on enter, could be remapped by other vim plugin +inoremap pumvisible() ? coc#_select_confirm() + \: "\u\\=coc#on_enter()\" +nmap [g (coc-diagnostic-prev) +nmap ]g (coc-diagnostic-next) +" GoTo code navigation. +nmap gd (coc-definition) +nmap gy (coc-type-definition) +nmap gi (coc-implementation) +nmap gr (coc-references) +" Use K to show documentation in preview window. +nnoremap K :call show_documentation() +function! s:show_documentation() + if (index(['vim','help'], &filetype) >= 0) + execute 'h '.expand('') + elseif (coc#rpc#ready()) + call CocActionAsync('doHover') + else + execute '!' . &keywordprg . " " . expand('') + endif +endfunction +" Highlight the symbol and its references when holding the cursor. +autocmd CursorHold * silent call CocActionAsync('highlight') +" Symbol renaming. +nmap rn (coc-rename) +" Formatting selected code. +xmap f (coc-format-selected) +nmap f (coc-format-selected) +augroup mygroup + autocmd! + " Setup formatexpr specified filetype(s). + autocmd FileType typescript,json,python,py,sh,bash setl formatexpr=CocAction('formatSelected') + " Update signature help on jump placeholder. + autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp') +augroup end +" Applying codeAction to the selected region. +" Example: `aap` for current paragraph +xmap a (coc-codeaction-selected) +nmap a (coc-codeaction-selected) +" Remap keys for applying codeAction to the current buffer. +nmap ac (coc-codeaction) +" Apply AutoFix to problem on the current line. +nmap qf (coc-fix-current) +" Run the Code Lens action on the current line. +nmap cl (coc-codelens-action) +" Map function and class text objects +" NOTE: Requires 'textDocument.documentSymbol' support from the language server. +xmap if (coc-funcobj-i) +omap if (coc-funcobj-i) +xmap af (coc-funcobj-a) +omap af (coc-funcobj-a) +xmap ic (coc-classobj-i) +omap ic (coc-classobj-i) +xmap ac (coc-classobj-a) +omap ac (coc-classobj-a) +" Remap and for scroll float windows/popups. +if has('nvim-0.4.0') || has('patch-8.2.0750') + nnoremap coc#float#has_scroll() ? coc#float#scroll(1) : "\" + nnoremap coc#float#has_scroll() ? coc#float#scroll(0) : "\" + inoremap coc#float#has_scroll() ? "\=coc#float#scroll(1)\" : "\" + inoremap coc#float#has_scroll() ? "\=coc#float#scroll(0)\" : "\" + vnoremap coc#float#has_scroll() ? coc#float#scroll(1) : "\" + vnoremap coc#float#has_scroll() ? coc#float#scroll(0) : "\" +endif +" Use CTRL-S for selections ranges. +" Requires 'textDocument/selectionRange' support of language server. +nmap (coc-range-select) +xmap (coc-range-select) +" Add `:Format` command to format current buffer. +command! -nargs=0 Format :call CocActionAsync('format') +" Add `:Fold` command to fold current buffer. +command! -nargs=? Fold :call CocAction('fold', ) +" Add `:OR` command for organize imports of the current buffer. +command! -nargs=0 OR :call CocActionAsync('runCommand', 'editor.action.organizeImport') +" Add (Neo)Vim's native statusline support. +" NOTE: Please see `:h coc-status` for integrations with external plugins that +" provide custom statusline: lightline.vim, vim-airline. +set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')} +" Mappings for CoCList +" Show all diagnostics. +nnoremap cd :CocCommand fzf-preview.CocDiagnostics +" Manage extensions. +nnoremap ce :CocList extensions +" Show commands. +nnoremap cc :CocCommand fzf-preview.CommandPalette +" Find symbol of current document. +nnoremap co :CocOutline +" Search workspace symbols. +nnoremap cs :CocCommand fzf-preview.BufferLines +" Do default action for next item. +nnoremap cj :CocNext +" Do default action for previous item. +nnoremap ck :CocPrev +" Resume latest coc list. +nnoremap cp :CocListResume +" show references with fzf +nnoremap cr :CocCommand fzf-preview.CocReferences +" show implementations with fzf +nnoremap ci :CocCommand fzf-preview.CocImplementations + +"------------------------------------------------------------------------------ +"which key +"------------------------------------------------------------------------------ + +set timeoutlen=400 + +"------------------------------------------------------------------------------ +" Floaterm +"------------------------------------------------------------------------------ + +let g:floaterm_width = 0.80 +let g:floaterm_height = 0.88 +let g:floaterm_wintype = 'float' +let g:floaterm_position = 'center' + +let g:floaterm_autoclose = 1 +" let g:floaterm_autohide = 2 + +"------------------------------------------------------------------------------ +" custom commands +"------------------------------------------------------------------------------ + +command! Reload execute "source ~/.vimrc" +command! Config execute ":e ~/.vimrc" +command! Env execute ":Dotenv .env" +command! MakeTags !ctags -R . +command! Ovewrite execute ":w !sudo tee %" +command! Aniwrapper execute ":FloatermNew aniwrapper -qtdoomone -D 144" + +"------------------------------------------------------------------------------ +"KEYBINDINGS +"------------------------------------------------------------------------------ + +let g:mapleader = "\" +let g:maplocalleader = ',' +" imap +nmap :set paste!set paste? +nmap :! +nmap :WhichKey '' +nmap :WhichKey ',' +nmap :NERDTreeToggle +" nnoremap :wa:vertical botright term ++kill=term +nmap :wa:FloatermToggle floatingterm +tnoremap :FloatermToggle floatingterm +nmap Q !!$SHELL + +" reselect visual selection after indent +vnoremap < >gv + +" open file under cursor, create if necessary +nnoremap gF :edit + +" fzf +nnoremap // :CocCommand fzf-preview.Lines +nnoremap ?? :CocCommand fzf-preview.BufferLines + +" search fzf, refs, impls, defs +nmap ff :CocCommand fzf-preview.ProjectFiles +" aniwrapper/ani-cli (until i find better use for a keys) +nmap as :FloatermNew --title=aniwrapper aniwrapper -qtdoomone -D144 +nmap ad :FloatermNew --title=aniwrapper ani-cli -q720p -cd/home/sudacode/Videos/sauce -D144 +" buffers +nmap bB :CocCommand fzf-preview.AllBuffers +nmap bb :CocCommand fzf-preview.Buffers +nmap bk :bdelete +nmap bn :bnext +nmap bp :bprev +nmap :bnext +nmap :bprev +" git +nmap gc :CocCommand fzf-preview.GitLogs +nmap gf :CocCommand fzf-preview.GitFiles +nmap gg :FloatermNew --title=lazygit --opener=vsplit --width=1.0 --height=1.0 lazygit +nmap gs :CocCommand fzf-preview.GitStatus +nmap gr :CocCommand fzf-preview.CocReferences +" help/history +nmap hc :CocCommand fzf-preview.CommandPalette +nmap hk :Maps +" insert snippets +nmap isp :-1read $HOME/Templates/python.py4jw +" any jump plugin +nmap j :AnyJump +" toggle/open +nmap ob :FloatermNew --title=bpytop --opener=vsplit bpytop +nmap od :FloatermNew --title=lazydocker --opener=vsplit lazydocker +nmap on :FloatermNew --title=ncmpcpp --opener=vsplit ncmpcpp +nmap oo :OverCommandLine +nmap or :FloatermNew --title=ranger --opener=vsplit ranger --cmd="cd $PWD" +" nmap ot :vertical botright ter ++kill=terminal ++close +nmap ot :FloatermNew --title=floaterm --name=vsplit-term --wintype=vsplit --position=botright --width=0.5 + +" search +nmap sc :nohls +nmap sf :Files +nmap sF :AllFiles +" toggle coc outline +nmap to :CocOutline +nmap tt :FloatermToggle vsplit-term +tnoremap tt :FloatermToggle vsplit-term