Ubuntu下VIM配置成C++开发编辑器

1、复制配置文件到本用户环境下,再新建一个.vim文件夹,并创建bundle子文件夹

  • sudo cp /etc/vim/vimrc /home/wangy/.vimrc
  • sudo mkdir /home/wangy/.vim
  • sudo mkdir /home/wangy/.vim/bundle
  • sudo mkdir /home/wangy/.vim/bundle/vundle

bundle的配置文件如下:

"新增的配置放在这里
set nocompatible    " be iMproved
filetype off     " required!
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
" let Vundle manage Vundle
" required!
Bundle 'gmarik/vundle'
" My Bundles here:
"
" original repos on github
Bundle 'tpope/vim-fugitive'
Bundle 'Lokaltog/vim-easymotion'
Bundle 'rstacruz/sparkup', {'rtp': 'vim/'}
Bundle 'tpope/vim-rails.git'
" vim-scripts repos
Bundle 'L9'
Bundle 'FuzzyFinder'
" non github repos
" Bundle 'git://git.wincent.com/command-t.git'
" Bundle 'https://github.com/scrooloose/nerdtree.git'
" ...
filetype plugin indent on  " required!
"
" Brief help -- 此处后面都是vundle的使用命令
" :BundleList   - list configured bundles
" :BundleInstall(!) - install(update) bundles
" :BundleSearch(!) foo - search(or refresh cache first) for foo
" :BundleClean(!)  - confirm(or auto-approve) removal of unused bundles
"
" see :h vundle for more details or wiki for FAQ
" NOTE: comments after Bundle command are not allowed..

2、安装NERDTree

Bundle 'https://github.com/scrooloose/nerdtree.git'

用法如下:

nmap <F5> :NERDTree<CR> 快捷键

:NERDTree    开启

ctrl+w    可以在左右窗口切换

p 到上层目录,P到根目录

o 打开文件或目录,q 退出插件

3、安装tagbar

首先安装ctags,sudo apt-get install ctags

Bundle 'https://github.com/majutsushi/tagbar.git'

配置文件如下:

" tagbar设置----------------
" 快捷键
nmap <F4> :TagbarToggle<CR>
let g:tagbar_width = 20  " tagbar's width, default 20
" let g:tagbar_left = 1  " on the left side
let g:tagbar_right = 1  " on the right side
let NERDTreeIgnore=['\.pyc', '\.pyo', '\.swp', '\~'] " ignore *.py[co], *.sw p and *~

使用方式F4快捷键,退出为q

4、其他插件

Bundle 'https://github.com/scrooloose/nerdtree.git'
Bundle 'https://github.com/majutsushi/tagbar.git'
Bundle 'https://github.com/terryma/vim-multiple-cursors.git'
Bundle 'https://github.com/upsuper/vim-colorschemes.git'
Bundle 'https://github.com/vim-scripts/cppcomplete.git'

我的vim配置主要有以下优点:

1.按F5可以直接编译并执行C、C++、java代码以及执行shell脚本,按“F8”可进行C、C++代码的调试

2.自动插入文件头 ,新建C、C++源文件时自动插入表头:包括文件名、作者、联系方式、建立时间等,读者可根据需求自行更改

3.映射“Ctrl + A”为全选并复制快捷键,方便复制代码

4.按“F2”可以直接消除代码中的空行

5.“F3”可列出当前目录文件,打开树状文件目录

6.支持鼠标选择、方向键移动

7.代码高亮,自动缩进,显示行号,显示状态行

8.按“Ctrl + P”可自动补全

9.[]、{}、()、”“、' ‘等都自动补全

10.其他功能读者可以研究以下文件

map <F9> :call SaveInputData()<CR>
func! SaveInputData()
 exec "tabnew"
 exec 'normal "+gP'
 exec "w! /tmp/input_data"
endfunc
"colorscheme torte
"colorscheme murphy
"colorscheme desert
"colorscheme desert
"colorscheme elflord
colorscheme ron
"set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
"set termencoding=utf-8
"set encoding=utf-8
"set fileencodings=ucs-bom,utf-8,cp936
"set fileencoding=utf-8
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 显示相关
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"set shortmess=atI " 启动的时候不显示那个援助乌干达儿童的提示
"winpos 5 5   " 设定窗口位置
"set lines=40 columns=155 " 设定窗口大小
set go=    " 不要图形按钮
"color asmanian2  " 设置背景主题
"set guifont=Courier_New:h10:cANSI " 设置字体
"syntax on   " 语法高亮
autocmd InsertLeave * se nocul " 用浅色高亮当前行
autocmd InsertEnter * se cul " 用浅色高亮当前行
"set ruler   " 显示标尺
set showcmd   " 输入的命令显示出来,看的清楚些
"set cmdheight=1  " 命令行(在状态行下)的高度,设置为1
"set whichwrap+=<,>,h,l " 允许backspace和光标键跨越行边界(不建议)
"set scrolloff=3  " 光标移动到buffer的顶部和底部时保持3行距离
set novisualbell " 不要闪烁(不明白)
set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")} "状态行显示的内容
set laststatus=1 " 启动显示状态行(1),总是显示状态行(2)
set foldenable  " 允许折叠
set foldmethod=manual " 手动折叠
"set background=dark "背景使用黑色
set nocompatible "去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限
" 显示中文帮助
if version >= 603
 set helplang=cn
 set encoding=utf-8
endif
" 设置配色方案
"colorscheme murphy
"字体
"if (has("gui_running"))
" set guifont=Bitstream\ Vera\ Sans\ Mono\ 10
"endif
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""新文件标题
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"新建.c,.h,.sh,.java文件,自动插入文件头
autocmd BufNewFile *.cpp,*.[ch],*.sh,*.java 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: ma6174@163.com")
  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: ma6174")
  call append(line(".")+2, " > Mail: ma6174@163.com ")
  call append(line(".")+3, " > Created Time: ".strftime("%c"))
  call append(line(".")+4, " ************************************************************************/")
  call append(line(".")+5, "")
 endif
 if &filetype == 'cpp'
  call append(line(".")+6, "#include<iostream>")
  call append(line(".")+7, "using namespace std;")
  call append(line(".")+8, "")
 endif
 if &filetype == 'c'
  call append(line(".")+6, "#include<stdio.h>")
  call append(line(".")+7, "")
 endif
 " if &filetype == 'java'
 "  call append(line(".")+6,"public class ".expand("%"))
 "  call append(line(".")+7,"")
 " endif
 "新建文件后,自动定位到文件末尾
 autocmd BufNewFile * normal G
endfunc
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"键盘命令
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
nmap <leader>w :w!<cr>
nmap <leader>f :find<cr>
" 映射全选+复制 ctrl+a
map <C-A> ggVGY
map! <C-A> <Esc>ggVGY
map <F12> gg=G
" 选中状态下 Ctrl+c 复制
vmap <C-c> "+y
"去空行
nnoremap <F2> :g/^\s*$/d<CR>
"比较文件
nnoremap <C-F2> :vert diffsplit
"新建标签
map <M-F2> :tabnew<CR>
"列出当前目录文件
map <F3> :tabnew .<CR>
"打开树状文件目录
map <C-F3> \be
"C,C++ 按F5编译运行
map <F5> :call CompileRunGcc()<CR>
func! CompileRunGcc()
 exec "w"
 if &filetype == 'c'
  exec "!g++ % -o %<"
  exec "! ./%<"
 elseif &filetype == 'cpp'
  exec "!g++ % -o %<"
  exec "! ./%<"
 elseif &filetype == 'java'
  exec "!javac %"
  exec "!java %<"
 elseif &filetype == 'sh'
  :!./%
 elseif &filetype == 'py'
  exec "!python %"
  exec "!python %<"
 endif
endfunc
"C,C++的调试
map <F8> :call Rungdb()<CR>
func! Rungdb()
 exec "w"
 exec "!g++ % -g -o %<"
 exec "!gdb ./%<"
endfunc
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""实用设置
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 设置当文件被改动时自动载入
set autoread
" quickfix模式
autocmd FileType c,cpp map <buffer> <leader><space> :w<cr>:make<cr>
"代码补全
set completeopt=preview,menu
"允许插件
filetype plugin on
"共享剪贴板
set clipboard+=unnamed
"从不备份
set nobackup
"make 运行
:set makeprg=g++\ -Wall\ \ %
"自动保存
set autowrite
set ruler     " 打开状态栏标尺
set cursorline    " 突出显示当前行
set magic     " 设置魔术
set guioptions-=T   " 隐藏工具栏
set guioptions-=m   " 隐藏菜单栏
"set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ %{&encoding}\ %c:%l/%L%)\
" 设置在状态行显示的信息
set foldcolumn=0
set foldmethod=indent
set foldlevel=3
set foldenable    " 开始折叠
" 不要使用vi的键盘模式,而是vim自己的
set nocompatible
" 语法高亮
set syntax=on
" 去掉输入错误的提示声音
set noeb
" 在处理未保存或只读文件的时候,弹出确认
set confirm
" 自动缩进
set autoindent
set cindent
" Tab键的宽度
set tabstop=4
" 统一缩进为4
set softtabstop=4
set shiftwidth=4
" 不要用空格代替制表符
set noexpandtab
" 在行和段开始处使用制表符
set smarttab
" 显示行号
set number
" 历史记录数
set history=1000
"禁止生成临时文件
set nobackup
set noswapfile
"搜索忽略大小写
set ignorecase
"搜索逐字符高亮
set hlsearch
set incsearch
"行内替换
set gdefault
"编码设置
set enc=utf-8
set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
"语言设置
set langmenu=zh_CN.UTF-8
set helplang=cn
" 我的状态行显示的内容(包括文件类型和解码)
"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%%]
" 总是显示状态行
set laststatus=2
" 命令行(在状态行下)的高度,默认为1,这里是2
set cmdheight=2
" 侦测文件类型
filetype on
" 载入文件类型插件
filetype plugin on
" 为特定文件类型载入相关缩进文件
filetype indent on
" 保存全局变量
set viminfo+=!
" 带有如下符号的单词不要被换行分割
set iskeyword+=_,$,@,%,#,-
" 字符间插入的像素行数目
set linespace=0
" 增强模式中的命令行自动完成操作
set wildmenu
" 使回格键(backspace)正常处理indent, eol, start等
set backspace=2
" 允许backspace和光标键跨越行边界
set whichwrap+=<,>,h,l
" 可以在buffer的任何地方使用鼠标(类似office中在工作区双击鼠标定位)
set mouse=a
set selection=exclusive
set selectmode=mouse,key
" 通过使用: commands命令,告诉我们文件的哪一行被改变过
set report=0
" 在被分割的窗口间显示空白,便于阅读
set fillchars=vert:\ ,stl:\ ,stlnc:\
" 高亮显示匹配的括号
set showmatch
" 匹配括号高亮的时间(单位是十分之一秒)
set matchtime=1
" 光标移动到buffer的顶部和底部时保持3行距离
set scrolloff=3
" 为C程序提供自动缩进
set smartindent
" 高亮显示普通txt文件(需要txt.vim脚本)
au BufRead,BufNewFile * setfiletype txt
"自动补全
:inoremap ( ()<ESC>i
:inoremap ) <c-r>=ClosePair(')')<CR>
":inoremap { {<CR>}<ESC>O
":inoremap } <c-r>=ClosePair('}')<CR>
:inoremap [ []<ESC>i
:inoremap ] <c-r>=ClosePair(']')<CR>
:inoremap " ""<ESC>i
:inoremap ' ''<ESC>i
function! ClosePair(char)
 if getline('.')[col('.') - 1] == a:char
  return "\<Right>"
 else
  return a:char
 endif
endfunction
filetype plugin indent on
"打开文件类型检测, 加了这句才可以用智能补全
set completeopt=longest,menu
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"NERDtee设定
let NERDChristmasTree=1
let NERDTreeAutoCenter=1
let NERDTreeBookmarksFile=$VIM.'\Data\NerdBookmarks.txt'
let NERDTreeMouseMode=2
let NERDTreeShowBookmarks=1
let NERDTreeShowFiles=1
let NERDTreeShowHidden=1
let NERDTreeShowLineNumbers=1
let NERDTreeWinPos='left'
let NERDTreeWinSize=31
nnoremap f :NERDTreeToggle
map <F7> :NERDTree<CR> 

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

(0)

