Skip to content

Instantly share code, notes, and snippets.

@estevam5s
Created February 18, 2024 00:27
Show Gist options
  • Save estevam5s/428b2017c469995bf374911db33e5253 to your computer and use it in GitHub Desktop.
Save estevam5s/428b2017c469995bf374911db33e5253 to your computer and use it in GitHub Desktop.
vim-config
" Specify a directory for plugins
call plug#begin('~/.vim/plugged')
"Plug 'ycm-core/YouCompleteMe'
Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'scrooloose/nerdtree'
"Plug 'tsony-tsonev/nerdtree-git-plugin'
Plug 'Xuyuanp/nerdtree-git-plugin'
Plug 'tiagofumo/vim-nerdtree-syntax-highlight'
Plug 'ryanoasis/vim-devicons'
Plug 'airblade/vim-gitgutter'
Plug 'ctrlpvim/ctrlp.vim' " fuzzy find files
Plug 'scrooloose/nerdcommenter' "Plug 'prettier/vim-prettier', { 'do': 'yarn install' }
Plug 'christoomey/vim-tmux-navigator'
Plug 'morhetz/gruvbox'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'HerringtonDarkholme/yats.vim' " TS Syntax
Plug 'ryanoasis/vim-devicons'
Plug 'maxmellon/vim-jsx-pretty'
Plug 'projekt0n/github-nvim-theme', { 'tag': 'v0.0.7' }
" Initialize plugin system
call plug#end()
set bg=dark
set hlsearch
set backspace=indent,eol,start
set guifont=DejaVu\ Sans:s12
set mouse=a
set ignorecase
set belloff=all
set foldmethod=indent
nmap <leader>n :NERDTreeFocus<CR>
nmap <C-n> :NERDTreeToggle<CR>
vmap ++ <plug>NERDCommenterToggle
nmap ++ <plug>NERDCommenterToggle
nnoremap gb :ls<CR>:b<Space>
nnoremap ge yiw:%s/<C-r>0//g<Left><Left>
nnoremap = <C-w>>
noremap <Leader>y "+y
noremap <Leader>p "+p
vmap <Leader>y "+y
vmap <Leader>p "+p
nnoremap <leader>r @:
nnoremap - <C-w><
tnoremap <Esc> <C-\><C-n>
inoremap <C-BS> <C-w>
" Increase window width by 5 columns
nnoremap <Leader>w+ :vertical resize +5<CR>
" Decrease window width by 5 columns
nnoremap <Leader>w- :vertical resize -5<CR>
nnoremap <Leader>t :tabs<CR>
"nnoremap <leader>ac :CocAction<CR>
"open NERDTree automatically
"autocmd StdinReadPre * let s:std_in=1
"autocmd VimEnter * NERDTree
"autocmd BufWinEnter * if getcmdwintype() == '' | silent NERDTreeMirror | endif
let g:NERDTreeGitStatusWithFlags = 1
let g:airline_theme='gruvbox'
colorscheme gruvbox
"let g:dracula_italic = 0
"packadd! dracula
"syntax enable
"colorscheme dracula
"colorscheme github_dark
highlight Normal ctermbg=None
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#formatter = 'default'
"let g:vim_jsx_pretty_colorful_config = 1
let mapleader = ","
let g:mapleader = ","
source ~/matchit/plugin/matchit.vim
set number
let g:airline_theme='dark'
let g:airline_powerline_fonts = 1
"let g:WebDevIconsUnicodeDecorateFolderNodes = 1
"let g:NERDTreeGitStatusNodeColorization = 1
"let g:NERDTreeColorMapCustom = {
"\ "Staged" : "#0ee375",
"\ "Modified" : "#d9bf91",
"\ "Renamed" : "#51C9FC",
"\ "Untracked" : "#FCE77C",
"\ "Unmerged" : "#FC51E6",
"\ "Dirty" : "#FFBD61",
"\ "Clean" : "#87939A",
"\ "Ignored" : "#808080",
"\}
let g:NERDTreeIgnore = ['^node_modules$']
" vim-prettier
"let g:prettier#quickfix_enabled = 0
"let g:prettier#quickfix_auto_focus = 0
" prettier command for coc
command! -nargs=0 Prettier :CocCommand prettier.formatFile
" run prettier on save
"let g:prettier#autoformat = 0
"autocmd BufWritePre *.js,*.jsx,*.mjs,*.ts,*.tsx,*.css,*.less,*.scss,*.json,*.graphql,*.md,*.vue,*.yaml,*.html PrettierAsync
" ctrlp
let g:ctrlp_user_command = ['.git/', 'git --git-dir=%s/.git ls-files -oc --exclude-standard']
" 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')
set smarttab
set cindent
set tabstop=2
set shiftwidth=2
" always uses spaces instead of tab characters
set expandtab
set laststatus=2
set statusline+=%F
" 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()
autocmd BufRead * call SyncTree()
" coc config
let g:coc_global_extensions = [
\ 'coc-snippets',
\ 'coc-pairs',
\ 'coc-tsserver',
\ 'coc-eslint',
\ 'coc-prettier',
\ 'coc-json',
\ 'coc-html',
\ 'coc-clangd',
\ 'coc-java',
\ ]
" 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 <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)
nnoremap x "_x
nnoremap d "_d
nnoremap D "_D
vnoremap d "_d
nnoremap <leader>d ""d
nnoremap <leader>D ""D
vnoremap <leader>d ""d
" 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>
inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm() : "\<CR>"
nnoremap <Esc>tC :call NERDComment(0, "toggle")<CR>
vnoremap <Esc>tC :call nerdcommenter#Comment(0, "toggle")<CR>
nnoremap <D-/> :call NERDComment(0, "toggle")<CR>
vnoremap <D-/> :call nerdcommenter#Comment(0, "toggle")<CR>

Vim Configuration Guide

This guide will walk you through installing Vim and configuring it with the provided `.vimrc` file. Instructions are provided for both macOS and Windows operating systems.

For a visual demonstration of all the shortcuts and functionalities, please refer to this YouTube video.

macOS Installation

1. Install Vim

You can install Vim on macOS using Homebrew. Open Terminal and run:

brew install vim

2. Download the .vimrc file

Clone the repository or download the `.vimrc` file from the GitHub repository.

3. Copy the .vimrc file to your home directory

In Terminal, navigate to the directory containing the downloaded `.vimrc` file and run:

cp .vimrc ~/

Windows Installation

1. Install Vim

You can download the Vim installer for Windows from the official website.

2. Download the .vimrc file

Clone the repository or download the `.vimrc` file from the GitHub repository.

3. Copy the .vimrc file to your home directory

Copy the `.vimrc` file to your user home directory, usually located at `C:\Users\YourUsername`.

Final Step

After following the above steps, open Vim, and you should see the configurations from the `.vimrc` file applied.

If you encounter any issues or have any questions, please refer to the repository or feel free to open an issue.

Happy coding with Vim!

Vim Cheat Sheet

This document provides an extensive collection of Vim commands that aid in navigation, editing, searching, and more. These commands are primarily used in Normal Mode, so remember to press 'ESC' before utilizing them.

Basic Movements

  • h: Move cursor left.
  • j: Move cursor down.
  • k: Move cursor up.
  • l: Move cursor right.

Modes

  • Esc: Normal Mode
  • i: Insert text before the cursor
  • I: Insert text at the beginning of the line
  • a: Append text after the cursor
  • A: Append text at the end of the line
  • v: Visual Mode (character-wise)
  • V: Visual Mode (line-wise)
  • Ctrl+v: Visual Mode (block-wise)
  • :: Command-line Mode
  • r: Replace a single character
  • R: Replace mode (continuous replace)

Word Movements

  • w: Move to the start of the next word.
  • b: Move to the start of the current/previous word.

Line Movements

  • 0: Move to the start of the line.
  • ^: Move to the first non-blank character.
  • $: Move to the end of the line.
  • %: Jump to the matching brace or bracket.

Screen Movements

  • H: Move to the top of the screen.
  • M: Move to the middle of the screen.
  • L: Move to the bottom of the screen.
  • zz: Center the current line.
  • zt: Move the current line to the top.

Paragraph and Block Movements

  • {: Start of the current paragraph/block.
  • }: End of the current paragraph/block.

File Movements

  • gg: Start of the file.
  • G: End of the file.
  • :<line_number>: Go to a specific line.

Jump Movements

  • gd: Go to definition.
  • ctrl-o: Previous location.
  • ctrl-i: Next location.
  • 'm: Jump to mark 'm'.
  • [g, ]g: Navigate diagnostics.
  • : Rename occurrences.

Additional

  • Shift 3: Highlight All Occurrences
  • n: Navigate highlights.
  • :noh: Clear highlights.

Scrolling

  • ctrl-u: Scroll up (half-screen).
  • ctrl-d: Scroll down (half-screen).
  • ctrl-b: Scroll up (full screen).
  • ctrl-f: Scroll down (full screen).

Search

  • /: Search for a word.
  • ge: Replace word under cursor.

Editing

  • diw: Delete current word.
  • yiw: Copy the current word.
  • u: Undo.
  • p: Paste copied by yiw (pastes after the cursor).
  • shift+p: Paste before the cursor.

Fold

  • zf: Fold at current indent level.
  • za: Toggle current fold.

NERDTree

  • n: Focus NERDTree (C means CTRL).
  • : Toggle NERDTree.
  • : A key specified in .vimrc, my leader key is a comma ','.

Window Resizing

  • ++: Increase window width.
  • --: Decrease window width.
  • 🆕 Create new buffer horizontally.
  • :vnew: Create new buffer vertically.
  • CTRL+w+ <arrow_key from hjkl>: Move between windows.

Buffers

  • gb: List buffers.
  • bd: Delete current buffer.
  • bd!: Delete current buffer without saving changes.
  • b<buffer_number>: Go to a specific buffer.

Session

  • mks!: Create a session.
  • vim -S: Load a session.

File Operations

  • :w: Save file.
  • :q: Quit without saving.
  • :q!: Force quit without saving.
  • :wq: Save and quit.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment