Created
January 18, 2020 07:35
-
-
Save vincedgy/9ffd593d71a6ba4d4a65d40923ad9718 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
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" My neovim config | |
" ~/.config/nvim/init.vim | |
" vincedgy - 2020 | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" ref : https://medium.com/better-programming/setting-up-neovim-for-web-development-in-2020-d800de3efacd | |
" | |
" Install Nerd Fonts | |
" ------------------- | |
" brew tap homebrew/cask-fonts | |
" brew cask install font-hack-nerd-font | |
" | |
" Then set your terminal emulateor (Terminal, iterm2) to use this Fonts | |
" | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
set nocompatible " not compatible with vi | |
" load plugins from vundle | |
filetype off | |
call plug#begin("~/.vim/plugged") | |
" Theme | |
Plug 'dracula/vim' | |
" Language Client | |
Plug 'neoclide/coc.nvim', {'branch': 'release'} | |
let g:coc_global_extensions = ['coc-emmet', 'coc-css', 'coc-html', 'coc-json', 'coc-prettier', 'coc-tsserver'] | |
" TypeScript Highlighting | |
Plug 'leafgarland/typescript-vim' | |
Plug 'peitalin/vim-jsx-typescript' | |
" File Explorer with Icons | |
Plug 'scrooloose/nerdtree' | |
Plug 'ryanoasis/vim-devicons' | |
" File Search | |
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } | |
Plug 'junegunn/fzf.vim' | |
call plug#end() | |
" Enable theming support | |
"if (has("termguicolors")) | |
" set termguicolors | |
"endif | |
" Theme | |
syntax enable | |
colorscheme dracula | |
let g:NERDTreeShowHidden = 1 | |
let g:NERDTreeMinimalUI = 1 | |
let g:NERDTreeIgnore = [] | |
let g:NERDTreeStatusline = '' | |
" Automaticaly close nvim if NERDTree is only thing left open | |
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif | |
" Toggle | |
nnoremap <silent> <C-b> :NERDTreeToggle<CR> | |
nnoremap <C-p> :FZF<CR> | |
let g:fzf_action = { | |
\ 'ctrl-t': 'tab split', | |
\ 'ctrl-s': 'split', | |
\ 'ctrl-v': 'vsplit' | |
\} | |
" requires silversearcher-ag | |
" used to ignore gitignore files | |
let $FZF_DEFAULT_COMMAND = 'ag -g ""' | |
" open new split panes to right and below | |
set splitright | |
set splitbelow | |
" turn terminal to normal mode with escape | |
tnoremap <Esc> <C-\><C-n> | |
" use alt+hjkl to move between split/vsplit panels | |
tnoremap <A-h> <C-\><C-n><C-w>h | |
tnoremap <A-j> <C-\><C-n><C-w>j | |
tnoremap <A-k> <C-\><C-n><C-w>k | |
tnoremap <A-l> <C-\><C-n><C-w>l | |
nnoremap <A-h> <C-w>h | |
nnoremap <A-j> <C-w>j | |
nnoremap <A-k> <C-w>k | |
nnoremap <A-l> <C-w>l | |
" start terminal in insert mode | |
au BufEnter * if &buftype == 'terminal' | :startinsert | endif | |
" open terminal on ctrl+; | |
" uses zsh instead of bash | |
function! OpenTerminal() | |
split term://bash | |
resize 10 | |
endfunction | |
nnoremap <c-n> :call OpenTerminal()<CR> | |
" --------------------------------------------------------------------- | |
filetype plugin indent on | |
set autoread " detect when a file is changed | |
" make backspace behave in a sane manner | |
set backspace=indent,eol,start | |
" set a map leader for more key combos | |
let mapleader = ',' | |
" Tab control | |
set noexpandtab " tabs ftw | |
set smarttab " tab respects 'tabstop', 'shiftwidth', and 'softtabstop' | |
set tabstop=4 " the visible width of tabs | |
set softtabstop=4 " edit as if the tabs are 4 characters wide | |
set shiftwidth=4 " number of spaces to use for indent and unindent | |
set shiftround " round indent to a multiple of 'shiftwidth' | |
set clipboard=unnamed | |
" faster redrawing | |
set ttyfast | |
" code folding settings | |
set foldmethod=syntax " fold based on indent | |
set foldnestmax=10 " deepest fold is 10 levels | |
set nofoldenable " don't fold by default | |
set foldlevel=1 | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => User Interface | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Searching | |
set ignorecase " case insensitive searching | |
set smartcase " case-sensitive if expresson contains a capital letter | |
set hlsearch | |
set incsearch " set incremental search, like modern browsers | |
set nolazyredraw " don't redraw while executing macros | |
set magic " Set magic on, for regex | |
set showmatch " show matching braces | |
set mat=2 " how many tenths of a second to blink | |
" switch syntax highlighting on | |
syntax on | |
set encoding=utf8 | |
let base16colorspace=256 " Access colors present in 256 colorspace" | |
set t_Co=256 " Explicitly tell vim that the terminal supports 256 colors" | |
set background=dark | |
colorscheme delek | |
set number | |
set relativenumber | |
set autoindent " automatically set indent of new line | |
set smartindent | |
set laststatus=2 " show the satus line all the time | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Mappings | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
map <leader>ev :e! ~/.vimrc<cr> " edit ~/.vimrc | |
map <leader>wc :wincmd q<cr> | |
" moving up and down work as you would expect | |
nnoremap <silent> j gj | |
nnoremap <silent> k gk | |
" helpers for dealing with other people's code | |
nmap \t :set ts=4 sts=4 sw=4 noet<cr> | |
nmap \s :set ts=4 sts=4 sw=4 et<cr> | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Functions | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
map <C-h> :call WinMove('h')<cr> | |
map <C-j> :call WinMove('j')<cr> | |
map <C-k> :call WinMove('k')<cr> | |
map <C-l> :call WinMove('l')<cr> | |
" Window movement shortcuts | |
" move to the window in the direction shown, or create a new window | |
function! WinMove(key) | |
let t:curwin = winnr() | |
exec "wincmd ".a:key | |
if (t:curwin == winnr()) | |
if (match(a:key,'[jk]')) | |
wincmd v | |
else | |
wincmd s | |
endif | |
exec "wincmd ".a:key | |
endif | |
endfunction | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Plugin settings | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" close NERDTree after a file is opened | |
let g:NERDTreeQuitOnOpen=0 | |
" show hidden files in NERDTree | |
let NERDTreeShowHidden=1 | |
" Toggle NERDTree | |
nmap <silent> <leader>k :NERDTreeToggle<cr> | |
" expand to the path of the file in the current buffer | |
nmap <silent> <leader>y :NERDTreeFind<cr> | |
" map fuzzyfinder (CtrlP) plugin | |
" nmap <silent> <leader>t :CtrlP<cr> | |
nmap <silent> <leader>r :CtrlPBuffer<cr> | |
let g:ctrlp_map='<leader>t' | |
let g:ctrlp_dotfiles=1 | |
let g:ctrlp_working_path_mode = 'ra' | |
" CtrlP ignore patterns | |
let g:ctrlp_custom_ignore = { | |
\ 'dir': '\.git$\|node_modules$\|\.hg$\|\.svn$', | |
\ 'file': '\.exe$\|\.so$' | |
\ } | |
" search the nearest ancestor that contains .git, .hg, .svn | |
let g:ctrlp_working_path_mode = 2 | |
" Airline | |
let g:airline#extensions#tabline#enabled = 1 | |
let g:airline_statusline_ontop = 1 | |
let g:airline_powerline_fonts = 1 | |
let g:airline_theme='light' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment