Ubuntu 配置

1 设置超级用户密码

$ sudo passwd
$ 输入用户密码,需要该用户是管理员
$ 输入root 密码
$ 再输入一次root密码

2 添加/删除用户。

//添加一个普通用户,并创建用户主目录。指定shell脚本解析器是/bin/bash。
$sudo useradd –m 用户名 –s /bin/bash 

//删除用户
$sudo userdel –r 用户名

3 设置密码

//设置或修改用户名的密码。
$passwd 用户名

4 安装vmwaretools

  • 点击VMware菜单栏的虚拟机
  • 点击安装vmwaretools
  • 复制vmware-tools到home目录下新建的temp
$cd temp 
$tar xzvf  vmware-tools.tar.gz
$cd vmware-tools-distrib
$sudo ./vmware-install.pl
  • 一路回车,遇到no就输入yes。
  • 出现enjoy则安装成功
  • 重启ubuntu
$ sodu reboot

5 更改软件源

  • 首先修改源地址:
//备份
$sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 
$sudo gedit /etc/apt/sources.list
  • 加入如下三个源的一个
#中科大的:
deb http://mirrors.ustc.edu.cn/ubuntu/ precise-updates main restricted
deb-src http://mirrors.ustc.edu.cn/ubuntu/ precise-updates main restricted
deb http://mirrors.ustc.edu.cn/ubuntu/ precise universe
deb-src http://mirrors.ustc.edu.cn/ubuntu/ precise universe
deb http://mirrors.ustc.edu.cn/ubuntu/ precise-updates universe
deb-src http://mirrors.ustc.edu.cn/ubuntu/ precise-updates universe
deb http://mirrors.ustc.edu.cn/ubuntu/ precise multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ precise multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ precise-updates multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ precise-updates multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ precise-backports main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ precise-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu precise-security main restricted
deb-src http://security.ubuntu.com/ubuntu precise-security main restricted
deb http://security.ubuntu.com/ubuntu precise-security universe
deb-src http://security.ubuntu.com/ubuntu precise-security universe
deb http://security.ubuntu.com/ubuntu precise-security multiverse
deb-src http://security.ubuntu.com/ubuntu precise-security multiverse

#搜狐源
deb http://mirrors.sohu.com/ubuntu/ precise-updates main restricted
deb-src http://mirrors.sohu.com/ubuntu/ precise-updates main restricted
deb http://mirrors.sohu.com/ubuntu/ precise universe
deb-src http://mirrors.sohu.com/ubuntu/ precise universe
deb http://mirrors.sohu.com/ubuntu/ precise-updates universe
deb-src http://mirrors.sohu.com/ubuntu/ precise-updates universe
deb http://mirrors.sohu.com/ubuntu/ precise multiverse
deb-src http://mirrors.sohu.com/ubuntu/ precise multiverse
deb http://mirrors.sohu.com/ubuntu/ precise-updates multiverse
deb-src http://mirrors.sohu.com/ubuntu/ precise-updates multiverse
deb http://mirrors.sohu.com/ubuntu/ precise-backports main restricted universe multiverse
deb-src http://mirrors.sohu.com/ubuntu/ precise-backports main restricted universe multiverse

#网易源:
deb http://mirrors.163.com/ubuntu/ precise-updates main restricted
deb-src http://mirrors.163.com/ubuntu/ precise-updates main restricted
deb http://mirrors.163.com/ubuntu/ precise universe
deb-src http://mirrors.163.com/ubuntu/ precise universe
deb http://mirrors.163.com/ubuntu/ precise-updates universe
deb-src http://mirrors.163.com/ubuntu/ precise-updates universe
deb http://mirrors.163.com/ubuntu/ precise multiverse
deb-src http://mirrors.163.com/ubuntu/ precise multiverse
deb http://mirrors.163.com/ubuntu/ precise-updates multiverse
deb-src http://mirrors.163.com/ubuntu/ precise-updates multiverse
deb http://mirrors.163.com/ubuntu/ precise-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ precise-backports main restricted universe multiverse
  • 保存
  • 更新软件列表
$ sudo apt update  
  • 检查软件版本并更新软件(不升级软件则不用做)
$ sudo apt upgrade

  

补充:ubuntu软件管理:

  • linux在线管理命令apt:
命令 命令的功能
apt install 包名 安装软件
apt remove 包名 移除软件,保留配置
apt autoremove 自动卸载软件
apt purge 包名 移除软件包及配置文件
apt search 包名 搜索应用程序
apt show 包名 显示软件包详细信息
apt update 刷新存储库索引
apt upgrade 升级所有可升级的软件包
apt full-upgrade 升级软件和依赖包
apt list –installed 列出已安装的软件
apt list –upgradable 列出可升级的软件
apt edit-sources 编辑源文件
apt list 包名 列出软件
  • linux本地管理命令dpkg:
命令 命令的功能
sudo dpkg -i 安装
sudo dpkg -P 干净卸载
sudo dpkg -r 卸载
sudo dpkg -l 列出安装的软件

6 安装基本软件

6.1 安装ssh

$sudo apt install ssh //安装ssh
$ps -elf|grep ssh     //查看ssh否安装,有sshD则安装成功

6.2 安装git

$sudo apt install git                                //安装git和配置用户
$ git config --global user.name "Your Name"          //设置用户名
$ git config --global user.email "[email protected]" //"设置用户邮件地址"

  在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,s使用如下命令创建SSH 密钥:

$ssh-keygen -t rsa -C "[email protected]" 

  生成密钥用于创建远程仓库:登录github 账户——>设置 添加SSH key.pub的内容,新建仓库。

补充:git更多用法——git教程

6.3 安装数据库mysql

$sudo apt install mysql-server mysql-client libmysqlclient-dev

6.4 安装vim

6.4.1 安装vim

  • 安装vim7.4-python3版本
sudo apt install vim
  • 安装vim7.4-python版本,
sudo apt install vim-nox-py2
  • 切换版本
sudo update-alternatives --config vim
  • 自己编译安装vim8.0
//安装依赖库:如果您不需要对Python 3、Lua、Ruby的支持的话,可以选择不安装相应的依赖或者编译Vim时不添加支持。

$ sudo apt install libncurses5-dev libgnome2-dev libgnomeui-dev libgtk2.0-dev libatk1.0-dev libbonoboui2-dev

$ sudo apt install libcairo2-dev libx11-dev libxpm-dev libxt-dev python-dev python3-dev ruby-dev lua5.1 lua5.1-dev git


//删除原有vim——首先查询系统中有哪些与vim相关的软件,我的是vim、vim-common和vim-run,然后彻底删除他们:

$dpkg -l | grep vim
$sudo dpkg -P vim vim-common vim-run


//下载vim源码

$ git clone https://github.com/vim/vim.git
$ cd vim

//配置编译选项:安装前先获取Python的配置路径,比如我的是/usr/lib/python2.7/config-x86_64-Linux-gnu。
$ ./configure --with-features=huge --enable-multibyte --enable-rubyinterp --enable-pythoninterp --with-python-config-dir=/usr/lib/python2.7/config-x86_64-linux-gnu --enable-python3interp --with-python3-config-dir=/usr/lib/python3.5/config-3.5m-x86_64-linux-gnu --enable-perlinterp --enable-luainterp --enable-gui=gtk2 --enable-cscope --prefix=/usr 

//编译
$ make VIMRUNTIMEDIR=/usr/share/vim/vim80

//安装
$ sudo make install

//可以安装checkinstall工具将从源码安装的软件变得像用deb包安装的一样,方便以后可以直接用sudo dpkg -P vim删除vim:
$ sudo apt-get install checkinstall
$ cd vim
$ sudo checkinstall

//最后,删除vim源码包,执行vim 
  • 查看vim的版本号、补丁号以及是否成功开启了Python的支持(包含+python)。
$ vim --version | grep python

6.4.2 安装vim插件管理器

  • 下载代码仓库
$cd ~
$git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
$vim ~/.vimrc
  • 添加以下内容
set nocompatible 
filetype off 
set rtp+=~/.vim/bundle/Vundle.vim 
call vundle#begin() 
Plugin 'VundleVim/Vundle.vim'
call vundle#end() 
filetype plugin indent on 
  • 保存后退出
  • 安装插件
$vim 
ESC
:PluginInstall
  • 显示done则成功

补充1:快速安装vim插件
  可以先用git clone克隆源码到 ~/.vim/bundle 文件夹, 或者直接将别人下载好的仓库拷贝到~/.vim/bundle。
  然后在~/.vimrc文件中加上下面的语句,执行PluginInstall即可快速安装。

set nocompatible              "不与vi兼容
filetype off       
set runtimep+=~/.vim/bundle/Vundle.vim 
call vundle#begin() 
Plugin 'VundleVim/Vundle.vim'
plugin '用户名/插件仓库名'          "GitHub上的插件
Plugin 'vim-scripts/插件仓库名'     "来自vim-scripts.org的插件
Plugin 'git clone 后面的地址'        "由Git支持但不再github上的插件仓库
Plugin 'file:///+本地插件仓库绝对路径'  "本地的Git仓库(例如自己的插件)
Plugin 'rstacruz/sparkup', {'rtp':'vim/'} "插件在仓库的子目录中.
call vundle#end() 
filetype plugin indent on           "打开文件类型检测,并加载相关插件,根据文件类型设置缩进距离

补充2:卸载vundle插件
  先在.vimrc中删除相应插件,然后输入vim,再输入BundleClean
补充3:vundle常用命令

BundleList         -列举列表(也就是.vimrc)中配置的所有插件  
BundleInstall      -安装列表中的全部插件  
BundleInstall!     -更新列表中的全部插件  
BundleSearch foo   -查找foo插件  
BundleSearch! foo  -刷新foo插件缓存  
BundleClean        -清除列表中没有的插件  
BundleClean!       -清除列表中没有的插件

6.4.3 安装vim自动补全插件

  • 查看vim是否支持python,显示+则支持,否则安装支持python的vim-nox-py2
$vim --version | grep python  
$sudo apt install vim-nox-py2
  • 安装编译环境
$ sudo apt install gcc g++
$ sudo apt install python-dev python3-dev      //安装python
$ sudo apt install cmake build-essential         //安装cmake
$ sudo apt install clang-4.0                       //安装clang
$ sudo apt install libclang-4.0-dev                //安装libcang
$ sudo apt install ctags                       //安装ctags
  • 下载youcompleteme源码
$ git clone https://github.com/Valloric/YouCompleteMe.git ~/.vim/bundle/YouCompleteMe
$ cd ~/.vim/bundle/YouCompleteMe
$ git submodule update --init --recursive
  • 也可以跳过上面clone youcompleteme源码步骤,直接拷贝他人装好YCM的的对应Youcompleteme文件夹 ,进行下面的编译YouCompleteMe操作
$ cd ~/.vim/bundle/YouCompleteMe 
$ ./install.py --clang-completer 
//如果自己系统自带的clang版本高于3.8,则可以使用自身clang库,节约时间
$./install.py --clang-completer --system-libclang
  • 编译完成后
$cd ~
$vim ~/.vimrc
  • 将原内容替换为
set nocompatible 
filetype off 
set rtp+=~/.vim/bundle/Vundle.vim 
call vundle#begin() 
Plugin 'VundleVim/Vundle.vim'
Plugin 'Valloric/YouCompleteMe'
call vundle#end() 
filetype plugin indent on 
  • 保存后退出,注册YCM
$vim 
ESC
:PluginInstall
  • 显示done则成功
  • 添加C/C++支持
#打开YCM配置文件
$vim ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py

#在flags的括号中添加头文件路径
'-isystem',
'C/C++ 头文件绝对路径',
... ...


#如果不想因为c++11新特性发出警告就添加'-Wc++11-compat',并删除'-Wc++98-compat'(如果有的话)

#注释调下面的语句(在每行前面加#)
try:
final_flags.remove( '-stdlib=libc++' )
except ValueError:
pass

6.4.4 ctags文件生成命令

  • 生成绝对路径,但不递归扫描,指扫描指定问件夹下
$ctags  /usr/include/* /usr/include/arpa/* /usr/include/c++/5.4.0/* /usr/include/netinet/* /usr/include/x86_64-linux-gnu/sys/* -I __THROW -I __attribute_pure__ -I __nonnull -I __attribute__ --file-scope=yes --langmap=c:+.h -h +.h --languages=c,c++ --links=yes --c-kinds=+px --c++-kinds=+px --fields=+aiKSz --extra=+qf
  • 生成相对路径,递归扫描
$ctags -R --languages=c++ --langmap=c++:+.inl -h +.inl --c++-kinds=+px --fields=+aiKSz --extra=+q --exclude=lex.yy.cc --exclude=copy_lex.yy.cc
"生成绝对路径,递归扫描用于include文件夹,扫描系统头文件
$ctags -R --languages=c++ --langmap=c++:+.inl -h +.inl --c++-kinds=+px --fields=+aiKSz --extra=+q --exclude=lex.yy.cc --exclude=copy_lex.yy.cc /usr/include/
  • 参数含义
    • -R ——表示扫描当前目录及所有子目录(递归向下)中的源文件。并不是所有文件ctags都会扫描,如果用户没有特别指明,则ctags根据文件的扩展名来决定是否要扫描该文件——如果ctags可以根据文件的扩展名可以判断出该文件所使用的语言,则ctags会扫描该文件。
    • --languages=c++ ——只扫描文件内容判定为c++的文件——即ctags观察文件扩展名,如果扩展名对应c++,则扫描该文件。反之如果某个文件叫aaa.py(Python文件),则该文件不会被扫描。
    • --langmap=c++:+.inl——告知ctags,以inl为扩展名的文件是c++语言写的,在加之上述2中的选项,即要求ctags以c++语法扫描以inl为扩展名的文件。
    • -h +.inl——告知ctags,把以inl为扩展名的文件看作是头文件的一种(inl文件中放的是inline函数的定义,本来就是为了被include的)。这样ctags在扫描inl文件时,就算里面有static的全局变量,ctags在记录时也不会标明说该变量是局限于本文件的
    • --c++-kinds=+px——记录c++文件中的函数声明和各种外部和前向声明
    • -I——忽略
    • --fields=+aiKSzi
      • a表示如果语法元素的类的成员的话,要标明其access(即是public的还是private的);
      • i表示如果有继承,标明父类;K表示显示语法元素的类型的全称;
      • S表示如果是函数,标明函数的signature;
      • z表示在显示语法元素的类型是使用kind:type的格式。
    • --extra=+qf
      • q如果某个语法元素是类的一个成员,要求ctags对同一个语法元素再记一行,包含类名。
      • f记录本次扫描的各个文件,一个文件名对应一个tag 行
    • --exclude=lex.yy.cc --exclude=copy_lex.yy.cc——告知ctags不要扫描名字是这样的文件。还可以控制ctags不要扫描指定目录,这里就不细说了。
    • -f tagfile——指定生成的标签文件名,默认是tags. tagfile指定为 - 的话,输出到标准输出。

6.4.5 Vim配置

  直接将仓库里的vimrc文件拷贝为主目录下的.vimrc, 或者gedit ~/.vimrc替换以下内容到.vimrc中

"""""""""""""""""""""""""""""""""""选项设置方式说明""""""""""""""""""""""""""\
"选项有三种类型布尔型,数值型,字符串
":set                    显示所有不同于缺省值的选项
":se[t] all              显示除了终端设置以外的所有选项
":se[t] termcap          显示所有的终端选项。注意在GUI里,不会显示键码,因为它们是内部生成的,无法改变。而且 GUI里即使修改终端代码也没用
":se[t] {option}?        显示 {option} 的值。        
":se[t] {option}         bool选项: 置位,打开。数值选项:显示其值。字符串选项:显示其值    
":se[t] no{option}       切换选项: 复位,关闭。
":se[t] {option}!         切换选项,反转其值{Vi 无此功能}
":se[t] {option}&        复位选项为其缺省值。
":se[t] {option}&vi      复位选项为 Vi 的缺省值。{Vi 无此功能}                
":se[t] {option}&vim     复位选项为 Vim 的缺省值。{Vi 无此功能}
":se[t] all&             设置所有除了终端设置的选项为其缺省值。
":se[t] {option}={value}或者:se[t] {option}:{value}         设置字符串或数值选项的值为 {value}。
":se[t] {option}+={value}    把 {value}加到数值选项里,或者附加到字符串选项之后。 如果选项是逗号分隔的列表,除非原来的值为空,会加上一个逗号。如果选项是标志位的列表,删除多余的标志位。如果加入已经存在的标志位,选项值不变
":se[t] {option}^={value}    把 {value}乘到数值选项里,或者附加到字符串选项之前。如果选项是逗号分隔的列表,除非原来的值为空,会加上一个逗号。
":se[t] {option}-={value}  把 {value}从数值选项里减去,或者从字符串选项里删除,如果该值原来存在的话。如果不存在,不会有错误或者警告。如果选项是逗号分隔的列表,除非新值为空,删除一个逗号。如果选项是标志位的列表,{value} 必须和选项里出现的顺序 完全相同。一个一个地分别删除标志位可以解决这个问题。
"verbose bool选项用于查看当前操作的相关信息
""""""""""""""""""""""""""""""""""Plugin""""""""""""""""""""""""""""""""""""
set nocompatible  "设置为不兼容vi
set runtimepath+=~/.vim/bundle/Vundle.vim    "增加运行时的路径
call vundle#begin() 
Plugin 'gmarik/Vundle.vim'  "安装vundle插件管理器,安装PunginInstall,卸载BundleClean
Plugin 'Valloric/YouCompleteMe'  "安装youcompleteme自动补全
Plugin 'bling/vim-airline' "状态栏插件,代替powerline
Plugin 'vim-airline/vim-airline-themes' "状态栏插件主题
Plugin 'majutsushi/tagbar' "侧边栏函数自动分类统计插件,F3关闭开启 ,代替tagllist
Plugin 'altercation/vim-colors-solarized' "主题solatized,背景色需要是黑色
Plugin 'tomasr/molokai' "主题molokai,切换主题:colorscheme 主题名
Plugin 'SirVer/ultisnips' "安装ultisnips块输入引擎,代替c.vim
Plugin 'honza/vim-snippets' "安装ultisnips的代码块
Plugin 'scrooloose/nerdtree' "目录管理,代替a.vim
Plugin 'scrooloose/nerdcommenter' "快速注释反注释,相比Tcomment来说键盘映射简单,但不能用于插入模式,代替c.vim
Plugin 'jiangmiao/auto-pairs' "括号配对,括号快速跳转
Plugin 'tpope/vim-surround' "快速修改配对符号
Plugin 'kien/ctrlp.vim'  "快速搜索文件
Plugin 'sjl/gundo.vim'  "撤销与重做
Plugin 'easymotion/vim-easymotion' "快速移动
Plugin 'kien/rainbow_parentheses.vim' "括号用彩色高亮配对
call vundle#end()
"""""""""""""""""""""""常用快捷键"""""""""""""""""""""""""
"F1一键对齐
":help 插件名  查看该插件的帮助
"F2 删除空行
"F3开启tagbar
"F4一键保存
"F5 一键编译运行
"F6 一键保存并退出
"F7 打开文件文件目录
"F8 可视与普通模式下 注释/反注释
"F9 打开文件回滚
"F10 插入模式下添加注释符号
"F11 快速跳过括号对
"F12 一键生成tags标签信息
"ctrl+p打开ctrlp
"\cm 普通模式下成块注释
"\cA 普通模式下添加注释符号
"\ca 改变注释方式
"ctrl+_ctrl+_ 快速注释反注释
"ds+符号 删除成对符号
"cs+原符号+新符号 修改原符号
"tab 插入模式下代码块插入
"ctrl +j 插入模式下代码块补全后,跳至下一个或光标位置
"ctrl +k 插入模式下代码块补全后,跳至上一个或光标位置
"ctrl+空格 插入模式下搜索更多补全候选项
"\gl 跳转到声明
"\gf 跳转到定义
"\gg 跳转到声明和定义
"\d 显示详细的错误诊断信息
"空格键  普通模式下打开关闭折叠
"ctrl+w ctrl+w 切换窗口
"""""""""""""""""""""""""""""""""""""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 "最大16,但是有黑色出现
let g:rbpt_loadcmd_toggle = 0
autocmd VimEnter * RainbowParenthesesToggleAll "开启大中小括号
"autocmd VimEnter * RainbowParenthesesToggle "打开插件,并开启小括号
"如果想开启尖括号,引号等,只需在autoload下的源文件的27行添加配对符号,到64行添加激活,再到88行添加0即可
"""""""""""""""""""""""""""""""easymotion默认快捷键"""""""""""""""""""""""
"<Leader><Leader>f{char}      | Find {char} to the right. See f.
"<Leader><Leader>F{char}      | Find {char} to the left. See F.
"<Leader><Leader>t{char}      | Till before the {char} to the right. See t.
"<Leader><Leader>T{char}      | Till after the {char} to the left. See T.
"<Leader><Leader>w            | Beginning of word forward. See w.
"<Leader><Leader>W            | Beginning of WORD forward. See W.
"<Leader><Leader>b            | Beginning of word backward. See b.
"<Leader><Leader>B            | Beginning of WORD backward. See B.
"<Leader><Leader>e            | End of word forward. See e.
"<Leader><Leader>E            | End of WORD forward. See E.
"<Leader><Leader>ge           | End of word backward. See ge.
"<Leader><Leader>gE           | End of WORD backward. See gE.
"<Leader><Leader>j            | Line downward. See j.
"<Leader><Leader>k            | Line upward. See k.
"<Leader><Leader>n            | Jump to latest "/" or "?" forward. See n.
"<Leader><Leader>N            | Jump to latest "/" or "?" backward. See N.
"<Leader><Leader>s            | Find(Search) {char} forward and backward.See f and F.

"""""""""""""""""""""""""""""""gundo"""""""""""""""""""""""
inoremap <F9> <ESC>:GundoToggle<CR>
nnoremap <F9> :GundoToggle<CR>
cnoremap <F9> GundoToggle<CR>
"""""""""""""""""""""sourround""""""""""""""""""""""""""""""""""""""
"ds)删除 "Hello *world!"           ds"         Hello world!"
"cs  修改 "Hello *world!"           cs"'        'Hello world!"
"Normal mode
"ys  - add a surrounding
"yS  - add a surrounding and place the surrounded text on a new line + indent it
"yss - add a surrounding to the whole line
"ySs - add a surrounding to the whole line, place it on a new line + indent it
"ySS - same as ySs   
"Visual mode
"s   - in visual mode, add a surrounding
"S   - in visual mode, add a surrounding but place text on new line + indent it   
"Insert mode
"<CTRL-s> - in insert mode, add a surrounding
"<CTRL-s><CTRL-s> - in insert mode, add a new line + surrounding + indent
"<CTRL-g>s - same as <CTRL-s>
"<CTRL-g>S - same as <CTRL-s><CTRL-s>
""""""""""""""""""""""""""""""""""""autopairs"""""""""""""""""""""""
"快速跳到下一个括号对
let g:AutoPairsShortcutJump='<F11>'
"""""""""""""""""""""""""""""""""""""solarized主题"""""""""""""""""""""""""""""""""""""""""""
"let g:solarized_termcolors=   16      |   256      
"let g:solarized_termtrans =   0       |   1        
"let g:solarized_degrade   =   0       |   1        
"let g:solarized_bold      =   1       |   0       
"let g:solarized_underline =   1       |   0       
"let g:solarized_italic    =   1       |   0        
"let g:solarized_contrast  =   "normal"|   "high" or "low"
"let g:solarized_visibility=   "normal"|   "high" or "low"
"let g:solarized_hitrail   =   0       |   1        
"let g:solarized_menu      =   1       |   0
"set background=dark "设为亮色或暗色
""""""""""""""""""""""""""molokai主题"""""""""""""""""""""""""""""""""""""""
let g:molokai_original=1 "设置molokai
let g:rehash256=0  "设置为1则更加亮眼
""""""""""""""""""""""""""""""""""""""nerdtree"""""""""""""""""""""""""""""""""""""""
" 使用 NERDTree 插件查看工程文件。设置快捷键,速记:file list
nnoremap <F7> :NERDTreeToggle<CR>
inoremap <F7> <ESC> :NERDTreeToggle<CR>i
cnoremap <F7> NERDTreeToggle<CR>
" 设置NERDTree子窗口宽度
let NERDTreeWinSize=20
" 设置NERDTree子窗口位置
let NERDTreeWinPos="left"
" 显示隐藏文件
let NERDTreeShowHidden=1
" NERDTree 子窗口中不显示冗余帮助信息
let NERDTreeMinimalUI=1
" 删除文件时自动删除文件对应 buffer
let NERDTreeAutoDeleteBuffer=1
"""""""""""""""""""""""""""""""""nerdcommit""""""""""""""""""""""""""""""""""""
"<leader>cc,注释当前选中文本,如果选中的是整行则在每行首添加 //,如果选中一行的部分内容则在选中部分前后添加分别 /、/;
"<leader>cu,取消选中文本块的注释。                                                             
"<Leader>cn  与cc一样只不是强制嵌套 
"<Leader>c<space> 有注释取消,无注释加注释            
"<Leader>cm   多行只有一对符号注释,之前的注释都是每行独立注释 
"<Leader>ci  单独的行单独切换所选行的注释状态              
"<Leader>cs "将一行注释为3"<Leader>cy 与cc一样只是在注释掉之前先复制原内容                           
"<Leader>c$ 注释掉从光标到行尾的内容               
"<Leader>cA  在行位插入注释符号,并进入插入模式                    
"<Leader>ca   在/**/和//之间切换                              
"<Leader>cl  与cc相同,只是左对齐                                    
"<Leader>cb  与cc相同,只是两端对齐                   
"可在命令前加入数字,表示对连续n行执行相同操作
let g:NERDAltDelims_cpp=1 "在c++中强制使用/**/注释,默认为//
nmap <F8> <plug>NERDCommenterToggle
vmap <F8> <plug>NERDCommenterToggle
imap <F10> <plug>NERDCommenterInsert 
"""""""""""""""""""""""""""""""""""""tagbar"""""""""""""""""""""""""""""""""
let g:tagbar_ctags_bin='/usr/bin/ctags'            "ctags程序的路径/usr/bin/ctags
let g:tagbar_width=30           "窗口宽度的设置
let g:tagbar_show_linenumbers=1    "在tagbar中显示绝对行号
"设置f3开启tagbar
nnoremap <F3> :TagbarToggle<CR>
inoremap <F3> <ESC> :TagbarToggle<CR>i
cnoremap <F3> TagbarToggle<CR>
"autocmd BufReadPost *.cpp,*.c,*.h,*.hpp,*.cc,*.cxx call tagbar#autoopen()     "如果是c语言的程序的话,tagbar自动开启 
let g:tagbar_compact=1  "tagbar 子窗口中不显示冗余帮助信息
" 设置 ctags 对哪些代码标识符生成标签
let g:tagbar_type_cpp={
    \ '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'
     \ }
\ }
"""""""""""""""""""""""""""""""""""""airline"""""""""""""""""""""""""""""""""
set laststatus=2 "启动显示状态行(1),总是显示状态行(2)
"我的状态行显示的内容(包括文件类型和解码)两种方式:
"set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}     
"set statusline=[%F]%y%r%m%*%=[Line:%l/%L,Column:%c][%p%%]
" 命令行(在状态行下)的高度,默认为1,这里是2
set cmdheight=2
"""""""""""""""""""""""""""""""""""""ultisnips""""""""""""""""""""""""""""""""
" Trigger configuration. Do not use <tab> if you use https://github.com/Valloric/YouCompleteMe.
let g:UltiSnipsExpandTrigger="<TAB>"      "触发补全
let g:UltiSnipsJumpForwardTrigger="<c-j>"  "后一个
let g:UltiSnipsJumpBackwardTrigger="<c-k>"  "前一个
let g:UltiSnipsListSnippets="<c-tab>" "打开补全列表
"let g:UltiSnipsSnippetsDir='~/.vim/UltiSnips' "指定snippets文件的父目录,可以有多个且该目录runtimepath 中的某一项之下
"let g:UltiSnipsSnippetDirectories=['UltiSnips'] "指定snippets文件的搜索路径
let g:UltiSnipsEditSplit="normal" "设置窗口打开的方式normal当前窗口 horizontal水平vertical垂直context智能 
""""""""""""""""""""""""""""""""""""YouCompleteMe"""""""""""""""""""""""""""""
" 键入第一个字符时就开始列出匹配项 ,也可设置为21 or更多 ,设置为99或更大的数字,则等效于关闭标识符补全功能,但保留语义补全功能                               
let g:ycm_min_num_of_chars_for_completion=1
"设置要在标示符补全列表中候选的项的最小字符数,也可设置为其他值,设置为99或更大的数字,则等效于关闭补全功能,对语义补全无影响
let g:ycm_min_num_identifier_candidate_chars=1
"打开ycm语义补全和标识符补全触发器,但仍可以用ctrl+space 打开语义补全,0表示关闭,1表示打开
let g:ycm_auto_trigger=1
"文件类型白名单,vim打开这些类型文件时会开启YCM,可以自己设置如:cpp,python等,可以在vim中通过:set ft?命令查看当前文件类型
let g:ycm_filetype_whitelist={ '*': 1 }
"文件类型黑名单,vim打开这些类型文件时会关闭YCM,可以自己设置如:cpp,python等,可以在vim中通过:set ft?命令查看当前文件类型
let g:ycm_filetype_blacklist={
      \ 'tagbar' : 1,
      \ 'qf' : 1,
      \ 'notes' : 1,
      \ 'markdown' : 1,
      \ 'unite' : 1,
      \ 'text' : 1,
      \ 'vimwiki' : 1,
      \ 'pandoc' : 1,
      \ 'infolog' : 1,
      \ 'mail' : 1
      \}
"语义补全黑名单,vim打开文件名含有表中关键字的文件时会关闭语义补全功能但保留标识符补全功能,可以自己设置如:cpp,python等
let g:ycm_filetype_specific_completion_to_disable={
      \ 'gitcommit': 1
      \}
"开启YCM的显示诊断信息工功能,0表示关闭
let g:ycm_show_diagnostics_ui=1
"设置错误标志为>>,可随意改
let g:ycm_error_symbol='>>'
"设置警告标志为!>,可随意改
let g:ycm_warning_symbol='>>'
"开启YCM错误诊断标志,如果关闭,则会关闭错误和警告高亮功能,0表示关闭
let g:ycm_enable_diagnostic_signs=1
"高亮显示一行中与诊断信息有关的文本或代码,0表示关闭
let g:ycm_enable_diagnostic_highlighting=1
"开启当光标移到所在行时显示诊断信息
let g:ycm_echo_current_diagnostic=1
"诊断信息过滤器,此选项控制YCM将呈现哪些诊断,支持正则表达式控制内容,和level控制消息的级别,空表示显示所有诊断信息。
let g:ycm_filter_diagnostics={}
"每次获取新诊断数据时自动填充位置列表,1表示打开,默认关闭以免干扰可能已放置在位置列表中的其他数据。在vim中用:help location-list命令查看位置列表的具体解释
let g:ycm_always_populate_location_list=1
"在强制汇编后自动打位置列表并用诊断信息填充,所谓位置列表就是标出各错误或警告对应在哪些行的小窗口,可以实现直接跳转到错误行,类似于vs2015
let g:ycm_open_loclist_on_ycm_diags=1
"设置光标停留的刷新时间间隔为2000,0表示不做改变,在vim中用:h updatetime命令来看刷新时间,用:h CursorHold命令来看光标驻留的相关信息
let g:ycm_allow_changing_updatetime=1
" 补全功能在注释中同样有效                                         
let g:ycm_complete_in_comments=1
"打开字符串自动补全功能。0代表关闭。这用于c系语言中#include后列出头文件很有用
let g:ycm_complete_in_strings=1
"让YCM可以收集注释中的文字来分析以用于补全,默认为0,只能收集代码中的文字来分析
let g:ycm_collect_identifiers_from_comments_and_strings=1
" 开启tags补全引擎 ,在vim中用:h 'tags'命令来查看相关信息,
"使用echo | clang -v -E -x c++ -命令,找到#include <...> search starts here: 然后将下面的路径每一行前加上-isystem 后加入  .ycm_extra_conf.py的flags[]中                                       
let g:ycm_collect_identifiers_from_tags_files=1
" 语法标识符补全              
let g:ycm_seed_identifiers_with_syntax=1 
"看不懂说明
let g:ycm_extra_conf_vim_data=[]
"YCM关闭时是否要保存日志,0表示关闭
let g:ycm_keep_logfiles=0
"设置YCM的日志记录级别,可以是debug,info,warning,error或critical。debug是最详细的。
let g:ycm_log_level='info'
"设置当vim打开c#文件时,OmniSharp server自动开启,0代表不自动开启
let g:ycm_auto_start_csharp_server=1
"设置当vim关闭c#文件时,OmniSharp server自动关闭,0代表不自动关闭
let g:ycm_auto_stop_csharp_server=1
"指定OmniSharp server的监视端口,0表示使用os自动提供的未使用的端口
let g:ycm_csharp_server_port=0
"设置c#中插入命名空间时自动在以后面插入using声明
let g:ycm_csharp_insert_namespace_expr=''
"为vim的的补全选项在顶部增加预览窗口用来显示函数原型等信息,如果vim的completeopt已经设置为prieview则不会有效果,:h completeopt查看相关信息,用:set completeopt?查看当前vim的设置
let g:ycm_add_preview_to_completeopt=0
"选中补全选项后自动关闭预览窗口,当add——preview设为1时或者vim设为preview有效
let g:ycm_autoclose_preview_window_after_completion=1
"离开插入模式后自动关闭预览,当add_preview设置为1时或vim设为preview有效
let g:ycm_autoclose_preview_window_after_insertion=1
"此选项控制在文件中检测到错误或警告时向用户显示的最大诊断数
let g:ycm_max_diagnostics_to_display=30
"设置用于选择补全列表中的第一个选项以及进入补全列表后向下选择的快捷键,可以添加<Enter>键,默认为tab键和方向下键
let g:ycm_key_list_select_completion=['<Down>']
"设置用于向上选择补全列表中的选项的快捷键,默认为shift+tab,和方向上键
let g:ycm_key_list_previous_completion=['<Up>']
"设置在任何地方启用语义补全的快捷键,有些系统函数如fopen, strcpy如果不智能提示,可以按<Ctrl>+<Space>键。
let g:ycm_key_invoke_completion='<C-Space>'
"查看光标停留处的错误诊断详细信息,按\d
let g:ycm_key_detailed_diagnostics='<leader>d'
"配置ycm的全局路径,避免每次都复制到当前目录.若为空则每次都需赋值文件到当前目录
let g:ycm_global_ycm_extra_conf='~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py' 
" 允许自动加载.ycm_extra_conf.py,不再提示 ,设置为1,则每次都提示用于确认该文件是否安全                        
let g:ycm_confirm_extra_conf=0 
"设置加载 .ycm_extra_conf.py的路径,*表示匹配的py文件都加载,? 匹配任何单个字符,[seq] 匹配seq中的都加载,[!seq] 匹配seq路径的都不加载
let g:ycm_extra_conf_globlist=[]
"设置YCM的工作方式是相对路径还是绝对路径,0表示相对路径
let g:ycm_filepath_completion_use_working_dir=0
"修改YCM的语义触发器,可以自行添加
 let g:ycm_semantic_triggers= {
  \   'c' : ['->', '.'],
  \   'objc' : ['->', '.', 're!\[[_a-zA-Z]+\w*\s', 're!^\s*[^\W\d]\w*\s',
  \             're!\[.*\]\s'],
  \   'ocaml' : ['.', '#'],
  \   'cpp,objcpp' : ['->', '.', '::'],
  \   'perl' : ['->'],
  \   'php' : ['->', '::'],
  \   'cs,java,javascript,typescript,d,python,perl6,scala,vb,elixir,go' : ['.'],
  \   'ruby' : ['.', '::'],
  \   'lua' : ['.', ':'],
  \   'erlang' : [':'],
  \ } 

" YCM缓存引擎是否开启,如果关闭则每次都重新生成匹配项 ,默认为1代表开启。 
let g:ycm_cache_omnifunc=1
"设置是否让YCM查询ultisnips插件,1代表允许
let g:ycm_use_ultisnips_completer=1
"设置使用goto跳转快捷键时,新窗口的打开方式可以设置为'same-buffer', 'horizontal-split', 'vertical-split', 'new-tab''new-or-existing-tab' 
let g:ycm_goto_buffer_command='vertical-split'
"设置YCM的作用的文件大小上限
let g:ycm_disable_for_files_larger_than_kb=1000
" YCM相关快捷键,分别是leader+gl, \gf, \gg ,leader键默认为\,通过let mapleader=" " 设置为任意键 
"3个快捷键设置是用来快速跳转到符号声明或定义的。往往只用gg,即将光标定位到某个符号上,按\键后(默认的leader键是\),快速按两次g键,将跳转到该符号的声明或定义位置(Tips: 按<ctrl>+o返回)                                                 
nnoremap <leader>gd :YcmCompleter GoToDeclaration<CR>              
nnoremap <leader>gf :YcmCompleter GoToDefinition<CR>               
nnoremap <leader>gg :YcmCompleter GoToDefinitionElseDeclaration<CR>
nnoremap <leader>gh :YcmCompleter GoToInclude<CR>
nnoremap <leader>gr :YcmCompleter GoToReferences<CR>
nnoremap <leader>gt :YcmCompleter GetType<CR>
nnoremap <leader>gp :YcmCompleter GetParent<CR>
"为ycm指定特定的python解释器,默认为空表示在系统上搜索适当的Python解释器
let g:ycm_server_python_interpreter='/usr/bin/python2.7'
"特别指定python运行补全库的版本是2.6, 2.7 or 3.3+
let g:ycm_python_binary_path='/usr/bin/python2.7'
"使YCM支持c++特性
"执行:YcmDiags显示所有错误, 它其实是打开了一个location list窗口,也可能通过:lopen打开. 使用:lclose可以关闭
"有些系统函数如fopen, strcpy如果不智能提示,可以按<Ctrl>+<Space>键。
"下方向键选择第一个选项,shift+tab循环选择
"如果有的文件死活无法正确提示(如果结构体之类),请检查一下文件编码,改成utf-8。(vim中 :set fileencoding=utf8)
""""""""""""""""""""""""""""""""""""""ctags""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 引入 C++ 标准库tags,自己设定
inoremap <F12> <ESC> :!ctags -R -I __THROW -I __attribute_pure__ -I __nonnull -I __attribute__ --file-scope=yes --langmap=c:+.h --languages=c --links=yes --c-kinds=+px --c++-kinds=+px --fields=+aiKSz --extra=+q .<CR><CR>
nnoremap <F12> :!ctags -R -I __THROW -I __attribute_pure__ -I __nonnull -I __attribute__ --file-scope=yes --langmap=c:+.h --languages=c --links=yes --c-kinds=+px --c++-kinds=+px --fields=+aiKSz --extra=+q .<CR><CR>
cnoremap <F12> !ctags -R -I __THROW -I __attribute_pure__ -I __nonnull -I __attribute__ --file-scope=yes --langmap=c:+.h --languages=c --links=yes --c-kinds=+px --c++-kinds=+px --fields=+aiKSz --extra=+q .<CR><CR>
set tags+=./tags
set tags+=~/Documents/tags
"autocmd FileType java set tags+=D:\tools\java\tags  
autocmd FileType h,cpp,cc,c set tags+=/usr/inlcude/tags
"设置tags递归查找  
set tags=tags;  
set autochdir  "Vim 会在你打开文件、切换缓冲区、删除缓冲区或者打开/关闭窗口时改变当前工作目录的值。
"""""""""""""""""""""""""""""""""""""theme"""""""""""""""""""""""""""""""""""
"vim 输入 colorscheme molokai切换主题,colorscheme 查看当前主题,colorscheme 空格 tab键 列出所有主题
if !has("gui_runing")               "如果不是在图形用户界面
    set t_Co=256                   "就开启256色支持,默认为8色                          
endif
"设置主题色为molokai
colorscheme molokai "切换主题为MOLOKAI
set background=dark "设为亮色或暗色

"设置主题色为solarized
"let g:solarized_termcolors=256 
"let g:solarized_termtrans =1     
"set background=dark
"colorscheme solarized
"""""""""""""""""""""""""""""""""""vim 其他设置""""""""""""""""""""""""""""""""""""""""
set history=100 "设置输入历史的行数
set dictionary +=/usr/ "s设置用户补全字典,通过ctrl x触发
filetype plugin indent on "文件类型插件缩进开
filetype on "侦测文件类型  
filetype indent on "针对不同的文件类型采用不同的缩进格式  
filetype plugin on "针对不同的文件类型加载对应的插件 
"代码补全功能,可以选择preview以在顶配生成一个选项预览窗口,menu选项以弹出菜单出现,或者longest,只显示匹配的最长在输入位置,menuone仅有一个选项也弹出菜单
set completeopt=longest,menu 
"去掉输入错误的提示声音
set noerrorbells
"缓冲区不使用交换文件
set noswapfile
"语言设置
" 显示中文帮助,需要到https://sourceforge.net/projects/vimcdoc/files/ 
" 下载vimcdoc-x.x.x.tar.gz,找到对应版本复制
" /usr/share/vim/vimfiles/doc或~/.vim/doc或者执行自动安装程序
"if version >= 605
    "set helplang=cn
"endif
"set langmenu=zh_CN.UTF-8
" 保存全局变量
"set viminfo+=!
"带有如下符号的单词不要被换行分割
"set iskeyword+=_,$,@,%,#,-
"符间插入的像素行数目
"set linespace=0
" 增强模式中的命令行自动完成操作
"set wildmenu
" 可以在buffer的任何地方使用鼠标(类似office中在工作区双击鼠标定位)
"set mouse=a
"set selection=exclusive
"set selectmode=mouse,key
"通过使用:commands命令,超过report行的文本变化时产生报告
set report=0
"在被分割的窗口间显示空白,便于阅读
set fillchars=vert:\ ,stl:\ ,stlnc:\
""""""""""""""""""""""""""""""""""""""""""""""vim文件保存的相关设置""""""""""""""""""""""""""""""""""""""""""""""""""
"在处理未保存或只读文件的时候,弹出确认
set confirm 
"如果发现文件在 Vim 之外修改过而在 Vim 里面没有的话,自动重新读入。
set autoread
"自动把内容写回文件: 如果文件被修改过
set autowrite
"写入文件前创建一个备份,文件成功写入后保留该备份。
set backup
"写回文件并建立备份时,本选项指定它应如何完成。"yes"复制文件然后覆盖原来的文件,"no",给文件换名然后写入一个新文件,"auto"两者哪个更好就用哪个
set backupcopy=yes
"设置备份文件的存放目录
set backupdir =./
"设置备份文件的扩展名
set backupext=.bak
"用每次修改文件的时间来备份文件,可以保留每一次修改
"au BufWritePre * let &backupext = '-' . strftime("%Y%b%d%X") . '~'
"跳过指定文件名的文件的备份操作,仅当编译时加入 +wildignore 特性才有效
"set backupskip=[ "/tmp/*","$TMPDIR/*",""$TMP/*","$TEMP/*" ]
"""""""""""""""""""""""""""""""""""""""""""""vim的quickfix设置"""""""""""""""""""""""""""""""""""""""""""""""'
"quickfix设置,在vim内部编译,并指出错误
":cc                显示详细错误信息 ( :help :cc )
":cp                跳到上一个错误 ( :help :cp )
":cn                跳到下一个错误 ( :help :cn )
":cl                列出所有错误 ( :help :cl )
":cw                如果有错误列表,则打开quickfix窗口 ( :help :cw )
":col               到前一个旧的错误列表 ( :help :col )
":cnew              到后一个较新的错误列表 ( :help :cnew ) 
"按\空格就可编译,\cn向后跳,\cp向前跳,\cc新建quickfix窗口," YCM相关快捷键,leader键默认为\,通过let mapleader=" " 设置为任意键 
"autocmd FileType c,cpp  map <buffer> <leader><space> :w<cr>:make<cr>
"nmap <leader>cn :cn<cr>
"nmap <leader>cp :cp<cr>
"nmap <leader>cw :cw<cr>
"make运行,原理类似makefile
"set makeprg=g++\ -Wall\ %
""""""""""""""""""""""""""""""""""""""""""""""vim文本格式排版"""""""""""""""""""
set list "显示Tab符
set listchars=tab:\|\ "使用|-代替制表符,方便对齐显示,可以改为自己想要的符号,第一个字符显示一次,第二字符重复显示"
set tabstop=4  "制表符占4个字节 
set softtabstop=4 "按退格键时每四个空白就当做一个tab键处理,在expandtab时很有用
set shiftwidth=4 "(自动) 缩进每一级使用的空白数目.如果为零,使用 'tabstops' 的值。
set noexpandtab "不要用空格代替制表符  
set smarttab "打开后,在行首插入或删除<Tab> 根据 'shiftwidth' 插入或删除空白。而'tabstop''softtabstop' 用在别的地方。如果关闭,<Tab> 总是根据 'tabstop''softtabstop' 决定插入空白的数目。'shiftwidth' 只用于文本左移或右移。 
set nowrap "不要换行显示一行   
set backspace=2  "设置允许退格的位置,0等同于set backspace=(Vi 兼容);1等同于set backspace=indent,eol;2等同于set backspace=indent,eol,start;其中indent 允许在自动缩进上退格,eol允许在换行符上退格 (连接行),start 允许在插入开始的位置上退格

