Last active
February 27, 2020 21:00
-
-
Save surajitbasak109/1c876ca96be482d8a1b3582af5b9860b to your computer and use it in GitHub Desktop.
This file contains hidden or 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
set runtimepath+=~/.vim_runtime | |
call plug#begin() | |
Plug 'terryma/vim-multiple-cursors' | |
Plug 'editorconfig/editorconfig-vim' | |
"Prettier | |
Plug 'prettier/vim-prettier', { 'do': 'yarn install', 'for': ['javascript', 'typescript', 'css', 'less', 'scss', 'json', 'graphql', 'markdown', 'vue', 'yaml', 'html'] } | |
let g:prettier#autoformat = 0 | |
autocmd BufWritePre *.js,*.jsx,*.mjs,*.ts,*.tsx,*.css,*.less,*.scss,*.json,*.graphql,*.md,*.vue,*.yaml,*.html PrettierAsync | |
" Emmet Plugin | |
Plug 'mattn/emmet-vim' | |
" Ultisnips | |
" Track the engine. | |
Plug 'SirVer/ultisnips' | |
"Conquer of Vim | |
Plug 'neoclide/coc.nvim', {'branch': 'release'} | |
Plug 'ryanoasis/vim-devicons' | |
Plug 'airblade/vim-gitgutter' | |
Plug 'scrooloose/nerdcommenter' | |
Plug 'HerringtonDarkholme/yats.vim' " TS Syntax | |
Plug 'christoomey/vim-tmux-navigator' | |
Plug 'morhetz/gruvbox' | |
Plug 'alvan/vim-closetag' | |
" React Code Snippets | |
Plug 'mlaursen/vim-react-snippets' | |
" Snipmate and it's dependencies: | |
"Plug 'MarcWeber/vim-addon-mw-utils' | |
"Plug 'tomtom/tlib_vim' | |
Plug 'pangloss/vim-javascript' | |
Plug 'leafgarland/typescript-vim' | |
Plug 'maxmellon/vim-jsx-pretty' | |
call plug#end() | |
source ~/.vim_runtime/vimrcs/basic.vim | |
source ~/.vim_runtime/vimrcs/filetypes.vim | |
source ~/.vim_runtime/vimrcs/plugins_config.vim | |
source ~/.vim_runtime/vimrcs/extended.vim | |
source ~/.vim_runtime/vimrcs/coc.vim | |
source ~/.vim_runtime/vimrcs/closetag.vim | |
try | |
source ~/.vim_runtime/my_configs.vim | |
catch | |
endtry |
This file contains hidden or 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
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Maintainer: | |
" Amir Salihefendic — @amix3k | |
" | |
" Awesome_version: | |
" Get this config, nice color schemes and lots of plugins! | |
" | |
" Install the awesome version from: | |
" | |
" https://github.com/amix/vimrc | |
" | |
" Sections: | |
" -> General | |
" -> VIM user interface | |
" -> Colors and Fonts | |
" -> Files and backups | |
" -> Text, tab and indent related | |
" -> Visual mode related | |
" -> Moving around, tabs and buffers | |
" -> Status line | |
" -> Editing mappings | |
" -> vimgrep searching and cope displaying | |
" -> Spell checking | |
" -> Misc | |
" -> Helper functions | |
" | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => General | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Sets how many lines of history VIM has to remember | |
set history=500 | |
" Enable filetype plugins | |
filetype plugin on | |
filetype indent on | |
" Set to auto read when a file is changed from the outside | |
set autoread | |
au FocusGained,BufEnter * checktime | |
" With a map leader it's possible to do extra key combinations | |
" like <leader>w saves the current file | |
let mapleader = "," | |
" Fast saving | |
nmap <leader>w :w!<cr> | |
" :W sudo saves the file | |
" (useful for handling the permission-denied error) | |
command! W execute 'w !sudo tee % > /dev/null' <bar> edit! | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => VIM user interface | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Set 7 lines to the cursor - when moving vertically using j/k | |
set so=7 | |
" Avoid garbled characters in Chinese language windows OS | |
let $LANG='en' | |
set langmenu=en | |
source $VIMRUNTIME/delmenu.vim | |
source $VIMRUNTIME/menu.vim | |
" Turn on the Wild menu | |
set wildmenu | |
" Ignore compiled files | |
set wildignore=*.o,*~,*.pyc | |
if has("win16") || has("win32") | |
set wildignore+=.git\*,.hg\*,.svn\* | |
else | |
set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.DS_Store | |
endif | |
"Always show current position | |
set ruler | |
" Height of the command bar | |
set cmdheight=1 | |
" A buffer becomes hidden when it is abandoned | |
set hid | |
" Configure backspace so it acts as it should act | |
set backspace=eol,start,indent | |
set whichwrap+=<,>,h,l | |
" Ignore case when searching | |
set ignorecase | |
" When searching try to be smart about cases | |
set smartcase | |
" Highlight search results | |
set hlsearch | |
" Makes search act like search in modern browsers | |
set incsearch | |
" Don't redraw while executing macros (good performance config) | |
set lazyredraw | |
" For regular expressions turn magic on | |
set magic | |
" Show matching brackets when text indicator is over them | |
set showmatch | |
" How many tenths of a second to blink when matching brackets | |
set mat=2 | |
" No annoying sound on errors | |
set noerrorbells | |
set novisualbell | |
set t_vb= | |
set tm=500 | |
" Properly disable sound on errors on MacVim | |
if has("gui_macvim") | |
autocmd GUIEnter * set vb t_vb= | |
endif | |
" Add a bit extra margin to the left | |
set foldcolumn=1 | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Colors and Fonts | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Enable syntax highlighting | |
syntax enable | |
" Enable 256 colors palette in Gnome Terminal | |
if $COLORTERM == 'gnome-terminal' | |
set t_Co=256 | |
endif | |
try | |
" colorscheme desert | |
colorscheme gruvbox | |
catch | |
endtry | |
set background=dark | |
" Set extra options when running in GUI mode | |
if has("gui_running") | |
set guioptions-=T | |
set guioptions-=e | |
set t_Co=256 | |
set guitablabel=%M\ %t | |
endif | |
" Set utf8 as standard encoding and en_US as the standard language | |
set encoding=utf8 | |
" Use Unix as the standard file type | |
set ffs=unix,dos,mac | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Files, backups and undo | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Turn backup off, since most stuff is in SVN, git etc. anyway... | |
set nobackup | |
set nowb | |
set noswapfile | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Text, tab and indent related | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Use spaces instead of tabs | |
set expandtab | |
" Be smart when using tabs ;) | |
set smarttab | |
" 1 tab == 4 spaces | |
set shiftwidth=4 | |
set tabstop=4 | |
" Linebreak on 500 characters | |
set lbr | |
set tw=500 | |
set ai "Auto indent | |
set si "Smart indent | |
set wrap "Wrap lines | |
"""""""""""""""""""""""""""""" | |
" => Visual mode related | |
"""""""""""""""""""""""""""""" | |
" Visual mode pressing * or # searches for the current selection | |
" Super useful! From an idea by Michael Naumann | |
vnoremap <silent> * :<C-u>call VisualSelection('', '')<CR>/<C-R>=@/<CR><CR> | |
vnoremap <silent> # :<C-u>call VisualSelection('', '')<CR>?<C-R>=@/<CR><CR> | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Moving around, tabs, windows and buffers | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Map <Space> to / (search) and Ctrl-<Space> to ? (backwards search) | |
map <space> / | |
map <C-space> ? | |
" Disable highlight when <leader><cr> is pressed | |
map <silent> <leader><cr> :noh<cr> | |
" Smart way to move between windows | |
map <C-j> <C-W>j | |
map <C-k> <C-W>k | |
map <C-h> <C-W>h | |
map <C-l> <C-W>l | |
" Close the current buffer | |
map <leader>bd :Bclose<cr>:tabclose<cr>gT | |
" Close all the buffers | |
map <leader>ba :bufdo bd<cr> | |
map <leader>l :bnext<cr> | |
map <leader>h :bprevious<cr> | |
" Useful mappings for managing tabs | |
map <leader>tn :tabnew<cr> | |
map <leader>to :tabonly<cr> | |
map <leader>tc :tabclose<cr> | |
map <leader>tm :tabmove | |
map <leader>t<leader> :tabnext | |
" Let 'tl' toggle between this and the last accessed tab | |
let g:lasttab = 1 | |
nmap <Leader>tl :exe "tabn ".g:lasttab<CR> | |
au TabLeave * let g:lasttab = tabpagenr() | |
" Opens a new tab with the current buffer's path | |
" Super useful when editing files in the same directory | |
map <leader>te :tabedit <C-r>=expand("%:p:h")<cr>/ | |
" Switch CWD to the directory of the open buffer | |
map <leader>cd :cd %:p:h<cr>:pwd<cr> | |
" Specify the behavior when switching between buffers | |
try | |
set switchbuf=useopen,usetab,newtab | |
set stal=2 | |
catch | |
endtry | |
" Return to last edit position when opening files (You want this!) | |
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif | |
"""""""""""""""""""""""""""""" | |
" => Status line | |
"""""""""""""""""""""""""""""" | |
" Always show the status line | |
set laststatus=2 | |
" Format the status line | |
set statusline=\ %{HasPaste()}%F%m%r%h\ %w\ \ CWD:\ %r%{getcwd()}%h\ \ \ Line:\ %l\ \ Column:\ %c | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Editing mappings | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Remap VIM 0 to first non-blank character | |
map 0 ^ | |
" Move a line of text using ALT+[jk] or Command+[jk] on mac | |
nmap <M-j> mz:m+<cr>`z | |
nmap <M-k> mz:m-2<cr>`z | |
vmap <M-j> :m'>+<cr>`<my`>mzgv`yo`z | |
vmap <M-k> :m'<-2<cr>`>my`<mzgv`yo`z | |
if has("mac") || has("macunix") | |
nmap <D-j> <M-j> | |
nmap <D-k> <M-k> | |
vmap <D-j> <M-j> | |
vmap <D-k> <M-k> | |
endif | |
" Delete trailing white space on save, useful for some filetypes ;) | |
fun! CleanExtraSpaces() | |
let save_cursor = getpos(".") | |
let old_query = getreg('/') | |
silent! %s/\s\+$//e | |
call setpos('.', save_cursor) | |
call setreg('/', old_query) | |
endfun | |
if has("autocmd") | |
autocmd BufWritePre *.txt,*.js,*.py,*.wiki,*.sh,*.coffee :call CleanExtraSpaces() | |
endif | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Spell checking | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Pressing ,ss will toggle and untoggle spell checking | |
map <leader>ss :setlocal spell!<cr> | |
" Shortcuts using <leader> | |
map <leader>sn ]s | |
map <leader>sp [s | |
map <leader>sa zg | |
map <leader>s? z= | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Misc | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Remove the Windows ^M - when the encodings gets messed up | |
noremap <Leader>m mmHmt:%s/<C-V><cr>//ge<cr>'tzt'm | |
" Quickly open a buffer for scribble | |
map <leader>q :e ~/buffer<cr> | |
" Quickly open a markdown buffer for scribble | |
map <leader>x :e ~/buffer.md<cr> | |
" Toggle paste mode on and off | |
map <leader>pp :setlocal paste!<cr> | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Helper functions | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Returns true if paste mode is enabled | |
function! HasPaste() | |
if &paste | |
return 'PASTE MODE ' | |
endif | |
return '' | |
endfunction | |
" Don't close window, when deleting a buffer | |
command! Bclose call <SID>BufcloseCloseIt() | |
function! <SID>BufcloseCloseIt() | |
let l:currentBufNum = bufnr("%") | |
let l:alternateBufNum = bufnr("#") | |
if buflisted(l:alternateBufNum) | |
buffer # | |
else | |
bnext | |
endif | |
if bufnr("%") == l:currentBufNum | |
new | |
endif | |
if buflisted(l:currentBufNum) | |
execute("bdelete! ".l:currentBufNum) | |
endif | |
endfunction | |
function! CmdLine(str) | |
call feedkeys(":" . a:str) | |
endfunction | |
function! VisualSelection(direction, extra_filter) range | |
let l:saved_reg = @" | |
execute "normal! vgvy" | |
let l:pattern = escape(@", "\\/.*'$^~[]") | |
let l:pattern = substitute(l:pattern, "\n$", "", "") | |
if a:direction == 'gv' | |
call CmdLine("Ack '" . l:pattern . "' " ) | |
elseif a:direction == 'replace' | |
call CmdLine("%s" . '/'. l:pattern . '/') | |
endif | |
let @/ = l:pattern | |
let @" = l:saved_reg | |
endfunction |
This file contains hidden or 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
" filenames like *.xml, *.html, *.xhtml, ... | |
" These are the file extensions where this plugin is enabled. | |
" | |
let g:closetag_filenames = '*.html,*.xhtml,*.phtml,*.jsx' | |
" 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,jsx' | |
" 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', | |
\ } | |
" 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>>' |
This file contains hidden or 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
" coc config | |
let g:coc_global_extensions = [ | |
\ 'coc-snippets', | |
\ 'coc-pairs', | |
\ 'coc-tsserver', | |
\ 'coc-eslint', | |
\ 'coc-prettier', | |
\ 'coc-json', | |
\ ] | |
" from readme | |
" if hidden is not set, TextEdit might fail. | |
set hidden " Some servers have issues with backup files, see #649 set nobackup set nowritebackup " Better display for messages set cmdheight=2 " You will have bad experience for diagnostic messages when it's default 4000. | |
set updatetime=300 | |
" don't give |ins-completion-menu| messages. | |
set shortmess+=c | |
" always show signcolumns | |
set signcolumn=yes | |
" Use tab for trigger completion with characters ahead and navigate. | |
" Use command ':verbose imap <tab>' to make sure tab is not mapped by other plugin. | |
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. | |
inoremap <silent><expr> <c-space> coc#refresh() | |
" Use <cr> to confirm completion, `<C-g>u` means break undo chain at current position. | |
" Coc only does snippet and additional edit on confirm. | |
inoremap <expr> <cr> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>" | |
" Or use `complete_info` if your vim support it, like: | |
" inoremap <expr> <cr> complete_info()["selected"] != "-1" ? "\<C-y>" : "\<C-g>u\<CR>" | |
" Use `[g` and `]g` to navigate diagnostics | |
nmap <silent> [g <Plug>(coc-diagnostic-prev) | |
nmap <silent> ]g <Plug>(coc-diagnostic-next) | |
" Remap keys for gotos | |
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>') | |
else | |
call CocAction('doHover') | |
endif | |
endfunction | |
" Highlight symbol under cursor on CursorHold | |
autocmd CursorHold * silent call CocActionAsync('highlight') | |
" Remap for rename current word | |
nmap <F2> <Plug>(coc-rename) | |
" Remap for format selected region | |
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 | |
" Remap for do codeAction of selected region, ex: `<leader>aap` for current paragraph | |
xmap <leader>a <Plug>(coc-codeaction-selected) | |
nmap <leader>a <Plug>(coc-codeaction-selected) | |
" Remap for do codeAction of current line | |
nmap <leader>ac <Plug>(coc-codeaction) | |
" Fix autofix problem of current line | |
nmap <leader>qf <Plug>(coc-fix-current) | |
" Create mappings for function text object, requires document symbols feature of languageserver. | |
xmap if <Plug>(coc-funcobj-i) | |
xmap af <Plug>(coc-funcobj-a) | |
omap if <Plug>(coc-funcobj-i) | |
omap af <Plug>(coc-funcobj-a) | |
" Use <C-d> for select selections ranges, needs server support, like: coc-tsserver, coc-python | |
nmap <silent> <C-d> <Plug>(coc-range-select) | |
xmap <silent> <C-d> <Plug>(coc-range-select) | |
" Use `:Format` to format current buffer | |
command! -nargs=0 Format :call CocAction('format') | |
" Use `:Fold` to fold current buffer | |
command! -nargs=? Fold :call CocAction('fold', <f-args>) | |
" use `:OR` for organize import of current buffer | |
command! -nargs=0 OR :call CocAction('runCommand', 'editor.action.organizeImport') | |
" Add status line support, for integration with other plugin, checkout `:h coc-status` | |
set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')} | |
" Using CocList | |
" Show all diagnostics | |
nnoremap <silent> <space>a :<C-u>CocList diagnostics<cr> | |
" Manage extensions | |
nnoremap <silent> <space>e :<C-u>CocList extensions<cr> | |
" Show commands | |
nnoremap <silent> <space>c :<C-u>CocList commands<cr> | |
" Find symbol of current document | |
nnoremap <silent> <space>o :<C-u>CocList outline<cr> | |
" Search workspace symbols | |
nnoremap <silent> <space>s :<C-u>CocList -I symbols<cr> | |
" Do default action for next item. | |
nnoremap <silent> <space>j :<C-u>CocNext<CR> | |
" Do default action for previous item. | |
nnoremap <silent> <space>k :<C-u>CocPrev<CR> | |
" Resume latest coc list | |
nnoremap <silent> <space>p :<C-u>CocListResume<CR> | |
" 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. | |
set signcolumn=yes | |
" 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. | |
inoremap <silent><expr> <c-space> coc#refresh() | |
" Use `[g` and `]g` to navigate diagnostics | |
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>') | |
else | |
call CocAction('doHover') | |
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 line. | |
nmap <leader>ac <Plug>(coc-codeaction) | |
" Apply AutoFix to problem on the current line. | |
nmap <leader>qf <Plug>(coc-fix-current) | |
" Introduce function text object | |
" NOTE: Requires 'textDocument.documentSymbol' support from the language server. | |
xmap if <Plug>(coc-funcobj-i) | |
xmap af <Plug>(coc-funcobj-a) | |
omap if <Plug>(coc-funcobj-i) | |
omap af <Plug>(coc-funcobj-a) | |
" Use <TAB> for selections ranges. | |
" NOTE: Requires 'textDocument/selectionRange' support from the language server. | |
" coc-tsserver, coc-python are the examples of servers that support it. | |
nmap <silent> <TAB> <Plug>(coc-range-select) | |
xmap <silent> <TAB> <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 using CoCList: | |
" Show all diagnostics. | |
nnoremap <silent> <space>a :<C-u>CocList diagnostics<cr> | |
" Manage extensions. | |
nnoremap <silent> <space>e :<C-u>CocList extensions<cr> | |
" Show commands. | |
nnoremap <silent> <space>c :<C-u>CocList commands<cr> | |
" Find symbol of current document. | |
nnoremap <silent> <space>o :<C-u>CocList outline<cr> | |
" Search workspace symbols. | |
nnoremap <silent> <space>s :<C-u>CocList -I symbols<cr> | |
" Do default action for next item. | |
nnoremap <silent> <space>j :<C-u>CocNext<CR> | |
" Do default action for previous item. | |
nnoremap <silent> <space>k :<C-u>CocPrev<CR> | |
" Resume latest coc list. | |
nnoremap <silent> <space>p :<C-u>CocListResume<CR> |
This file contains hidden or 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
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Important: | |
" This requries that you install https://github.com/amix/vimrc ! | |
" | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => GUI related | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Set font according to system | |
if has("mac") || has("macunix") | |
set gfn=IBM\ Plex\ Mono:h14,Hack:h14,Source\ Code\ Pro:h15,Menlo:h15 | |
elseif has("win16") || has("win32") | |
set gfn=IBM\ Plex\ Mono:h14,Source\ Code\ Pro:h12,Bitstream\ Vera\ Sans\ Mono:h11 | |
elseif has("gui_gtk2") | |
set gfn=IBM\ Plex\ Mono\ 14,:Hack\ 14,Source\ Code\ Pro\ 12,Bitstream\ Vera\ Sans\ Mono\ 11 | |
elseif has("linux") | |
set gfn=IBM\ Plex\ Mono\ 14,:Hack\ 14,Source\ Code\ Pro\ 12,Bitstream\ Vera\ Sans\ Mono\ 11 | |
elseif has("unix") | |
set gfn=Monospace\ 11 | |
endif | |
" Disable scrollbars (real hackers don't use scrollbars for navigation!) | |
set guioptions-=r | |
set guioptions-=R | |
set guioptions-=l | |
set guioptions-=L | |
" Colorscheme | |
set background=dark | |
colorscheme peaksea | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Fast editing and reloading of vimrc configs | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
map <leader>e :e! ~/.vim_runtime/my_configs.vim<cr> | |
autocmd! bufwritepost ~/.vim_runtime/my_configs.vim source ~/.vim_runtime/my_configs.vim | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Turn persistent undo on | |
" means that you can undo even when you close a buffer/VIM | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
try | |
set undodir=~/.vim_runtime/temp_dirs/undodir | |
set undofile | |
catch | |
endtry | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Command mode related | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Smart mappings on the command line | |
cno $h e ~/ | |
cno $d e ~/Desktop/ | |
cno $j e ./ | |
cno $c e <C-\>eCurrentFileDir("e")<cr> | |
" $q is super useful when browsing on the command line | |
" it deletes everything until the last slash | |
cno $q <C-\>eDeleteTillSlash()<cr> | |
" Bash like keys for the command line | |
cnoremap <C-A> <Home> | |
cnoremap <C-E> <End> | |
cnoremap <C-K> <C-U> | |
cnoremap <C-P> <Up> | |
cnoremap <C-N> <Down> | |
" Map ½ to something useful | |
map ½ $ | |
cmap ½ $ | |
imap ½ $ | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Parenthesis/bracket | |
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
vnoremap $1 <esc>`>a)<esc>`<i(<esc> | |
vnoremap $2 <esc>`>a]<esc>`<i[<esc> | |
vnoremap $3 <esc>`>a}<esc>`<i{<esc> | |
vnoremap $$ <esc>`>a"<esc>`<i"<esc> | |
vnoremap $q <esc>`>a'<esc>`<i'<esc> | |
vnoremap $e <esc>`>a"<esc>`<i"<esc> | |
" Map auto complete of (, ", ', [ | |
inoremap $1 ()<esc>i | |
inoremap $2 []<esc>i | |
inoremap $3 {}<esc>i | |
inoremap $4 {<esc>o}<esc>O | |
inoremap $q ''<esc>i | |
inoremap $e ""<esc>i | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => General abbreviations | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
iab xdate <C-r>=strftime("%d/%m/%y %H:%M:%S")<cr> | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Omni complete functions | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
autocmd FileType css set omnifunc=csscomplete#CompleteCSS | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Ack searching and cope displaying | |
" requires ack.vim - it's much better than vimgrep/grep | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Use the the_silver_searcher if possible (much faster than Ack) | |
if executable('ag') | |
let g:ackprg = 'ag --vimgrep --smart-case' | |
endif | |
" When you press gv you Ack after the selected text | |
vnoremap <silent> gv :call VisualSelection('gv', '')<CR> | |
" Open Ack and put the cursor in the right position | |
map <leader>g :Ack | |
" When you press <leader>r you can search and replace the selected text | |
vnoremap <silent> <leader>r :call VisualSelection('replace', '')<CR> | |
" Do :help cope if you are unsure what cope is. It's super useful! | |
" | |
" When you search with Ack, display your results in cope by doing: | |
" <leader>cc | |
" | |
" To go to the next search result do: | |
" <leader>n | |
" | |
" To go to the previous search results do: | |
" <leader>p | |
" | |
map <leader>cc :botright cope<cr> | |
map <leader>co ggVGy:tabnew<cr>:set syntax=qf<cr>pgg | |
map <leader>n :cn<cr> | |
map <leader>p :cp<cr> | |
" Make sure that enter is never overriden in the quickfix window | |
autocmd BufReadPost quickfix nnoremap <buffer> <CR> <CR> | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Helper functions | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
func! DeleteTillSlash() | |
let g:cmd = getcmdline() | |
if has("win16") || has("win32") | |
let g:cmd_edited = substitute(g:cmd, "\\(.*\[\\\\]\\).*", "\\1", "") | |
else | |
let g:cmd_edited = substitute(g:cmd, "\\(.*\[/\]\\).*", "\\1", "") | |
endif | |
if g:cmd == g:cmd_edited | |
if has("win16") || has("win32") | |
let g:cmd_edited = substitute(g:cmd, "\\(.*\[\\\\\]\\).*\[\\\\\]", "\\1", "") | |
else | |
let g:cmd_edited = substitute(g:cmd, "\\(.*\[/\]\\).*/", "\\1", "") | |
endif | |
endif | |
return g:cmd_edited | |
endfunc | |
func! CurrentFileDir(cmd) | |
return a:cmd . " " . expand("%:p:h") . "/" | |
endfunc |
This file contains hidden or 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
"""""""""""""""""""""""""""""" | |
" => Python section | |
"""""""""""""""""""""""""""""" | |
let python_highlight_all = 1 | |
au FileType python syn keyword pythonDecorator True None False self | |
au BufNewFile,BufRead *.jinja set syntax=htmljinja | |
au BufNewFile,BufRead *.mako set ft=mako | |
au FileType python map <buffer> F :set foldmethod=indent<cr> | |
au FileType python inoremap <buffer> $r return | |
au FileType python inoremap <buffer> $i import | |
au FileType python inoremap <buffer> $p print | |
au FileType python inoremap <buffer> $f # --- <esc>a | |
au FileType python map <buffer> <leader>1 /class | |
au FileType python map <buffer> <leader>2 /def | |
au FileType python map <buffer> <leader>C ?class | |
au FileType python map <buffer> <leader>D ?def | |
"""""""""""""""""""""""""""""" | |
" => JavaScript section | |
""""""""""""""""""""""""""""""" | |
" au FileType javascript call JavaScriptFold() | |
" au FileType javascript setl fen | |
" au FileType javascript setl nocindent | |
au FileType javascript imap <C-t> $log();<esc>hi | |
au FileType javascript imap <C-a> alert();<esc>hi | |
au FileType javascript inoremap <buffer> $r return | |
au FileType javascript inoremap <buffer> $f // --- PH<esc>FP2xi | |
function! JavaScriptFold() | |
setl foldmethod=syntax | |
setl foldlevelstart=1 | |
syn region foldBraces start=/{/ end=/}/ transparent fold keepend extend | |
function! FoldText() | |
return substitute(getline(v:foldstart), '{.*', '{...}', '') | |
endfunction | |
setl foldtext=FoldText() | |
endfunction | |
"""""""""""""""""""""""""""""" | |
" => CoffeeScript section | |
""""""""""""""""""""""""""""""" | |
function! CoffeeScriptFold() | |
setl foldmethod=indent | |
setl foldlevelstart=1 | |
endfunction | |
au FileType coffee call CoffeeScriptFold() | |
au FileType gitcommit call setpos('.', [0, 1, 1, 0]) | |
"""""""""""""""""""""""""""""" | |
" => Shell section | |
"""""""""""""""""""""""""""""" | |
if exists('$TMUX') | |
if has('nvim') | |
set termguicolors | |
else | |
set term=screen-256color | |
endif | |
endif | |
"""""""""""""""""""""""""""""" | |
" => Twig section | |
"""""""""""""""""""""""""""""" | |
autocmd BufRead *.twig set syntax=html filetype=html | |
"""""""""""""""""""""""""""""" | |
" => Markdown | |
"""""""""""""""""""""""""""""" | |
let vim_markdown_folding_disabled = 1 |
This file contains hidden or 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
"inoremap jk <Esc>:w<CR> | |
inoremap jk <Esc> | |
nmap <Leader>py <Plug>(Prettier) | |
let g:prettier#autoformat = 1 | |
command! -nargs=0 Prettier :CocCommand prettier.formatFile | |
" when running at every change you may want to disable quickfix | |
" let g:prettier#quickfix_enabled = 0 | |
" on focus change save file | |
autocmd FocusLost * :wa | |
" save on pressing Esc | |
inoremap <Esc> <Esc>:w<CR> | |
set number | |
" Tab Navigation | |
nnoremap th :tabfirst<CR> | |
nnoremap tk :tabnext<CR> | |
nnoremap tj :tabprev<CR> | |
nnoremap tl :tablast<CR> | |
nnoremap tt :tabedit<Space> | |
nnoremap tn :tabnext<Space> | |
nnoremap tm :tabm<Space> | |
nnoremap td :tabclose<CR> | |
" Alternatively use | |
"nnoremap th :tabnext<CR> | |
"nnoremap tl :tabprev<CR> | |
"nnoremap tn :tabnew<CR> | |
" j/k will move virtual lines (lines that wrap) | |
noremap <silent> <expr> j (v:count == 0 ? 'gj' : 'j') | |
noremap <silent> <expr> k (v:count == 0 ? 'gk' : 'k') | |
colorscheme gruvbox |
This file contains hidden or 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
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Important: | |
" This requires that you install https://github.com/amix/vimrc ! | |
" | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
"""""""""""""""""""""""""""""" | |
" => Load pathogen paths | |
"""""""""""""""""""""""""""""" | |
let s:vim_runtime = expand('<sfile>:p:h')."/.." | |
call pathogen#infect(s:vim_runtime.'/sources_forked/{}') | |
call pathogen#infect(s:vim_runtime.'/sources_non_forked/{}') | |
call pathogen#infect(s:vim_runtime.'/my_plugins/{}') | |
call pathogen#helptags() | |
"""""""""""""""""""""""""""""" | |
" => bufExplorer plugin | |
"""""""""""""""""""""""""""""" | |
let g:bufExplorerDefaultHelp=0 | |
let g:bufExplorerShowRelativePath=1 | |
let g:bufExplorerFindActive=1 | |
let g:bufExplorerSortBy='name' | |
map <leader>o :BufExplorer<cr> | |
"""""""""""""""""""""""""""""" | |
" => MRU plugin | |
"""""""""""""""""""""""""""""" | |
let MRU_Max_Entries = 400 | |
map <leader>f :MRU<CR> | |
"""""""""""""""""""""""""""""" | |
" => YankStack | |
"""""""""""""""""""""""""""""" | |
let g:yankstack_yank_keys = ['y', 'd'] | |
nmap <C-p> <Plug>yankstack_substitute_older_paste | |
nmap <C-n> <Plug>yankstack_substitute_newer_paste | |
"""""""""""""""""""""""""""""" | |
" => CTRL-P | |
"""""""""""""""""""""""""""""" | |
let g:ctrlp_working_path_mode = 0 | |
let g:ctrlp_map = '<C-f>' | |
map <leader>j :CtrlP<cr> | |
map <C-b> :CtrlPBuffer<cr> | |
let g:ctrlp_max_height = 20 | |
let g:ctrlp_custom_ignore = 'node_modules\|^\.DS_Store\|^\.git\|^\.coffee' | |
"""""""""""""""""""""""""""""" | |
" => ZenCoding | |
"""""""""""""""""""""""""""""" | |
" Enable all functions in all modes | |
let g:user_zen_mode='a' | |
"""""""""""""""""""""""""""""" | |
" => snipMate (beside <TAB> support <CTRL-j>) | |
"""""""""""""""""""""""""""""" | |
ino <C-j> <C-r>=snipMate#TriggerSnippet()<cr> | |
snor <C-j> <esc>i<right><C-r>=snipMate#TriggerSnippet()<cr> | |
"""""""""""""""""""""""""""""" | |
" => Vim grep | |
"""""""""""""""""""""""""""""" | |
let Grep_Skip_Dirs = 'RCS CVS SCCS .svn generated' | |
set grepprg=/bin/grep\ -nH | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Nerd Tree | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
let g:NERDTreeWinPos = "left" | |
let NERDTreeShowHidden=1 | |
let NERDTreeIgnore = ['\.pyc$', '__pycache__', '^node_modules$'] | |
"let g:NERDTreeWinSize=35 | |
map <leader>nn :NERDTreeToggle<cr> | |
map <leader>nb :NERDTreeFromBookmark<Space> | |
map <leader>nf :NERDTreeFind<cr> | |
" sync open file with NERDTree | |
" " Check if NERDTree is open or active | |
function! IsNERDTreeOpen() | |
return exists("t:NERDTreeBufName") && (bufwinnr(t:NERDTreeBufName) != -1) | |
endfunction | |
" Call NERDTreeFind iff NERDTree is active, current window contains a modifiable | |
" file, and we're not in vimdiff | |
function! SyncTree() | |
if &modifiable && IsNERDTreeOpen() && strlen(expand('%')) > 0 && !&diff | |
NERDTreeFind | |
wincmd p | |
endif | |
endfunction | |
" Highlight currently open buffer in NERDTree | |
autocmd BufEnter * call SyncTree() | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => vim-multiple-cursors | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" let g:multi_cursor_use_default_mapping=0 | |
" Default mapping | |
" let g:multi_cursor_start_word_key = '<C-s>' | |
" let g:multi_cursor_select_all_word_key = '<A-s>' | |
" let g:multi_cursor_start_key = 'g<C-s>' | |
" let g:multi_cursor_select_all_key = 'g<A-s>' | |
" let g:multi_cursor_next_key = '<C-s>' | |
" let g:multi_cursor_prev_key = '<C-p>' | |
" let g:multi_cursor_skip_key = '<C-x>' | |
" let g:multi_cursor_quit_key = '<Esc>' | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => surround.vim config | |
" Annotate strings with gettext | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
vmap Si S(i_<esc>f) | |
au FileType mako vmap Si S"i${ _(<esc>2f"a) }<esc> | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => lightline | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
let g:lightline = { | |
\ 'colorscheme': 'wombat', | |
\ 'active': { | |
\ 'left': [ ['mode', 'paste'], | |
\ ['fugitive', 'readonly', 'filename', 'modified'] ], | |
\ 'right': [ [ 'lineinfo' ], ['percent'] ] | |
\ }, | |
\ 'component': { | |
\ 'readonly': '%{&filetype=="help"?"":&readonly?"🔒":""}', | |
\ 'modified': '%{&filetype=="help"?"":&modified?"+":&modifiable?"":"-"}', | |
\ 'fugitive': '%{exists("*fugitive#head")?fugitive#head():""}' | |
\ }, | |
\ 'component_visible_condition': { | |
\ 'readonly': '(&filetype!="help"&& &readonly)', | |
\ 'modified': '(&filetype!="help"&&(&modified||!&modifiable))', | |
\ 'fugitive': '(exists("*fugitive#head") && ""!=fugitive#head())' | |
\ }, | |
\ 'separator': { 'left': ' ', 'right': ' ' }, | |
\ 'subseparator': { 'left': ' ', 'right': ' ' } | |
\ } | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Vimroom | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
let g:goyo_width=100 | |
let g:goyo_margin_top = 2 | |
let g:goyo_margin_bottom = 2 | |
nnoremap <silent> <leader>z :Goyo<cr> | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Ale (syntax checker and linter) | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
let g:ale_linters = { | |
\ 'javascript': ['jshint'], | |
\ 'python': ['flake8'], | |
\ 'go': ['go', 'golint', 'errcheck'] | |
\} | |
nmap <silent> <leader>a <Plug>(ale_next_wrap) | |
" Disabling highlighting | |
let g:ale_set_highlights = 0 | |
" Only run linting when saving the file | |
let g:ale_lint_on_text_changed = 'never' | |
let g:ale_lint_on_enter = 0 | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Git gutter (Git diff) | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
let g:gitgutter_enabled=0 | |
nnoremap <silent> <leader>d :GitGutterToggle<cr> | |
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => YouCompleteMe | |
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Start autocompletion after 4 chars | |
" let g:ycm_min_num_of_chars_for_completion = 3 | |
" let g:ycm_min_num_identifier_candidate_chars = 3 | |
" let g:ycm_enable_diagnostic_highlighting = 0 | |
" Don't show YCM's preview window [ I find it really annoying ] | |
" set completeopt-=preview | |
" let g:ycm_add_preview_to_completeopt = 0 | |
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Ultisnips | |
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Trigger configuration. Do not use <tab> if you use https://github.com/Valloric/YouCompleteMe. | |
let g:UltiSnipsExpandTrigger="<C-k>" | |
let g:UltiSnipsJumpForwardTrigger="<c-b>" | |
let g:UltiSnipsJumpBackwardTrigger="<c-z>" | |
" If you want :UltiSnipsEdit to split your window. | |
let g:UltiSnipsEditSplit="vertical" | |
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => NERDCommenter | |
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
vmap ++ <plug>NERDCommenterToggle | |
nmap ++ <plug>NERDCommenterToggle |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment