2012-11-27
最近整理了VIM的配置,换上插件管理的神器-----Vundle,由他引发的VIM生态环境的改善,堪称完美。遂打算写一份简单的教程,分享Git时代VIM新世界的美丽动人之处。对VIM有基础的同学,可直接跳至插件管理部分。
第一次使用VIM,会觉得无所适从,他并不像记事本,你敲什么键就显示什么,理解VIM的需要明白他的两种模式: - 命令模式 (Command Mode) - 编辑模式 (Insert Mode)
命令模式下,可以做移动、编辑操作;编辑模式则用来输入。键入i
,o
,s
,a
等即可进入编辑模式,后面解释原因。
模式的设计是VIM和其他编辑器最不同的地方,优势和劣势也全基于此而生。
以下介绍的键盘操作,都是大小写敏感的,并且要在命令模式下完成,需注意:
h
向左移动一个字j
向下移动一行k
向上l
向右这四个键在右手最容易碰到几个位置,最为常用。
w
下一個word w(ord)W
下一個word(跳过标点)b
前一個word b(ackward)B
前一个word(跳过标点)e
跳到当前word的尾端 e(nd)0
跳到当前行的开头^
跳到当前行第一个非空字符$
跳到行尾 助记:0(第0个字符),^
和$
含义同正则表达式
{
上一段(以空白行分隔)}
下一段(以空白行分隔)%
跳到当前对应的括号上(适用各种配对符号)/xxxx
搜索xxxx,然后可以用n
下一个,N
上一个移动#
向前搜索光标当前所在的字*
向后搜索光标当前所在的字fx
在当前行移动到光标之后第一个字符x的位置 f(ind)xgd
跳到光标所在位置词(word)的定义位置 g(o)d(efine)gg
到文档顶部G
到文档底部:x
跳到第x行(x是行号)ctrl+d
向下翻页 d(down)ctrl+u
向上翻页 u(p)i
在光标当前位置向前插入 i(nsert)I
在本行第一个字符前插入a
在光标当前位置向后插入 a(fter)A
在本行末尾插入o
向下插入一行O
向上插入一行:w
保存:q
退出:wq
保存并退出x
删除当前字符dd
删除当前行 d(elete)dw
删除当前光标下的词 d(elete)w(ord)yy
复制当前行 y(ank)yw
复制当前光标下的词 y(ank)w(ord)p
粘贴 p(aste)P
粘贴在当前位置之前限于篇幅,在这里我仅介绍下我非常常用的几个操作。
因为VIM所有的操作都是原子化的,所以把这些操作程序化就非常简单了:
5w
相当于按五次w
键;6j
下移6行,相当于按六次j;3J
大写J,本来是将下一行与当前行合并,加上数量,就是重复操作3次;6dw
和d6w
结果是一样,就是删除6个word;di"
光标在""之间,则删除""之间的内容yi(
光标在()之间,则复制()之间的内容vi[
光标在[]之间,则选中[]之间的内容dtx
删除字符直到遇见光标之后的第一个x
字符ytx
复制字符直到遇见光标之后的第一个x
字符ma
将当前位置标记为a,26个字母均可做标记,mb
、mc
等等;'a
跳转到a标记的位置;qa
将之后的所有键盘操作录制下来,直到再次在命令模式按下q
,并存储在a
中;@a
执行刚刚记录在a
里面的键盘操作;@@
执行上一次的macro操作;VIM的基本操作,可以挖掘的东西非常多,不仅仅需要记忆,更需要自己去探索总结,熟练之后,效率会大幅度提升。后面会给出一些参考链接。
终于到这篇Blog我最想讨论的部分了。VIM的强大不仅仅体现在操作的高效率,更有强大而充沛的插件做支援,插件丰富了之后,就面临查找和管理的问题。
在遇见Vundle之前,我用Pathogen管理插件。Pathogen还算方便,只需要把相应插件,放在bundle
目录下即可,不需要再像以前那样逐个放置单独的文件到相应目录,大大节省了劳动力,管理起来也一目了然,觉得还不错,至少比vimball那种需要执行命令安装的方式好一些。
我真希望我早些遇见Vundle。Vundle受到Pathogen和Vimball的启发,于是有了现在的模样。Vundle的逻辑是这样的:
Bundle plugin_name
;完美的世界!
Vundle的安装很简单:
git clone http://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
然后写配置文件.vimrc
:
set nocompatible " be iMproved
filetype off " required!
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
" let Vundle manage Vundle
" required!
Bundle 'gmarik/vundle'
" vim-scripts repos
Bundle 'vim-plugin-foo'
Bundle 'vim-plugin-bar'
filetype plugin indent on " required!
其中Bundle
后面的内容,就是插件的名字,插件维护在Vim-Script.org。
然后,打开VIM之后,可以输入以下命令:
"安装插件:
:BundleInstall
"更新插件:
:BundleInstall!
"卸载不在列表中的插件:
:BundleClean
现在大部分的插件都已经从Vim.org迁移到了Vim-Script.org,而且很多作者也认领了自己的插件,直接在这个Github的项目下更新,一个比Vim.org更科学更有效的生态环境,就这样完美的形成了。
在此非常严重的感谢vim-scripts.org的创建者Scott Bronson,和Vundle的作者gmarik。他们的创新和分享精神,让这个世界又美好了一些。
也感谢业界良心Github。Vim-Scripts.org整站就是用Github Pages建立维护的,对于个人来说,这是很好的选择,有兴趣的同学可以参看我之前的博客:使用Github Pages建独立博客。
有了Vundle,再装插件就是件享受的事情了。我常用的插件有:
#相较于Command-T等查找文件的插件,ctrlp.vim最大的好处在于没有依赖,干净利落
Bundle 'ctrlp.vim'
#在输入(),""等需要配对的符号时,自动帮你补全剩余半个
Bundle 'AutoClose'
#神级插件,ZenCoding可以让你以一种神奇而无比爽快的感觉写HTML、CSS
Bundle 'ZenCoding.vim'
#在()、""、甚至HTML标签之间快速跳转;
Bundle 'matchit.zip'
#显示行末的空格;
Bundle 'ShowTrailingWhitespace'
#JS代码格式化插件;
Bundle '_jsbeautify'
#用全新的方式在文档中高效的移动光标,革命性的突破
Bundle 'EasyMotion'
#自动识别文件编码;
Bundle 'FencView.vim'
#必不可少,在VIM的编辑窗口树状显示文件目录
Bundle 'The-NERD-tree'
#NERD出品的快速给代码加注释插件,选中,`ctrl+h`即可注释多种语言代码;
Bundle 'The-NERD-Commenter'
#解放生产力的神器,简单配置,就可以按照自己的风格快速输入大段代码。
Bundle 'UltiSnips'
#让代码更加易于纵向排版,以=或,符号对齐
Bundle 'Tabular'
#迄今位置最好的自动VIM自动补全插件了吧
#Vundle的这个写法,是直接取该插件在Github上的repo
Bundle 'Valloric/YouCompleteMe'
以上插件可以在vim-script.org找到源码和文档,ZenCoding和EasyMotion演示点链接,你会心动的。
因为配置不断在更新,所以放上我的配置的链接:.vimrc配置
VIM在一开始会觉得非常不习惯,一定要坚持下去,收获的会更多,不仅仅是在装大侠方面的哦~
关于VIM的使用,这篇博客仅仅介绍了很小的一部分,网络上还有大量朋友总结的心得,常学常有收获:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
set
nocompatible
"不要兼容vi
filetype off "
必须的设置:
"Color Settings {
set colorcolumn=85 "
彩色显示第
85
行
set
t_Co
=
256
"设置256色显示
set background=dark "
使用
color
solarized
set
cursorline
"设置光标高亮显示
set cursorcolumn "
光标垂直高亮
set
ttyfast
set
ruler
set
backspace
=
indent
,
eol
,
start
colorscheme
solarized
let
g:solarized_termtrans
=
1
let
g:solarized_termcolors
=
256
let
g:solarized_contrast
=
"high"
let
g:solarized_visibility
=
"high"
"}
"
tab
setting
{
set
tabstop
=
4
set
shiftwidth
=
4
set
softtabstop
=
4
set
expandtab
"}
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
set scrolloff=3
set fenc=utf-8
set autoindent
set hidden
"
set
encoding
=
utf
-
8
"set laststatus=2
"
set
number
"显示行号
"
set
undofile
"无限undo
"
set
nowrap
"禁止自动换行
"
autocmd
!
bufwritepost
_vimrc
source
%
"自动载入配置文件不需要重启
"相对行号
要想相对行号起作用要放在显示行号后面
set
relativenumber
"自动换行
set wrap
"
GUI
界面里的字体,默认有抗锯齿
set
guifont
=
Inconsolata:h15
"将-连接符也设置为单词
set isk+=-
set ignorecase "
设置大小写敏感和聪明感知
(
小写全搜,大写完全匹配
)
set
smartcase
"set gdefault
set incsearch
set showmatch
set hlsearch
set numberwidth=4 "
行号栏的宽度
"set columns=135 "
初始窗口的宽度
"set lines=50 "
初始窗口的高度
"winpos 620 45 "
初始窗口的位置
set
whichwrap
=
b
,
s
,
<,>
,[,]
"让退格,空格,上下箭头遇到行首行尾时自动移到下一行(包括insert模式)
"
插入模式下移动
inoremap
inoremap
inoremap
inoremap
"===================================================
"
修改
leader
键为逗号
let
mapleader
=
","
imap
jj
inoremap
nnoremap
vnoremap
"修改vim的正则表达
nnoremap / /\v
vnoremap / /\v
"
使用
tab
键来代替
%
进行匹配跳转
nnoremap
vnoremap
"折叠
html
标签
,
fold
tag
nnoremap
"使用,v来选择刚刚复制的段落,这样可以用来缩进
nnoremap
"
使用
,
w
来垂直分割窗口,这样可以同时查看多个文件
,
如果想水平分割则
nnoremap
nnoremap
nnoremap
"tab切换
nnoremap
nnoremap
"
使用
nnoremap
"html中的js加注释 取消注释
nmap
nmap
"
切换到当前目录
nmap
"搜索替换
nmap
"
取消粘贴缩进
nmap
nmap
"文件类型切换
nmap
nmap
nmap
nmap
"
设置隐藏
gvim
的菜单和工具栏
F2
切换
set
guioptions
-=
m
set
guioptions
-=
T
"去除左右两边的滚动条
set go-=r
set go-=L
map
\set guioptions-=T
\set guioptions-=m
\else
\set guioptions+=T
\set guioptions+=m
\endif
"
Vundle
Settings
{
set
rtp
+=~
/.vim/
bundle
/vundle/
call
vundle
#rc()
" let Vundle manage Vundle
"
required
!
Bundle
'gmarik/vundle'
Bundle
'ctrlp.vim'
Bundle
'AutoClose'
Bundle
'ZenCoding.vim'
Bundle
'matchit.zip'
Bundle
'Tabular'
Bundle
'Valloric/YouCompleteMe'
"Bundle 'spiiph/vim-space'
Bundle 'terryma/vim-multiple-cursors'
Bundle 'trailing-whitespace'
Bundle 'nathanaelkane/vim-indent-guides'
let g:indent_guides_enable_on_vim_startup=1
let g:indent_guides_guide_size=1
Bundle '_jsbeautify'
nnoremap
Bundle 'EasyMotion'
let g:EasyMotion_leader_key = '
"
Fencview
的初始设置
"Bundle 'FencView.vim'
"
let
g:fencview_autodetect
=
1
Bundle
'The-NERD-tree'
"设置相对行号
nmap
let NERDTreeShowBookmarks=1
let NERDTreeShowFiles=1
let NERDTreeShowHidden=1
let NERDTreeIgnore=['\.$','\~$']
let NERDTreeShowLineNumbers=1
let NERDTreeWinPos=1
Bundle 'The-NERD-Commenter'
let NERDShutUp=1
"
支持单行和多行的选择,
//
格式
map
Bundle
'UltiSnips'
let
g:UltiSnipsExpandTrigger
=
"
let
g:UltiSnipsJumpForwardTrigger
=
"
let
g:UltiSnipsJumpBackwardTrigger
=
"
"}
"
放置在
Bundle
的设置后,防止意外
BUG
filetype
plugin
indent
on
syntax
on
|