Last active
January 17, 2022 05:24
-
-
Save aldimhr/30a070570889a8215589fadee29baa1b to your computer and use it in GitHub Desktop.
.vim/vimrc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
" ============================== | |
let mapleader="," | |
" ============================== | |
" Plugins | |
" ============================== | |
call plug#begin('~/.vim/plugged') | |
Plug 'glepnir/dashboard-nvim' " nvim dashboard | |
Plug 'junegunn/fzf/', { 'do': { -> fzf#install() } } " file search --> ,n ,p ,g | |
Plug 'junegunn/fzf.vim' " file search | |
Plug 'sheerun/vim-polyglot' " complete syntax highlighting | |
Plug 'mattn/emmet-vim' " emmet --> ,, | |
Plug 'chrisbra/Colorizer' " highlight color codes and name --> :ColorHightlight :ColorClear | |
Plug 'scrooloose/nerdcommenter' " commenter --> <C+/> | |
Plug 'alvan/vim-closetag' " auto close tag | |
Plug 'tpope/vim-surround' " bracket | |
Plug 'AndrewRadev/tagalong.vim' " auto change name tag in html | |
Plug 'christoomey/vim-tmux-navigator' " tmux bindings | |
Plug 'Luxed/ayu-vim' " Theme | |
Plug 'neoclide/coc.nvim', {'branch': 'release'} | |
Plug 'scrooloose/nerdtree' | |
Plug 'tiagofumo/vim-nerdtree-syntax-highlight' | |
Plug 'ryanoasis/vim-devicons' | |
Plug 'vim-airline/vim-airline' | |
Plug 'vim-airline/vim-airline-themes' | |
Plug 'Yggdroot/indentLine' | |
call plug#end() | |
" ============================== | |
" DASHBOARD NVIM | |
" ============================== | |
let g:dashboard_default_executive ='fzf' | |
" ============================== | |
" TAGALONG CONFIG | |
" ============================== | |
let g:tagalong_verbose = 1 | |
" ============================== | |
" Terminal settings | |
" ============================== | |
set t_ZH=^[[3m | |
set t_ZR=^[[23m | |
if exists('+termguicolors') | |
let &t_8f="\<Esc>[38;2;%lu;%lu;%lum" | |
let &t_8b="\<Esc>[48;2;%lu;%lu;%lum" | |
set termguicolors | |
endif | |
" ============================== | |
" IndentLine | |
" ============================== | |
let g:indentLine_char = '▏' | |
let g:indentLine_first_char = '▏' | |
let g:indentLine_showFirstIndentLevel = 1 | |
let g:indentLine_fileTypeExclude = ['dashboard'] | |
" ============================== | |
" Airline | |
" ============================== | |
let g:airline#extensions#tabline#enabled = 1 | |
let g:airline_powerline_fonts = 1 | |
let g:airline_theme='ayu_mirage' | |
" ============================== | |
" Nerdtree | |
" ============================== | |
nnoremap <leader>n :NERDTreeToggle<CR> | |
let g:NERDTreeWinPos = "right" | |
let g:NERDTreeIgnore = ['^node_modules$'] | |
let g:NERDSpaceDelims=1 " add space after commenter | |
let NERDTreeShowHidden=1 | |
" ============================== | |
" Nerdcommenter | |
" ============================== | |
vmap <C-_> <leader>c<space> | |
vmap <C-\> <leader>cs | |
nmap <C-_> <leader>c<space> | |
imap <C-_> <esc><C-_>kelli | |
let NERDSpaceDelims=1 | |
" Allow commenting and inverting empty lines (useful when commenting a region) | |
let g:NERDCommentEmptyLines = 1 | |
" set nocompatible set runtimepath^=/path/to/coc.nvim | |
filetype plugin on | |
filetype plugin indent on | |
syntax on | |
" ============================== | |
" Tmux settings | |
" ============================== | |
if &term =~ '256color' | |
" Disable Background Color Erase (BCE) so that color schemes | |
" work properly when Vim is used inside tmux and GNU screen | |
set t_ut= | |
if has("terminfo") | |
set t_Co=256 | |
set t_Sf=<Esc>[3%p1%dm | |
set t_Sb=<Esc>[4%p1%dm | |
else | |
set t_Co=256 | |
set t_Sf=<Esc>[3%dm | |
set t_Sb=<Esc>[4%dm | |
endif | |
endif | |
" set name tab depends on file name vim | |
autocmd BufReadPost,FileReadPost,BufNewFile * call system("tmux rename-window " . expand("%:t")) | |
" set name when change buffer | |
autocmd BufEnter * let &titlestring = ' ' . expand("%:t") | |
" set name when vim close | |
autocmd VimLeave * call system("tmux rename-window bash") | |
" ============================== | |
" Global settings | |
" ============================== | |
set number | |
set nowrap | |
set bg=dark | |
set t_Co=256 | |
set noshowmode " disable mode in bottom menu | |
set cmdheight=1 " delete a line in bottom | |
set nohlsearch " disable highlight in search mode | |
set autoindent | |
set termguicolors " enable true colors support | |
set relativenumber | |
set wildmenu | |
set wildmode=longest:list,full " get bash-like tab completions | |
set clipboard=unnamedplus " set clipboard same as system | |
set hidden | |
set mouse=a " | |
set directory=/tmp " swap directory | |
set nobackup | |
set noswapfile | |
set colorcolumn=100 | |
" enable syntax sync fromstart when enter a JS or TS file | |
autocmd BufEnter *.{js,jsx,ts,tsx} :syntax sync fromstart | |
autocmd BufLeave *.{js,jsx,ts,tsx} :syntax sync clear | |
" ============================== | |
" Tab / indent settings | |
" ============================== | |
set tabstop=2 | |
set expandtab | |
set shiftwidth=2 | |
set softtabstop=2 | |
" ============================== | |
" Theme | |
" ============================== | |
let ayucolor="mirage" " for mirage version of theme | |
colorscheme ayu | |
" ============================== | |
" Remap in insert mode | |
" ============================== | |
inoremap jk <Esc> | |
" ============================== | |
" Remap in normal mode | |
" ============================== | |
noremap j gj | |
noremap k gk | |
" toggle wrap | |
nnoremap <C-z> :set wrap!<CR> | |
" close buffer | |
nnoremap <leader>w :bd<CR> | |
" next buffer | |
nnoremap <leader>l :bn<CR> | |
" previous buffer | |
nnoremap <leader>h :bp<CR> | |
" ============================== | |
" Fuzzy finder map - fzf | |
" ============================== | |
" let g:fzf_layout = { 'window': { 'width': 1, 'height': 0.4, 'yoffset': 1, 'border': 'horizontal' } } | |
" find file in directory | |
nnoremap <C-p> :Files<CR> | |
" find file in git repository | |
nnoremap <leader>g :GFiles<CR> | |
" find file by string / regex | |
nnoremap <leader>p :Rg! | |
" ============================== | |
" EMMET settings | |
" type smt and than 'control+y+,' --> to use emmet | |
" ============================== | |
let g:user_emmet_install_global = 0 | |
autocmd FileType html,css,php,javascript.jsx EmmetInstall | |
let g:user_emmet_leader_key=',' | |
" use emmet in jsx | |
let g:user_emmet_settings = { | |
\ 'javascript' : { | |
\ 'extends' : 'jsx', | |
\ }, | |
\ 'typescript' : { | |
\ 'extends' : 'jsx', | |
\ }, | |
\} | |
" ============================== | |
" Settings cursor in insert and normal mode | |
" ============================== | |
if has("autocmd") | |
au VimEnter,InsertLeave * silent execute '!echo -ne "\e[1 q"' | redraw! | |
au InsertEnter,InsertChange * | |
\ if v:insertmode == 'i' | | |
\ silent execute '!echo -ne "\e[5 q"' | redraw! | | |
\ elseif v:insertmode == 'r' | | |
\ silent execute '!echo -ne "\e[3 q"' | redraw! | | |
\ endif | |
au VimLeave * silent execute '!echo -ne "\e[ q"' | redraw! | |
endif | |
" ============================== | |
" coc global config | |
" ============================== | |
let g:coc_global_extensions = [ | |
\ 'coc-snippets', | |
\ 'coc-pairs', | |
\ 'coc-html', | |
\ 'coc-tsserver', | |
\ 'coc-eslint', | |
\ 'coc-prettier', | |
\ 'coc-json', | |
\ 'coc-tailwindcss', | |
\ 'coc-vetur', | |
\ 'coc-phpls', | |
\ 'coc-emmet' | |
\ ] | |
if isdirectory('./node_modules') && isdirectory('./node_modules/eslint') | |
let g:coc_global_extensions += ['coc-eslint'] | |
endif | |
" ============================== | |
" coc phpls | |
" ============================== | |
if executable('intelephense') | |
augroup LspPHPIntelephense | |
au! | |
au User lsp_setup call lsp#register_server({ | |
\ 'name': 'intelephense', | |
\ 'cmd': {server_info->[&shell, &shellcmdflag, 'intelephense --stdio']}, | |
\ 'whitelist': ['php'], | |
\ 'initialization_options': {'storagePath': '/tmp/intelephense'}, | |
\ 'workspace_config': { | |
\ 'intelephense': { | |
\ 'files': { | |
\ 'maxSize': 1000000, | |
\ 'associations': ['*.php', '*.phtml'], | |
\ 'exclude': [], | |
\ }, | |
\ 'completion': { | |
\ 'insertUseDeclaration': v:true, | |
\ 'fullyQualifyGlobalConstantsAndFunctions': v:false, | |
\ 'triggerParameterHints': v:true, | |
\ 'maxItems': 100, | |
\ }, | |
\ 'format': { | |
\ 'enable': v:true | |
\ }, | |
\ }, | |
\ } | |
\}) | |
augroup END | |
endif | |
" ============================== | |
" coc prettier config | |
" ============================== | |
command! -nargs=0 Prettier :CocCommand prettier.formatFile | |
vmap <leader>f <Plug>(coc-format-selected) | |
nmap <leader>f <Plug>(coc-format-selected) | |
" ============================== | |
" COC CLOSETAG | |
" ============================== | |
" filenames like *.xml, *.html, *.xhtml, ... | |
" These are the file extensions where this plugin is enabled. | |
" let g:closetag_filenames = '*.html,*.xhtml,*.phtml' | |
" 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' | |
" 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' | |
" integer value [0|1] | |
" This will make the list of non-closing tags case-sensitive (e.g. `<Link>` will be closed while `<link>` won't.) | |
" | |
let g:closetag_emptyTags_caseSensitive = 1 | |
" dict | |
" Disables auto-close if not in a "valid" region (based on filetype) | |
" | |
let g:closetag_regions = { | |
\ 'typescript.tsx': 'jsxRegion,tsxRegion', | |
\ 'javascript.jsx': 'jsxRegion', | |
\ 'typescriptreact': 'jsxRegion,tsxRegion', | |
\ 'javascriptreact': 'jsxRegion', | |
\ } | |
" Shortcut for closing tags, default is '>' | |
" | |
let g:closetag_shortcut = '>' | |
" Add > at current position without closing the current tag, default is '' | |
" | |
let g:closetag_close_shortcut = '<leader>>' | |
" ============================== | |
" COC DEFAULT SETTINGS | |
" ============================== | |
" Set internal encoding of vim, not needed on neovim, since coc.nvim using some | |
" unicode characters in the file autoload/float.vim | |
set encoding=utf-8 | |
" TextEdit might fail if hidden is not set. | |
set hidden | |
" Some servers have issues with backup files, see #649. | |
set nobackup | |
set nowritebackup | |
" Give more space for displaying messages. | |
set cmdheight=2 | |
" Having longer updatetime (default is 4000 ms = 4 s) leads to noticeable | |
" delays and poor user experience. | |
set updatetime=300 | |
" Don't pass messages to |ins-completion-menu|. | |
set shortmess+=c | |
" 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 | |
" Use tab for trigger completion with characters ahead and navigate. | |
" NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by | |
" other plugin before putting this into your config. | |
inoremap <silent><expr> <TAB> | |
\ pumvisible() ? "\<C-n>" : | |
\ <SID>check_back_space() ? "\<TAB>" : | |
\ coc#refresh() | |
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>" | |
function! s:check_back_space() abort | |
let col = col('.') - 1 | |
return !col || getline('.')[col - 1] =~# '\s' | |
endfunction | |
" Use <c-space> to trigger completion. | |
if has('nvim') | |
inoremap <silent><expr> <c-space> coc#refresh() | |
else | |
inoremap <silent><expr> <c-@> coc#refresh() | |
endif | |
" Make <CR> auto-select the first completion item and notify coc.nvim to | |
" format on enter, <cr> could be remapped by other vim plugin | |
inoremap <silent><expr> <cr> pumvisible() ? coc#_select_confirm() | |
\: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>" | |
" Use `[g` and `]g` to navigate diagnostics | |
" Use `:CocDiagnostics` to get all diagnostics of current buffer in location list. | |
nmap <silent> [g <Plug>(coc-diagnostic-prev) | |
nmap <silent> ]g <Plug>(coc-diagnostic-next) | |
" GoTo code navigation. | |
nmap <silent> gd <Plug>(coc-definition) | |
nmap <silent> gy <Plug>(coc-type-definition) | |
nmap <silent> gi <Plug>(coc-implementation) | |
nmap <silent> gr <Plug>(coc-references) | |
" Use K to show documentation in preview window. | |
nnoremap <silent> K :call <SID>show_documentation()<CR> | |
function! s:show_documentation() | |
if (index(['vim','help'], &filetype) >= 0) | |
execute 'h '.expand('<cword>') | |
elseif (coc#rpc#ready()) | |
call CocActionAsync('doHover') | |
else | |
execute '!' . &keywordprg . " " . expand('<cword>') | |
endif | |
endfunction | |
" Highlight the symbol and its references when holding the cursor. | |
autocmd CursorHold * silent call CocActionAsync('highlight') | |
" Symbol renaming. | |
nmap <leader>rn <Plug>(coc-rename) | |
" Formatting selected code. | |
xmap <leader>f <Plug>(coc-format-selected) | |
nmap <leader>f <Plug>(coc-format-selected) | |
augroup mygroup | |
autocmd! | |
" Setup formatexpr specified filetype(s). | |
autocmd FileType typescript,json 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: `<leader>aap` for current paragraph | |
xmap <leader>a <Plug>(coc-codeaction-selected) | |
nmap <leader>a <Plug>(coc-codeaction-selected) | |
" Remap keys for applying codeAction to the current buffer. | |
nmap <leader>ac <Plug>(coc-codeaction) | |
" Apply AutoFix to problem on the current line. | |
nmap <leader>qf <Plug>(coc-fix-current) | |
" Map function and class text objects | |
" NOTE: Requires 'textDocument.documentSymbol' support from the language server. | |
xmap if <Plug>(coc-funcobj-i) | |
omap if <Plug>(coc-funcobj-i) | |
xmap af <Plug>(coc-funcobj-a) | |
omap af <Plug>(coc-funcobj-a) | |
xmap ic <Plug>(coc-classobj-i) | |
omap ic <Plug>(coc-classobj-i) | |
xmap ac <Plug>(coc-classobj-a) | |
omap ac <Plug>(coc-classobj-a) | |
" Remap <C-f> and <C-b> for scroll float windows/popups. | |
if has('nvim-0.4.0') || has('patch-8.2.0750') | |
nnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>" | |
nnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>" | |
inoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(1)\<cr>" : "\<Right>" | |
inoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(0)\<cr>" : "\<Left>" | |
vnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>" | |
vnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>" | |
endif | |
" Use CTRL-S for selections ranges. | |
" Requires 'textDocument/selectionRange' support of language server. | |
nmap <silent> <C-s> <Plug>(coc-range-select) | |
xmap <silent> <C-s> <Plug>(coc-range-select) | |
" Add `:Format` command to format current buffer. | |
command! -nargs=0 Format :call CocAction('format') | |
" Add `:Fold` command to fold current buffer. | |
command! -nargs=? Fold :call CocAction('fold', <f-args>) | |
" Add `:OR` command for organize imports of the current buffer. | |
command! -nargs=0 OR :call CocAction('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 <silent><nowait> <space>a :<C-u>CocList diagnostics<cr> | |
" Manage extensions. | |
nnoremap <silent><nowait> <space>e :<C-u>CocList extensions<cr> | |
" Show commands. | |
nnoremap <silent><nowait> <space>c :<C-u>CocList commands<cr> | |
" Find symbol of current document. | |
nnoremap <silent><nowait> <space>o :<C-u>CocList outline<cr> | |
" Search workspace symbols. | |
nnoremap <silent><nowait> <space>s :<C-u>CocList -I symbols<cr> | |
" Do default action for next item. | |
nnoremap <silent><nowait> <space>j :<C-u>CocNext<CR> | |
" Do default action for previous item. | |
nnoremap <silent><nowait> <space>k :<C-u>CocPrev<CR> | |
" Resume latest coc list. | |
nnoremap <silent><nowait> <space>p :<C-u>CocListResume<CR> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment