Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- " @Author: Nguyễn Anh Khoa <ng.akhoa@yahoo.com.vn>
- " @Date: 2018-12-31 17:48:56
- " @Last Modified by: Nguyễn Anh Khoa <ng.akhoa@yahoo.com.vn>
- " @Last Modified time: 2019-03-01 20:51:56
- " PLUGIN {{{
- call plug#begin()
- Plug 'junegunn/vim-plug'
- " Interface {{{
- Plug 'vim-airline/vim-airline' " status bar
- Plug 'vim-airline/vim-airline-themes' " status bar theme
- " Plug 'luochen1990/rainbow' " bracket highlight
- Plug 'bronson/vim-trailing-whitespace' " :FixWhitespace
- Plug 'Yggdroot/indentLine' " indent guides
- Plug 'valloric/matchtagalways'
- " Theme
- Plug 'rafi/awesome-vim-colorschemes' " theme++
- Plug 'flazz/vim-colorschemes' " theme++
- Plug 'archseer/colibri.vim' " theme
- Plug 'drewtempelmeyer/palenight.vim' " theme
- Plug 'NLKNguyen/papercolor-theme' " theme
- Plug 'dracula/vim' " theme
- Plug 'raphamorim/lucario' " theme
- Plug 'w0ng/vim-hybrid' " theme
- Plug 'morhetz/gruvbox' " theme
- Plug 'reedes/vim-colors-pencil'
- " }}}
- " Dark power {{{
- Plug 'neoclide/coc.nvim', {
- \ 'tag': '*',
- \ 'do': { -> coc#util#install()}
- \ } " code completion
- if empty($FZF_ROOT)
- " use ctrlp
- Plug 'ctrlpvim/ctrlp.vim' " file search
- else
- " use fzf
- Plug expand($FZF_ROOT) " include fzf root
- Plug 'junegunn/fzf.vim' " fzf for vim
- endif
- Plug 'cocopon/vaffle.vim' " file manager | netrw++
- Plug 'tomtom/tcomment_vim'
- Plug 'tpope/vim-fugitive' " git wrapper
- Plug 'sodapopcan/vim-twiggy' " git branch visualize | fugitive+
- Plug 'junegunn/gv.vim' " git commit browser | fugitive+
- Plug 'kana/vim-operator-user' " define own operator
- Plug 'rhysd/vim-operator-surround' " vim-surround alternative
- Plug 'junegunn/vim-easy-align' " easy align
- Plug 'yuttie/comfortable-motion.vim' " smooth scrolling
- Plug 'matze/vim-move' " quick moving text
- Plug 'simnalamburt/vim-mundo' " changes review
- Plug 'mbbill/fencview' " auto detect encodings
- Plug 'jeetsukumaran/vim-buffergator' " list buffer
- Plug 'bkad/CamelCaseMotion' " better motion between text
- Plug 'vim-scripts/argtextobj.vim' " move between argument
- Plug 'osyo-manga/vim-over' " substitute preview
- Plug 'mtth/scratch.vim' " scratch buffer
- Plug 'tpope/vim-unimpaired' " quick command for many stuff
- Plug 'joereynolds/place.vim' " add text without move to text
- Plug 'chrisbra/improvedft' " Improve ft
- Plug 'm1foley/vim-expresso' " doing math on vim, why not?
- Plug 'vim-scripts/sideways.vim' " change argument order (Map to <S-H> and <S-L> and try)
- Plug 'reedes/vim-pencil' " tool for writing in vim
- Plug 'junegunn/vim-peekaboo'
- Plug 'rhysd/clever-f.vim'
- Plug 'nelstrom/vim-visual-star-search'
- Plug 'metakirby5/codi.vim'
- Plug 'wakatime/vim-wakatime'
- Plug 'xolox/vim-misc'
- Plug 'xolox/vim-notes'
- Plug 'ahonn/vim-fileheader' " AddFileHeader, UpdateFileHeader
- " }}}
- " highlighter + linter + formater + other code related {{{
- Plug 'tpope/vim-sleuth' " auto indentation
- Plug 'w0rp/ale' " lint,format
- Plug 'Shougo/vinarise.vim' " edit hex file
- " most of the language plugin are packed with vim-polyglot
- Plug 'sheerun/vim-polyglot' " syntax++
- Plug 'justinmk/vim-syntax-extra' " c,bison,flex
- Plug 'chrisbra/csv.vim' " csv
- Plug 'harenome/vim-mipssyntax' " mips
- Plug 'shiracamus/vim-syntax-x86-objdump-d' " x86 objdump
- Plug 'jrozner/vim-antlr' " antlr
- Plug 'tpope/vim-markdown' " markdown
- Plug 'othree/yajs.vim' " javascript
- Plug 'othree/javascript-libraries-syntax.vim' " javascript++ { React, Angular, Vue, ... }
- Plug 'maxmellon/vim-jsx-pretty' " better jsx
- Plug 'reasonml-editor/vim-reason-plus' " reason
- Plug 'jxnblk/vim-mdx-js' " mdx
- " }}}
- call plug#end()
- " }}}
- " Common {{{
- set nocompatible " use real VIM
- filetype plugin on
- syntax on
- set expandtab
- set shiftround
- set shiftwidth=2
- set softtabstop=2
- set linebreak
- set modelines=5
- " set foldenable
- set foldlevelstart=10
- set foldnestmax=10
- set nofoldenable
- set autoread
- set autoindent
- set number relativenumber
- set showbreak=↪\ "
- set list listchars=tab:‣\ ,trail:·,precedes:«,extends:»,eol:¬
- " when install plugins, use /bin/sh
- set shell=/bin/sh " /usr/bin/fish:/bin/bash:zsh?
- " let g:gruvbox_italic=1
- set termguicolors
- " colorscheme gruvbox
- " colorscheme hydrangea
- colorscheme dracula
- " colorscheme hybrid
- " colorscheme colibri
- " colorscheme lucario
- " colorscheme PaperColor
- set background=dark
- " add current dir to runtimepath for use of UltiSnips
- let cwd = getcwd()
- execute "set runtimepath+=".fnameescape(cwd)
- let mapleader=','
- nnoremap j gj
- nnoremap k gk
- nnoremap <leader>s :mksession!<CR>
- nnoremap <leader>S :mksession!<CR>:qa<CR>
- nnoremap <space> za
- tnoremap <Esc> <C-\><C-n>
- inoremap <esc> <esc>mm
- inoremap jj <esc>mm
- " Vim popup up down key
- inoremap <expr> <S-j> pumvisible() ? "\<C-n>" : "\<S-j>"
- inoremap <expr> <S-k> pumvisible() ? "\<C-p>" : "\<S-k>"
- " allows cursor change in tmux mode
- if exists('$TMUX')
- let &t_SI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=1\x7\<Esc>\\"
- let &t_EI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=0\x7\<Esc>\\"
- else
- let &t_SI = "\<Esc>]50;CursorShape=1\x7"
- let &t_EI = "\<Esc>]50;CursorShape=0\x7"
- endif
- " The Silver Searcher
- if executable('ag')
- " Use ag over grep
- set grepprg=ag\ --nogroup\ --nocolor\
- " command! -nargs=+ -complete=file -bar Ag silent! grep! <args>|cwindow|redraw!
- nnoremap <leader>a :Ag<space>
- let useAg = 1
- else
- nnoremap <leader>a :echo("No Ag executable")<CR>
- endif
- au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
- au BufNewFile,BufRead *.ts setlocal ft=typescript
- au BufNewFile,BufRead *.dart setlocal ft=dart
- " }}}
- " Language configuration {{{
- let g:polyglot_disabled = [
- \ 'markdown',
- \ 'javascript'
- \]
- let g:markdown_fenced_languages = [
- \ 'html',
- \ 'python',
- \ 'bash=sh',
- \ 'shell=sh',
- \ 'c',
- \ 'cpp',
- \ 'js=javascript',
- \ 'ts=typescript',
- \ 'go',
- \ 'crystal'
- \]
- let g:used_javascript_libs = 'react,chai,vue,angularjs'
- " cpp highlight {{{
- let g:cpp_class_scope_highlight = 1
- let g:cpp_member_variable_highlight = 1
- let g:cpp_class_decl_highlight = 1
- let g:cpp_experimental_simple_template_highlight = 1
- let g:cpp_concepts_highlight = 1
- let c_no_curly_error=1
- " }}}
- " Javascript {{{
- let g:jsx_ext_required = 1
- let g:javascript_plugin_flow = 1
- " }}}
- " Typescript {{{
- " let g:typescript_compiler_binary = 'tsc'
- " let g:typescript_compiler_options = '--experimentalDecorators'
- " let g:tsuquyomi_disable_quickfix = 1
- " }}}
- " }}}
- " File, Buffer, Tab Manger {{{
- " Dirvish {{{
- " nnoremap <leader>d :Dirvish<CR>
- " nnoremap <leader>dd :Dirvish %<CR>
- " }}}
- " Vaffle {{{
- nnoremap <leader>dD :Vaffle<CR>
- nnoremap <leader>dd :Vaffle %:p:h<CR>
- " }}}
- " }}}
- " deoplete {{{
- let g:deoplete#enable_at_startup = 1
- " }}}
- " CoC {{{
- nmap <leader>c :CocList<space>
- " }}}
- " ALE {{{
- command! ALEDisableFixers let g:ale_fix_on_save=0
- command! ALEEnableFixers let g:ale_fix_on_save=1
- command! ALEDisableFixersBuffer let b:ale_fix_on_save=0
- command! ALEEnableFixersBuffer let b:ale_fix_on_save=0
- let g:airline#extensions#ale#enabled = 1
- let g:ale_echo_msg_error_str = 'E'
- let g:ale_echo_msg_warning_str = 'W'
- let g:ale_echo_msg_format = '[%linter%][%severity%] %s'
- nmap <silent> <C-n>E <Plug>(ale_previous_wrap)
- nmap <silent> <C-n>e <Plug>(ale_next_wrap)
- let g:ale_fix_on_save = 1
- let g:ale_lint_on_enter = 1
- let g:ale_lint_on_insert_leave = 1
- let g:ale_linters_explicit = 1
- " let g:ale_lint_on_text_changed = 'always'
- let g:ale_completion_delay = 1000
- let g:ale_lint_delay = 500
- let g:ale_linters = {
- \ 'python': ['flake8', 'mypy'],
- \ 'javascript': ['eslint'],
- \ 'typescript': ['tslint'],
- \ 'c': ['gcc'],
- \ 'cpp': ['g++']
- \}
- let g:ale_fixers = {
- \ 'python': ['autopep8'],
- \ 'javascript': ['prettier'],
- \ 'typescript': ['prettier'],
- \ 'c': ['clang-format'],
- \ 'cpp': ['clang-format']
- \}
- " Python {{{
- let g:ale_python_mypy_options = '--ignore-missing-imports'
- let g:ale_python_autopep8_options = '-a -a -a'
- " }}}
- " Javascript && Typescript {{{
- " let g:ale_javascript_eslint_options = '--fix-dry-run'
- " let g:ale_javascript_eslint_executable='eslint_d'
- let g:ale_javascript_prettier_use_global = 1
- let g:ale_typescript_tslint_use_global = 1
- let g:ale_typescript_tslint_config_path = ''
- " }}}
- " C/C++ {{{
- let g:ale_c_clangformat_executable = 'clang-format-7'
- let g:ale_c_clangformat_options = '-style="{
- \ DerivePointerAlignment: false,
- \ PointerAlignment: Left,
- \ AlignAfterOpenBracket: AlwaysBreak
- \}"'
- " }}}
- " }}}
- " place {{{
- nmap gi <Plug>(place-insert)
- nmap gm <Plug>(place-insert-multiple)
- " }}}
- " vim-operator-surround {{{
- " operator mappings
- map <silent>sa <Plug>(operator-surround-append)
- map <silent>sd <Plug>(operator-surround-delete)
- map <silent>sr <Plug>(operator-surround-replace)
- " delete or replace most inner surround
- " if you use vim-textobj-multiblock
- " nmap <silent>sdd <Plug>(operator-surround-delete)<Plug>(textobj-multiblock-a)
- " nmap <silent>srr <Plug>(operator-surround-replace)<Plug>(textobj-multiblock-a)
- " if you use vim-textobj-anyblock
- " nmap <silent>sdd <Plug>(operator-surround-delete)<Plug>(textobj-anyblock-a)
- " nmap <silent>srr <Plug>(operator-surround-replace)<Plug>(textobj-anyblock-a)
- " if you use vim-textobj-between
- " nmap <silent>sdb <Plug>(operator-surround-delete)<Plug>(textobj-between-a)
- " nmap <silent>srb <Plug>(operator-surround-replace)<Plug>(textobj-between-a)
- " }}}
- " Quick scope {{{
- let g:qs_highlight_on_keys = ['f', 'F', 't', 'T']
- " }}}
- " Ctrl Space {{{
- set nocompatible
- set hidden
- " }}}
- " posero {{{
- " let g:posero_default_mappings = 0
- " nnoremap <silent> <buffer> <Up> :call posero#PreviousLine()<CR>
- " nnoremap <silent> <buffer> <Down> :call posero#NextLine()<CR>
- " nnoremap <silent> <buffer> <Right> :call posero#NextSlide()<CR>
- " nnoremap <silent> <buffer> <Left> :call posero#PreviousSlide()<CR>
- " nnoremap <silent> <buffer> <CR> :call posero#NextLine()<CR>
- " }}}
- " Sideway {{{
- nnoremap <S-h> :SidewaysLeft<cr>
- nnoremap <S-l> :SidewaysRight<cr>
- " }}}
- " overcommandline {{{
- nnoremap <silent> :%s :OverCommandLine<CR>%s/
- xnoremap <silent> :%s :'<,'>OverCommandLine<CR>s/
- let g:over#command_line#substitute#replace_pattern_visually = 1
- let g:over#command_line#search#enable_incsearch = 1
- " }}}
- " Fencview auto detect encoding {{{
- let g:fencview_autodetect = 1
- " }}}
- " Airline {{{
- let g:airline#extensions#tabline#enabled = 1
- let g:airline_theme='minimalist'
- let g:airline_powerline_fonts = 0
- set encoding=utf-8
- " }}}
- " Raibow Parentheses Improved {{{
- let g:rainbow_active = 1
- let g:rainbow_conf = {
- \ 'guifgs': ['royalblue3', 'darkorange3', 'seagreen3', 'firebrick'],
- \ 'ctermfgs': ['lightblue', 'lightyellow', 'lightcyan', 'lightmagenta'],
- \ 'operators': '_,_',
- \ 'parentheses': ['start=/(/ end=/)/ fold', 'start=/\[/ end=/\]/ fold', 'start=/{/ end=/}/ fold'],
- \ 'separately': {
- \ '*': {},
- \ 'tex': {
- \ 'parentheses': ['start=/(/ end=/)/', 'start=/\[/ end=/\]/'],
- \ },
- \ 'lisp': {
- \ 'guifgs': ['royalblue3', 'darkorange3', 'seagreen3', 'firebrick', 'darkorchid3'],
- \ },
- \ 'vim': {
- \ 'parentheses': ['start=/(/ end=/)/', 'start=/\[/ end=/\]/', 'start=/{/ end=/}/ fold', 'start=/(/ end=/)/ containedin=vimFuncBody', 'start=/\[/ end=/\]/ containedin=vimFuncBody', 'start=/{/ end=/}/ fold containedin=vimFuncBody'],
- \ },
- \ 'html': {
- \ 'parentheses': ['start=/\v\<((area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)[ >])@!\z([-_:a-zA-Z0-9]+)(\s+[-_:a-zA-Z0-9]+(\=("[^"]*"|'."'".'[^'."'".']*'."'".'|[^ '."'".'"><=`]*))?)*\>/ end=#</\z1># fold'],
- \ },
- \ 'css': 0,
- \ }
- \}
- " }}}
- " numbertoggle {{{
- " }}}
- " EasyAlign {{{
- " Start interactive EasyAlign in visual mode (e.g. vipga)
- xmap ga <Plug>(EasyAlign)
- " Start interactive EasyAlign for a motion/text object (e.g. gaip)
- nmap ga <Plug>(EasyAlign)
- " }}}
- " Goyo {{{
- let g:goyo_width = 130
- " }}}
- " Commentary {{{
- " autocmd FileType apache setlocal commentstring=#\ %s
- " }}}
- " Move {{{
- " move lines/block up/down by pressing <C-k>/<C-j>
- " move characters right/left ...
- let g:move_key_modifier = 'C'
- " }}}
- " Multiple cursors {{{
- let g:multi_cursor_use_default_mapping=0
- " let g:multi_cursor_start_key='<C-d>'
- " let g:multi_cursor_next_key='<C-n>'
- " let g:multi_cursor_prev_key='<C-p>'
- " let g:multi_cursor_skip_key='<C-x>'
- " let g:multi_cursor_quit_key='<Esc>'
- " }}}
- " Comfortable motion {{{
- " nnoremap <silent> <C-q> :call comfortable_motion#flick(100)<CR>
- " nnoremap <silent> <C-y> :call comfortable_motion#flick(-100)<CR>
- " }}}
- " Hashkell mode {{{
- " let g:ghc="stack ghci"
- " let g:haddock_browser="/usr/bin/firefox"
- " }}}
- " Mundo {{{
- nnoremap <leader>u :MundoToggle<CR>
- set undofile
- set undodir=~/.vim/undo
- " }}}
- " Auto-pairs {{{
- let g:AutoPairsFlyMode = 1
- " }}}
- " GGrep {{{
- set grepprg=ag
- let g:grep_cmd_opts = '--line-numbers --noheading'
- " }}}
- " UltiSnips {{{
- " let g:UltiSnipsSnippetsDir = $HOME."/.config/UltiSnips"
- let g:UltiSnipsSnippetDirectories = [
- \ 'UltiSnips',
- \ $HOME.'/.vim/UltiSnips'
- \]
- let g:UltiSnipsExpandTrigger="<tab>"
- let g:UltiSnipsJumpForwardTrigger="<S-l>"
- let g:UltiSnipsJumpBackwardTrigger="<S-tab>"
- " }}}
- " TagBar {{{
- nmap <leader>tag :TagbarToggle<CR><C-W>p
- " }}}
- " CamelCaseMotion {{{
- " call camelcasemotion#CreateMotionMappings('<leader>')
- " map <silent> w <Plug>CamelCaseMotion_w
- " map <silent> b <Plug>CamelCaseMotion_b
- " map <silent> e <Plug>CamelCaseMotion_e
- " map <silent> ge <Plug>CamelCaseMotion_ge
- " sunmap w
- " sunmap b
- " sunmap e
- " sunmap ge
- " }}}
- " File header {{{
- let g:fileheader_default_author = 'Nguyen Anh Khoa'
- let g:fileheader_author = 'Nguyen Anh Khoa'
- let g:fileheader_default_email = 'ng.akhoa98@gmail.com'
- let g:fileheader_email = 'ng.akhoa98@gmail.com'
- let g:fileheader_by_git_config = 1
- " }}}
- " Disabled {{{
- " vim-keysound {{{
- " let g:keysound_py_version = 3
- " let g:keysound_enable = 1
- " }}}
- " Rainbow parentheses {{{
- " let g:rbpt_colorpairs = [
- " \ ['brown', 'RoyalBlue3'],
- " \ ['Darkblue', 'SeaGreen3'],
- " \ ['darkgray', 'DarkOrchid3'],
- " \ ['darkgreen', 'firebrick3'],
- " \ ['darkcyan', 'RoyalBlue3'],
- " \ ['darkred', 'SeaGreen3'],
- " \ ['darkmagenta', 'DarkOrchid3'],
- " \ ['brown', 'firebrick3'],
- " \ ['gray', 'RoyalBlue3'],
- " \ ['black', 'SeaGreen3'],
- " \ ['darkmagenta', 'DarkOrchid3'],
- " \ ['Darkblue', 'firebrick3'],
- " \ ['darkgreen', 'RoyalBlue3'],
- " \ ['darkcyan', 'SeaGreen3'],
- " \ ['darkred', 'DarkOrchid3'],
- " \ ['red', 'firebrick3'],
- " \ ]
- " let g:rbpt_max = 16
- " let g:rbpt_loadcmd_toggle = 0
- " au VimEnter * RainbowParenthesesToggle
- " au Syntax * RainbowParenthesesLoadRound
- " au Syntax * RainbowParenthesesLoadSquare
- " au Syntax * RainbowParenthesesLoadBraces
- " }}}
- " Syntastic {{{
- " set statusline+=%#warningmsg#
- " set statusline+=%{SyntasticStatuslineFlag()}
- " set statusline+=%*
- " let g:syntastic_always_populate_loc_list = 1
- " let g:syntastic_auto_loc_list = 1
- " let g:syntastic_check_on_open = 0
- " let g:syntastic_check_on_wq = 1
- " " Syntastic C++
- " let g:syntastic_cpp_checkers = ['gcc']
- " let g:syntastic_cpp_compiler = 'gcc'
- " let g:syntastic_cpp_compiler_options = '-std=c++11'
- " " Syntastic python
- " let g:syntastic_python_checkers = ['flake8', 'pep257', 'mypy']
- " let g:syntastic_python_flake8_args = '--max-line-length=120'
- " }}}
- " NNN {{{
- " Disable default mappings
- " let g:nnn#set_default_mappings = 0
- " nnoremap <leader>nn :NnnPicker<CR>
- " Start nnn in the current file's directory
- " nnoremap <leader>n :NnnPicker '%:p:h'<CR>
- " autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | NnnPicker | endif
- " }}}
- " SnipMate {{{
- " }}}
- " NERDTree {{{
- " nnoremap <C-V> :NERDTreeToggle<CR>
- " let g:NERDTreeHijackNetrw=0
- " autocmd StdinReadPre * let s:std_in=1
- " autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | exe 'NERDTree' argv()[0] | wincmd p | ene | endif
- " autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | exe 'NERDTree' argv()[0] | wincmd p | q | endif
- " }}}
- " vim-indent-guides {{{
- " let g:indent_guides_enable_on_vim_startup = 1
- " }}}
- " Gundo {{{
- " nnoremap <leader>u :GundoToggle<CR>
- " }}}
- " Clang-format {{{
- " let g:clang_format#detect_style_file = 1
- " let g:clang_format#auto_format = 1
- " autocmd FileType c,cpp,objc nnoremap <buffer><Leader>cf :<C-u>ClangFormat<CR>
- " autocmd FileType c,cpp,objc vnoremap <buffer><Leader>cf :ClangFormat<CR>
- " }}}
- " Youcompleteme {{{
- " bind other key to work with ultisnips
- " let g:ycm_key_list_select_completion = ['<S-j>', '<Down>']
- " let g:ycm_key_list_previous_completion = ['<S-k>', '<Up>']
- " }}}
- " CtrlP {{{
- let g:ctrlp_map = '<c-p>'
- let g:ctrlp_cmd = 'CtrlP'
- set wildignore+=*\\tmp\\*,*.swp,*.zip,*.exe " Windows
- let g:ctrlp_custom_ignore = '\v[\/]\.(git|hg|svn)$'
- let g:ctrlp_custom_ignore = {
- \ 'dir': '\v[\/]\.(git|hg|svn)$',
- \ 'file': '\v\.(exe|so|dll)$',
- \ 'link': 'some_bad_symbolic_links',
- \}
- let g:ctrlp_user_command = 'find %s -type f'
- let g:ctrlp_match_window = 'bottom,order:ttb'
- let g:ctrlp_switch_buffer = 0
- let g:ctrlp_working_path_mode = 0
- let g:ctrlp_user_command = 'ag %s -l --nocolor --hidden -g ""'
- if exists("useAg")
- " Use ag in CtrlP for listing files. Lightning fast and respects .gitignore
- " ag is fast enough that CtrlP doesn't need to cache
- let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""'
- let g:ctrlp_use_caching = 0
- endif
- " }}}
- " vim-hardtime {{{
- let g:hardtime_default_on = 0
- let g:hardtime_ignore_buffer_patterns = ['dirvish', '__Tagbar__', 'buffergator']
- " }}}
- " }}}
- " vim: foldmethod=marker:foldlevel=0:foldenable
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement