Skip to content

Instantly share code, notes, and snippets.

@Alonso-Pablo
Last active October 19, 2021 19:56
Show Gist options
  • Save Alonso-Pablo/5c799f3164733f4ddfdad4b8109cd7af to your computer and use it in GitHub Desktop.
Save Alonso-Pablo/5c799f3164733f4ddfdad4b8109cd7af to your computer and use it in GitHub Desktop.
vim initialization
call plug#begin('~/AppData/Local/nvim/plugins')
" Fold where saves plugins data
" syntax
Plug 'sheerun/vim-polyglot'
Plug 'styled-components/vim-styled-components', { 'branch': 'main' }
Plug 'norcalli/nvim-colorizer.lua'
" status bar
Plug 'maximbaz/lightline-ale'
Plug 'itchyny/lightline.vim'
" Themes
Plug 'morhetz/gruvbox'
Plug 'shinchu/lightline-gruvbox.vim'
" Tree
Plug 'scrooloose/nerdtree'
" typing
Plug 'alvan/vim-closetag'
Plug 'tpope/vim-surround'
" tmux
Plug 'benmills/vimux'
Plug 'christoomey/vim-tmux-navigator'
" autocomplete
Plug 'sirver/ultisnips'
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" test
Plug 'tyewang/vimux-jest-test'
Plug 'janko-m/vim-test'
" IDE
Plug 'editorconfig/editorconfig-vim'
Plug 'junegunn/fzf'
Plug 'junegunn/fzf.vim'
Plug 'terryma/vim-multiple-cursors'
Plug 'easymotion/vim-easymotion'
Plug 'mhinz/vim-signify'
Plug 'yggdroot/indentline'
Plug 'scrooloose/nerdcommenter'
" git
Plug 'tpope/vim-fugitive'
Plug 'tpope/vim-repeat'
call plug#end()
set number
set mouse=a
set numberwidth=1
set clipboard=unnamed
syntax on
set showcmd
set ruler
set cursorline
set encoding=utf-8
set showmatch
set termguicolors
set sw=2
set relativenumber
colorscheme gruvbox
let g:gruvbox_contrast_dark = "hard"
highlight Normal ctermbg=NONE
set laststatus=2
set noshowmode
au BufNewFile,BufRead *.html set filetype=htmldjango
lua require'colorizer'.setup()
"" Searching
set hlsearch " highlight matches
set incsearch " incremental searching
set ignorecase " searches are case insensitive...
set smartcase " ... unless they contain at least one capital letter
" HTML, JSX
let g:closetag_filenames = '*.html,*.js,*.jsx,*.ts,*.tsx'
" Lightlane
let g:lightline = {
\ 'active': {
\ 'left': [['mode', 'paste'], [], ['relativepath', 'modified']],
\ 'right': [['kitestatus'], ['filetype', 'percent', 'lineinfo'], ['gitbranch']]
\ },
\ 'inactive': {
\ 'left': [['inactive'], ['relativepath']],
\ 'right': [['bufnum']]
\ },
\ 'component': {
\ 'bufnum': '%n',
\ 'inactive': 'inactive'
\ },
\ 'component_function': {
\ 'gitbranch': 'fugitive#head',
\ 'kitestatus': 'kite#statusline'
\ },
\ 'colorscheme': 'gruvbox',
\ 'subseparator': {
\ 'left': '',
\ 'right': ''
\ }
\}
" nerdtree
let NERDTreeShowHidden=1
let NERDTreeQuitOnOpen=1
let NERDTreeAutoDeleteBuffer=1
let NERDTreeMinimalUI=1
let NERDTreeDirArrows=1
let NERDTreeShowLineNumbers=1
let NERDTreeMapOpenInTab='\t'
" coc
autocmd FileType scss setl iskeyword+=@-@
" vim fugitive
command! -bang -nargs=? -complete=dir GFiles
\ call fzf#vim#gitfiles(<q-args>, fzf#vim#with_preview(), <bang>0)
command! -bang -nargs=* Ag
\ call fzf#vim#ag(<q-args>, fzf#vim#with_preview(), <bang>0)
command! -bang -nargs=? -complete=dir Files
\ call fzf#vim#files(<q-args>, fzf#vim#with_preview(), <bang>0)
" 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=1
" 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
" fugitive always vertical diffing
set diffopt+=vertical
" Highlight symbol under cursor on CursorHold
let $FZF_DEFAULT_OPTS='--layout=reverse'
"let g:fzf_layout = { 'window': 'call FloatingFZF()' }
"function! FloatingFZF()
"let buf = nvim_create_buf(v:false, v:true)
"call setbufvar(buf, '&signcolumn', 'no')
"let height = float2nr((&lines - 3) / 2)
"let width = float2nr(&columns - (&columns * 2 / 10))
"let col = float2nr((&columns - width) / 2)
"let row = float2nr((&lines - height) / 2)
"let opts = {
"\ 'relative': 'editor',
"\ 'row': row,
"\ 'col': col,
"\ 'width': width,
"\ 'height': height
"\ }
"call nvim_open_win(buf, v:true, opts)
"endfunction
"function! SearchPatternInFile(pattern)
"" Save cursor position.
"let save_cursor = getcurpos()
"" Set cursor position to beginning of file.
"call cursor(0, 0)
"" Search for the string 'hello' with a flag c. The c flag means that a
"" match at the cursor position will be accepted.
"let search_result = search(a:pattern, "c")
"" Set the cursor back at the saved position. The setpos function was
"" used here because the return value of getcurpos can be used directly
"" with it, unlike the cursor function.
"call setpos('.', save_cursor)
"" If the search function didn't find the pattern, it will have
"" returned 0, thus it wasn't found. Any other number means that an instance
"" has been found.
"return search_result
"endfunction
let mapleader=" "
" testing
nnoremap <Leader>t :TestNearest<CR>
nnoremap <Leader>T :TestFile<CR>
nnoremap <Leader>TT :TestSuite<CR>
" split resize
nnoremap <Leader>> 10<C-w>>
nnoremap <Leader>< 10<C-w><
" quick semi
nnoremap <Leader>; $a;<Esc>
nnoremap <Leader>w :w<CR>
nnoremap <Leader>q :q<CR>
nnoremap <Leader>Q :q!<CR>
" shorter commands
cnoreabbrev tree NERDTreeToggle
cnoreabbrev blame Gblame
cnoreabbrev find NERDTreeFind
cnoreabbrev diff Gdiff
" plugs
map <Leader>nt :NERDTreeFind<CR>
map <Leader>p :Files<CR>
map <Leader>ag :Ag<CR>
" tmux navigator
nnoremap <silent> <Leader><C-h> :TmuxNavigateLeft<cr>
nnoremap <silent> <Leader><C-j> :TmuxNavigateDown<cr>
nnoremap <silent> <Leader><C-k> :TmuxNavigateUp<cr>
nnoremap <silent> <Leader><C-l> :TmuxNavigateRight<cr>
" 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)
" Remap surround to lowercase s so it does not add an empty space
xmap s <Plug>VSurround
" diagnostics
nnoremap <leader>P :let @*=expand("%")<CR>
" tabs navigation
map <Leader>h :tabprevious<cr>
map <Leader>l :tabnext<cr>
" buffers
map <Leader>ob :Buffers<cr>
" keeping it centered
nnoremap n nzzzv
nnoremap N Nzzzv
nnoremap J mzJ`z
" Moving text
vnoremap J :m '>+1<CR>gv=gv
vnoremap K :m '<-2<CR>gv=gv
nnoremap <Leader>k :m .-2<CR>==
nnoremap <Leader>j :m .+1<CR>==
" faster scrolling
nnoremap <C-j> 10<C-e>
nnoremap <C-k> 10<C-y>
nmap <Leader>s <Plug>(easymotion-s2)
" git
nnoremap <Leader>G :G<cr>
nnoremap <Leader>gp :Gpush<cr>
nnoremap <Leader>gl :Gpull<cr>
" run current file
nnoremap <Leader>x :!node %<cr>
" Use <c-space> to trigger completion.
"if &filetype == "javascript" || &filetype == "python"
"inoremap <c-space> <C-x><C-u>
"else
inoremap <silent><expr> <c-space> coc#refresh()
"endif
set splitright
function! OpenTerminal()
" move to right most buffer
execute "normal \<C-l>"
execute "normal \<C-l>"
execute "normal \<C-l>"
execute "normal \<C-l>"
let bufNum = bufnr("%")
let bufType = getbufvar(bufNum, "&buftype", "not found")
if bufType == "terminal"
" close existing terminal
execute "q"
else
" open terminal
execute "vsp term://cmd"
" turn off numbers
execute "set nonu"
execute "set nornu"
" toggle insert on enter/exit
silent au BufLeave <buffer> stopinsert!
silent au BufWinEnter,WinEnter <buffer> startinsert!
" set maps inside terminal buffer
execute "tnoremap <buffer> <C-h> <C-\\><C-n><C-w><C-h>"
execute "tnoremap <buffer> <C-t> <C-\\><C-n>:q<CR>"
execute "tnoremap <buffer> <C-\\><C-\\> <C-\\><C-n>"
startinsert!
endif
endfunction
nnoremap <C-t> :call OpenTerminal()<CR>
inoremap <expr> <CR> ParensIndent()
function! ParensIndent()
let prev = col('.') - 1
let after = col('.')
let prevChar = matchstr(getline('.'), '\%' . prev . 'c.')
let afterChar = matchstr(getline('.'), '\%' . after . 'c.')
if (prevChar == '"' && afterChar == '"') ||
\ (prevChar == "'" && afterChar == "'") ||
\ (prevChar == "(" && afterChar == ")") ||
\ (prevChar == "{" && afterChar == "}") ||
\ (prevChar == "[" && afterChar == "]")
return "\<CR>\<ESC>O"
endif
return "\<CR>"
endfunction
inoremap <expr> <space> ParensSpacing()
function! ParensSpacing()
let prev = col('.') - 1
let after = col('.')
let prevChar = matchstr(getline('.'), '\%' . prev . 'c.')
let afterChar = matchstr(getline('.'), '\%' . after . 'c.')
if (prevChar == '"' && afterChar == '"') ||
\ (prevChar == "'" && afterChar == "'") ||
\ (prevChar == "(" && afterChar == ")") ||
\ (prevChar == "{" && afterChar == "}") ||
\ (prevChar == "[" && afterChar == "]")
return "\<space>\<space>\<left>"
endif
return "\<space>"
endfunction
inoremap <expr> <BS> ParensRemoveSpacing()
function! ParensRemoveSpacing()
let prev = col('.') - 1
let after = col('.')
let prevChar = matchstr(getline('.'), '\%' . prev . 'c.')
let afterChar = matchstr(getline('.'), '\%' . after . 'c.')
if (prevChar == '"' && afterChar == '"') ||
\ (prevChar == "'" && afterChar == "'") ||
\ (prevChar == "(" && afterChar == ")") ||
\ (prevChar == "{" && afterChar == "}") ||
\ (prevChar == "[" && afterChar == "]")
return "\<bs>\<right>\<bs>"
endif
if (prevChar == ' ' && afterChar == ' ')
let prev = col('.') - 2
let after = col('.') + 1
let prevChar = matchstr(getline('.'), '\%' . prev . 'c.')
let afterChar = matchstr(getline('.'), '\%' . after . 'c.')
if (prevChar == '"' && afterChar == '"') ||
\ (prevChar == "'" && afterChar == "'") ||
\ (prevChar == "(" && afterChar == ")") ||
\ (prevChar == "{" && afterChar == "}") ||
\ (prevChar == "[" && afterChar == "]")
return "\<bs>\<right>\<bs>"
endif
endif
return "\<bs>"
endfunction
inoremap { {}<left>
inoremap ( ()<left>
inoremap [ []<left>
inoremap ' ''<left>
inoremap " ""<left>
let curly = "}"
inoremap <expr> } CheckNextParens(curly)
let bracket = "]"
inoremap <expr> ] CheckNextParens(bracket)
let parens = ")"
inoremap <expr> ) CheckNextParens(parens)
let quote = "'"
inoremap <expr> ' CheckNextQuote(quote)
let dquote = '"'
inoremap <expr> " CheckNextQuote(dquote)
let bticks = '`'
inoremap <expr> ` CheckNextQuote(bticks)
function CheckNextQuote(c)
let after = col('.')
let afterChar = matchstr(getline('.'), '\%' . after . 'c.')
if (afterChar == a:c)
return "\<right>"
endif
if (afterChar == ' ' || afterChar == '' || afterChar == ')' || afterChar== '}' || afterChar == ']')
return a:c . a:c . "\<left>"
endif
if (afterChar != a:c)
let bticks = '`'
let dquote = '"'
let quote = "'"
if(afterChar == dquote || afterChar == quote || afterChar == bticks)
return a:c . a:c . "\<left>"
endif
endif
return a:c
endfunction
function CheckNextParens(c)
let after = col('.')
let afterChar = matchstr(getline('.'), '\%' . after . 'c.')
if (afterChar == a:c)
return "\<right>"
endif
return a:c
endfunction
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment