@@ -0,0 +1,597 @@
" vim-bootstrap 2023-08-29 19:17:34
"*****************************************************************************
"" Vim-Plug core
"*****************************************************************************
let vimplug_exists = expand ( '~/.vim/autoload/plug.vim' )
if has ( 'win32' ) &&! has ( 'win64' )
let curl_exists = expand ( 'C:\Windows\Sysnative\curl.exe' )
else
let curl_exists = expand ( 'curl' )
endif
let g :vim_bootstrap_langs = "go,html,javascript,typescript"
let g :vim_bootstrap_editor = "vim" " nvim or vim
let g :vim_bootstrap_theme = "dracula"
let g :vim_bootstrap_frams = ""
if ! filereadable ( vimplug_exists )
if ! executable ( curl_exists )
echoerr "You have to install curl or first install vim-plug yourself!"
execute "q!"
endif
echo "Installing Vim-Plug..."
echo ""
silent exec "!" curl_exists " -fLo " . shellescape ( vimplug_exists ) . " --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim"
let g :not_finish_vimplug = "yes"
autocmd VimEnter * PlugInstall
endif
" Required:
call plug #begin ( expand ( '~/.vim/plugged' ) )
"*****************************************************************************
"" Plug install packages
"*****************************************************************************
Plug 'scrooloose/nerdtree'
Plug 'jistr/vim-nerdtree-tabs'
Plug 'tpope/vim-commentary'
Plug 'tpope/vim-fugitive'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'airblade/vim-gitgutter'
Plug 'vim-scripts/grep.vim'
Plug 'vim-scripts/CSApprox'
Plug 'Raimondi/delimitMate'
Plug 'majutsushi/tagbar'
Plug 'dense-analysis/ale'
Plug 'Yggdroot/indentLine'
Plug 'editor-bootstrap/vim-bootstrap-updater'
Plug 'tpope/vim-rhubarb' " required by fugitive to :GBrowse
Plug 'dracula/vim' , { 'as' : 'dracula' }
if isdirectory ( '/usr/local/opt/fzf' )
Plug '/usr/local/opt/fzf' | Plug 'junegunn/fzf.vim'
else
Plug 'junegunn/fzf' , { 'dir' : '~/.fzf' , 'do' : './install --bin' }
Plug 'junegunn/fzf.vim'
endif
let g :make = 'gmake'
if exists ( 'make' )
let g :make = 'make'
endif
Plug 'Shougo/vimproc.vim' , {'do' : g :make }
"" Vim-Session
Plug 'xolox/vim-misc'
Plug 'xolox/vim-session'
"" Snippets
Plug 'SirVer/ultisnips'
Plug 'honza/vim-snippets'
"*****************************************************************************
"" Custom bundles
"*****************************************************************************
" go
"" Go Lang Bundle
Plug 'fatih/vim-go' , {'do' : ':GoInstallBinaries' }
" html
"" HTML Bundle
Plug 'hail2u/vim-css3-syntax'
Plug 'gko/vim-coloresque'
Plug 'tpope/vim-haml'
Plug 'mattn/emmet-vim'
" javascript
"" Javascript Bundle
Plug 'jelera/vim-javascript-syntax'
" typescript
Plug 'leafgarland/typescript-vim'
Plug 'HerringtonDarkholme/yats.vim'
"*****************************************************************************
"*****************************************************************************
"" Include user's extra bundle
if filereadable ( expand ( "~/.vimrc.local.bundles" ) )
source ~ /.vimrc .local .bundles
endif
call plug #end ( )
" Required:
filetype plugin indent on
"*****************************************************************************
"" Basic Setup
"*****************************************************************************"
"" Encoding
set encoding = utf -8
set fileencoding = utf -8
set fileencodings = utf -8
set ttyfast
"" Fix backspace indent
set backspace = indent , eol , start
"" Tabs. May be overridden by autocmd rules
set tabstop = 4
set softtabstop = 0
set shiftwidth = 4
set expandtab
"" Map leader to ,
let mapleader = ','
"" Enable hidden buffers
set hidden
"" Searching
set hlsearch
set incsearch
set ignorecase
set smartcase
set fileformats = unix , dos , mac
if exists ( '$SHELL' )
set shell = $SHELL
else
set shell = /bin/ sh
endif
" session management
let g :session_directory = "~/.vim/session"
let g :session_autoload = "no"
let g :session_autosave = "no"
let g :session_command_aliases = 1
"*****************************************************************************
"" Visual Settings
"*****************************************************************************
syntax on
set ruler
set number
let no_buffers_menu = 1
let g :dracula_colorterm = 0
colorscheme dracula
" Better command line completion
set wildmenu
" mouse support
set mouse = a
set mousemodel = popup
set t_Co = 256
set guioptions = egmrti
set gfn = Monospace \ 10
if has ( "gui_running" )
if has ( "gui_mac" ) | | has ( "gui_macvim" )
set guifont = Menlo :h12
set transparency = 7
endif
else
let g :CSApprox_loaded = 1
" IndentLine
let g :indentLine_enabled = 1
let g :indentLine_concealcursor = ''
let g :indentLine_char = '┆'
let g :indentLine_faster = 1
if $COLORTERM = = 'gnome-terminal'
set term = gnome -256 color
else
if $TERM = = 'xterm'
set term = xterm -256 color
endif
endif
endif
if &term = ~ '256color'
set t_ut =
endif
"" Disable the blinking cursor.
set gcr = a :blinkon0
set scrolloff = 3
"" Status bar
set laststatus = 2
"" Use modeline overrides
set modeline
set modelines = 10
set title
set titleold = "Terminal"
set titlestring = %F
set statusline = %F %m %r %h %w %= ( %{&ff }/%Y)\ (line\ %l\/ %L , \ col \ %c ) \
" Search mappings: These will make it so that going to the next one in a
" search will center on the line it's found in.
nnoremap n nzzzv
nnoremap N Nzzzv
if exists ( "*fugitive#statusline" )
set statusline + = %{fugitive #statusline ( ) }
endif
" vim-airline
let g :airline_theme = 'powerlineish'
let g :airline #extensions #branch #enabled = 1
let g :airline #extensions #ale #enabled = 1
let g :airline #extensions #tabline #enabled = 1
let g :airline #extensions #tagbar #enabled = 1
let g :airline_skip_empty_sections = 1
"*****************************************************************************
"" Abbreviations
"*****************************************************************************
"" no one is really happy until you have this shortcuts
cnoreabbrev W ! w !
cnoreabbrev Q ! q !
cnoreabbrev Qall ! qall !
cnoreabbrev Wq wq
cnoreabbrev Wa wa
cnoreabbrev wQ wq
cnoreabbrev WQ wq
cnoreabbrev W w
cnoreabbrev Q q
cnoreabbrev Qall qall
"" NERDTree configuration
let g :NERDTreeChDirMode = 2
let g :NERDTreeIgnore = ['node_modules' , '\.rbc$' , '\~$' , '\.pyc$' , '\.db$' , '\.sqlite$' , '__pycache__' ]
let g :NERDTreeSortOrder = ['^__\.py$' , '\/$' , '*' , '\.swp$' , '\.bak$' , '\~$' ]
let g :NERDTreeShowBookmarks = 1
let g :nerdtree_tabs_focus_on_files = 1
let g :NERDTreeMapOpenInTabSilent = '<RightMouse>'
let g :NERDTreeWinSize = 50
set wildignore + = */tmp/ *, *.so , *.swp , *.zip , *.pyc , *.db , *.sqlite , *node_modules /
nnoremap < silent > < F2 > :NERDTreeFind < CR >
nnoremap < silent > < F3 > :NERDTreeToggle < CR >
" grep.vim
nnoremap < silent > < leader > f :Rgrep < CR >
let Grep_Default_Options = '-IR'
let Grep_Skip_Files = '*.log *.db'
let Grep_Skip_Dirs = '.git node_modules'
" terminal emulation
nnoremap < silent > < leader > sh :terminal < CR >
"*****************************************************************************
"" Commands
"*****************************************************************************
" remove trailing whitespaces
command ! FixWhitespace :%s /\s\+$/ /e
"*****************************************************************************
"" Functions
"*****************************************************************************
if ! exists ( '*s:setupWrapping' )
function s :setupWrapping ( )
set wrap
set wm = 2
set textwidth = 79
endfunction
endif
"*****************************************************************************
"" Autocmd Rules
"*****************************************************************************
"" The PC is fast enough, do syntax highlight syncing from start unless 200 lines
augroup vimrc - sync - fromstart
autocmd !
autocmd BufEnter * :syntax sync maxlines = 200
augroup END
"" Remember cursor position
augroup vimrc - remember - cursor - position
autocmd !
autocmd BufReadPost * if line ( "'\"" ) > 1 && line ( "'\"" ) < = line ( "$" ) | exe "normal! g`\"" | endif
augroup END
"" txt
augroup vimrc - wrapping
autocmd !
autocmd BufRead , BufNewFile *.txt call s :setupWrapping ( )
augroup END
"" make/cmake
augroup vimrc - make - cmake
autocmd !
autocmd FileType make setlocal noexpandtab
autocmd BufNewFile , BufRead CMakeLists .txt setlocal filetype = cmake
augroup END
set autoread
"*****************************************************************************
"" Mappings
"*****************************************************************************
"" Split
noremap < Leader > h :< C - u > split < CR >
noremap < Leader > v :< C - u > vsplit < CR >
"" Git
noremap < Leader > ga :Gwrite < CR >
noremap < Leader > gc :Git commit - - verbose < CR >
noremap < Leader > gsh :Git push < CR >
noremap < Leader > gll :Git pull < CR >
noremap < Leader > gs :Git < CR >
noremap < Leader > gb :Git blame < CR >
noremap < Leader > gd :Gvdiffsplit < CR >
noremap < Leader > gr :GRemove < CR >
" session management
nnoremap < leader > so :OpenSession < Space >
nnoremap < leader > ss :SaveSession < Space >
nnoremap < leader > sd :DeleteSession < CR >
nnoremap < leader > sc :CloseSession < CR >
"" Tabs
nnoremap < Tab > gt
nnoremap < S - Tab > gT
nnoremap < silent > < S - t > :tabnew < CR >
"" Set working directory
nnoremap < leader > . :lcd %:p :h < CR >
"" Opens an edit command with the path of the currently edited file filled in
noremap < Leader > e :e < C - R > = expand ( "%:p:h" ) . "/" < CR >
"" Opens a tab edit command with the path of the currently edited file filled
noremap < Leader > te :tabe < C - R > = expand ( "%:p:h" ) . "/" < CR >
"" fzf.vim
set wildmode = list :longest , list :full
set wildignore + = *.o , *.obj , .git , *.rbc , *.pyc , __pycache__
let $FZF_DEFAULT_COMMAND = "find * -path '*/\.*' -prune -o -path 'node_modules/**' -prune -o -path 'target/**' -prune -o -path 'dist/**' -prune -o -type f -print -o -type l -print 2> /dev/null"
" The Silver Searcher
if executable ( 'ag' )
let $FZF_DEFAULT_COMMAND = 'ag --hidden --ignore .git -g ""'
set grepprg = ag \ - - nogroup \ - - nocolor
endif
" ripgrep
if executable ( 'rg' )
let $FZF_DEFAULT_COMMAND = 'rg --files --hidden --follow --glob "!.git/*"'
set grepprg = rg \ - - vimgrep
command ! - bang - nargs = * Find call fzf #vim #grep ( 'rg --column --line-number --no-heading --fixed-strings --ignore-case --hidden --follow --glob "!.git/*" --color "always" ' .shellescape ( < q - args > ) .'| tr -d "\017"' , 1 , < bang > 0 )
endif
cnoremap < C - P > < C - R > = expand ( "%:p:h" ) . "/" < CR >
nnoremap < silent > < leader > b :Buffers < CR >
nnoremap < silent > < leader > e :FZF - m < CR >
"Recovery commands from history through FZF
nmap < leader > y :History :< CR >
" snippets
let g :UltiSnipsExpandTrigger = "<tab>"
let g :UltiSnipsJumpForwardTrigger = "<tab>"
let g :UltiSnipsJumpBackwardTrigger = "<c-b>"
let g :UltiSnipsEditSplit = "vertical"
" ale
let g :ale_linters = {}
" Tagbar
nmap < silent > < F4 > :TagbarToggle < CR >
let g :tagbar_autofocus = 1
" Disable visualbell
set noerrorbells visualbell t_vb =
if has ( 'autocmd' )
autocmd GUIEnter * set visualbell t_vb =
endif
"" Copy/Paste/Cut
if has ( 'unnamedplus' )
set clipboard = unnamed , unnamedplus
endif
noremap YY "+y<CR>
noremap < leader > p "+gP<CR>
noremap XX "+x<CR>
if has ( 'macunix' )
" pbcopy for OSX copy/paste
vmap < C - x > :! pbcopy < CR >
vmap < C - c > :w ! pbcopy < CR > < CR >
endif
"" Buffer nav
noremap < leader > z :bp < CR >
noremap < leader > q :bp < CR >
noremap < leader > x :bn < CR >
noremap < leader > w :bn < CR >
"" Close buffer
noremap < leader > c :bd < CR >
"" Clean search (highlight)
nnoremap < silent > < leader > < space > :noh < cr >
"" Switching windows
noremap < C - j > < C - w > j
noremap < C - k > < C - w > k
noremap < C - l > < C - w > l
noremap < C - h > < C - w > h
"" Vmap for maintain Visual Mode after shifting > and <
vmap < < gv
vmap > > gv
"" Move visual block
vnoremap J :m '> + 1 < CR > gv = gv
vnoremap K :m '< -2 < CR > gv = gv
"" Open current line on GitHub
nnoremap < Leader > o :.GBrowse < CR >
"*****************************************************************************
"" Custom configs
"*****************************************************************************
" go
" vim-go
" run :GoBuild or :GoTestCompile based on the go file
function ! s :build_go_files ( )
let l :file = expand ( '%' )
if l :file = ~ # '^\f\+_test\.go$'
call go #test #Test ( 0 , 1 )
elseif l :file = ~ # '^\f\+\.go$'
call go #cmd #Build ( 0 )
endif
endfunction
let g :go_list_type = "quickfix"
let g :go_fmt_command = "goimports"
let g :go_fmt_fail_silently = 1
let g :go_highlight_types = 1
let g :go_highlight_fields = 1
let g :go_highlight_functions = 1
let g :go_highlight_methods = 1
let g :go_highlight_operators = 1
let g :go_highlight_build_constraints = 1
let g :go_highlight_structs = 1
let g :go_highlight_generate_tags = 1
let g :go_highlight_space_tab_error = 0
let g :go_highlight_array_whitespace_error = 0
let g :go_highlight_trailing_whitespace_error = 0
let g :go_highlight_extra_types = 1
autocmd BufNewFile , BufRead *.go setlocal noexpandtab tabstop = 4 shiftwidth = 4 softtabstop = 4
augroup completion_preview_close
autocmd !
if v :version > 703 | | v :version = = 703 && has ( 'patch598' )
autocmd CompleteDone * if ! &previewwindow && &completeopt = ~ 'preview' | silent ! pclose | endif
endif
augroup END
augroup go
au !
au Filetype go command ! - bang A call go #alternate #Switch ( < bang > 0 , 'edit' )
au Filetype go command ! - bang AV call go #alternate #Switch ( < bang > 0 , 'vsplit' )
au Filetype go command ! - bang AS call go #alternate #Switch ( < bang > 0 , 'split' )
au Filetype go command ! - bang AT call go #alternate #Switch ( < bang > 0 , 'tabe' )
au FileType go nmap < Leader > dd < Plug > ( go - def - vertical )
au FileType go nmap < Leader > dv < Plug > ( go - doc - vertical )
au FileType go nmap < Leader > db < Plug > ( go - doc - browser )
au FileType go nmap < leader > r < Plug > ( go - run )
au FileType go nmap < leader > t < Plug > ( go - test )
au FileType go nmap < Leader > gt < Plug > ( go - coverage - toggle )
au FileType go nmap < Leader > i < Plug > ( go - info )
au FileType go nmap < silent > < Leader > l < Plug > ( go - metalinter )
au FileType go nmap < C - g > :GoDecls < cr >
au FileType go nmap < leader > dr :GoDeclsDir < cr >
au FileType go imap < C - g > < esc > :< C - u > GoDecls < cr >
au FileType go imap < leader > dr < esc > :< C - u > GoDeclsDir < cr >
au FileType go nmap < leader > rb :< C - u > call < SID > build_go_files ( ) < CR >
augroup END
" ale
: call extend ( g :ale_linters , {
\"go" : ['golint' , 'go vet' ], })
" html
" for html files, 2 spaces
autocmd Filetype html setlocal ts = 2 sw = 2 expandtab
" javascript
let g :javascript_enable_domhtmlcss = 1
" vim-javascript
augroup vimrc - javascript
autocmd !
autocmd FileType javascript setl tabstop = 4 | setl shiftwidth = 4 | setl expandtab softtabstop = 4
augroup END
" typescript
let g :yats_host_keyword = 1
"*****************************************************************************
"*****************************************************************************
"" Include user's local vim config
if filereadable ( expand ( "~/.vimrc.local" ) )
source ~ /.vimrc .local
endif
"*****************************************************************************
"" Convenience variables
"*****************************************************************************
" vim-airline
if ! exists ( 'g:airline_symbols' )
let g :airline_symbols = {}
endif
if ! exists ( 'g:airline_powerline_fonts' )
let g :airline #extensions #tabline #left_sep = ' '
let g :airline #extensions #tabline #left_alt_sep = '|'
let g :airline_left_sep = '▶'
let g :airline_left_alt_sep = '»'
let g :airline_right_sep = '◀'
let g :airline_right_alt_sep = '«'
let g :airline #extensions #branch #prefix = '⤴' "➔, ➥, ⎇
let g :airline #extensions #readonly #symbol = '⊘'
let g :airline #extensions #linecolumn #prefix = '¶'
let g :airline #extensions #paste #symbol = 'ρ '
let g :airline_symbols .linenr = '␊'
let g :airline_symbols .branch = '⎇'
let g :airline_symbols .paste = 'ρ '
let g :airline_symbols .paste = 'Þ'
let g :airline_symbols .paste = '∥'
let g :airline_symbols .whitespace = 'Ξ'
else
let g :airline #extensions #tabline #left_sep = ''
let g :airline #extensions #tabline #left_alt_sep = ''
" powerline symbols
let g :airline_left_sep = ''
let g :airline_left_alt_sep = ''
let g :airline_right_sep = ''
let g :airline_right_alt_sep = ''
let g :airline_symbols .branch = ''
let g :airline_symbols .readonly = ''
let g :airline_symbols .linenr = ''
endif