Vim 编辑器可以说在程序员届中享有盛誉,其丰富强大的插件和灵活的移动也使得开发起来事半功倍;但是 Vim 复杂的配置和极大的学习成本也让很多人望而生畏。
今天就来整理一下如何配置一个 Vim 开发环境环境。
说明
- 本人目前主要从事 PHP 开发工作,如果针对其他语言,可能还需要额外的其他配置
Vim 基本知识
Vim 的不同模式
我们知道 Vim 大概分为普通模式、插入模式、输入模式和可视模式,下面简单介绍一下各个模式的基本知识和区别
- 普通模式
打开文件时的默认模式,无论在哪种模式下,按下Esc键就会进入普通模式。在这个模式下,可以移动光标,删除某个字符,删除某行,复制多行,粘贴多行。
下面是在普通模式下的基本快捷键
j 向上移动一行
k 向下移动一行
h 向左移动一格
k 向右移动一格
x 删除光标后的一个字符
dd 剪切光标所在的那一行,并复制
yy 复制光标所在的行
p 粘贴复制的内容
u 还原上一次的操作
ctr + r 回退上一次的还原操作
Vim 普通模式下的命令还有很多,想要熟练使用 Vim,掌握这些命令是必须的
- 插入模式
在正常模式下按下 i 键,也叫插入模式,插入模式里可以进行文字的输入,在该模式下按Esc键切换到普通模式。 - 输入模式
在正常模式下输入 ":" 或 "/" 进入命令行模式,在该模式下可以进行保存、搜索、替换、退出、显示行号等。
搜索
/word 光标之后查找字符串 word,按 n 向后搜索;
?word 光标之前查找字符串 word,按 n 向前搜索;
替换
:n1,n2/word1/word2/g
将 n1 到 n2 行之间的 word1 替换为 word2,不加g则只替换每行的第一个word1;
:1,$s/word1/word2/g
将文章中的 word1 替换为 word2,不加 g 则只替换每行的第一个word1;
其他
:w 保存文本 ;
:w! 强制保存;在root用户下,文件只读也能保存;
:q 退出vim ;
:q! 强制退出;
:wq 保存并退出;
:set nu 显示行号;
:set nonu 不显示行号;
- 可视模式
可视模式是选中一块区域进行操作,包括删除、替换、复制、粘贴、改变大小写等。
在正常模式下按 v(小写)进入字符文本,按 V(大写)进入行文本,按ctrl + v 进入块文本。然后使用上下左右键进行操作选中区域。
对选中的部分使用 d 进行删除,y 进行复制,p 进行粘贴,r 进行文本替换,gu 转换为小写,gU 转换为大写,g~ 大小写互换。
基本配置
Vim 配置文件一般是位于个人 home 下的 .vimrc (~/.vimrc)文件,我们的配置 Vim 也主要是针对这个文件进行修改
下面是 Vim 的一些基础配置
"设置字体
set guifont=Consolas:h12:cANSI
"设置搜索高亮 ,取消请使用set nohlsearch
set hlsearch
" 关闭 .swp 文件
set noswapfile
" 显示行号;取消显示可输入 set nonu
set number
" 突出显示当前行
set cursorline
"去掉讨厌的有关 vim 一致性模式,避免以前版本的一些 bug 和局限.
set nocompatible
"否则无法使用退格键
set backspace=indent,eol,start
"开启语法高亮
syntax on
"设置命令历史记录为10条.
set history=100
"设置替换 tab 键 [缩进]
set expandtab
"设置 tab 键为4个空格.
set tabstop=4
set softtabstop=4
"设置当行之间交错时使用4个空格
set shiftwidth=4
"设置匹配模式,类似当输入一个左括号时会匹配相应的那个右括号
set showmatch
"搜索选项.(比如,键入"/bo",光标自动找到第一个"bo"所在的位置.)
set noincsearch
"字符集
set fileencodings=ucs-bom,utf-8,chinese,cp936
"颜色方案
colorscheme desert
"colorscheme peachpuff
"colorscheme molokai
"colorscheme ron
"colorscheme default
"colorscheme delek
"依据上面的对起格式,智能的选择对起方式,对于类似C语言编.
"set smartindent
"自动缩进
"set autoindent
"C风格缩进
set cindent
"设置文件类型
set filetype=php
"set filetype=go
"set filetype=html
" 用空格键来开关代码折叠
set foldenable
" 手动折叠代码
" set foldmethod=manual
" 按缩进自动折叠代码
" set foldmethod=indent
" 按语法高亮折叠代码
" set foldmethod=syntax
" 按标记折叠代码
set foldmethod=marker
" 设置替换输入,比如通过一下配置,可以通过输入 w3c + 回车,输入后面 HTML 基本模板内容
ab w3c <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><ESC>o<html xmlns="http://www.w3.org/1999/xhtml"><CR><head><CR><title>1</title><CR><meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <CR><script src="http://cdn.bootcss.com/jquery/3.0.0-beta1/jquery.min.js" type="text/javascript"></script><CR><style><CR>body,ul,ol,li,p,h1 ,h2,h3,h4,h5,h6,form,fieldset,td,img,div{margin:0;padding:0;border:0;}<CR>/*,table notice:The table we often usered by develop so we exeges is,if you publish you software please move on top of style css*/<CR>body{margin-top:0px;}<CR>ul,ol{list-style-type:none;}<CR>select,input,i mg,select{vertical-align:middle;}<CR>.clearit{clear:both;}<CR></style><CR><meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /><CR> </head><CR><body><CR></body><CR></html><ESC>kO
关于折叠的用法
我们看到 Vim 里面有常用的几个折叠方法,我们来主要介绍一下默认的 manual 折叠方法和 marker 折叠方法
- manual 手动折叠,并且关闭 Vim 后所有的折叠都会消失
- marker 标记折叠,按照标记进行折叠,关闭 Vim 后折叠并不会消失(推荐使用)
标记折叠方法使用
- 跳转到你要折叠的起始位置
- 在普通模式下输入 zf
- 跳转到你要折叠的结束位置
- 从你要折叠的起始位置到结束位置已经折叠并且标记起来了,并且下次用 Vim 打开文件,折叠依然存在
折叠常用命令
以下折叠的命令均在普通模式下输入
- zR 打开所有折叠
- zM 关闭所有折叠
- zE 删除所有的折叠标签
快捷键配置
快捷键映射是 Vim 的强大功能,下面我们就来看一下 Vim 快捷键映射的相关配置
Vim 快捷键基本知识
- Vim 快捷键又叫键盘映射,一般会在用户字自定义快捷键前加一个前置输入,这样可以避免和 Vim 自身的快捷键相互冲突
- Vim 设置快捷键有 map、nmap、imap、vmap 等命令,这些都是什么意思呢?
nore 表示非递归。
n 表示在普通模式下生效。
v 表示在可视模式下生效。
i 表示在插入模式下生效。
各个命令生效的模式如下表所示
Command 命令 | Normal 常规模式 | Visual 可视化模式 | Insert Only 插入模式 | Command Line命令行模式 |
---|---|---|---|---|
map | yes | yes | ||
map! | yes | yes | ||
nmap | yes | |||
vmap | yes | |||
imap | yes | |||
cmap | yes |
快捷键配置
"设置用户快捷键的前置输入为 ,
let mapleader = ","
"定义 mm返回最新修改的位置
map mm '.zz
"退出插入模式
imap <leader>q <ESC>
"F9定义函数和类的注释 文件位置
"下载php-doc.vim 放到 ~/.vim/plugin/php-doc.vim"
inoremap <F9> <ESC>:call PhpDocSingle()<CR>
nnoremap <F9> :call PhpDocSingle()<CR>
vnoremap <F9> :call PhpDocRange()<CR>
"设置行号
map <leader>1 :set nu<ENTER>
"取消设置行号
map <leader>2 :set nonu<ENTER>
"插入HTML注释
map <leader>3 O<!--<ESC>yyp2xA><ESC>ddpk
"以/**/格式注释掉一行
map <leader>4 O/**<ESC>yyp2xA/<ESC>ddpk
"在上一行加分隔线
map <leader>8 O/*------------------------------------------------------------------------*/<ESC>j
"手动折叠
"按大括号包围折叠
nmap <silent> <leader>q f{v%zf
"按中括号包围折叠
nmap <silent> <leader>[ f[v%zf
"切换标签
"向右切换标签
map <leader>w <C-W><C-W>
"向左切换标签
map <leader>e <C-W>h
" 切换 tab
"跳转到上一个 tab
map <leader>a :tabp<CR>
"跳转到下一个 tab
map <leader>f :tabn<CR>
" 管理 buffer
"关闭当前 buffer
nmap <leader>k :bd<CR>
"跳转到上一个 buffer
map <leader>s :bp<CR>
"跳转到下一个 buffer
map <leader>d :bn<CR>
"跳转到行尾回车
nmap <C-\> $a<CR><ESC>
" 当前行向下移动一行
nmap <C-j> ddp
" 当前行向上移动一行
nmap <C-k> dd<Up>P
" 插入模式下的移动快捷键
" 插入模式下移动到行首
inoremap <C-U> <Home>
" 插入模式下移动到行尾
inoremap <C-O> <End>
"插入模式下上下左右移动
inoremap <C-b> <Left>
inoremap <C-l> <Right>
inoremap <C-j> <Down>
inoremap <C-k> <Up>
"插入模式和普通模式下的保存快捷键
nnoremap <C-D> :w<CR>
inoremap <C-D> <ESC>:w<CR>i
"插入模式下代码提示
inoremap <leader>i <C-X><C-l>
inoremap <leader>o <C-X><C-O>
" 利用临时文件来实现复制、粘贴
" ctrl+v 粘贴
" ctrl+c 复制
" ctrl+x 剪切
imap <C-V> <ESC>:r $HOME/.vim/.vimxfer<CR>i
nmap <C-V> :r $HOME/.vim/.vimxfer<CR>
vmap <C-V> c<ESC>:r $HOME/.vim/.vimxfer<CR>
"必须在可视模式下复制
vmap <C-C> :w! $HOME/.vim/.vimxfer<CR>
"实现ctrl+x 剪切 , 利用vim书签来做
vmap <C-X> ma:w! $HOME/.vim/.vimxfer<CR>V'ad
"因为我们要替换掉ctrl+c为复制, ctrl+v 为粘贴 , 所以重新定义块操作为 ,v
noremap <leader>v <C-V>
"重新定义ZZ , 同时清除复制缓存
map ZZ :!echo "" > $HOME/.vim/.vimxfer<CR>:wq<CR>
说明
- 实现利用
ctrl + c
、ctrl + v
来复制、粘贴功能需要在创建 .vimxfer 文件(touch ~/.vim/.vimxfer
)
插件管理和配置
插件为 Vim 提供了强大的功能,Vim 有许多插件是通过 Vundle 管理的,接下来我们来介绍使用 Vundle 来安装管理插件
安装 Vundle
可以通过如下命令安装 Vundle
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
Vundle 配置以及基本插件安装
set nocompatible " be iMproved, required
filetype on " required
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'gmarik/Vundle.vim'
Plugin 'fatih/vim-go'
Plugin 'godlygeek/tabular'
Plugin 'dgryski/vim-godef'
Plugin 'Blackrush/vim-gocode'
Plugin 'majutsushi/tagbar'
Plugin 'scrooloose/nerdtree'
Bundle 'jistr/vim-nerdtree-tabs'
Plugin 'Xuyuanp/nerdtree-git-plugin'
"React
"Plugin 'pangloss/vim-javascript'
"Plugin 'mxw/vim-jsx'
"Plugin 'jbgutierrez/vim-babel'
"Es6
"Plugin 'tomtom/tlib_vim'
"Plugin 'MarcWeber/vim-addon-mw-utils'
"Plugin 'garbas/vim-snipmate'
"Plugin 'isRuslan/vim-es6'
"Plugin 'cosminadrianpopescu/vim-tail'
"github
"Plugin 'git@github.com:relunctance/vimrc.git'
" 项目中字符或者函数名查找
Plugin 'relunctance/govim-find-func'
"Plugin 'bufexplore.zip'
Plugin 'cscope.vim'
"超级注释插件
Plugin 'tpope/vim-commentary'
call vundle#end()
filetype plugin indent on
"
" Brief help
" :PluginList - list configured plugins
" :PluginInstall(!) - install (update) plugins
" :PluginSearch(!) foo - search (or refresh cache first) for foo
" :PluginClean(!) - confirm (or auto-approve) removal of unused plugins
"
" see :h vundle for more details or wiki for FAQ
" Put your non-Plugin stuff after this line
做好这些配置之后,便可以在命令行模式下使用 PluginInstall 命令安装插件了
:PluginInstall(!)
下面介绍一些重要插件以及其相关的快捷键
注释插件 tpope/vim-commentary
tpope/vim-commentary 是一款为代码添加注释的插件,下面是其相关配置
"vim-commentary
"gcc 注释当前行(普通模式)或者取消注释当前行
"gc 可视模式下,注释当前选中的部分,或者取消当前选中部分的注释
"gcu 撤销上一次注释的部分,可以是一行也可以是多行
"gcgc 撤销注释当前行和邻近的上下两行
"为python和shell等添加注释
autocmd FileType python,shell,coffee set commentstring=#\ %s
"修改注释风格
autocmd FileType java,php,go,c,cpp set commentstring=//\ %s
目录树插件 NerdTree
目录树插件 NerdTree 可以在左侧栏列出当前文件所在的目录树并管理文件和目录,类似IDE,可大大提高开发效率,实现效果如下: 在这里插入图片描述NerdTree 插件可以通过 Vundle 安装,下面我们来看一下插件的基本配置和用法
"NERD Tree
let NERDChristmasTree=1
let NERDTreeAutoCenter=1
let NERDTreeBookmarksFile= $HOME . '/.vim/bookmark.txt' "书签保存位置,需要手动创建
let NERDTreeMouseMode=2
let NERDTreeShowBookmarks=1
let NERDTreeShowFiles=1
let NERDTreeShowHidden=1
let NERDTreeQuitOnOpen=1
let NERDTreeShowLineNumbers=1
let NERDTreeWinPos='left' "设置目录标签位置
let NERDTreeWinSize=40 "设置目录标签宽度
nmap <silent> <leader>t :NERDTreeToggle<CR> "关闭打开目录标签快捷键
NerdTree 常用命令
t : 在新 Tab 中打开选中文件/书签,并跳到新 Tab
T : 在新 Tab 中打开选中文件/书签,但不跳到新 Tab
i : split 一个新窗口打开选中文件,并跳到该窗口
gi : split 一个新窗口打开选中文件,但不跳到该窗口
s : vsplit 一个新窗口打开选中文件,并跳到该窗口
gs : vsplit 一个新 窗口打开选中文件,但不跳到该窗口
! : 执行当前文件
O : 递归打开选中 结点下的所有目录
x : 合拢选中结点的父目录
X : 递归 合拢选中结点下的所有目录
P : 跳到根结点
p : 跳到父结点
K : 跳到当前目录下同级的第一个结点
J : 跳到当前目录下同级的最后一个结点
k : 跳到当前目录下同级的前一个结点
j : 跳到当前目录下同级的后一个结点
u : 将当前根结点的父目录设为根目录,并变成合拢原根结点
U : 将当前根结点的父目录设为根目录,但保持展开原根结点
r : 递归刷新选中目录
R : 递归刷新根结点
m : 显示文件系统菜单,用于新建目录、文件
A : Zoom (maximize-minimize) the NERDTree window
? : 切换是否显示 Quick Help
以上命令需要在普通模式下,移动光标到 NerdTree 的窗口直接输入就可以
代码导航插件 Tagbar
Tagbar 是一款 Vim 下常用的代码函数、变量导航插件,效果如下图所示
在这里插入图片描述
使用这个插件需要安装 ctags 软件,并生成代码导航的 tags 文件
插件配置
在 vim 配置文件里面,我们需要对插件进行如下简单的配置
" Tag list (tagbar)
"
" 使用tagbar
" tagbar 关闭打开快捷键
nmap <silent> <leader>g :TagbarToggle<CR>
let g:tagbar_ctags_bin = '/usr/bin/ctags'
let g:tagbar_width = 60
插件常用命令
ctrl+n : Go to next top-level tag
ctrl+p : Go to previous top-level tag
x : Zoom window in/out
? : Toggle help
ctags 安装与使用
ctags(Generate tag files for source code)是 vim 下方便代码阅读的工具,它可以在命令行下帮助程序员很容易地浏览源代码。ctags 最先是用来生成 C 代码的 tags 文件,后来扩展成可以生成各类语言的 tags , 有些语言也有专有的 tags 生成工具(比如java的jtags, python的 ptags).
安装 ctags 软件
//centos 安装
yum install ctags
生成 tags 文件
在你的代码根目录下,运行如下代码
ctags --languages=PHP -R .
ctags 常用命令
ctrl+ ] 跳到光标所在函数或者结构体的定义处
ctrl+ o 返回之前的跳转
ctrl + i 回退 ctrl+ o 的跳转
GIT 文件状态插件 Xuyuanp/nerdtree-git-plugin
nerdtree-git-plugin 插件可以在 NerdTree 插件展示的文件树窗口上显示文件的 GIT 状态,只要经过以下配置就可以使用
let g:NERDTreeIndicatorMapCustom = {
\ "Modified" : "✹",
\ "Staged" : "✚",
\ "Untracked" : "✭",
\ "Renamed" : "➜",
\ "Unmerged" : "═",
\ "Deleted" : "✖",
\ "Dirty" : "✗",
\ "Clean" : "✔︎",
\ 'Ignored' : '☒',
\ "Unknown" : "?"
\ }
代码自动报错提示
普通 IDE 都有代码语法错误提示,那么 Vim 怎么实现这个功能呢,我们可以通过下面的配置实现
"定义检测 PHP 语法是否正确的函数
function! CompilePHP()
let file = shellescape(expand('%:p'))
let command = "silent !php72 -l " . file
execute command
if v:shell_error != 0
silent !clear
let command = "!php72 -l " . file
execute command
else
redraw!
endif
endfunction
"配置以 .php 文件结尾的文件保存的时候调用 CompilePHP 函数
autocmd BufWritePost *.php call CompilePHP()
"定义检测 shell 脚本的函数
function! CompileShell()
let file = shellescape(expand('%:p'))
let command = "silent !sh -n " . file
execute command
if v:shell_error != 0
silent !clear
let command = "!sh -n " . file
execute command
else
redraw!
endif
endfunction
"配置 .sh 结尾的文件保存的时候自动调用 CompileShell 函数
autocmd BufWritePost *.sh call CompileShell()
总结
下面将本文讲到的配置整理如下
"设置字体
set guifont=Consolas:h12:cANSI
"设置搜索高亮 ,取消请使用set nohlsearch
set hlsearch
" 关闭 .swp 文件
set noswapfile
" 显示行号;取消显示可输入 set nonu
set number
" 突出显示当前行
set cursorline
"去掉讨厌的有关 vim 一致性模式,避免以前版本的一些 bug 和局限.
set nocompatible
"否则无法使用退格键
set backspace=indent,eol,start
"开启语法高亮
syntax on
"设置命令历史记录为10条.
set history=100
"设置替换 tab 键 [缩进]
set expandtab
"设置 tab 键为4个空格.
set tabstop=4
set softtabstop=4
"设置当行之间交错时使用4个空格
set shiftwidth=4
"设置匹配模式,类似当输入一个左括号时会匹配相应的那个右括号
set showmatch
"搜索选项.(比如,键入"/bo",光标自动找到第一个"bo"所在的位置.)
set noincsearch
"字符集
set fileencodings=ucs-bom,utf-8,chinese,cp936
"颜色方案
colorscheme desert
"colorscheme peachpuff
"colorscheme molokai
"colorscheme ron
"colorscheme default
"colorscheme delek
"依据上面的对起格式,智能的选择对起方式,对于类似C语言编.
"set smartindent
"自动缩进
"set autoindent
"C风格缩进
set cindent
"设置文件类型
set filetype=php
"set filetype=go
"set filetype=html
" 用空格键来开关代码折叠
set foldenable
" 手动折叠代码
" set foldmethod=manual
" 按缩进自动折叠代码
" set foldmethod=indent
" 按语法高亮折叠代码
" set foldmethod=syntax
" 按标记折叠代码
set foldmethod=marker
" 设置替换输入,比如通过一下配置,可以通过输入 w3c + 回车,输入后面 HTML 基本模板内容
ab w3c <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><ESC>o<html xmlns="http://www.w3.org/1999/xhtml"><CR><head><CR><title>1</title><CR><meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <CR><script src="http://cdn.bootcss.com/jquery/3.0.0-beta1/jquery.min.js" type="text/javascript"></script><CR><style><CR>body,ul,ol,li,p,h1 ,h2,h3,h4,h5,h6,form,fieldset,td,img,div{margin:0;padding:0;border:0;}<CR>/*,table notice:The table we often usered by develop so we exeges is,if you publish you software please move on top of style css*/<CR>body{margin-top:0px;}<CR>ul,ol{list-style-type:none;}<CR>select,input,i mg,select{vertical-align:middle;}<CR>.clearit{clear:both;}<CR></style><CR><meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /><CR> </head><CR><body><CR></body><CR></html><ESC>kO
"快捷键配置
"设置用户快捷键的前置输入为 ,
let mapleader = ","
"定义 mm返回最新修改的位置
map mm '.zz
"退出插入模式
imap <leader>q <ESC>
"F9定义函数和类的注释 文件位置
"下载php-doc.vim 放到 ~/.vim/plugin/php-doc.vim"
inoremap <F9> <ESC>:call PhpDocSingle()<CR>
nnoremap <F9> :call PhpDocSingle()<CR>
vnoremap <F9> :call PhpDocRange()<CR>
"设置行号
map <leader>1 :set nu<ENTER>
"取消设置行号
map <leader>2 :set nonu<ENTER>
"插入HTML注释
map <leader>3 O<!--<ESC>yyp2xA><ESC>ddpk
"以/**/格式注释掉一行
map <leader>4 O/**<ESC>yyp2xA/<ESC>ddpk
"在上一行加分隔线
map <leader>8 O/*------------------------------------------------------------------------*/<ESC>j
"手动折叠
"按大括号包围折叠
nmap <silent> <leader>q f{v%zf
"按中括号包围折叠
nmap <silent> <leader>[ f[v%zf
"切换标签
"向右切换标签
map <leader>w <C-W><C-W>
"向左切换标签
map <leader>e <C-W>h
" 切换 tab
"跳转到上一个 tab
map <leader>a :tabp<CR>
"跳转到下一个 tab
map <leader>f :tabn<CR>
" 管理 buffer
"关闭当前 buffer
nmap <leader>k :bd<CR>
"跳转到上一个 buffer
map <leader>s :bp<CR>
"跳转到下一个 buffer
map <leader>d :bn<CR>
"跳转到行尾回车
nmap <C-\> $a<CR><ESC>
" 当前行向下移动一行
nmap <C-j> ddp
" 当前行向上移动一行
nmap <C-k> dd<Up>P
" 插入模式下的移动快捷键
" 插入模式下移动到行首
inoremap <C-U> <Home>
" 插入模式下移动到行尾
inoremap <C-O> <End>
"插入模式下上下左右移动
inoremap <C-b> <Left>
inoremap <C-l> <Right>
inoremap <C-j> <Down>
inoremap <C-k> <Up>
"插入模式和普通模式下的保存快捷键
nnoremap <C-D> :w<CR>
inoremap <C-D> <ESC>:w<CR>i
"插入模式下代码提示
inoremap <leader>i <C-X><C-l>
inoremap <leader>o <C-X><C-O>
" 利用临时文件来实现复制、粘贴
" ctrl+v 粘贴
" ctrl+c 复制
" ctrl+x 剪切
imap <C-V> <ESC>:r $HOME/.vim/.vimxfer<CR>i
nmap <C-V> :r $HOME/.vim/.vimxfer<CR>
vmap <C-V> c<ESC>:r $HOME/.vim/.vimxfer<CR>
"必须在可视模式下复制
vmap <C-C> :w! $HOME/.vim/.vimxfer<CR>
"实现ctrl+x 剪切 , 利用vim书签来做
vmap <C-X> ma:w! $HOME/.vim/.vimxfer<CR>V'ad
"因为我们要替换掉ctrl+c为复制, ctrl+v 为粘贴 , 所以重新定义块操作为 ,v
noremap <leader>v <C-V>
"重新定义ZZ , 同时清除复制缓存
map ZZ :!echo "" > $HOME/.vim/.vimxfer<CR>:wq<CR>
" 插件管理
set nocompatible " be iMproved, required
filetype on " required
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'gmarik/Vundle.vim'
Plugin 'fatih/vim-go'
Plugin 'godlygeek/tabular'
Plugin 'dgryski/vim-godef'
Plugin 'Blackrush/vim-gocode'
Plugin 'majutsushi/tagbar'
Plugin 'scrooloose/nerdtree'
Bundle 'jistr/vim-nerdtree-tabs'
Plugin 'Xuyuanp/nerdtree-git-plugin'
"React
"Plugin 'pangloss/vim-javascript'
"Plugin 'mxw/vim-jsx'
"Plugin 'jbgutierrez/vim-babel'
"Es6
"Plugin 'tomtom/tlib_vim'
"Plugin 'MarcWeber/vim-addon-mw-utils'
"Plugin 'garbas/vim-snipmate'
"Plugin 'isRuslan/vim-es6'
"Plugin 'cosminadrianpopescu/vim-tail'
"github
"Plugin 'git@github.com:relunctance/vimrc.git'
" 项目中字符或者函数名查找
Plugin 'relunctance/govim-find-func'
"Plugin 'bufexplore.zip'
Plugin 'cscope.vim'
"超级注释插件
Plugin 'tpope/vim-commentary'
call vundle#end()
filetype plugin indent on
"
" Brief help
" :PluginList - list configured plugins
" :PluginInstall(!) - install (update) plugins
" :PluginSearch(!) foo - search (or refresh cache first) for foo
" :PluginClean(!) - confirm (or auto-approve) removal of unused plugins
"
" see :h vundle for more details or wiki for FAQ
" Put your non-Plugin stuff after this line
"-------------------------------------vim-commentary----------------------------------
"gcc 注释当前行(普通模式)或者取消注释当前行
"gc 可视模式下,注释当前选中的部分,或者取消当前选中部分的注释
"gcu 撤销上一次注释的部分,可以是一行也可以是多行
"gcgc 撤销注释当前行和邻近的上下两行
"为python和shell等添加注释
autocmd FileType python,shell,coffee set commentstring=#\ %s
"修改注释风格
autocmd FileType java,php,go,c,cpp set commentstring=//\ %s
"------------------------------------------NERD Tree-----------------------------------
let NERDChristmasTree=1
let NERDTreeAutoCenter=1
let NERDTreeBookmarksFile= $HOME . '/.vim/bookmark.txt' "书签保存位置,需要手动创建
let NERDTreeMouseMode=2
let NERDTreeShowBookmarks=1
let NERDTreeShowFiles=1
let NERDTreeShowHidden=1
let NERDTreeQuitOnOpen=1
let NERDTreeShowLineNumbers=1
let NERDTreeWinPos='left' "设置目录标签位置
let NERDTreeWinSize=40 "设置目录标签宽度
nmap <silent> <leader>t :NERDTreeToggle<CR> "关闭打开目录标签快捷键
" ------------------------------——-----Tag list (tagbar)--------------------------------------
"
" 使用tagbar
" tagbar 关闭打开快捷键
nmap <silent> <leader>g :TagbarToggle<CR>
let g:tagbar_ctags_bin = '/usr/bin/ctags'
let g:tagbar_width = 60
"-----------------------------------nerdtree-git-plugin-----------------------------------------
let g:NERDTreeIndicatorMapCustom = {
\ "Modified" : "✹",
\ "Staged" : "✚",
\ "Untracked" : "✭",
\ "Renamed" : "➜",
\ "Unmerged" : "═",
\ "Deleted" : "✖",
\ "Dirty" : "✗",
\ "Clean" : "✔︎",
\ 'Ignored' : '☒',
\ "Unknown" : "?"
\ }
" 代码报错提示
"定义检测 PHP 语法是否正确的函数
function! CompilePHP()
let file = shellescape(expand('%:p'))
let command = "silent !php72 -l " . file
execute command
if v:shell_error != 0
silent !clear
let command = "!php72 -l " . file
execute command
else
redraw!
endif
endfunction
"配置以 .php 文件结尾的文件保存的时候调用 CompilePHP 函数
autocmd BufWritePost *.php call CompilePHP()
"定义检测 shell 脚本的函数
function! CompileShell()
let file = shellescape(expand('%:p'))
let command = "silent !sh -n " . file
execute command
if v:shell_error != 0
silent !clear
let command = "!sh -n " . file
execute command
else
redraw!
endif
endfunction
"配置 .sh 结尾的文件保存的时候自动调用 CompileShell 函数
autocmd BufWritePost *.sh call CompileShell()
网友评论