"autoindent自动对齐(继承前一行的缩进方式,智能缩进smartindent,c风格缩进cindent,自定义缩进indentexpr,后一种会覆盖前一种
if &filetype == 'c'
    set cindent "使用C样式的缩进  
elseif &filetype == 'cpp'
    set cindent "使用C样式的缩进  
elseif &filetype == 'java' 
    set cindent "使用C样式的缩进  
else
    set smartindent "智能自动缩进(以c程序的方式)  
endif
"""""""""""""""""""""""""""""""""""vim的搜索替换剪切"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set hlsearch "开启高亮显示结果   
set nowrapscan "不要使用搜索在文件末回到文件首 
set incsearch "开启实时搜索功能 
set noignorecase "区分大小写
"替换时行内的所有内容都替换,如果此时在替换命令后使用/g则表示只替换第一个匹配项
set gdefault
"将剪贴板设置在寄存器中
set clipboard+=unnamed
""""""""""""""""""""""""""""""""""""""vim编码方式"""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
set encoding=utf-8 " 设置 Vim 内部使用的字符编码。它应用于缓冲区、寄存器、表达式所用的字符串、viminfo 保存的等等各种文本。
set fileencoding=utf-8 "设置此缓冲区所在文件的字符编码 
set fileencodings=utf-8,gbk,cp936,latin-1,ucs-bom,GB18030 "这是一个字符编码的列表,开始编辑已存在的文件时,参考此选项。
"""""""""""""""""""""""""""""""""""""""""""""""""vim显示相关""""""""""""""""""""""""""""""""""""""""""""""""""
syntax enable "语法高亮或set syntax=on 或者syntax on
set number "显示行号
set showcmd         " 输入的命令显示出来,看的清楚些  
"set whichwrap+=<,>,h,l   " 允许backspace和光标键跨越行边界(不建议)  
"set scrolloff=3     " 光标移动到buffer的顶部和底部时保持3行距离
set ruler       " 打开状态栏标尺
"set magic                   " 设置魔术
"set guioptions-=T           " 隐藏工具栏
"set guioptions-=m           " 隐藏菜单栏
"开启高亮光标行
set cursorline
"highlight CursorLine   cterm=NONE ctermbg=black ctermfg=NONE guibg=NONE guifg=NONE
"开启高亮光标列
set cursorcolumn
"highlight CursorColumn cterm=NONE ctermbg=black  ctermfg=darkyellow guibg=darkred guifg=white
"其中Cursorline和CursorColumn分别表示光标所在的行和列,根据一般用户的习惯,高亮行就可以了(我试过高亮列,看起来异常不协调,哈哈哈,有兴趣的可以试试),
"可以把darkred,white等换成你喜欢的颜色。另附上vim官网关于高亮显示当前行的tip
"Vim识别三种不同的终端:term,黑白终端;cterm,彩色终端;gui,Gvim窗口。
"term,cterm,gui可以定义其字体显示为:bold、underline、reverse、italic或standout。例如以下命令,用逗号来组合使用这些属性:
":highlight Keyword term=reverse,bold
"cterm,还可以用ctermfg设置前景色;用ctermbg设置背景色。例如以下命令,定义蓝底红字并使用下划线来显示注释:
":highlight Comment cterm=underline ctermfg=red ctermbg=blue
"gui,还可以使用选项gui=attribute,来定义图形窗口下语法元素的显示属性。选项guifg和guibg,用来定义了前景色和背景色。推荐使用的颜色包括:black, brown, grey, blue, green, cyan, magenta, yellow, white。
set matchtime=4 "匹配括号高亮的时间(单位是十分之一秒)
set showmatch "高亮显示匹配的括号,类似当输入一个左括号时会匹配相应的那个右括号
"""""""""""""""""""""""""""""""""""""""""vim代码折叠"""""""""""""""""""""""""""""""""""""
set foldenable "允许折叠  
set foldmethod=syntax "manual 手工定义折叠,indent更多的缩进表示更高级别的折叠,expr 用表达式来定义折叠,syntax 用语法高亮来定义折叠,diff 对没有更改的文本进行折叠,marker对文中的标志连续三个括号折叠
autocmd FileType c,cpp,cc set foldcolumn=8  "打开已存在文件时,设置折叠区域的宽度,左边预览的折叠位  
autocmd BufNewFile *.c,*.cpp,*.cc set foldcolumn=8  "新建文件时,设置折叠区域的宽度,左边预览的折叠位  
set foldlevel=100 "设置折叠级数,为 0 时,所有的折叠关闭。 为正数时,一些折叠关闭。 很大时,所有的折叠打开。
"自动保存折叠视图
autocmd BufWinLeave  *.cpp,*.c,*.sh,*.java,*.cc  silent mkview
autocmd BufWinEnter *.cpp,*.c,*.sh,*.java,*.cc  silent loadview
"普通模式非递归映射
nnoremap <space> @=((foldclosed(line('.'))<0)?'zc':'zo')<CR>
""""""""""""""""""""""""""""""""""""""""vim 自动加入标题日期头文件""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"新建.c,.h,.sh,.java文件,自动插入文件头 
autocmd BufNewFile *.cpp,*.c,*.sh,*.java,*.cc,*.h exec ":call SetTitle()" 
"定义函数SetTitle,自动插入文件头 
func SetTitle() 
    "如果文件类型为.sh文件 
    if &filetype == 'sh' 
        call setline(1,"\#########################################################################") 
        call append(line("."), "\# File Name: ".expand("%")) 
        call append(line(".")+1, "\# Author: ma6174") 
        call append(line(".")+2, "\# mail: [email protected]") 
        call append(line(".")+3, "\# Created Time: ".strftime("%c")) 
        call append(line(".")+4, "\#########################################################################") 
        call append(line(".")+5, "\#!/bin/bash") 
        call append(line(".")+6, "") 
    else 
        call setline(1, "/*************************************************************************") 
        call append(line("."), "    > File Name: ".expand("%")) 
        call append(line(".")+1, "    > Author: liao20081228") 
        call append(line(".")+2, "    > Mail: [email protected] ") 
        call append(line(".")+3, "    > Created Time: ".strftime("%c")) 
        call append(line(".")+4, " ************************************************************************/") 
    endif
    if &filetype == 'cpp'
        call append(line(".")+5, "#include<myhead>/*myhead is a headfile defined in in the directory:/usr/include,which include all headfile we need*/")
        call append(line(".")+6, "")
    endif
    if &filetype == 'c'
        call append(line(".")+5, "#include<myhead.h>/*myhead.h is a headfile defined in the directory:/usr/include,which include all headfile we need*/")
        call append(line(".")+6, "")
    endif
    "新建文件后,自动定位到文件末尾
    autocmd BufNewFile * normal G
