Vim 使用配置指南

Vim 編輯器可以說在程序員屆中享有盛譽(yù)招驴,其豐富強(qiáng)大的插件和靈活的移動也使得開發(fā)起來事半功倍掸刊;但是 Vim 復(fù)雜的配置和極大的學(xué)習(xí)成本也讓很多人望而生畏抠璃。
今天就來整理一下如何配置一個(gè) Vim 開發(fā)環(huán)境環(huán)境挤渐。

說明

  1. 本人目前主要從事 PHP 開發(fā)工作茶凳,如果針對其他語言舶替,可能還需要額外的其他配置

Vim 基本知識

Vim 的不同模式

我們知道 Vim 大概分為普通模式令境、插入模式、輸入模式和可視模式顾瞪,下面簡單介紹一下各個(gè)模式的基本知識和區(qū)別

  1. 普通模式
    打開文件時(shí)的默認(rèn)模式舔庶,無論在哪種模式下,按下Esc鍵就會進(jìn)入普通模式陈醒。在這個(gè)模式下惕橙,可以移動光標(biāo),刪除某個(gè)字符钉跷,刪除某行弥鹦,復(fù)制多行,粘貼多行。

下面是在普通模式下的基本快捷鍵

j 向上移動一行
k 向下移動一行
h 向左移動一格
k 向右移動一格
x 刪除光標(biāo)后的一個(gè)字符
dd 剪切光標(biāo)所在的那一行彬坏,并復(fù)制
yy 復(fù)制光標(biāo)所在的行
p 粘貼復(fù)制的內(nèi)容
u 還原上一次的操作
ctr + r 回退上一次的還原操作

Vim 普通模式下的命令還有很多朦促,想要熟練使用 Vim,掌握這些命令是必須的

  1. 插入模式
    在正常模式下按下 i 鍵栓始,也叫插入模式务冕,插入模式里可以進(jìn)行文字的輸入,在該模式下按Esc鍵切換到普通模式幻赚。
  2. 輸入模式
    在正常模式下輸入 ":" 或 "/" 進(jìn)入命令行模式禀忆,在該模式下可以進(jìn)行保存、搜索落恼、替換箩退、退出、顯示行號等佳谦。

搜索

/word 光標(biāo)之后查找字符串 word戴涝,按 n 向后搜索;
?word 光標(biāo)之前查找字符串 word吠昭,按 n 向前搜索喊括;

替換

:n1,n2/word1/word2/g
將 n1 到 n2 行之間的 word1 替換為 word2,不加g則只替換每行的第一個(gè)word1矢棚;
:1,$s/word1/word2/g
將文章中的 word1 替換為 word2,不加 g 則只替換每行的第一個(gè)word1府喳;

其他

:w 保存文本 蒲肋;
:w! 強(qiáng)制保存;在root用戶下钝满,文件只讀也能保存兜粘;
:q 退出vim ;
:q! 強(qiáng)制退出弯蚜;
:wq 保存并退出孔轴;
:set nu 顯示行號;
:set nonu 不顯示行號碎捺;

  1. 可視模式

可視模式是選中一塊區(qū)域進(jìn)行操作路鹰,包括刪除、替換收厨、復(fù)制晋柱、粘貼、改變大小寫等诵叁。
在正常模式下按 v(小寫)進(jìn)入字符文本雁竞,按 V(大寫)進(jìn)入行文本,按ctrl + v 進(jìn)入塊文本拧额。然后使用上下左右鍵進(jìn)行操作選中區(qū)域碑诉。
對選中的部分使用 d 進(jìn)行刪除彪腔,y 進(jìn)行復(fù)制,p 進(jìn)行粘貼进栽,r 進(jìn)行文本替換漫仆,gu 轉(zhuǎn)換為小寫,gU 轉(zhuǎn)換為大寫泪幌,g~ 大小寫互換盲厌。

基本配置

Vim 配置文件一般是位于個(gè)人 home 下的 .vimrc (~/.vimrc)文件,我們的配置 Vim 也主要是針對這個(gè)文件進(jìn)行修改
下面是 Vim 的一些基礎(chǔ)配置

"設(shè)置字體
set guifont=Consolas:h12:cANSI

"設(shè)置搜索高亮 祸泪,取消請使用set nohlsearch
set hlsearch

" 關(guān)閉 .swp 文件
set noswapfile

" 顯示行號吗浩;取消顯示可輸入 set nonu
set number 

" 突出顯示當(dāng)前行
set cursorline

"去掉討厭的有關(guān) vim 一致性模式,避免以前版本的一些 bug 和局限.
set nocompatible

"否則無法使用退格鍵
set backspace=indent,eol,start

"開啟語法高亮
syntax on

"設(shè)置命令歷史記錄為10條.
set history=100

"設(shè)置替換 tab 鍵 [縮進(jìn)]
set expandtab

"設(shè)置 tab 鍵為4個(gè)空格.
set tabstop=4
set softtabstop=4

"設(shè)置當(dāng)行之間交錯時(shí)使用4個(gè)空格
set shiftwidth=4

"設(shè)置匹配模式,類似當(dāng)輸入一個(gè)左括號時(shí)會匹配相應(yīng)的那個(gè)右括號
set showmatch

"搜索選項(xiàng).(比如,鍵入"/bo",光標(biāo)自動找到第一個(gè)"bo"所在的位置.)
set noincsearch

"字符集
set fileencodings=ucs-bom,utf-8,chinese,cp936

"顏色方案
colorscheme   desert
"colorscheme  peachpuff
"colorscheme  molokai
"colorscheme  ron
"colorscheme  default
"colorscheme  delek

"依據(jù)上面的對起格式没隘,智能的選擇對起方式懂扼,對于類似C語言編.
"set smartindent
"自動縮進(jìn)
"set autoindent
"C風(fēng)格縮進(jìn)
set cindent

"設(shè)置文件類型
set filetype=php
"set filetype=go
"set filetype=html

" 用空格鍵來開關(guān)代碼折疊
set foldenable
" 手動折疊代碼
" set foldmethod=manual
" 按縮進(jìn)自動折疊代碼
" set foldmethod=indent
" 按語法高亮折疊代碼
" set foldmethod=syntax
" 按標(biāo)記折疊代碼
set foldmethod=marker

" 設(shè)置替換輸入望浩,比如通過一下配置塌衰,可以通過輸入 w3c + 回車,輸入后面 HTML 基本模板內(nèi)容
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

關(guān)于折疊的用法

我們看到 Vim 里面有常用的幾個(gè)折疊方法领猾,我們來主要介紹一下默認(rèn)的 manual 折疊方法和 marker 折疊方法

  • manual 手動折疊瑰妄,并且關(guān)閉 Vim 后所有的折疊都會消失
  • marker 標(biāo)記折疊陷嘴,按照標(biāo)記進(jìn)行折疊,關(guān)閉 Vim 后折疊并不會消失(推薦使用)

標(biāo)記折疊方法使用

  1. 跳轉(zhuǎn)到你要折疊的起始位置
  2. 在普通模式下輸入 zf
  3. 跳轉(zhuǎn)到你要折疊的結(jié)束位置
  4. 從你要折疊的起始位置到結(jié)束位置已經(jīng)折疊并且標(biāo)記起來了间坐,并且下次用 Vim 打開文件灾挨,折疊依然存在

折疊常用命令
以下折疊的命令均在普通模式下輸入

  1. zR 打開所有折疊
  2. zM 關(guān)閉所有折疊
  3. zE 刪除所有的折疊標(biāo)簽

快捷鍵配置

快捷鍵映射是 Vim 的強(qiáng)大功能,下面我們就來看一下 Vim 快捷鍵映射的相關(guān)配置

Vim 快捷鍵基本知識

  1. Vim 快捷鍵又叫鍵盤映射竹宋,一般會在用戶字自定義快捷鍵前加一個(gè)前置輸入劳澄,這樣可以避免和 Vim 自身的快捷鍵相互沖突
  2. Vim 設(shè)置快捷鍵有 map、nmap蜈七、imap秒拔、vmap 等命令,這些都是什么意思呢飒硅?

nore 表示非遞歸砂缩。
n 表示在普通模式下生效。
v 表示在可視模式下生效狡相。
i 表示在插入模式下生效梯轻。

各個(gè)命令生效的模式如下表所示

Command 命令 Normal 常規(guī)模式 Visual 可視化模式 Insert Only 插入模式 Command Line命令行模式
map yes yes
map! yes yes
nmap yes
vmap yes
imap yes
cmap yes

快捷鍵配置

"設(shè)置用戶快捷鍵的前置輸入為 ,
let mapleader = ","

"定義 mm返回最新修改的位置
map mm '.zz

"退出插入模式
imap <leader>q <ESC>

"F9定義函數(shù)和類的注釋 文件位置
"下載php-doc.vim  放到  ~/.vim/plugin/php-doc.vim"
inoremap <F9> <ESC>:call PhpDocSingle()<CR>
nnoremap <F9> :call PhpDocSingle()<CR>
vnoremap <F9> :call PhpDocRange()<CR>

"設(shè)置行號
map <leader>1 :set nu<ENTER>

"取消設(shè)置行號
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

"切換標(biāo)簽
"向右切換標(biāo)簽
map <leader>w <C-W><C-W>
"向左切換標(biāo)簽
map <leader>e <C-W>h

" 切換 tab
"跳轉(zhuǎn)到上一個(gè) tab
map <leader>a :tabp<CR>
"跳轉(zhuǎn)到下一個(gè) tab
map <leader>f :tabn<CR>

" 管理 buffer
"關(guān)閉當(dāng)前 buffer
nmap <leader>k :bd<CR>
"跳轉(zhuǎn)到上一個(gè) buffer
map <leader>s :bp<CR>
"跳轉(zhuǎn)到下一個(gè) buffer
map <leader>d :bn<CR>

"跳轉(zhuǎn)到行尾回車
nmap <C-\> $a<CR><ESC>
" 當(dāng)前行向下移動一行
nmap <C-j> ddp
" 當(dāng)前行向上移動一行
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>

" 利用臨時(shí)文件來實(shí)現(xiàn)復(fù)制、粘貼  
" ctrl+v 粘貼
" ctrl+c 復(fù)制
" 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>

"必須在可視模式下復(fù)制
vmap <C-C> :w! $HOME/.vim/.vimxfer<CR>
"實(shí)現(xiàn)ctrl+x 剪切 , 利用vim書簽來做
vmap <C-X> ma:w! $HOME/.vim/.vimxfer<CR>V'ad

"因?yàn)槲覀円鎿Q掉ctrl+c為復(fù)制, ctrl+v 為粘貼 , 所以重新定義塊操作為 ,v
noremap <leader>v <C-V>

"重新定義ZZ , 同時(shí)清除復(fù)制緩存
map ZZ :!echo "" > $HOME/.vim/.vimxfer<CR>:wq<CR>

說明

  1. 實(shí)現(xiàn)利用 ctrl + c 尽棕、ctrl + v 來復(fù)制喳挑、粘貼功能需要在創(chuàng)建 .vimxfer 文件(touch ~/.vim/.vimxfer

插件管理和配置

插件為 Vim 提供了強(qiáng)大的功能,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'
" 項(xiàng)目中字符或者函數(shù)名查找
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(!) 

下面介紹一些重要插件以及其相關(guān)的快捷鍵

注釋插件 tpope/vim-commentary

tpope/vim-commentary 是一款為代碼添加注釋的插件单绑,下面是其相關(guān)配置

"vim-commentary
"gcc     注釋當(dāng)前行(普通模式)或者取消注釋當(dāng)前行
"gc      可視模式下,注釋當(dāng)前選中的部分曹宴,或者取消當(dāng)前選中部分的注釋
"gcu     撤銷上一次注釋的部分搂橙,可以是一行也可以是多行
"gcgc    撤銷注釋當(dāng)前行和鄰近的上下兩行
"為python和shell等添加注釋
autocmd FileType python,shell,coffee set commentstring=#\ %s
"修改注釋風(fēng)格
autocmd FileType java,php,go,c,cpp set commentstring=//\ %s

目錄樹插件 NerdTree

目錄樹插件 NerdTree 可以在左側(cè)欄列出當(dāng)前文件所在的目錄樹并管理文件和目錄,類似IDE笛坦,可大大提高開發(fā)效率区转,實(shí)現(xiàn)效果如下:
在這里插入圖片描述

NerdTree 插件可以通過 Vundle 安裝,下面我們來看一下插件的基本配置和用法

"NERD Tree
let NERDChristmasTree=1
let NERDTreeAutoCenter=1
let NERDTreeBookmarksFile= $HOME . '/.vim/bookmark.txt'     "書簽保存位置版扩,需要手動創(chuàng)建
let NERDTreeMouseMode=2
let NERDTreeShowBookmarks=1
let NERDTreeShowFiles=1
let NERDTreeShowHidden=1
let NERDTreeQuitOnOpen=1
let NERDTreeShowLineNumbers=1
let NERDTreeWinPos='left'                   "設(shè)置目錄標(biāo)簽位置
let NERDTreeWinSize=40                    "設(shè)置目錄標(biāo)簽寬度
nmap <silent> <leader>t :NERDTreeToggle<CR>    "關(guān)閉打開目錄標(biāo)簽快捷鍵

NerdTree 常用命令

t : 在新 Tab 中打開選中文件/書簽废离,并跳到新 Tab
T : 在新 Tab 中打開選中文件/書簽,但不跳到新 Tab
i : split 一個(gè)新窗口打開選中文件礁芦,并跳到該窗口
gi : split 一個(gè)新窗口打開選中文件蜻韭,但不跳到該窗口
s : vsplit 一個(gè)新窗口打開選中文件,并跳到該窗口
gs : vsplit 一個(gè)新 窗口打開選中文件柿扣,但不跳到該窗口
! : 執(zhí)行當(dāng)前文件
O : 遞歸打開選中 結(jié)點(diǎn)下的所有目錄
x : 合攏選中結(jié)點(diǎn)的父目錄
X : 遞歸 合攏選中結(jié)點(diǎn)下的所有目錄
P : 跳到根結(jié)點(diǎn)
p : 跳到父結(jié)點(diǎn)
K : 跳到當(dāng)前目錄下同級的第一個(gè)結(jié)點(diǎn)
J : 跳到當(dāng)前目錄下同級的最后一個(gè)結(jié)點(diǎn)
k : 跳到當(dāng)前目錄下同級的前一個(gè)結(jié)點(diǎn)
j : 跳到當(dāng)前目錄下同級的后一個(gè)結(jié)點(diǎn)
u : 將當(dāng)前根結(jié)點(diǎn)的父目錄設(shè)為根目錄肖方,并變成合攏原根結(jié)點(diǎn)
U : 將當(dāng)前根結(jié)點(diǎn)的父目錄設(shè)為根目錄,但保持展開原根結(jié)點(diǎn)
r : 遞歸刷新選中目錄
R : 遞歸刷新根結(jié)點(diǎn)
m : 顯示文件系統(tǒng)菜單未状,用于新建目錄俯画、文件
A : Zoom (maximize-minimize) the NERDTree window
? : 切換是否顯示 Quick Help

以上命令需要在普通模式下,移動光標(biāo)到 NerdTree 的窗口直接輸入就可以

代碼導(dǎo)航插件 Tagbar

Tagbar 是一款 Vim 下常用的代碼函數(shù)娩践、變量導(dǎo)航插件活翩,效果如下圖所示


在這里插入圖片描述

使用這個(gè)插件需要安裝 ctags 軟件,并生成代碼導(dǎo)航的 tags 文件

插件配置
在 vim 配置文件里面翻伺,我們需要對插件進(jìn)行如下簡單的配置

" Tag list (tagbar)
"
" 使用tagbar
" tagbar 關(guān)閉打開快捷鍵
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 文件吨岭,后來擴(kuò)展成可以生成各類語言的 tags , 有些語言也有專有的 tags 生成工具(比如java的jtags, python的 ptags).

安裝 ctags 軟件

//centos 安裝
yum install ctags

生成 tags 文件
在你的代碼根目錄下,運(yùn)行如下代碼

ctags --languages=PHP -R .

ctags 常用命令

ctrl+ ] 跳到光標(biāo)所在函數(shù)或者結(jié)構(gòu)體的定義處
ctrl+ o 返回之前的跳轉(zhuǎn)
ctrl + i 回退 ctrl+ o 的跳轉(zhuǎn)

GIT 文件狀態(tài)插件 Xuyuanp/nerdtree-git-plugin

nerdtree-git-plugin 插件可以在 NerdTree 插件展示的文件樹窗口上顯示文件的 GIT 狀態(tài)峦树,只要經(jīng)過以下配置就可以使用

let g:NERDTreeIndicatorMapCustom = {
    \ "Modified"  : "?",
    \ "Staged"    : "?",
    \ "Untracked" : "?",
    \ "Renamed"   : "?",
    \ "Unmerged"  : "═",
    \ "Deleted"   : "?",
    \ "Dirty"     : "?",
    \ "Clean"     : "??",
    \ 'Ignored'   : '?',
    \ "Unknown"   : "?"
    \ }

代碼自動報(bào)錯提示

普通 IDE 都有代碼語法錯誤提示辣辫,那么 Vim 怎么實(shí)現(xiàn)這個(gè)功能呢,我們可以通過下面的配置實(shí)現(xiàn)

"定義檢測 PHP 語法是否正確的函數(shù)
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 文件結(jié)尾的文件保存的時(shí)候調(diào)用 CompilePHP 函數(shù)
autocmd BufWritePost *.php call CompilePHP()

