Last active
October 19, 2021 19:56
-
-
Save Alonso-Pablo/5c799f3164733f4ddfdad4b8109cd7af to your computer and use it in GitHub Desktop.
vim initialization
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
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