Last active
February 4, 2021 21:43
-
-
Save prime-hacker/cdaedede568d4bc983ee79fbe4d6b9b4 to your computer and use it in GitHub Desktop.
My Vim settings
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
" NEEDED FOR THIS FILE TO WORK: | |
" 1. INSTALL VIM-PLUG FROM ITS GITHUB PAGE | |
" 2. RUN :PlugInstall in Vim | |
" 3. PIP INSTALL POWERLINE | |
" 4. INSTALL COC.NVIM | |
" Plugins will be downloaded under the specified directory. | |
call plug#begin('~/.vim/plugged') | |
" Declare the list of plugins. | |
Plug 'sheerun/vim-polyglot' | |
" For javascript | |
Plug 'dense-analysis/ale' | |
" For fuzzy searching within files and project | |
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } | |
Plug 'junegunn/fzf.vim' | |
" Auto completion | |
Plug 'neoclide/coc.nvim', {'branch': 'release'} | |
" Tags management | |
Plug 'ludovicchabant/vim-gutentags' | |
" Powerline status line | |
"Plug 'powerline/powerline' | |
" Navigating direcotries | |
Plug 'preservim/nerdtree' | |
" List ends here. Plugins become visible to Vim after this call. | |
call plug#end() | |
" Don't try to be vi compatible | |
set nocompatible | |
" Helps force plugins to load correctly when it is turned back on below | |
filetype off | |
set history=500 | |
" Set to auto read when a file is changed from the outside | |
set autoread | |
au FocusGained,BufEnter * checktime | |
" 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! | |
" TODO: Load plugins here (pathogen or vundle) | |
" Turn on syntax highlighting | |
syntax on | |
" For plugins to load correctly | |
filetype plugin indent on | |
" TODO: Pick a leader key | |
" let mapleader = "," | |
" Security | |
set modelines=0 | |
" Show line numbers | |
set number | |
" Show file stats | |
set ruler | |
" Encoding | |
set encoding=utf-8 | |
" Whitespace | |
set wrap | |
set textwidth=79 | |
set formatoptions=tcqrn1 | |
set tabstop=2 | |
set shiftwidth=2 | |
set softtabstop=2 | |
set expandtab | |
set noshiftround | |
" Cursor motion | |
set scrolloff=3 | |
set backspace=indent,eol,start | |
set matchpairs+=<:> " use % to jump between pairs | |
runtime! macros/matchit.vim | |
" Move up/down editor lines | |
nnoremap j gj | |
nnoremap k gk | |
" Allow hidden buffers | |
set hidden | |
" Rendering | |
set ttyfast | |
" Last line | |
set showmode | |
set showcmd | |
" Searching | |
nnoremap / /\v | |
vnoremap / /\v | |
set hlsearch | |
set incsearch | |
set ignorecase | |
set smartcase | |
set showmatch | |
map <leader><space> :let @/=''<cr> " clear search | |
" Remap help key. | |
inoremap <F1> <ESC>:set invfullscreen<CR>a | |
nnoremap <F1> :set invfullscreen<CR> | |
vnoremap <F1> :set invfullscreen<CR> | |
" Textmate holdouts | |
" Formatting | |
map <leader>q gqip | |
" Visualize tabs and newlines | |
set listchars=tab:▸\ ,eol:¬ | |
" Uncomment this to enable by default: | |
" set list " To enable by default | |
" Or use your leader key + l to toggle on/off | |
map <leader>l :set list!<CR> " Toggle tabs and EOL | |
" Color scheme (terminal) | |
set t_Co=256 | |
set background=dark | |
let g:solarized_termcolors=256 | |
let g:solarized_termtrans=1 | |
" put https://raw.github.com/altercation/vim-colors-solarized/master/colors/solarized.vim | |
" in ~/.vim/colors/ and uncomment: | |
" colorscheme solarized | |
nnoremap <C-p> :Files<CR> | |
nnoremap <Leader>b :Buffers<CR> | |
nnoremap <Leader>h :History<CR> | |
nnoremap <Leader>t :BTags<CR> | |
nnoremap <Leader>T :Tags<CR> | |
let g:ale_sign_error = '❌' | |
let g:ale_sign_warning = '⚠️' | |
" Completion triggering (coc nvim) | |
" | |
" use <tab> for trigger completion and navigate to the next complete item | |
function! s:check_back_space() abort | |
let col = col('.') - 1 | |
return !col || getline('.')[col - 1] =~ '\s' | |
endfunction | |
inoremap <silent><expr> <Tab> | |
\ pumvisible() ? "\<C-n>" : | |
\ <SID>check_back_space() ? "\<Tab>" : | |
\ coc#refresh() | |
" 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) | |
" Highlight symbol under cursor on CursorHold | |
autocmd CursorHold * silent call CocActionAsync('highlight') | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => VIM user interface | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Set 7 lines to the cursor - when moving vertically using j/k | |
set so=7 | |
set cmdheight=1 | |
" 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 | |
" No annoying sound on errors | |
set noerrorbells | |
set novisualbell | |
set t_vb= | |
set tm=500 | |
" Add a bit extra margin to the left | |
set foldcolumn=1 | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Moving around, tabs, windows and buffers | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" 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 | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" 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= | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => 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 | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => 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 | |
" 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 ai "Auto indent | |
set si "Smart indent | |
set wrap "Wrap lines | |
" Enable powerline status bar | |
set laststatus=2 " Always display the status bar | |
"set powerline_cmd="py3" " Tell powerline to use Python 3 | |
python3 from powerline.vim import setup as powerline_setup | |
python3 powerline_setup() | |
python3 del powerline_setup | |
" Saves whenever text is changed | |
autocmd TextChanged,TextChangedI *.md silent write | |
" Tab Navigation | |
nnoremap th :tabnext<CR> | |
nnoremap tl :tabprev<CR> | |
nnoremap tn :tabnew<CR> | |
nnoremap td :tabclose<CR> | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment