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

set up java spring boot "hello world" web application on ubuntu from zero.

install JDK 8

$ sudo apt-get install openjdk-8-jdk

install Gradle

$ curl -s "https://get.sdkman.io" | bash
$ source "$HOME/.sdkman/bin/sdkman-init.sh"
$ sdk install gradle 5.1.1

Spring Initializr

start.spring.io
get your "demo.zip" and unzip it.
choose "Gradle Project",
please remember add "Web" as dependence,
otherwise there will be compile errors.


springboothelloCreate a simple web application
$ cat src/main/java/com/example/demo/HelloController.java
package com.example.demo;

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;

@RestController
public class HelloController {

    @RequestMapping("/")
    public String index() {
        return "Greetings from Spring Boot!";
    }

}

Run the Application

$ ./gradlew bootRun

Check out the service.

$ curl localhost:8080
Greetings from Spring Boot!

Generate IDE profile

add two plugin in build.gradle
apply plugin "idea" apply plugin "eclipse" 
generate IDE profile for IntelliJ IDEA(ipr)
./gradlew idea
generate IDE profile for Eclipse(.project)
./gradlew eclipse

Refers

Building an Application with Spring Boot

How to Set Up Giscus Comments for Your Website

  How to Set Up Giscus Comments for Your Website If you want to add a clean, GitHub-powered comment system to your website,   Giscus   is on...