endfunc 
""""""""""""""""""""""""""""""""""""""""""vim键盘快捷键映射""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"设置为不兼容Vi
set nocompatible
"leader键默认为\,通过let mapleader=" " 设置为任意键
"let mapleader="."
"插入,普通,命令行模式下
"一键保存,map和noremap区别在于是递映射
inoremap <F4> <ESC>:w<CR>i
nnoremap <F4> :w<CR>
cnoremap <F4> w<CR>
""插入,普通,命令行模式下,一键对齐
inoremap <F1> <ESC>gg=G<CR>i
nnoremap <F1> gg=G<CR>
cnoremap <F1> <ESC>gg=G<CR>:

"插入,普通,命令行模式下 一键保存退出
inoremap <F6> <ESC>:wq<CR>
nnoremap <F6> :wq<CR>
cnoremap <F6> wq<CR>
"普通,插入,命令行模式,一键去空行 
inoremap <F2> <ESC>:g/^\s*$/d<CR>i
nnoremap <F2> :g/^\s*$/d<CR>
cnoremap <F2> g/^\s*$/d<CR>
" 映射全选+复制 ctrl+a
nnoremap <C-A> ggVGY
"C,C++ 按F5编译运行,插入,编辑,命令行
inoremap <F5> <ESC>:call CompileRunGcc()<CR>
nnoremap <F5> :call CompileRunGcc()<CR>
cnoremap <F5> call CompileRunGcc()<CR>
func! CompileRunGcc()
    exec "w"
    if &filetype == 'c'
        exec "!gcc -Wall % -o %< -lpthread"
        exec "! ./%<"
        exec "!rm ./%<"
    elseif &filetype == 'cpp'
        exec "!g++ -Wall -std=c++11 % -o %< -lpthread"
        exec "! ./%<"
        exec "!rm ./%<"
    elseif &filetype == 'java' 
        exec "!javac %" 
        exec "!java %<"
    elseif &filetype == 'sh'
        :!./%
    endif
endfunc

6.4.6 安装其它插件

$vim
esc
:PluginInstall

等待显示done,完成。

6.4.7 配置ultisnip

$ mkdir ~/.vim/Ultisnips
$ cp c_linux.snippets ~/.vim/Ultisnips/c.snippets
$ cp cpp_linux.snippets ~/.vim/Ultisnips/cpp.snippets

6.5 安装帮助信息

  一般只装最后一个

$ sudo apt-get install manpages  //包含 GNU/Linux 的基本操作
$ sudo apt-get install manpages-dev //包含 GNU/Linux 的基本操作API
$ sudo apt-get install manpages-posix //包含 POSIX 所定义公用程序的方法
$ sudo apt-get install manpages-posix-dev //包含 POSIX 的 header files 和 library calls 的用法

7 Host SMBus controller not enabled

  • 查明装入模块的确切名字,显示输出的结果是模块的确切名字:i2c_piix4
  • 将该模块列入不装入名单。
$ sudo vim /etc/modprobe.d/blacklist.conf
  • 在末尾加入blacklist i2c-piix4
  • 保存退出
  • 重启

8 显示设置

$cd ~
$vim ~/.bashrc
  • 改LINUX用户命令行提示为为彩色显示,在末尾添加:
PS1="\[\033[1;37;1m\][\[\033[0;36;1m\]\u\[\033[0;35;1m\]@\\[\033[0;33;1m\]\h:\[\033[1;34;1m\]\W\[\033[1;37;1m\]]\[\033[1;31;1m\]\$ \[\033[0m\]"
  • 让linux支持256色的终端 ,在末尾添加:
if [ -e /lib/terminfo/x/xterm-256color ]
then
    export TERM='xterm-256color'
else
    export TERM='xterm-color'
fi
  • 查看服务器颜色位数
$tput colors 
  • 显示当前支持的终端的类型
$ echo $TERM 
  • 如果你使用putty为终端,改变putty显示背景,使用系统颜色配置不打勾。
  • 终端颜色配置,推荐护眼颜色为前景色131,148,150,背景色为0,43,53,颜色方案也适用于xshell。

9 防止rm误删除

  • 将remove 文件夹的文件拷贝到/usr/local/bin
  • 在.bashrc文件后添加
alias rm='/usr/local/bin/rm.sh'
alias lrm='/usr/local/bin/lrm.sh'
alias urm='/usr/local/bin/urm.sh'

10 安装 log4 for cpp

  • 下载log4cpp-1.1.1.tar.gz
  • 安装:以root权限打开终端,
  • 拷贝到/usr/local
# cd /usr/local
# tar zxvf log4cpp-1.1.1.tar.gz 
# cd /usr/local/log4cpp/
# ./configure
# make
# make check
# make install
  • 这里已经安装成功.
    默认lib库路径是 : /usr/local/lib/
    默认头文件的位置: /usr/local/include/log4cpp
  • 使用:
    • 编译使用log4cpp库的CPP文件时,要加上库文件,才能顺利的编译通过。如下示例:# g++ log4test.cpp -llog4cpp -lpthread
    • 运行时,如若提示缺少log4cpp库文件,表示找不到log4cpp的动态库,需要进行以下设置以管理员身份登录终端,然后执行以下操作:
      • # vim /etc/ld.so.conf
      • 在打开的文件末尾添加动态库log4cpp的路径(这里是/usr/local/lib),然后保存退出;执行命令ldconfig使设置生效即可。
      • # ldcondfig
  • log4cpp学习:
    http://blog.csdn.net/liuhong135541/article/category/1496383
    http://log4cpp.sourceforge.net/
    http://en.cppreference.com

11 安装boost库

  • 下载好了Boost库,下面开始编译(假设下载完后的,代码解压在了BOOST_ROOT目录)
  • 进入到BOOST_ROOT/libs/regex/build目录
    • 如果要使用静态库,请执行make -fgcc.mak
    • 如果要使用静态库,请执行make -fgcc-shared.mak
  • 执行完上面三步后的,在BOOST_ROOT/libs/regex/build/下会生成一个gcc目录 ,进入该目录 ,可以看到生成了下面四个文件:
    • libboost_regex-gcc-1_42.a , 这是release版的静态库
    • libboost_regex-gcc-1_42.so, 这是release版的动态库(共享库)
    • libboost_regex-gcc-d-1_42.a, 这是debug版的静态库
    • libboost_regex-gcc-d-1_42.so, 这里debug版的动态库(共享库)
  • 在使用之前你需要把Boost的安装目录加入到系统的Path中(当然也可以在编译时直接指定)
    • 第一种办法:复制编译好的库文件到/usr/local/lib,复制头文件 boost/regex.hpp/usr/local/include
    • 第二种办法:打开~/.bashrc 添加以下内容后,执行sudo ldconfig
export CPLUS_INCLUDE_PATH=$BOOST_ROOT:$CPLUS_INCLUDE_PATH
exoprt LIBRARY_PATH=$BOOST_LIB_PATH:$LIBRARY_PATH
export LD_LIBRARY_PATH=$BOOST_SO_LIB_PATH:$LD_LIBRARY_PATH
  • 编译要指定链接的库文件,如果名字太长,可以使用sudo ln -s 源文件 目标文件 来创建一个短的库文件的链接

猜你喜欢

转载自blog.csdn.net/liao20081228/article/details/78808126