make vim like source insight, a effective c/c++ ide

IDE

ide3.gif

setup latest vim

git clone https://github.com/vim/vim.git
cd vim/src
./configure --enable-cscope --enable-terminal
make
sudo make install

https://www.vim.org/git.php

use universal ctags

git clone https://github.com/universal-ctags/ctags.git
cd ctags
./autogen.sh
./configure
make
sudo make instahttps://www.tamacom.com/global/global-6.6.3.tar.gzll

setup gnu tags

wget https://www.tamacom.com/global/global-6.6.3.tar.gz
tar -xvf global-6.6.3.tar.gz
cd global-6.6.3
sh reconf.sh 
sudo apt install ncurses-dev
./configure --with-universal-ctags=/usr/local/bin/ctags 
make 
sudo make install

https://www.tamacom.com/global/global-6.6.3.tar.gz
http://www.gnu.org/software/global/download.html

install gtags as vim plugin

cp gtags.vim ~/.vim/plugin/
cp gtags-cscope.vim ~/.vim/plugin/

config gtags as cscope in ~/.vimrc

" gtags configure
" To use the default key/mouse mapping:
let GtagsCscope_Auto_Map = 1
" To ignore letter case when searching:
let GtagsCscope_Ignore_Case = 1
" To use absolute path name:
let GtagsCscope_Absolute_Path = 1
" To deterring interruption:
let GtagsCscope_Keep_Alive = 1
" If you hope auto loading:
let GtagsCscope_Auto_Load = 1
let GtagsCscope_Quiet = 1
" To use 'vim -t ', ':tag' and '<C-]>'
set cscopetag
let Gtags_Auto_Map = 1
" output cscope result to quickfix 
set cscopequickfix=s-,g-,c-,d-,i-,t-,e-,f-,-a
" open quickfix window if needx
autocmd QuickFixCmdPost [^l]* nested botright cwindow

:nmap \s :cs find s <C-R>=expand("<cword>")<CR><CR>
:nmap \a :cs find a <C-R>=expand("<cword>")<CR><CR>
:nmap \d :cs find d <C-R>=expand("<cword>")<CR><CR>
:nmap \g :cs find g <C-R>=expand("<cword>")<CR><CR>
:nmap \i :cs find i <C-R>=expand("<cword>")<CR><CR>
:nmap \c :cs find c <C-R>=expand("<cword>")<CR><CR>
:nmap \e :cs find e <C-R>=expand("<cword>")<CR><CR>
:nmap \t :cs find t <C-R>=expand("<cword>")<CR><CR>
:nmap \f :cs find f <C-R>=expand("<cword>")<CR><CR>

Usage:

cscope commands:
add  : Add a new database             (Usage: add file|dir [pre-path] [flags])
find : Query for a pattern            (Usage: find a|c|d|e|f|g|i|s|t name)
       a: Find assignments to this symbol
       c: Find functions calling this function
       d: Find functions called by this function
       e: Find this egrep pattern
       f: Find this file
       g: Find this definition
       i: Find files #including this file
       s: Find this C symbol
       t: Find this text string
help : Show this message              (Usage: help)
kill : Kill a connection              (Usage: kill #)
reset: Reinit all connections         (Usage: reset)
show : Show connections               (Usage: show)

Normal Key Map:
Press \a means "cs f a $cname“
Press \s means "cs f s $cname”
Press \t means "cs f t $cname“
Press \e means "cs f e $cname”
Press \c means "cs f c $cname“
Press \d means "cs f d $cname”
Press \i means "cs f i $cname“
Press \g means "cs f g $cname"
Press \f means "cs f f $cname"

install taglist

unzip taglist_46.zip 
Archive:  taglist_46.zip
  inflating: plugin/taglist.vim      
  inflating: doc/taglist.txt         
cp plugin/taglist.vim ~/.vim/plugin/
cp doc/taglist.txt ~/.vim/doc/

https://www.vim.org/scripts/script.php?script_id=273

configure taglist vim plugin

"taglist settings
let Tlist_Inc_Winwidth=0
let Tlist_Use_Right_Window=1
let Tlist_File_Fold_Auto_Close=1
let Tlist_Exit_OnlyWindow=1
let Tlist_Auto_Open=1
:nmap <F8> :TlistToggle<CR>
function! g:TlistFocus()
  let save_winnr = winnr()
    let winnum = bufwinnr("__Tag_List__")
      if winnum == -1
        :TlistToggle
        let winnum = bufwinnr("__Tag_List__")
      endif
    if winnum != -1
      if save_winnr != winnum
        exe winnum . 'wincmd w'
      endif
  endif
endfunction
"focus to Tag list window via CTL command
command! -nargs=0 -bar CTL call g:TlistFocus()    

Usage: Press F8 to toggle taglist

install vim-airline

git clone https://github.com/vim-airline/vim-airline ~/.vim/pack/dist/start/vim-airline

https://github.com/vim-airline/vim-airline

install fzf.vim

git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

~/.vimrc

" If installed using git
set rtp+=~/.fzf

.vimrc

set nocompatible
set backspace=indent,eol,start
syntax on
syntax enable
filetype plugin indent on
set autoread
set showmatch
set hlsearch
set incsearch
set ignorecase
set smartcase
set encoding=utf-8
set termencoding=utf-8
set fileencodings=utf-8,gb2312,gbk,gb18030
set tabstop=4
set shiftwidth=4
set expandtab
set softtabstop=4
set autoindent
set smartindent
set ruler
set paste

"gtags settings
set cscopetag
let GtagsCscope_Auto_Load = 1
let CtagsCscope_Auto_Map = 1
let GtagsCscope_Quiet = 1
set cscopequickfix=s-,g-,d-,c-,t-,e-,f-,i-

"open quickfix window if needed
autocmd QuickFixCmdPost [^l]* nested botright cwindow

"key maps for gtags
"find : Query for a pattern            (Usage: find a|c|d|e|f|g|i|s|t name)
"       a: Find assignments to this symbol
"       c: Find functions calling this function
"       d: Find functions called by this function
"       e: Find this egrep pattern
"       f: Find this file
"       g: Find this definition
"       i: Find files #including this file
"       s: Find this C symbol
"       t: Find this text string
:nmap \a :cs find a <C-R>=expand("<cword>")<CR><CR>
:nmap \c :cs find c <C-R>=expand("<cword>")<CR><CR>
:nmap \d :cs find d <C-R>=expand("<cword>")<CR><CR>
:nmap \e :cs find e <C-R>=expand("<cword>")<CR><CR>
:nmap \f :cs find f <C-R>=expand("<cword>")<CR><CR>
:nmap \g :cs find g <C-R>=expand("<cword>")<CR><CR>
:nmap \i :cs find i <C-R>=expand("<cword>")<CR><CR>
:nmap \s :cs find s <C-R>=expand("<cword>")<CR><CR>
:nmap \t :cs find t <C-R>=expand("<cword>")<CR><CR>

"taglist settings
let Tlist_Inc_Winwidth=0
let Tlist_Use_Right_Window=1
let Tlist_File_Fold_Auto_Close=1
let Tlist_Exit_OnlyWindow=1
let Tlist_Auto_Open=1

:nmap <F8> :TlistToggle<CR>
function! g:TlistFocus()
  let save_winnr = winnr()
  let winnum = bufwinnr("__Tag_List__")
  if winnum == -1
    :TlistToggle
    let winnum = bufwinnr("__Tag_List__")
  endif
  if winnum != -1
      if save_winnr != winnum
        exe winnum . 'wincmd w'
      endif
  endif
endfunction
"focus to Tag list window via CTL command
command! -nargs=0 -bar CTL call g:TlistFocus()

"lightline settings
set laststatus=2
if !has('gui_running')
  set t_Co=256
endif

"ale settings
let g:ale_completion_enabled = 1

"multiple-cursor settings
let g:multi_cursor_use_default_mapping=0
let g:multi_cursor_start_word_key      = '<C-n>'
let g:multi_cursor_select_all_word_key = '<C-a>'
let g:multi_cursor_start_key           = 'g<C-n>'
let g:multi_cursor_select_all_key      = 'g<C-a>'
let g:multi_cursor_next_key            = '<C-n>'
let g:multi_cursor_prev_key            = '<C-N>'
let g:multi_cursor_skip_key            = '<C-x>'
let g:multi_cursor_quit_key            = '<Esc>'

"tag preview configure
autocmd FileType qf nnoremap <silent><buffer> p :PreviewQuickfix<CR>
autocmd FileType qf nnoremap <silent><buffer> P :PreviewClose<CR>

"fzf configure
set rtp+=~/.fzf

" This is the default extra key bindings
let g:fzf_action = {
  \ 'ctrl-t': 'tab split',
  \ 'ctrl-x': 'split',
  \ 'ctrl-v': 'vsplit' }

" Default fzf layout
" - down / up / left / right
let g:fzf_layout = { 'left': '~100%' }

" Customize fzf colors to match your color scheme
let g:fzf_colors =
\ { 'fg':      ['fg', 'Normal'],
  \ 'bg':      ['bg', 'Normal'],
  \ 'hl':      ['fg', 'Comment'],
  \ 'fg+':     ['fg', 'CursorLine', 'CursorColumn', 'Normal'],
  \ 'bg+':     ['bg', 'CursorLine', 'CursorColumn'],
  \ 'hl+':     ['fg', 'Statement'],
  \ 'info':    ['fg', 'PreProc'],
  \ 'border':  ['fg', 'Ignore'],
  \ 'prompt':  ['fg', 'Conditional'],
  \ 'pointer': ['fg', 'Exception'],
  \ 'marker':  ['fg', 'Keyword'],
  \ 'spinner': ['fg', 'Label'],
  \ 'header':  ['fg', 'Comment'] }

" Enable per-command history.
" CTRL-N and CTRL-P will be automatically bound to next-history and
" previous-history instead of down and up. If you don't like the change,
" explicitly bind the keys to down and up in your $FZF_DEFAULT_OPTS.
let g:fzf_history_dir = '~/.local/share/fzf-history'

" [Buffers] Jump to the existing window if possible
let g:fzf_buffers_jump = 1

" [[B]Commits] Customize the options used by 'git log':
let g:fzf_commits_log_options = '--graph --color=always --format="%C(auto)%h%d %s %C(black)%C(bold)%cr"'

" [Tags] Command to generate tags file
let g:fzf_tags_command = 'gtags'

" [Commands] --expect expression for directly executing the command
let g:fzf_commands_expect = 'alt-enter,ctrl-x'

" Mapping selecting mappings
nmap <leader><tab> <plug>(fzf-maps-n)
xmap <leader><tab> <plug>(fzf-maps-x)
omap <leader><tab> <plug>(fzf-maps-o)

" Insert mode completion
imap <c-x><c-k> <plug>(fzf-complete-word)
imap <c-x><c-f> <plug>(fzf-complete-path)
imap <c-x><c-j> <plug>(fzf-complete-file-ag)
imap <c-x><c-l> <plug>(fzf-complete-line)

" Advanced customization using autoload functions
inoremap <expr> <c-x><c-k> fzf#vim#complete#word({'left': '15%'})

let g:fzf_files_options =
  \ '--preview "(coderay {} || less {}) 2> /dev/null | head -'.&lines.'"'

nmap <C-p> :Files<CR>
nmap <C-e> :Buffers<CR>

" press s in qf window to open tag in new split window
autocmd FileType qf nnoremap <silent><buffer> s <Enter><C-W>s
" press v in qf window to open tag in new vertical split window
autocmd FileType qf nnoremap <silent><buffer> v <Enter><C-W>v
" press t in qf window to open tag in new tab
autocmd FileType qf nnoremap <silent><buffer> t <Enter><C-W>T

Summary

replace .vimrc and .vim with below repo
https://github.com/lengerrong/ervim.git

Subscribe to Post, Code and Quiet Time.

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe