CentOS7 vim IDE environment
安装构造一个基于vim的C/C++语言开发环境
需要安装的程序与插件
安装VIM
$ sudo yum install vim*
$ vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Oct 30 2018 19:56:57)
包含补丁: 1-160, 399, 402-403, 1099
修改者 <bugzilla@redhat.com>
编译者 <bugzilla@redhat.com>
巨型版本 无图形界面。 可使用(+)与不可使用(-)的功能:
+acl +farsi +mouse_netterm +syntax
+arabic +file_in_path +mouse_sgr +tag_binary
+autocmd +find_in_path -mouse_sysmouse +tag_old_static
-balloon_eval +float +mouse_urxvt -tag_any_white
-browse +folding +mouse_xterm -tcl
++builtin_terms -footer +multi_byte +terminfo
+byte_offset +fork() +multi_lang +termresponse
+cindent +gettext -mzscheme +textobjects
-clientserver -hangul_input +netbeans_intg +title
-clipboard +iconv +path_extra -toolbar
+cmdline_compl +insert_expand +perl +user_commands
+cmdline_hist +jumplist +persistent_undo +vertsplit
+cmdline_info +keymap +postscript +virtualedit
+comments +langmap +printer +visual
+conceal +libcall +profile +visualextra
+cryptv +linebreak +python/dyn +viminfo
+cscope +lispindent -python3 +vreplace
+cursorbind +listcmds +quickfix +wildignore
+cursorshape +localmap +reltime +wildmenu
+dialog_con -lua +rightleft +windows
+diff +menu +ruby/dyn +writebackup
+digraphs +mksession +scrollbind -X11
-dnd +modify_fname +signs -xfontset
-ebcdic +mouse +smartindent -xim
+emacs_tags -mouseshape -sniff -xsmp
+eval +mouse_dec +startuptime -xterm_clipboard
+ex_extra +mouse_gpm +statusline -xterm_save
+extra_search -mouse_jsbterm -sun_workshop -xpm
系统 vimrc 文件: "/etc/vimrc"
用户 vimrc 文件: "$HOME/.vimrc"
第二用户 vimrc 文件: "~/.vim/vimrc"
用户 exrc 文件: "$HOME/.exrc"
$VIM 预设值: "/etc"
$VIMRUNTIME 预设值: "/usr/share/vim/vim74"
编译方式: gcc -c -I. -Iproto -DHAVE_CONFIG_H -O2 -g -pipe -Wall -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D__linux__ -D_REENTRANT -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
链接方式: gcc -L. -Wl,-z,relro -fstack-protector -rdynamic -Wl,-export-dynamic -Wl,--enable-new-dtags -Wl,-rpath,/usr/lib64/perl5/CORE -Wl,-z,relro -L/usr/local/lib -Wl,--as-needed -o vim -lm -lnsl -lselinux -lncurses -lacl -lattr -lgpm -ldl -Wl,--enable-new-dtags -Wl,-rpath,/usr/lib64/perl5/CORE -fstack-protector -L/usr/lib64/perl5/CORE -lperl -lresolv -lnsl -ldl -lm -lcrypt -lutil -lpthread -lc
安装开发工具
简单方法直接安装“开发工具”组
$ yum groupinstall "Development Tools"
安装Git 因Centos系统源中的Git版本太低,所以我们手动安装最新版本
删除旧版本,上面安装的开发工具组中包含有它
$ sudo yum remove git
前往Git主站下载最新版本代码包
$ wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.21.0.tar.gz
安装依赖
$ sudo yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
$ sudo yum install perl-ExtUtils-MakeMaker
编译安装与配置
$ tar -zxvf git-2.21.0.tar.gz
$ cd git-2.21.0
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
$ git --version
git version 2.21.0
安装Vundle vim的插件管理插件
$ mkdir -p .vim/bundle
$ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
配置~/.vimrc
$ vi ~/.vimrc
set nocompatible " be iMproved
" 搜索逐字符高亮
set hlsearch
set path+=**
set wildmenu
" leader 键
let mapleader = ','
"配置backspace键工作方式
set backspace=indent,eol,start
"搜索时,关键字高亮
set hls
"设置在Vim中不可以使用鼠标 防止在SSH宿主Linux终端下无法拷贝
set mouse-=a
" 复制粘贴到系统剪贴板
map <C-C> "+y<CR>
map <C-V> "+p<CR>
" 快速扩大分屏
map <C-M> :res +2<CR>
map <C-N> :vertical res +2<CR>
" 窗口缩放
"set modifiable
"设置ctags的快捷键为 Ctrl-F12
map <F10> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
"显示行号
set number
"设置在编辑过程中右下角显示光标的行列信息
set ruler
"当一行文字很长时取消换行
"set nowrap
"在状态栏显示正在输入的命令
set showcmd
"设置历史记录条数
set history=1000
"设置取消备份 禁止临时文件生成
set nobackup
set noswapfile
"突出现实当前行列
set cursorline
"set cursorcolumn
"设置匹配模式 类似当输入一个左括号时会匹配相应的那个右括号
set showmatch
"设置C/C++方式自动对齐
set autoindent
set cindent
"开启语法高亮功能
syntax enable
syntax on
"设置搜索时忽略大小写
set ignorecase
"设置Tab宽度
set tabstop=2
"设置自动对齐空格数
set shiftwidth=2
"设置按退格键时可以一次删除4个空格
set softtabstop=4
set smarttab
"将Tab键自动转换成空格 真正需要Tab键时使用[Ctrl + V + Tab]
set expandtab
"设置编码方式
set encoding=utf-8
""自动判断编码时 依次尝试一下编码
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
"检测文件类型
filetype on
"针对不同的文件采用不同的缩进方式
filetype indent on
"允许插件
filetype plugin on
"启动智能补全
filetype plugin indent on
filetype off " required! /** 从这行开始,vimrc配置 **/
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
Bundle 'tpope/vim-fugitive'
Bundle 'Lokaltog/vim-easymotion'
Bundle 'tpope/vim-rails.git'
Bundle 'L9'
"NerdTree
Bundle 'scrooloose/nerdtree'
let NERDTreeWinPos='left'
let NERDTreeShowBookmarks=1
let NERDTreeWinSize=31
let NERDTreeChDirMode=1
map <C-Y> :NERDTreeToggle<CR>
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif
" nerdtree-git-plugin
Bundle 'Xuyuanp/nerdtree-git-plugin'
let g:NERDTreeIndicatorMapCustom = {
\ "Modified" : "✹",
\ "Staged" : "✚",
\ "Untracked" : "✭",
\ "Renamed" : "➜",
\ "Unmerged" : "═",
\ "Deleted" : "✖",
\ "Dirty" : "✗",
\ "Clean" : "✔︎",
\ "Unknown" : "?"
\ }
" TagBar use <F3>
Bundle 'majutsushi/tagbar'
let g:tagbar_ctags_bin='ctags' "ctags程序的路径
let g:tagbar_width=35 "窗口宽度的设置
"let g:tagbar_left=1 "居左
let g:tagbar_right=1 "居左
let g:tagbar_type_ruby = {
\ 'kinds' : [
\ 'm:modules',
\ 'c:classes',
\ 'd:describes',
\ 'C:contexts',
\ 'f:methods',
\ 'F:singleton methods'
\ ]
\ }
map <C-I> :Tagbar<CR>
" 增强状态栏
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
Plugin 'git://github.com/edkolev/tmuxline.vim.git'
set laststatus=2
let g:airline#extensions#tabline#enabled=1
let g:airline#extensions#whitespace#enabled=0
let g:airline_powerline_fonts = 1
"let g:airline_theme='ayu_mirage'
let g:airline_theme='dark'
map <C-H> :bp<CR>
map <C-L> :bn<CR>
map <C-B> :ls<CR>
Bundle 'scrooloose/nerdcommenter'
Bundle 'kien/ctrlp.vim.git'
Bundle 'dkprice/vim-easygrep.git'
Bundle 'git://github.com/tpope/vim-endwise.git'
"ctrlp
"<Leader>p搜索当前目录下文件
let g:ctrlp_map = '<Leader>p'
let g:ctrlp_cmd = 'CtrlP'
"<Leader>f搜索MRU文件
nmap <Leader>f :CtrlPMRUFiles<CR>
"<Leader>b显示缓冲区文件,并可通过序号进行跳转
nmap <Leader>b :CtrlPBuffer<CR>
"设置搜索时忽略的文件
let g:ctrlp_custom_ignore = {
\ 'dir': '\v[\/]\.(git|hg|svn|rvm)$',
\ 'file': '\v\.(exe|so|dll|zip|tar|tar.gz|pyc)$',
\ }
let g:ctrlp_working_path_mode = 0
let g:ctrlp_match_window_bottom = 1
"修改QuickFix窗口显示的最大条目数
let g:ctrlp_max_height = 15
let g:ctrlp_match_window_reversed = 1
"设置MRU最大条目数为20
let g:ctrlp_mruf_max = 20
let g:ctrlp_follow_symlinks = 1
"默认使用全路径搜索,置1后按文件名搜索,准确率会有所提高,可以用<C-d>进行切换
let g:ctrlp_by_filename = 0
"默认不使用正则表达式,置1改为默认使用正则表达式,可以用<C-r>进行切换
let g:ctrlp_regexp = 0
"自定义搜索列表的提示符
let g:ctrlp_line_prefix = '♪ '
let g:EasyGrepMode = 2 " All:0, Open Buffers:1, TrackExt:2,
let g:EasyGrepCommand = 0 " Use vimgrep:0, grepprg:1
let g:EasyGrepRecursive = 1 " Recursive searching
let g:EasyGrepIgnoreCase = 1 " not ignorecase:0
let g:EasyGrepFilesToExclude = "tags"
let g:EasyGrepFilesToExclude = "*.bak"
let g:EasyGrepFilesToExclude = "*~"
let g:EasyGrepFilesToExclude = "cscope.*"
let g:EasyGrepFilesToExclude = "*.a"
let g:EasyGrepFilesToExclude = "*.o"
let g:EasyGrepFilesToExclude = "*.pyc"
let g:EasyGrepFilesToExclude = "*.log"
" 缩进线条
Plugin 'Yggdroot/indentLine'
"let g:indentLine_showFirstIndentLevel = 1
"let g:indentLine_setColors = 0
Plugin 'SuperTab'
let g:SuperTabRetainCompletionType=2
" 主题插件
Plugin 'git://github.com/tomasr/molokai.git'
"molokai 主题 monokai的进化版
set t_Co=256
colorscheme molokai
let g:molokai_original = 1
let g:rehash256 = 1
Plugin 'Chiel92/vim-autoformat'
noremap <C-F> :Autoformat<CR>
" rspec插件
Plugin 'thoughtbot/vim-rspec'
map <Leader>t :call RunCurrentSpecFile()<CR>
map <Leader>s :call RunNearestSpec()<CR>
map <Leader>l :call RunLastSpec()<CR>
map <Leader>a :call RunAllSpecs()<CR>
let g:rspec_runner = "os_x_iterm2"
call vundle#end()
filetype plugin indent on " required! /** vimrc文件配置结束 **/
hi comment ctermfg=6 /** 调整代码注释颜色 **/
$ vi .bashrc
alias vi='vim'
$ source .bashrc
安装插件
$ vi
:PluginInstall
安装完后退出vi
配色方案
$ cp -rf ~/.vim/bundle/molokai/colors ~/.vim
安装PowerLineFonts字体
因为我是通过ssh登录虚拟机上的开发环境,所以这个字体是要安装在宿主机上的。还要修改Terminal的字体配置。
因状态栏插件是带有箭头符号的,但是需要安装powerline字体才能显示出来
https://github.com/powerline/fonts
因为字体体积比较大,为加快下载使用–depth=1参数,只下载最新一次提交内容
$ git clone https://github.com/powerline/fonts --depth=1
$ cd fonts
$ ./install.sh
Copying fonts...
Resetting font cache, this may take a moment...
Powerline fonts installed to /home/wii/.local/share/fonts
$ cd ..
$ rm -rf fonts
安装tmux 一个平屏工具
$ sudo yum install tmux
配置
$ vi .tmux.conf
# 解除默认前缀
unbind C-b
# 设置自定义前缀
set -g prefix C-a
# 采用vim的操作方式
setw -g mode-keys vi
# 窗口序号从1开始计数
set -g base-index 1
# 开启鼠标模式
set-option -g mouse on
# 通过前缀+KJHL快速切换pane
#up
bind-key k select-pane -U
#down
bind-key j select-pane -D
#left
bind-key h select-pane -L
#right
bind-key l select-pane -R
# panes 分割线颜色
set -g pane-border-bg colour236
set -g pane-border-fg colour236
set -g pane-active-border-bg colour232
set -g pane-active-border-fg colour232
配置说明
使用
# 左侧目录树
ctrl + y # 在目录树窗口按大写R,可以刷新目录树
# 右侧函数树
ctrl + i
# Buffer左右切换
ctrl + h # 向左移动
ctrl + l # 向右移动
# ctags生成
F10
# 自动补全,插件中没有使用专门的补全插件,全是用的ctags
ctrl + p 或 tab # insert 状态下 【由于装了superTab,也可以直接tab键补全】
# 文件查找
ctrl + p # normal 状态下 【当前目录全局】
ctrl + f # 【从最近搜索的文件中查找】
ctrl + b # 从当前buffer中查找
# 模糊搜索
:Grep xxxx # normal 状态下,我们leader键已经改为了“,”【逗号】
或者光标移到一个需要搜索的单词上,按 ,vv
# 替换
:Replace xxxx yyyy # normal 状态下
# 跳转到函数定义处
光标移到需要跳转的单词上,按下 ctrl + ] # 需要先生成 ctags 文件
回到跳转前位置,按下 ctrl + t
# 关闭当前buffer
:bd
# 复制到系统剪贴板
ctrl + c
# 从系统剪贴板粘贴
ctrl + v
# 分屏间切换
ctrl + w + [hjkl]
# 垂直分屏
ctrl + w + v
# 水平分屏
ctrl + w + s
# 关闭分屏
ctrl + w + c
# 水平快速扩大分屏
ctrl + n
# 垂直快速扩大分屏
ctrl + m
# easymotion的使用,我们leader键已经改为了“,”【逗号】
,,s + 关键字
# 更多详细配置大家可以自行阅读配置文件,或者根据自己需要更改配置