vim-配置教程+源码
概念
前言
- 放弃鼠标,提高效率,这只是 vim 的标配目标
- 定制自己的编辑器,提高效率 + 花里胡哨的入门时本文目标
- IDE相对于编辑器
- 最大的优势在于其集成了编译、调试、智能补全、语法高亮、工程管理等软件开发工具和环境
- 而这些Vim都可以通过其强大丰富的插件扩展来完成
- 不建议直接拷贝本文源码,除非真的忍不住
参考链接
vim 优点
- 模式编辑器
- 高度可扩展
- 高度可定制
vim 配置
- 这里提一下 neovim 有兴趣的可以了解下。
- 原理:最终还是根据 .vimrc 来配置 vim
vim 配置方法一
- 参考Github:vimrc
- 简略步骤:(linux)
- 在 home 目录创建 .vim_runtime 文件夹
- 运行命令
git clone --depth=1 https://github.com/amix/vimrc.git ~/.vim_runtime
- 运行命令
sh ~/.vim_runtime/install_awesome_vimrc.sh
- 在 .vimrc 文件和 .vim_runtime 目录配置 vim。
- 简略步骤:(linux)
vim 配置方法二
- 直接配置 .vimrc
自动添加文件头
- 一下为识别 .sh 文件并添加相应文件头信息的源码
- 其它文件,.c .h .md 等等都可以参考以下源码
"==============================================================================
" filetype 文件识别,添加文件头
"==============================================================================
filetype on
autocmd BufNewFile *.sh exec ":call SetSHTitle()"
""定义函数SetTitle,自动插入文件头
func SetSHTitle()
call setline(1, "/** @file ".expand("%"))
call append(line(".")+0, " * @brief 简要说明")
call append(line(".")+1, " * @details 详细说明")
call append(line(".")+2, " * @author lzm")
call append(line(".")+3, " * @date ".strftime("%Y-%m-%d %H:%M:%S")) "创建时间
call append(line(".")+6, " *")
call append(line(".")+7," */")
call append(line(".")+8,"")
call append(line(".")+9,"#!/bin/sh")
call append(line(".")+10, "")
endfunc
- 效果图
一般设置
- 按喜好设置+屏蔽
"==============================================================================
" set 一般设置
"==============================================================================
set nocompatible "不兼容vi
syntax enable "语法高亮使能
syntax on "语法高亮开启
set hlsearch "开启高亮搜索
set incsearch "输出字符串的同时进行搜索
set ignorecase "搜索时忽略大小写
set ruler "右下角的状态栏下显示光标的坐标
set showcmd "显示normal模式下的命令
set number "显示行号
set relativenumber "相对行号
set cmdheight=1 "命令行高度为1行"
set noshowmode "不显示'-- insert --' 等
set autoindent "自动缩进
set smartindent "智能缩进
set cindent "c语言缩进
set pastetoggle=<F4> "系统paste
set mouse=i "仅在insert mode 下可使用mouse
set autoread "当文件在外部被改变时, vim自动载入
set showmatch "显示匹配的括号
set matchtime=0 "显示匹配的括号的时间,单位:十分之一秒
set t_Co=256 "vim配色为256色
set cursorline "高亮当前光标行
set cursorcolumn "高亮当前光标列
autocmd InsertEnter * se cul
set shortmess=atI
set scrolloff=3 "光标移动到buffer的顶部和底部时保持3行距离
set laststatus=2 "指定什么时候对最后一个窗口显示状态条, 2表示永远有
set cinoptions=g0,:0,N-s,(0 "设置C/C++语言的具体缩进方式, unkown
set tabstop=4 "读取到文件的\t时,解释的空白长度
set softtabstop=4 "在编辑动作(按tab或backspace键)时,所输入或删除的空白长度
set shiftwidth=4 "自动缩进时的空白长度
set expandtab "将tab转换成space,文件中存储的将会是space
set smarttab
" set list "显示tab键为^I, 行为显示$
set listchars=tab:>-,trail:- "tab显示为">---" 行尾多余的空白字符显示为"-"
set history=1000 "命令历史个数
set langmenu=en_US.UTF-8 "菜单语系
set helplang=en "使用中文文档cn,英文则为en
set autowrite "自动保存, 否则切换buffer,文件后会会提示没有保存
set magic "匹配正则表达式时(\m):除了$.*^之外其他正则表达式的元字符都要加反斜杠\
set confirm "总是出现确认选项,如执行:qa等命令时
set nobackup "vim当覆盖一个文件时不保留一个备份
set noswapfile "不使用交换空间
set wildmenu "补全相关,unkown
set completeopt=longest,menu "显示补全列表
set backspace=indent,eol,start "indent将4个空格缩进当缩进删除,eol删除到上一行
set report=0 "当使用:commands命令时,总是报告文件的那一行被改变过
set fillchars=vert:\ ,stl:\ ,stlnc:\ "设置多窗口时的窗口间分割线
" set iskeyword+=. "追加.为判断一个word
set termencoding=utf-8 "终端使用的字符编码
set encoding=utf8 "vim内部buffer使用的字符编码
set fileencodings=utf8,ucs-bom,gbk,cp936,gb2312,gb18030 "依次判断文件字符编码
" set foldmethod=indent "基于缩进的折叠
set foldmethod=syntax "基于语法的折叠
set nofoldenable "启动 vim 时关闭折叠代码
" set nowrap "禁止折行
set viminfo+=n~/.cache/vim/.viminfo
let $BASH_ENV="~/.bash_aliases" "增加外部命令的alias
let mapleader = "," "修改<leader>键为','
vnoremap <leader>y "+y
filetype plugin on "根据文件类型读取插件
filetype indent on "使用缩进文件
" 标签跳转快捷键,在gnome-terminal中无效
" normal no recursive map
" insert no recursive map
nnoremap <C-c> :tabclose<cr>
nnoremap <C-x> :tabonly<cr>
nnoremap <C-k> :tabs<cr>
nnoremap <C-n> :tabnew<cr>
nnoremap <C-h> :tabprevious<cr>
nnoremap <C-l> :tabnext<cr>
" 光标闪烁,在插入模式下为‘|’,在norrmal 模式下为方块
" 若要不闪烁,则将改为后面的数字
let &t_SI = "\<Esc>[5 q" " 6
let &t_SR = "\<Esc>[3 q" " 4
let &t_EI = "\<Esc>[1 q" " 2
插件 **
在 linux 平台下操作
注意 :采用插件时,需要对所使用的插件要有所了解,防止一般设置与插件设置冲突
- 如
imap <C-h> <LEFT>
和Plugin 'jiangmiao/auto-pairs'
imap <C-h> <LEFT>
- 是在编辑模式时,ctrl+h 为左方向键
Plugin 'jiangmiao/auto-pairs'
- 在编辑模式时,会把 ctrl+h 映射为删除键,使得最终效果会为删除
- 解决方法,注释掉就可以了
- 如
采用 Vundle 管理插件
- 安装 Vundle
- 运行命令
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
即可
- 运行命令
- 插件类型及运用
- Github上的插件
- 使用格式:
Plugin 'vim-scripts/插件仓库名'
- 例子:
Plugin 'tpope/vim-fugitive'
- 使用格式:
- Github上 vim-scripts 仓库的插件
- 使用格式:
Plugin '插件名称'
- 实际上是
Plugin 'vim-scripts/插件仓库名'
只是此处的用户名可以省略
- 实际上是
- 例子:
Plugin 'L9'
- 使用格式:
- 由Git支持但不再github上的插件仓库
- 使用格式:
Plugin 'git clone 后面的地址''
- 例子:`Plugin 'git://git.wincent.com/command-t.git'
- 使用格式:
- 本地的Git仓库(例如自己的插件)
- 使用格式:
Plugin 'file:///+本地插件仓库绝对路径''
- 例子:
Plugin 'file:///home/gmarik/path/to/plugin'
- 使用格式:
- 插件在仓库的子目录中.
- 使用格式:正确指定路径用以设置runtimepath.
- 例子:插件在sparkup/vim目录下 :
Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
- 如果已经安装过这个插件,可利用以下格式避免命名冲突
- 例子:L9:
Plugin 'ascenator/L9', {'name': 'newL9'}
- 例子:L9:
- Github上的插件
- 安装 Vundle
插件管理源码
"==============================================================================
" Vundle start 插件管理
"==============================================================================
"filetype off " 必须的
" 设置包括vundle和初始化相关的runtime path
" 例子+格式开始==================================================
" 插件的命令放在vundle#begin和vundle#end之间.
" 1.Github上的插件
" 格式为 Plugin '用户名/插件仓库名'
"Plugin 'tpope/vim-fugitive'
" 2.来自 http://vim-scripts.org/vim/scripts.html 的插件
" Plugin '插件名称' 实际上是 Plugin 'vim-scripts/插件仓库名' 只是此处的用户名可以省略
"Plugin 'L9'
" 3.由Git支持但不再github上的插件仓库 Plugin 'git clone 后面的地址'
"Plugin 'git://git.wincent.com/command-t.git'
" 4.本地的Git仓库(例如自己的插件) Plugin 'file:///+本地插件仓库绝对路径'
"Plugin 'file:///home/gmarik/path/to/plugin'
" 5.插件在仓库的子目录中.
" 正确指定路径用以设置runtimepath. 以下范例插件在sparkup/vim目录下
"Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
" 6.安装L9,如果已经安装过这个插件,可利用以下格式避免命名冲突
"Plugin 'ascenator/L9', {'name': 'newL9'}
" 例子+格式END ==================================================
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin() " 必须 插件开始==================================================
Plugin 'VundleVim/Vundle.vim' " 必须 让vundle管理插件版本
Plugin 'Yggdroot/indentLine' "缩进指示线
"Plugin 'suan/vim-instant-markdown' " markdown实时浏览
Plugin 'vim-airline/vim-airline' "美观界面,powerline
"Plugin 'fatih/vim-go'
" 由Git支持但不再github上的插件仓库 Plugin 'git clone 后面的地址'
Plugin 'L9'
Plugin 'terryma/vim-multiple-cursors' " 多光标输入
Plugin 'jiangmiao/auto-pairs' "自动补全括号对。输入`[`, 会自动输入']' "<c-h> 会被映射为 <DELETE>,如需用到,可以注释掉
"Plugin 'tpope/vim-commentary' "注释插件:gcc
Plugin 'scrooloose/nerdtree' "目录树
Plugin 'Valloric/YouCompleteMe'
"Plugin 'rdnetto/YCM-Generator' "YouCompleteMe 配置生成器
"Plugin 'vim-scripts/SQLComplete.vim'
"Plugin 'rstacruz/sparkup', {'rtp': 'vim/'} "html 快捷键
Plugin 'Valloric/MatchTagAlways' "html, xml显示匹配标签:<leader>%
Plugin 'docunext/closetag.vim' "html, xml闭合标签,<C-_> 不起作用
Plugin 'godlygeek/tabular' "文本对齐::Tab /= 、 :Tab /|
"Plugin 'tpope/vim-fugitive' "在vim中可以执行简单git命令
Plugin 'tpope/vim-surround' "方便修改增加括号对
Plugin 'tpope/vim-repeat'
Plugin 'tpope/vim-endwise' "在c中补全#if中的#endif等
Plugin 'ctrlpvim/ctrlp.vim' "搜索文件<C-f>
Plugin 'majutsushi/tagbar' "显示ctags
Plugin 'octol/vim-cpp-enhanced-highlight' "C++增强高亮
"Plugin 'vim-airline/vim-airline-themes' "美观界面,powerline
"Plugin 'ryanoasis/vim-devicons' "美化界面
"Plugin 'gorodinskiy/vim-coloresque' "颜色,如 blue #00f
"Plugin 'will133/vim-dirdiff' "可以比较目录
Plugin 'haya14busa/incsearch.vim' "同时高亮匹配所有的字符
Plugin 'mhinz/vim-startify' "终端运行直接运行vim时显示的菜单界面
Plugin 'mileszs/ack.vim' "ag命令
Plugin 'davidhalter/jedi-vim' "python
"Plugin 'Shougo/echodoc.vim' "显示命令参数
filetype plugin indent on " 必须 加载vim自带和插件相应的语法和文件类型相关脚本
call vundle#end() " 必须 插件END ==================================================
"filetype plugin on " 忽视插件改变缩进
映射
- 热键映射
"==============================================================================
" nerdtree
"==============================================================================
map <F2> :NERDTreeToggle<CR>
imap <F2> <ESC> :NERDTreeToggle<CR>
"autocmd vimenter * if !argc() | NERDTree | endif
"autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif
"ctrl+h 为左方向键
imap <C-h> <LEFT>
"ctrl+l 为右方向键
imap <C-l> <RIGHT>
"ctrl+k 为上方向键
imap <C-k> <UP>
"ctrl+j为下方向键
imap <C-j> <DOWN>
"ctrl+d为删除键
imap <C-d> <DELETE>
YouCompleteMe 插件
- YouCompleteMe 插件配置
"==============================================================================
" YouCompleteMe
"==============================================================================
let g:ycm_global_ycm_extra_conf = '~/.ycm_extra_conf.py' "全局配置文件
let g:ycm_confirm_extra_conf = 0 "加载配置文件时不需要手动确认
let g:ycm_error_symbol = '✗' "error 符号
let g:ycm_warning_symbol = '' "warning符号
let g:ycm_seed_identifiers_with_syntax = 1 "关键字补全
let g:ycm_complete_in_comments = 1 "在注释输入中可以补全
let g:ycm_complete_in_strings = 1 "在字符串输入中可以补全
let g:ycm_key_invoke_completion = '<C-n>' "更改手动触发补全按键,默认<C-space>
let g:ycm_collect_identifiers_from_tags_files = 1 "开启基于tag的补全
let g:ycm_key_list_select_completion = ['<Down>'] "取消'<Tab>'
" let g:ycm_auto_trigger = 0 "不会自动补全, 需要按下<C-n>
" let g:ycm_semantic_triggers = {}
" let g:ycm_semantic_triggers.c = ['->', '.', ' ', '(', '[', '&',']']
nnoremap <leader>u :YcmCompleter GoToDeclaration<CR> "跳到声明处
nnoremap <leader>o :YcmCompleter GoToDefinition<CR> "跳到定义处
nnoremap <leader>i :YcmCompleter GoToInclude<CR> "跳到头文件
"nmap <F5> :YcmDiags<CR> "自定义快捷键<F5>显示警告和错误的信息
"let g:ycm_add_preview_to_completeopt = 1 "关闭打开一个窗口显示预览
"let g:ycm_autoclose_preview_window_after_completion = 0 "即自动关闭预览窗口
"let g:ycm_autoclose_preview_window_after_insertion = 1 "自动关闭预览窗口在回到normal模式后
"let g:ycm_cache_omnifunc = 0 "每次重新生成匹配项,禁止缓存匹配项
" tagbar
let g:tagbar_ctags_bin = '/usr/bin/ctags'
let g:tagbar_width = 30
map <F3> :TagbarToggle<CR>
imap <F3> <ESC> :TagbarToggle<CR>
" cpp_class_scope_highlight
let g:cpp_class_scope_highlight = 1
let g:cpp_experimental_template_highlight = 1
let c_no_curly_error = 1
" colorscheme
"colorscheme default
" colorscheme monokai
"let g:solarized_termcolors=256
"set background=light "设置深色的背景色, 该命令需要在systax enable后调用
"colorscheme solarized "设置色彩方案为solarized
其它配置
- 其它配置
"==============================================================================
" Other
"==============================================================================
let g:airline#extensions#tabline#enabled = 1
if !exists('g:airline_symbols')
let g:airline_symbols = {}
endif
vim-配置教程+源码的更多相关文章
- MyEclipse如何配置Struts2源码的框架压缩包
1.MyEclipse如何配置Struts2源码的框架压缩包 如本机的Struts2框架压缩包路径为:D:\MyEclipseUserLibraries\struts\struts-2.3.15.3- ...
- 【陪你系列】5 千字长文+ 30 张图解 | 陪你手撕 STL 空间配置器源码
大家好,我是小贺. 点赞再看,养成习惯 文章每周持续更新,可以微信搜索「herongwei」第一时间阅读和催更,本文 GitHub https://github.com/rongweihe/MoreT ...
- Ubuntu14 搭载vim环境查看源码
首先是下载完整的vim74,然后编译安装.遗憾的是当编译时,没有开启图形界面. 在安装新版本的Vim之前,你需要卸载原来安装的老版本Vim,依次在终端下执行下列命令: sudo apt-get rem ...
- Vim+Taglist+Ctags(源码阅读).
终于搞定了,之前弄那么两天配置,都不成功. 需要软件: ctags taglist 1,ctags. 1)说明: 这个我就不演示了,我的RedHat5.5本身就有ctags. 2)验证ctags是否已 ...
- 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入
使用react全家桶制作博客后台管理系统 前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...
- CYQ.Data.Orm.DBFast 新增类介绍(含类的源码及新版本配置工具源码)
前言: 以下功能在国庆期就完成并提前发布了,但到今天才有时间写文介绍,主要是国庆后还是选择就职了,悲催的是上班的地方全公司都能上网,唯独开发部竟不让上网,是个局域网. 也不是全不能上,房间里有三台能上 ...
- 配置iDempiere源码开发环境
你需要一个较为快速通畅的互联网连接来下载源代码! 安装软件: OS: Windows Server 2008 R2 SP1 x64 英文版 Database: Oracle 11G R2 x64 英文 ...
- Log4Net 日志配置[附带源码]
前述 园子里有许多人对log4net这款开源的日志记录控件有很多介绍.在这里个人再做一次总结,希望对以后有所帮助,需要的时候可以直接使用,减少查阅资料的时间.利用log4net可以方便地将日志信息记录 ...
- Openfire开发配置,Openfire源码配置,OpenFire二次开发配置
1.下载源码:http://www.igniterealtime.org/downloads/source.jsp 2.把源码解压出的openfire_src目录放至eclipse workplace ...
随机推荐
- JAVA运行环境 和 Java Applet的运行环境 的区别
Java小程序,也就是Java Applet,可以在Web浏览器中运行.Java Applet必须以<applet>脚本的形式嵌入到HTML页面中,才能在web浏览器中运行. 之前总以为本 ...
- MySQL数据库入侵及防御方法
来自:http://blog.51cto.com/simeon/1981572 作者介绍 陈小兵,高级工程师,具有丰富的信息系统项目经验及18年以上网络安全经验,现主要从事网络安全及数据库技术研究工作 ...
- C++(VS2015)模板显式特化之template语法深入理解
首先说下遇到的情况: 这里在vc++6.0上建立了一个自定义模板类,再去覆盖这个类,分别使用部分覆盖,整体覆盖 但在vs2015上去整体覆盖类会报错. 错误如下: 错误原因:个人感觉是新版本的vs更接 ...
- ReverseFind的用法 ; 查找字符中最后一个字符
转载:https://blog.csdn.net/frivolousinstant/article/details/52796922 ReverseFind CString::ReverseFind ...
- 可能是东半球第二好用的软件工具全部在这里(update in 2020.10.09)
1. 产品经理工具种草 浏览器:Google Chrome 网络浏览器 原型绘制软件:墨刀- 在线产品原型设计与协作平台(https://modao.cc/).摹客mockplus - 摹客,让设计和 ...
- Oracle 存储过程解锁及表解锁和停止执行
查看进程: select * from v$process; 根据存储过程名称查找是否被锁: select * FROM dba_ddl_locks where name =upper('sp_1') ...
- TP5自定义路由,为了安全性
1,入口文件index.php,不要指定任意模块,不然,自定义路由,就不会有任何效果哦 2,在配置文件 route.php 中引进 use think\Router 自带路由文件 3,将路由进 ...
- EDI模拟实验
EDI模拟实验 [实验目的] ⑴.了解EDI报文的格式和特点. ⑵.掌握EDI报文生成和发送流程. [实验条件] ⑴.个人计算机一台,预装Windows XP操作系统和浏览器 ⑵.计算机通过局域网形式 ...
- oh my zsh 常用插件
date: "2020-10-18T12:36:00+08:00" title: "oh my zsh 常用插件" tags: ["zsh" ...
- 渗透测试之GoogleHack
GoogleHack 1,介绍: 使用google等搜索引擎对某些特定的网络主机漏洞(一般是服务器上的脚本漏洞)进行搜索,都能达到快速找到1漏洞的目的,然而,google相对百度讲,没有广告,搜索引擎 ...