相关推荐

  • Ubuntu18下安装Nvidia驱动解决黑屏并调整分辨率问题

    Ubuntu自带的显卡驱动Nouveau会与N卡冲突,导致卡机黑屏,而禁用后分辨率又过低 1.禁用Nouveau显卡驱动 在进入grub启动界面时,10秒内使用↑↓键选中Ubuntu,按e键进行编辑,在倒数第二行quiet slash后添加acpi_osi=linux nomodeset quiet slash acpi_osi=linux nomodeset 该方法只是暂时禁用Nouveau显卡驱动,在进入桌面后需要在grub的配置文件里面更改已使得其永久有效,在命令行中输入如下命令: $ s

  • Ubuntu 16.04设置PostgreSQL开机启动的方法

    由于PostgreSQL是编译安装的,需要设置开机启动.对于Ubuntu系统来说,和Red Hat之类的系统稍微有一点不一样. 首先第一步,由于我们习惯于使用Red Hat这样的系统,所以我们需要弄一个chkconfig出来.这个命令是配置Red Hat服务启动停止的命令,但是在Ubuntu上没有.我们可以使用sysv-rc-conf. sudo apt install sysv-rc-conf 安装完成sysv-rc-conf之后,我们把他换成chkconfig.毕竟这个命令太难记住了. su

  • Ubuntu终端多窗口分屏Terminator

    1.安装 Terminator最大的特点就是可以在一个窗口中打开多个终端 sudo apt-get install terminator 2.快捷键 Ctrl+Shift+E    垂直分割窗口 Ctrl+Shift+O    水平分割窗口 F11               全屏 Ctrl+Shift+C    复制 Ctrl+Shift+V    粘贴 Ctrl+Shift+N    或者 Ctrl+Tab 在分割的各窗口之间切换 Ctrl+Shift+X    将分割的某一个窗口放大至全屏

  • 在Ubuntu Linux上安装和使用Git和GitHub

    Git的简介 Git是2005年Linus Torvalds 为了帮助管理 Linux(R) 内核开发而开发的一个开放源码的版本控制软件,正如所提供的文档中说的一样: Git 是一个快速.可扩展的分布式版本控制系统,它具有极为丰富的命令集,对内部系统提供了高级操作和完全访问. Github是一个存放着世界上最棒的一些软件项目的宝藏,这些软件项目由全世界的开发者无私贡献.这个看似简单,实则非常强大的平台因为大大帮助了那些对开发大规模软件感兴趣的开发者而被开源社区所称道. 这篇向导是对于安装和使用G

  • foreman ubuntu16 快速安装

    Quickstart Guide The Foreman installer is a collection of Puppet modules that installs everything required for a full working Foreman setup. It uses native OS packaging (e.g. RPM and .deb packages) and adds necessary configuration for the complete in

  • Ubuntu16.04源码安装Mininet

    Mininet Mininet 是一个轻量级软件定义网络和测试平台:它采用轻量级的虚拟化技术使一个单一的系统看起来像一个完整的网络运行相关的内核系统和用户代码,也可简单理解为 SDN 网络系统中的一种基于进程虚拟化平台,它支持 OpenFlow.OpenvSwith 等各种协议,Mininet 也可以模拟一个完整的网络主机.链接和交换机在同一台计算机上且有助于互动开发.测试和演示,尤其是那些使用 OpenFlow 和 SDN 技术:同时也可将此进程虚拟化的平台下代码迁移到真实的环境中. Mini

  • Ubuntu环境下使用G++编译CPP文件

    第一次用g++编译cpp文件的时候报了undefined reference的错误,自定义类中的函数全部都无法找到,查找资料后发现调用的类是需要链接的,本文以一个小例子描述编译的过程.其中class2类调用了class1类的成员函数,依赖于class1类,而test文件调用了class2类的成员函数,依赖于class1类. //class1.h #ifndef _CLASS1_H #define _CLASS1_H class class1 { public: int f(int i); };

  • Ubuntu中支持PHP5与PHP7双版本的简单实现

    前言 最近在编写一个工具的时候,使用了PHP命名空间特性,在命名空间中如果想引用常量.函数,需要PHP5.6以上的版本,但我阿里云 ECS 上安装的版本是PHP 5.5.9,由于 ECS 部署了很多PHP代码,如果贸然升级高版本PHP,可能会存在一些兼容性的问题.突然奇想,在同一个操作系统中,是否能够同时支持两个版本的PHP呢? 简单查阅了相关资料,其实在 Ubuntu 中使用包安装方式支持PHP双版本非常简单,两个版本存在能够互不干扰,接下去简单做下介绍,其实相关文章很多. 1:获取PHP7源

  • ubuntu16.04制作vim和python3的开发环境

    1. 安装vim: # apt-get install  -y vim-gnome 2. 安装ctags,ctags用于支持taglist # apt-get install ctags 3. 安装taglist # apt-get install vim-scripts vim-addon-manager # vim-addons install taglist 4. 安装pydiction 实现代码补全: #wget  https://www.vim.org/scripts/script.p

  • Ubuntu16.04.4LTS安装mininet遇到的问题及解决方案

    Mininet Mininet 是一个轻量级软件定义网络和测试平台:它采用轻量级的虚拟化技术使一个单一的系统看起来像一个完整的网络运行相关的内核系统和用户代码,也可简单理解为 SDN 网络系统中的一种基于进程虚拟化平台,它支持 OpenFlow.OpenvSwith 等各种协议,Mininet 也可以模拟一个完整的网络主机.链接和交换机在同一台计算机上且有助于互动开发.测试和演示,尤其是那些使用 OpenFlow 和 SDN 技术:同时也可将此进程虚拟化的平台下代码迁移到真实的环境中. 下列图片

  • 开发环境Ubuntu16安装以后的初始化设置

    办公室需要ubuntu系统作为linux开发环境,目前大家用的多的是ubuntu16.04.所以这里也以ubuntu16.4作为办公开发环境来进行一些初始化. 打开命令行 ubuntu16.04版本 右键--打开终端 有的Ubuntu 14.04没有自带右键打开终端功能,用起来非常不方便.今天偶尔想起来,网上搜了一下,方法如下: $ sudo apt-get install nautilus-open-terminal 注销系统重新登录,即可. 设置root用户密码 ubuntu默认root密码

随机推荐