ubuntu 18.04 下 vim 安裝及配置(不断更新)

commanddescription
g++ -v查看g++版本
gcc -v
cat /proc/version
gcc -dumpversion
查看gcc版本
uname -a查看内核版本
lsb_release -a查看操作系统版本号

vim

commanddescription
:%d不管光标在哪里,删除所有
gg dGgg的意思是光标切换到第一行
:q退出
:q!强制退出
wq保存并退出
wq!保存并强制退出

安装vim

sudo apt install vim vim-scripts vim-doc

配置文件位置:/etc/vim/.vimrc/home/用户/.vimrc

~/.vimrc (~/.vimrc文件中的配置会覆盖/etc/vimrc中的配置);

~/.vim/plugin
~/.vim/doc
~/.vim/syntax

插件安装

vim下方便简洁的管理插件

  • Vundle
  • vim-pathogen
  • vim-plugin

vim-pathogen

vim-pathogen 可以将插件都集中管理到~/.vim/bundle 中,并且各个插件都拥有自己的目录(这点 Vundle 也可以做到),

优点在于只依赖与 git 来管理插件,无需在 vim 做过多的配置

cd ~/.vim/
mkdir -p  {bundle,autoload}
cd bundle
git clone https://github.com/tpope/vim-pathogen.git
cp vim-pathogen/autoload/pathogen.vim ~/.vim/autoload/

~/.vimrc 文件里, filetype plugin indent on 之前的任何地方,加入这句

:call pathogen#infect()

这样 vim-pathogen 就已经安装完成了,接下来我们下载一个插件看下效果。

nerdtree

通过vim-pathogen插件来安装nerdtree

  1. 安装nerdtree插件
$ cd ~/.vim/bundle
$ git clone http://github.com/scrooloose/nerdtree.git
  1. 更新nerdtree插件
$ git pull
  1. 删除插件
$ rm -rf nerdtree

直接安装 nerdtree插件

vim插件nerdtree

cd ~/.vim/
wget https://www.vim.org/scripts/download_script.php?src_id=23731 -O nerdtree.zip
unzip nerdtree.zip -d nerdtree
mkdir -p ~/.vim/{plugin,doc}
cp nerdtree/plugin/NERD_tree.vim ~/.vim/plugin/
cp nerdtree/doc/NERD_tree.txt ~/.vim/doc/

run :NERDTree

nerdtree 配置

~/.vimrc 文件中添加下面内容就可以在每次打开的时候自动罗列出目录结构:

autocmd VimEnter * NERDTree

在.vimrc內添加nedrtree的配置字段如下:

"->NERDTree目录树插件---配置选项=====================================================         
let g:NERDTreeDirArrowExpandable = '▸'  "目录图标                                                                
let g:NERDTreeDirArrowCollapsible = '▾'
"autocmd vimenter * NERDTree                "自动打开目录树
"vim【无文件】也也显示目录树 
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif
"vim打开目录文件也显示目录树?
autocmd StdinReadPre * let s:std_in=1 
autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | exe 'NERDTree' argv()[0] | wincmd p | ene     | endif
"CRTL+N开关目录树
map <C-n> :NERDTreeToggle<CR>
"打开最后一个文件,同時关闭目录树
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
"<-NERDTree目录树插件---配置选项===============================================================

CTRL+N实现nedrtree的打开和关闭
CTRL+WW实现左右界面跳转
CTRL+W+L 切到后面一个窗口
CTRL+W+H 切到前面一个窗口

ctags

$ sudo apt install ctags

tagbar

taglist的替代品,比taglist更适合c++使用,函数能够按类区分,支持按类折叠显示等,显示结果清晰简洁

http://www.vim.org/scripts/script.php?script_id=3465

$ cd ~/.vim/bundle
$ git clone https://github.com/majutsushi/tagbar.git 

配置

"ctrl+t to open tarbar
nmap <C-T> :TagbarToggle<CR>
"press F4 to open tagbar window
"nmap <silent> <F4> :TagbarToggle<CR>  

"文件侦查启动,用以检测文件的后缀
filetyp on
"设置ctags所在路径
let g:tagbar_ctags_bin='/usr/bin/ctags'  
"设置tagbar的宽度
let g:tagbar_width = 20
"auto run tagbar when use vim
"autocmd VimEnter * nested :call tagbar#autoopen(1)
"打开文件自动 打开tagbar
autocmd BufReadPost *.cpp,*.c,*.h,*.hpp,*.cc,*.cxx call tagbar#autoopen()
"设置tagbar的窗口显示的位置,为右边
let g:tagbar_right = 1
"let g:tagbar_left = 1

Ctrl+T:打开或关闭TagBar

  • ? 查看帮助
  • 选中某个标签后,使用回车,可以直接定位到该标签
  • 选中某个折叠标签组后,使用 + 可以展开该标签的所有标签,使用 - 可以折叠该标签组的所有标签
  • 使用 s 可以对每个标签组进行排序

vim-airline

底部详细状态栏

$ cd ~/.vim/bundle
$ git clone https://github.com/bling/vim-airline.git

颜色插件

git clone https://github.com/tomasr/molokai.git
cp -r molokai/colors/ ~/.vim/

.vimrc 详解

"字符编码
"vim编码设置为utf-8,支持中文输入
set fileencodings=utf-8,gb2312,gb18030,gbk,ucs-bom,cp936,latin1
set encoding=utf-8
set langmenu=zh_CN.utf-8

"语法和缩进
"设定vim与vi不兼容
set nocompatible
"自动缩进,即为新行自动添加与当前行同等的缩进
set autoindent
"类似C语言程序的缩进
set cindent
"高亮显示匹配的括号
set showmatch
"检索时忽略大小写
set ignorecase
set hlsearch
"显示行号
set nu
filetype plugin indent on

"tab相关设置
"开启时,在行首按TAB将加入shiftwidth个空格,否则加入tabstop个空格。
set smarttab
"是将输入的TAB自动展开成空格。开启后要输入TAB,需要Ctrl-V<TAB>
set expandtab
set tabstop=4
set softtabstop=4
"设定 << 和 >> 命令移动时的宽度为 4
set shiftwidth=4

if &term=="xterm"
    set t_Co=8
    set t_Sb=^[[4%dm
    set t_Sf=^[[3%dm
endif

"颜色方案
set t_Co=256
"配色方案  molokai  desert
colorscheme desert
"为光标所在行加下划线,molokai配色下为高亮一行
set cursorline
"语法高亮
syntax enable
syntax on

"可以在buffer的任何地方使用鼠标
set mouse=a
set selection=exclusive
set selectmode=mouse,key


"插件设置
"pathogen settings
"启用pathogen进行插件管理
execute pathogen#infect()


"tagbar settings
"ctrl+t to open tarbar
nmap <C-T> :TagbarToggle<CR>

"设置ctags所在路径
let g:tagbar_ctags_bin='/usr/bin/ctags'  
"设置tagbar的宽度
let g:tagbar_width = 20
"auto run tagbar when use vim
"autocmd VimEnter * nested :call tagbar#autoopen(1)
"打开文件自动 打开tagbar
autocmd BufReadPost *.cpp,*.c,*.h,*.hpp,*.cc,*.cxx call tagbar#autoopen()
"tagbar window postion
"设置tagbar的窗口显示的位置,为左边
let g:tagbar_right = 1
"let g:tagbar_left = 1


"nerdtree settings
"ctrl+n to open nerdtree
nmap <C-N> :NERDTree<CR>
"nerdtree window position 'left' or 'right'
let NERDTreeWinPos = 'left'
"nerdtree window Size
let NERDTreeWinSize = 30
let NERDTreeShowFiles = 1


"airline setting
"开启airline
set laststatus=2
"不检测行尾空格,trailing-white-space
let g:airline#extensions#whitespace#enabled = 0
"使用tab打开文件
"let g:airline#extensions#tabline#enabled = 1
"let g:airline#extensions#tabline#left_sep = ' '
"let g:airline#extensions#tabline#left_alt_sep = '|'


"Code folding
"set foldmethod=syntax
"代码块折叠
autocmd FileType python set foldmethod=indent
"autocmd FileType xml set foldmethod=indent
"autocmd FileType dia set foldmethod=indent


"command Model map for go
"go 语言快捷键支持
"gd 快速打开:GoDef,GoDef支持代码内跳转到指定函数
"gr 快速执行:GoRun , 运行go程序
au FileType go cnoremap gd :GoDef<CR>
au FileType go cnoremap gr :GoRun<CR>


let g:go_fmt_command = "goimports"

vim中颜色主题

/usr/share/vim/vim80/colors文件夹里,vim已经自帶了十几种主題插件,选择一种即可:

blue.vim      desert.vim    koehler.vim  peachpuff.vim  slate.vim
darkblue.vim  elflord.vim   morning.vim  README.txt     torte.vim
default.vim   evening.vim   murphy.vim   ron.vim        zellner.vim
delek.vim     industry.vim  pablo.vim    shine.vim

也可以去github网站搜索下載主題插件文件,文件可放在~/.vim/colors目录下,便于管理。

每小时自动切换一个主题

"把当前秒數转换成小时数
let hour=(localtime()/60/60%24)
if hour == 1
	colorscheme blue
elseif hour == 2
	colorscheme desert
elseif hour == 3
	colorscheme koehler
elseif hour == 4
	colorscheme peachpuff
elseif hour == 5
	colorscheme slate
elseif hour == 6
	colorscheme darkblue
elseif hour == 7
	colorscheme elford
elseif hour == 8
	colorscheme morning
elseif hour == 9
	colorscheme torte
elseif hour == 10
	colorscheme default
elseif hour == 11
	colorscheme evening
elseif hour == 12
	colorscheme murphy
elseif hour == 13
	colorscheme ron
elseif hour == 14
	colorscheme zellner
elseif hour == 15
	colorscheme delek
elseif hour == 16
	colorscheme industry
elseif hour == 17
	colorscheme pablo
elseif hour == 18
	colorscheme shine
elseif hour == 19
	colorscheme desert
elseif hour == 20
	colorscheme desert
elseif hour == 21
	colorscheme desert
elseif hour == 22
	colorscheme desert
elseif hour == 23
	colorscheme desert
elseif hour == 24
	colorscheme desert
endif

其他插件安装

  • Taglist:提供源代码符号的结构化视图。
  • Cscope:提供交互式查询语言符号功能,如查询哪些地方使用某个变量或调用某个函数。
  • OmniCppComplete:主要提供输入时实时提供类或结构体的属性或方法的提示和补全。
  • SuperTab:使Tab快捷键具有更快捷的上下文提示功能
  • NERDTree:提供树形浏览文件系统的界面。
  • MiniBufExplorer:提供多文件同时编辑功能。
  • Winmanager:将这NERDTree界面和Taglist界面整合起来,使Vim更像VS!
  • cvim
  • Cscope

  1. Linux下安装vim树形目录插件NerdTree
  2. Vim 插件 pathogen 插件管理
  3. Ubuntu18.04下VIM安裝及配置(不斷更新)
  4. 所需即所获:像 IDE 一样使用 vim
  5. Tutorial: Make Vim as Your C/C++ IDE Using c.vim Plugin
  • qq_43638135
    妲己再美究为妃: 博主没有想过自己接一些私活干吗?我现在还没毕业,但是我也确实听说外挂市场自动化游戏脚本市场挺火热的,并且报酬也很丰厚,但是具体的我也不是很清楚,求解答。 (1个月前 #47楼) 查看回复(2) 举报 回复
    22