So Today, Somehow I able to set up my vim(vi Improved) for my Competitive Programming Journey! it actually took my whole day so I don't want that you also f'''k up your mind . just chill here we go.:-
p.s:-I'll be using Linux as my OS!
installing:- Sudo apt-get install vim
:- Sudo apt-get install g++
update:- sudo apt-get update
now there is a ".vimrc" file in your home directory.
if there is no such file simply make a new one named ".vimrc" in the home directory.
edit it with this code given below:-
AND DONT TRY TO FULLY UNDERSTAND IT IF YOU ARE USING VIM FIRST TIME
" .vimrc of Bo Liu " {{{ " https://github.com/hmybmny/vimrc set nocompatible " }}} " VIM-PLUG BLOCK " {{{ silent! if plug#begin('~/.vim/plugged') " Colors Plug 'altercation/vim-colors-solarized' Plug 'tomasr/molokai' Plug 'colepeters/spacemacs-theme.vim' Plug 'sheerun/vim-polyglot' " Editing Plug 'SirVer/ultisnips' Plug 'sjl/gundo.vim' Plug 'matze/vim-move' Plug 'jiangmiao/auto-pairs' Plug 'kana/vim-operator-user' Plug 'gcmt/wildfire.vim' Plug 'lilydjwg/fcitx.vim' Plug 'scrooloose/nerdcommenter' Plug 'derekwyatt/vim-protodef', { 'for': ['c', 'cpp', 'objc'] } Plug 'suan/vim-instant-markdown', { 'for': 'markdown' } " Navigation Plug 'majutsushi/tagbar', { 'on': 'TagbarToggle' } Plug 'derekwyatt/vim-fswitch', { 'for': ['c', 'cpp', 'objc'] } Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } Plug 'tpope/vim-fugitive' Plug 'ctrlpvim/ctrlp.vim' Plug 'dyng/ctrlsf.vim' Plug 'fholgado/minibufexpl.vim' " View Plug 'Yggdroot/indentLine' Plug 'airblade/vim-gitgutter' " Linting Plug 'w0rp/ale' "cd ~ "mkdir ycm_build "cd ycm_build/ "cmake -G "Unix Makefiles" -DPATH_TO_LLVM_ROOT=~/Downloads/clang+llvm-3.9.1-x86_64-linux-gnu-ubuntu-16.04 . ~/.vim/plugged/YouCompleteMe/third_party/ycmd/cpp "cmake --build . --target ycm_core "Plug 'Valloric/YouCompleteMe' function! BuildYCM(info) if a:info.status == 'installed' || a:info.force !./install.py --clang-completer endif endfunction Plug 'Valloric/YouCompleteMe', { 'do': function('BuildYCM') } call plug#end() endif " }}} " BASIC SETTINGS " {{{ let mapleader = ';' set encoding=utf-8 " Allow backspacing over everything in insert mode set backspace=indent,eol,start " Store lots of :cmdline history set history=500 " Show line numbers set nu set nowrap " Autoindent when starting new line set autoindent set smartindent set lazyredraw " Ignore case when searching set ignorecase " Don't ignore case when search has capital letter set smartcase " Enable highlighted case-insensitive incremential search set incsearch " Enble search highlighting set hlsearch " Always show window statuses set laststatus=2 " Statusline style set statusline= set statusline+=%7*\[%n] "buffernr set statusline+=%1*\ %<%F\ "File+path set statusline+=%2*\ %y\ "FileType set statusline+=%3*\ %{''.(&fenc!=''?&fenc:&enc).''} "Encoding set statusline+=%3*\ %{(&bomb?\",BOM\":\"\")}\ "Encoding2 set statusline+=%4*\ %{&ff}\ "FileFormat (dos/unix..) set statusline+=%8*\ %=\ row:%l/%L\ (%p%%)\ "Rownumber/total (%) set statusline+=%9*\ col:%c\ "Colnr set statusline+=%0*\ \ %m%r%w\ %P\ \ "Modified? Readonly? Top/bot. " Show the size of block one selected in visual mode set showcmd " Hide buffers set hidden set visualbell " Indent using four spaces set expandtab smarttab set tabstop=2 set shiftwidth=2 set softtabstop=2 set gcr=a:block-blinkon0 set guioptions-=l set guioptions-=L set guioptions-=r set guioptions-=R set guioptions-=m set guioptions-=T function! ToggleFullscreen() call system("wmctrl -ir " . v:windowid . " -b toggle,fullscreen") endf map <silent> <F11> :call ToggleFullscreen()<CR> imap <silent> <F11> <esc>:call ToggleFullscreen()<CR> " autocmd VimEnter * call ToggleFullscreen() " Show the line and column number of the cursor position set ruler " Highlight line under cursor set cursorline set cursorcolumn " }}} " MAPPINGS " {{{ " ---------------------------------------------------------------------------- " Basic mappings " ---------------------------------------------------------------------------- " Profile iabbrev @@ hmybmny@gmail.com iabbrev @b hmybmny.com " Edit myvimrc nnoremap <leader>ev :vsplit $MYVIMRC<cr> nnoremap <leader>sv :source $MYVIMRC<cr> " Edit nnoremap <leader>" viw<esc>a"<esc>hbi"<esc>lel " Save inoremap <C-s> <C-O>:w<cr> nnoremap <C-s> :w<cr> nnoremap <leader>w :w<cr> " Copy vnoremap <Leader>y "+y nmap <Leader>p "+p " Quit nnoremap <Leader>q :q<cr> nnoremap <Leader>Q :qa!<cr> " Movement in insert mode inoremap <C-h> <C-o>h inoremap <C-j> <C-o>j inoremap <C-k> <C-o>k inoremap <C-l> <C-o>a inoremap <C-^> <C-o><C-^> " ---------------------------------------------------------------------------- " Quickfix " ---------------------------------------------------------------------------- nnoremap ]q :cnext<cr>zz nnoremap [q :cprev<cr>zz " ---------------------------------------------------------------------------- " <tab> / <s-tab> | Circular windows navigation " ---------------------------------------------------------------------------- nnoremap <tab> <c-w>w nnoremap <S-tab> <c-w>W nnoremap <Leader>hw <C-W>h nnoremap <Leader>jw <C-W>j nnoremap <Leader>kw <C-W>k nnoremap <Leader>lw <C-W>l " ---------------------------------------------------------------------------- " :CopyRTF " ---------------------------------------------------------------------------- function! s:colors(...) return filter(map(filter(split(globpath(&rtp, 'colors/*.vim'), "\n"), \ 'v:val !~ "^/usr/"'), \ 'fnamemodify(v:val, ":t:r")'), \ '!a:0 || stridx(v:val, a:1) >= 0') endfunction " ---------------------------------------------------------------------------- " <F8> | Color scheme selector " ---------------------------------------------------------------------------- " set background=dark let g:molokai_original = 1 colorschem molokai function! s:rotate_colors() if !exists('s:colors') let s:colors = s:colors() endif let name = remove(s:colors, 0) call add(s:colors, name) set background=dark execute 'colorscheme' name redraw echo name endfunction nnoremap <silent> <F8> :call <SID>rotate_colors()<cr> inoremap <silent> <F8> <esc>:call <SID>rotate_colors()<cr> " }}} " PLUGINS " {{{ " ---------------------------------------------------------------------------- " ultisnips " ---------------------------------------------------------------------------- let g:UltiSnipsSnippetDirectories=["mysnippets"] let g:UltiSnipsExpandTrigger="<leader><tab>" let g:UltiSnipsJumpForwardTrigger="<leader><tab>" let g:UltiSnipsJumpBackwardTrigger="<leader><s-tab>" " ---------------------------------------------------------------------------- " vim-multiple-cursors " ---------------------------------------------------------------------------- let g:multi_cursor_next_key='<S-n>' let g:multi_cursor_skip_key='<S-k>' " ---------------------------------------------------------------------------- " vim-move " ---------------------------------------------------------------------------- let g:move_key_modifier = 'C' " ---------------------------------------------------------------------------- " auto-pairs " ---------------------------------------------------------------------------- " ---------------------------------------------------------------------------- " vim-operator-user " ---------------------------------------------------------------------------- " ---------------------------------------------------------------------------- " wildfire.vim " ---------------------------------------------------------------------------- map <SPACE> <Plug>(wildfire-fuel) vmap <C-SPACE> <Plug>(wildfire-water) " ---------------------------------------------------------------------------- " indentLine " ---------------------------------------------------------------------------- let g:indentLine_char = '│' " ---------------------------------------------------------------------------- " tarbar " ---------------------------------------------------------------------------- inoremap <F2> <esc>:TagbarToggle<cr> nnoremap <F2> :TagbarToggle<cr> let tagbar_left=1 let tagbar_width=32 let g:tagbar_sort = 0 let g:tagbar_compact=1 let g:tagbar_type_cpp = { \ 'ctagstype' : 'c++', \ 'kinds' : [ \ 'c:classes:0:1', \ 'd:macros:0:1', \ 'e:enumerators:0:0', \ 'f:functions:0:1', \ 'g:enumeration:0:1', \ 'l:local:0:1', \ 'm:members:0:1', \ 'n:namespaces:0:1', \ 'p:functions_prototypes:0:1', \ 's:structs:0:1', \ 't:typedefs:0:1', \ 'u:unions:0:1', \ 'v:global:0:1', \ 'x:external:0:1' \ ], \ 'sro' : '::', \ 'kind2scope' : { \ 'g' : 'enum', \ 'n' : 'namespace', \ 'c' : 'class', \ 's' : 'struct', \ 'u' : 'union' \ }, \ 'scope2kind' : { \ 'enum' : 'g', \ 'namespace' : 'n', \ 'class' : 'c', \ 'struct' : 's', \ 'union' : 'u' \ } \ } " ---------------------------------------------------------------------------- " vim-fswitch " ---------------------------------------------------------------------------- nmap <silent> <Leader>fs :FSHere<cr> " ---------------------------------------------------------------------------- " vim-protodef " ---------------------------------------------------------------------------- let g:protodefprotogetter='~/.vim/plugged/vim-protodef/pullproto.pl' let g:disable_protodef_sorting=1 " ---------------------------------------------------------------------------- " nerdcommenter " ---------------------------------------------------------------------------- " ---------------------------------------------------------------------------- " nerdtree " ---------------------------------------------------------------------------- inoremap <F3> <esc>:NERDTreeToggle<CR> nnoremap <F3> :NERDTreeToggle<CR> let NERDTreeWinSize=22 let NERDTreeWinPos="right" let NERDTreeShowHidden=0 let NERDTreeMinimalUI=1 let NERDTreeAutoDeleteBuffer=1 " ---------------------------------------------------------------------------- " vim-instant-markdown " ---------------------------------------------------------------------------- autocmd BufNewFile,BufReadPost *.md set filetype=markdown let g:instant_markdown_slow = 1 let g:instant_markdown_autostart = 0 nnoremap <Leader>md :InstantMarkdownPreview<CR> " ---------------------------------------------------------------------------- " vim-fugitive " ---------------------------------------------------------------------------- " ---------------------------------------------------------------------------- " vim-gitgutter " ---------------------------------------------------------------------------- set updatetime=250 set signcolumn=yes " ---------------------------------------------------------------------------- " ale " ---------------------------------------------------------------------------- " ---------------------------------------------------------------------------- " minibufexpl " ---------------------------------------------------------------------------- inoremap <F4> <esc>:MBEToggle<cr> nnoremap <F4> :MBEToggle<cr> nnoremap ]b :bnext<cr> nnoremap [b :bprev<cr> " ---------------------------------------------------------------------------- " gundo.vim " ---------------------------------------------------------------------------- nnoremap <Leader>ud :GundoToggle<CR> set sessionoptions="blank,globals,localoptions,tabpages,sesdir,folds,help,options,resize,winpos,winsize" if !strlen(finddir('~/.vim/undofiles')) echo "undofiles[~/.vim/undofiles] not found. Now it's being created. Press ENTER or type command to continue." !mkdir -p ~/.vim/undofiles endif if v:version >= 703 set undodir=~/.vim/undofiles set undofile set colorcolumn=+1 endif " ---------------------------------------------------------------------------- " ctrlsf.vim " ---------------------------------------------------------------------------- nnoremap <c-f> :CtrlSF<CR> " ---------------------------------------------------------------------------- " ctrlp.vim " ---------------------------------------------------------------------------- " Disable output, vcs, archive, rails, temp and backup files set wildignore+=*.o,*.out,*.obj,.git,*.pyc,*.class set wildignore+=*.zip,*.tar.gz,*.tar.bz2,*.rar,*.tar.xz set wildignore+=*.swp,*~,._* set wildignore+=*/tmp/*,*.so,*.swp,*.zip " MacOSX/Linux let g:ctrlp_map = '<s-p>' let g:ctrlp_cmd = 'CtrlP' let g:ctrlp_custom_ignore = '\v[\/]\.(git|hg|svn)$' let g:ctrlp_custom_ignore = { \ 'dir': '\v[\/]\.(git|hg|svn|vendor/bundle/*\|vendor/cache/*\|public\|spec)$', \ 'file': '\v\.(exe|so|dll|swp|log|jpg|png|json)$', \ } " ---------------------------------------------------------------------------- " YouCompleteMe " ---------------------------------------------------------------------------- set completeopt-=preview nnoremap <leader>jc :YcmCompleter GoToDeclaration<CR> nnoremap <leader>jd :YcmCompleter GoToDefinition<CR> inoremap <leader>; <C-x><C-o> "run and compile cpp nnoremap <f8> :!g++ -o %:r.out % -std=c++14<Enter> autocmd filetype cpp nnoremap <f9> :!%:r.out<CR> let g:ycm_complete_in_comments=1 let g:ycm_confirm_extra_conf=0 let g:ycm_collect_identifiers_from_tags_files=0 let g:ycm_min_num_of_chars_for_completion=1 let g:ycm_cache_omnifunc=0 let g:ycm_seed_identifiers_with_syntax=1 " }}}
Now you are all set! hope it will help you a lot!
mostly we will use 2 modes of VIM 1. Command & 2. INSERT
Press i
to be in insert mode & esc
to exit!
Easily write your Cpp code in INSERT mode and In command mode :F8
type it and your file will be compiled again in command mode :F9
to run your file.
ADios ME AMigos!
Top comments (0)