"定義檢測 shell 腳本的函數(shù)
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 結(jié)尾的文件保存的時(shí)候自動調(diào)用 CompileShell 函數(shù)
autocmd BufWritePost *.sh call CompileShell()

總結(jié)

下面將本文講到的配置整理如下

"設(shè)置字體
set guifont=Consolas:h12:cANSI

"設(shè)置搜索高亮 魁巩,取消請使用set nohlsearch
set hlsearch

" 關(guān)閉 .swp 文件
set noswapfile

" 顯示行號急灭;取消顯示可輸入 set nonu
set number 

" 突出顯示當(dāng)前行
set cursorline

"去掉討厭的有關(guān) vim 一致性模式,避免以前版本的一些 bug 和局限.
set nocompatible

"否則無法使用退格鍵
set backspace=indent,eol,start

"開啟語法高亮
syntax on

"設(shè)置命令歷史記錄為10條.
set history=100

"設(shè)置替換 tab 鍵 [縮進(jìn)]
set expandtab

"設(shè)置 tab 鍵為4個(gè)空格.
set tabstop=4
set softtabstop=4

"設(shè)置當(dāng)行之間交錯時(shí)使用4個(gè)空格
set shiftwidth=4

"設(shè)置匹配模式,類似當(dāng)輸入一個(gè)左括號時(shí)會匹配相應(yīng)的那個(gè)右括號
set showmatch

"搜索選項(xiàng).(比如,鍵入"/bo",光標(biāo)自動找到第一個(gè)"bo"所在的位置.)
set noincsearch

"字符集
set fileencodings=ucs-bom,utf-8,chinese,cp936

"顏色方案
colorscheme   desert
"colorscheme  peachpuff
"colorscheme  molokai
"colorscheme  ron
"colorscheme  default
"colorscheme  delek

"依據(jù)上面的對起格式谷遂,智能的選擇對起方式葬馋,對于類似C語言編.
"set smartindent
"自動縮進(jìn)
"set autoindent
"C風(fēng)格縮進(jìn)
set cindent

"設(shè)置文件類型
set filetype=php
"set filetype=go
"set filetype=html

" 用空格鍵來開關(guān)代碼折疊
set foldenable
" 手動折疊代碼
" set foldmethod=manual
" 按縮進(jìn)自動折疊代碼
" set foldmethod=indent
" 按語法高亮折疊代碼
" set foldmethod=syntax
" 按標(biāo)記折疊代碼
set foldmethod=marker

" 設(shè)置替換輸入,比如通過一下配置,可以通過輸入 w3c + 回車畴嘶,輸入后面 HTML 基本模板內(nèi)容
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

"快捷鍵配置
"設(shè)置用戶快捷鍵的前置輸入為 ,
let mapleader = ","

"定義 mm返回最新修改的位置
map mm '.zz

"退出插入模式
imap <leader>q <ESC>

"F9定義函數(shù)和類的注釋 文件位置
"下載php-doc.vim  放到  ~/.vim/plugin/php-doc.vim"
inoremap <F9> <ESC>:call PhpDocSingle()<CR>
nnoremap <F9> :call PhpDocSingle()<CR>
vnoremap <F9> :call PhpDocRange()<CR>

"設(shè)置行號
map <leader>1 :set nu<ENTER>

"取消設(shè)置行號
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

"切換標(biāo)簽
"向右切換標(biāo)簽
map <leader>w <C-W><C-W>
"向左切換標(biāo)簽
map <leader>e <C-W>h

" 切換 tab
"跳轉(zhuǎn)到上一個(gè) tab
map <leader>a :tabp<CR>
"跳轉(zhuǎn)到下一個(gè) tab
map <leader>f :tabn<CR>

" 管理 buffer
"關(guān)閉當(dāng)前 buffer
nmap <leader>k :bd<CR>
"跳轉(zhuǎn)到上一個(gè) buffer
map <leader>s :bp<CR>
"跳轉(zhuǎn)到下一個(gè) buffer
map <leader>d :bn<CR>

"跳轉(zhuǎn)到行尾回車
nmap <C-\> $a<CR><ESC>
" 當(dāng)前行向下移動一行
nmap <C-j> ddp
" 當(dāng)前行向上移動一行
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>

" 利用臨時(shí)文件來實(shí)現(xiàn)復(fù)制蛋逾、粘貼  
" ctrl+v 粘貼
" ctrl+c 復(fù)制
" 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>

"必須在可視模式下復(fù)制
vmap <C-C> :w! $HOME/.vim/.vimxfer<CR>
"實(shí)現(xiàn)ctrl+x 剪切 , 利用vim書簽來做
vmap <C-X> ma:w! $HOME/.vim/.vimxfer<CR>V'ad

"因?yàn)槲覀円鎿Q掉ctrl+c為復(fù)制, ctrl+v 為粘貼 , 所以重新定義塊操作為 ,v
noremap <leader>v <C-V>

"重新定義ZZ , 同時(shí)清除復(fù)制緩存
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'
" 項(xiàng)目中字符或者函數(shù)名查找
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     注釋當(dāng)前行(普通模式)或者取消注釋當(dāng)前行
"gc      可視模式下,注釋當(dāng)前選中的部分窗悯,或者取消當(dāng)前選中部分的注釋
"gcu     撤銷上一次注釋的部分区匣,可以是一行也可以是多行
"gcgc    撤銷注釋當(dāng)前行和鄰近的上下兩行
"為python和shell等添加注釋
autocmd FileType python,shell,coffee set commentstring=#\ %s
"修改注釋風(fēng)格
autocmd FileType java,php,go,c,cpp set commentstring=//\ %s

"------------------------------------------NERD Tree-----------------------------------
let NERDChristmasTree=1
let NERDTreeAutoCenter=1
let NERDTreeBookmarksFile= $HOME . '/.vim/bookmark.txt'     "書簽保存位置,需要手動創(chuàng)建
let NERDTreeMouseMode=2
let NERDTreeShowBookmarks=1
let NERDTreeShowFiles=1
let NERDTreeShowHidden=1
let NERDTreeQuitOnOpen=1
let NERDTreeShowLineNumbers=1
let NERDTreeWinPos='left'                   "設(shè)置目錄標(biāo)簽位置
let NERDTreeWinSize=40                    "設(shè)置目錄標(biāo)簽寬度
nmap <silent> <leader>t :NERDTreeToggle<CR>    "關(guān)閉打開目錄標(biāo)簽快捷鍵

" ------------------------------——-----Tag list (tagbar)--------------------------------------
"
" 使用tagbar
" tagbar 關(guān)閉打開快捷鍵
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"   : "?"
    \ }

" 代碼報(bào)錯提示
"定義檢測 PHP 語法是否正確的函數(shù)
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 文件結(jié)尾的文件保存的時(shí)候調(diào)用 CompilePHP 函數(shù)
autocmd BufWritePost *.php call CompilePHP()

"定義檢測 shell 腳本的函數(shù)
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 結(jié)尾的文件保存的時(shí)候自動調(diào)用 CompileShell 函數(shù)
autocmd BufWritePost *.sh call CompileShell()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蒋院,一起剝皮案震驚了整個(gè)濱河市亏钩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌欺旧,老刑警劉巖姑丑,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異切端,居然都是意外死亡彻坛,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門踏枣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來昌屉,“玉大人,你說我怎么就攤上這事茵瀑〖渫裕” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵马昨,是天一觀的道長竞帽。 經(jīng)常有香客問我,道長鸿捧,這世上最難降的妖魔是什么屹篓? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮匙奴,結(jié)果婚禮上堆巧,老公的妹妹穿的比我還像新娘。我一直安慰自己泼菌,他們只是感情好谍肤,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著哗伯,像睡著了一般荒揣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上焊刹,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天系任,我揣著相機(jī)與錄音恳蹲,去河邊找鬼。 笑死赋除,一個(gè)胖子當(dāng)著我的面吹牛阱缓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播举农,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼荆针,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了颁糟?” 一聲冷哼從身側(cè)響起航背,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎棱貌,沒想到半個(gè)月后玖媚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡婚脱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年今魔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片障贸。...
    茶點(diǎn)故事閱讀 40,664評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡错森,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出篮洁,到底是詐尸還是另有隱情涩维,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布袁波,位于F島的核電站瓦阐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏篷牌。R本人自食惡果不足惜睡蟋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望枷颊。 院中可真熱鬧薄湿,春花似錦、人聲如沸偷卧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽听诸。三九已至,卻和暖如春蚕泽,著一層夾襖步出監(jiān)牢的瞬間晌梨,已是汗流浹背桥嗤。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留仔蝌,地道東北人泛领。 一個(gè)月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像敛惊,于是被迫代替她去往敵國和親渊鞋。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評論 2 359