Vim史上最全面的知识点总结
来源:互联网 发布:蛮牛unity3d 编辑:程序博客网 时间:2024/06/10 05:37
Vim总结
一. Vim的简介
Vim是一个基于vi编辑器发展出来的一个运行在类Unix系统的文本编辑器,由BramMoolenaar在1991年发布了它的第一版本,最初简称为ViImitation,之后随着功能的不断增加,正式改名成ViImproved,具有代码补充编译及错误跳转等方便编程的功能,在程序员中被广泛使用,和Emacs并列成为类Unix系统用户最喜欢的编辑器。Vim同时支持命令行模式和gui模式(gVim),是一款自由和开源的软件程序。尽管Vim最初是为Amiga系统设计的,但现在已经被发展成多平台的编辑器,并且在2006被linux社区评为最受欢迎的编辑器。
二. Vim的前世今生
上世纪80年代,BramMoolenaar在Amiga系统工作时没有之前Unix系统中的Vi编辑器,非常不习惯,故Moolenaar决定仿照Vi编辑器,自己编写可在Amiga系统中运行的编辑器,并成功于1988年写出类似这样的编辑器,当时简称为ViIMitation,并于1991年发布Vim(v1.14),很快该版本的Vim就被“FredFish Disk #591”(Amiga免费软件集)收录了。次年Vim就被移植到了Unix和MS-DOS系统中,并更名为ViImproved,之后Vim不断改版加入了不计其数的新功能(详见附录一:Vim版本发布历史),并发展成为支持跨平台的文本编辑器,现已经支持AmigaOS(theinitial target platform),AtariMiNT,BeOS,DOS,MicrosoftWindows 95/98/Me/NT/2000/XP/Server2003/Vista/Server2008/7/8IBM OS/2 andOS/390,MorphOS,OpenVMS,QNX,RISCOS,Unix,Linux,BSD,andMacOS, andAlso,AppleOS X。需要补充的是Vim现在已经开始支持android系统了。
目前,VIM是按照VIM许可证发布的开源软件,这个协议兼容GPL。它的协议中包含一些慈善条款,建议用户向荷兰ICCF捐款,用于帮助乌干达的艾滋病患者.VIM启动时会显示”Helppoor children in Uganda”的字样,在中文版本中则是”请帮助乌干达的可怜孩童”。
三. Vim相比于Vi的功能特点
Vim拥有Vi兼容模式,但并不是100%的兼容。在非兼容模式下Vim则会体现出它超出Vi的功能特点,包括多缓冲编辑,任意个数分区窗口,具备列表和字典功能的脚本语言,可在脚本中调用Lua,Perl, Ruby, Python, Tcl,MzScheme,单词缩写功能,代码折叠,动态单词补全,多次撤销和重做,400种以上文本文件语法高亮,40种以上语言的自动所排,利用ctags的标签中跳转,崩溃后文件恢复,光标位置和打开的缓冲状态的保存和复原,可对两文件进行差分,远程文件编辑,Omni补全……
四. Vim 优缺点
优点:
简洁高效快速,占用资源少可在各种嵌入式等linux系统中运行,强大的可扩展行强和定制性,性感让人欲罢不能的配色,比较酷。
缺点:
大文件读取速度很慢(可在vim.org下载并安装名为LargeFile的Script来优化)即使文件不大,如果有非常长的行的话,处理也会变慢(同上)。vim自己的脚本语言处理速度不快,若是安插过多脚本包,启动速度会变慢。存在类似Ctrl-1等不能被映射的键(限于某些字符终端的性能)
五. Vim常用命令简介
1. 入门级
在bashshell中输入vim即启动了Vim,此时vim在Normal模式下(等待命令模式),注意Vim命令是区分大小写的。按下i键进入Insert模式(文本输入模式),此时可像记事本一样进行输入了。如需返回Normal模式,请按ESC键。入门级命令包含如下:
i→进入Insert模式
ESC→进入Normal模式
x→删当前光标所在的一个字符
:wq→存盘+退出(:w存盘,:q退出)
dd→删除当前行,并存入临时缓冲区(即剪贴板)中
p→粘帖剪贴板
h→左移
j→下移
k→上移
l→右移
2. 进阶级
各种插入模式
l→在光标左侧输入文本
a
→在光标右侧输入文本
A→在光标所在行行尾输入文本
o
→在当前行后插入一个新行O
→在当前行前插入一个新行r →替换光标位置的一个字符
R →替换光标位置开始的字符,并进入输入模式
cw
→替换光标所在位置的一个单词移动光标
0
→数字零,到行头^
→到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等)$
→到本行行尾g_
→到本行最后一个不是blank字符的位置。w →右移一字
b →左移一字
e →移至字尾
Return(键) →下一行行首
Spacebar →右移一位
Backspace →左移一位
/pattern
→搜索 pattern
的字符串(陈皓注:如果搜索出多个匹配,可按n键到下一个)ctrl+d →下移12行
ctrl+u →上移12行
ctrl+f →下移24行
ctrl+b →上移24行
NG →移至第N行
gg →移至第一行
G →移至最后一行
w/e→到下一个单词的开头/结尾
W/E→到下移个单词的开头/结尾(以空格为分隔符)
%→匹配括号移动
拷贝/粘贴
P →将制定缓冲区的内容放到当前光标位置之上p →将制定缓冲区的内容放到当前光标位置之下
d →删除当前指定文本,存于临时缓冲区,可用put操作符(P/p)访问
dd →删除当前行,并存入临时缓冲区(即剪贴板)中
y→将指定文本复制到临时缓冲区,可用put操作符(P/p)访问
yy →拷贝当前行当行于临时缓冲区中,类似于
ddP
撤销/重复
u→撤销U →撤销对当前行上做的所有修改
ctrl+r →重复
打开/保存/退出/改变文件(Buffer)
:e<path>
→打开一个文件:w
→存盘:saveas<path>
→另存为<path/to/file>
:x
,ZZ或:wq
→保存并退出(:x
表示仅在需要时保存,ZZ不需要输入冒号并回车):q!
→强制退出不保存:qa!
→强行退出所有的正在编辑的文件,就算别的文件有更改:wqa!→保存所有正在编辑的文件并退出
:bn
/:bp
→你可以同时打开很多文件,使用这两个命令来切换下一个/上一个文件3. 高级篇
v→可视化选择gU→变大写
gu →变小写
. →重复上一次命令
N<command> →重复某个命令N次
<startposition><command><end position>例0y$表示0到行头,y拷贝,$到本行最后一个字符
fa →到下一个为a的字符处,a可替换其他字符
t, →,前的第一个字符,,可以替换其他字符
3fa →在当前行查找第三个出现的a
F和T →和f和t一样,只不过是相反方向
dt →删除所有的内容,则到遇到双引号
ctrl+n/ctrl+p →在insert模式下可以自动补齐输入单词
split/vsplit →创建分屏/创建垂直分屏
visual select lines, then input command (:norm i${comment text like # or //}) →代码块注释
visual select lines, then input command (:norm x) or (:norm xx) or (:norm ^x) →代码块解注释
上面是最常用的命令,建议你每天都学1到2个新的命令,在两到三周后,你会感到vim的强大的。有时候,学习VIM就像是在死背一些东西。幸运的是,vim有很多很不错的工具和优秀的文档。运行vimtutor直到你熟悉了那些基本命令。其在线帮助文档中你应该要仔细阅读的是 :helpusr_02.txt
.你会学习到诸如 !
,
目录,寄存器,插件等很多其它的功能。学习vim就像学弹钢琴一样,一旦学会,受益无穷。
五. Vim配置
1. 更换Vimcolorscheme:
将myVimColorScheme.vim文件放入VIMRUNTIME/vim7x/colors/中,打开Vim编辑器,在Normal模式下输入:colorschememyVimColorScheme即可。
2. 自定义Vim编辑功能和特点
新建文件~/.vimrc,打开并编辑(具体可参考附录二:.vimrc样例)。
set nocompatible " 关闭 vi 兼容模式
syntax on " 自动语法高亮
colorscheme molokai " 设定配色方案
set number " 显示行号
set cursorline " 突出显示当前行
set ruler " 打开状态栏标尺
set shiftwidth=4 " 设定 << 和 >> 命令移动时的宽度为 4
set softtabstop=4 " 使得按退格键时可以一次删掉 4 个空格
set tabstop=4 " 设定 tab 长度为 4
set nobackup " 覆盖文件时不备份
set autochdir " 自动切换当前目录为当前文件所在的目录
filetype plugin indent on " 开启插件
set backupcopy=yes " 设置备份时的行为为覆盖
set ignorecase smartcase " 搜索时忽略大小写,但在有一个或以上大写字母时仍保持对大小写敏感
set nowrapscan " 禁止在搜索到文件两端时重新搜索
set incsearch " 输入搜索内容时就显示搜索结果
set hlsearch " 搜索时高亮显示被找到的文本
set noerrorbells " 关闭错误信息响铃
set novisualbell " 关闭使用可视响铃代替呼叫
set t_vb= " 置空错误铃声的终端代码
" set showmatch " 插入括号时,短暂地跳转到匹配的对应括号
" set matchtime=2 " 短暂跳转到匹配括号的时间
set magic " 设置魔术
set hidden " 允许在有未保存的修改时切换缓冲区,此时的修改由 vim 负责保存
set guioptions-=T " 隐藏工具栏
set guioptions-=m " 隐藏菜单栏
set smartindent " 开启新行时使用智能自动缩进
set backspace=indent,eol,start
" 不设定在插入状态无法用退格键和 Delete 键删除回车符
set cmdheight=1 " 设定命令行的行数为 1
set laststatus=2 " 显示状态栏 (默认值为 1, 无法显示状态栏)
set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ %{&encoding}\ %c:%l/%L%)\
" 设置在状态行显示的信息
set foldenable " 开始折叠
set foldmethod=syntax " 设置语法折叠
set foldcolumn=0 " 设置折叠区域的宽度
setlocal foldlevel=1 " 设置折叠层数为
" set foldclose=all " 设置为自动关闭折叠
" nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>
" 用空格键来开关折叠
六. 参考文献
[1] http://en.wikipedia.org/wiki/Vim_(text_editor)
[2] http://zh.wikipedia.org/wiki/Vim
[3] http://www.baike.com/wiki/VIM
[4] http://blog.csdn.net/wooin/article/details/1887737
[5] http://www.csdn.net/article/2011-09-08/304226
附录一 Vim版本发布历史
Release history
Date
Version
Changes andadditions
June, 1987
N/A
Tim Thompson releases Stevie(ST editor for VI enthusiasts), a limited vi clone for the AtariST,posting the source on Usenet.[20][21]
June, 1988
N/A
Tony Andrews improves Stevie,and ports it to Unix and OS/2,releasing version 3.10 on Usenet.[20][22]
1988
1.0
Bram Moolenaar creates ViIMitation for the Amiga, based on Stevie, never publiclyreleased
November 2, 1991
1.14[8]
Firstpublic release for the Amiga on FredFish disk#591[23]
1992
1.22[8]
Port to Unix.Vim now competes with vi.
December 14, 1993
2.0[7]
This is the first releaseusing the name Vi IMproved.
August 12, 1994
3.0[8]
Support for multiplewindows
May 29, 1996
4.0[8][24]
Graphicaluser interface
February 19, 1998
5.0[8][25]
Syntaxhighlighting,basic scripting (userdefined functions, commands, etc.)
April 6, 1998
5.1
Bug fixes,various improvements
April 27, 1998
5.2
Long line support, filebrowser, dialogs, popup menu, select mode, session files, userdefined functions and commands, Tcl interface,etc.
August 31, 1998
5.3
Bug fixes, etc.
July 25, 1999
5.4
Basic file encryption,various improvements
September 19, 1999
5.5
Bug fixes, variousimprovements
January 16, 2000
5.6
New syntax files, bugfixes, etc.
June 24, 2000
5.7
New syntax files, bugfixes, etc.
May 31, 2001
5.8
New syntax files, bugfixes, etc.
September 26, 2001
6.0[8][26]
Folding, plugins,multi-language, etc.
March 24, 2002
6.1
Bug fixes
June 1, 2003
6.2
GTK2, Arabic languagesupport, :try command, minor features, bug fixes
June 7, 2004
6.3
Bug fixes, translationupdates, mark improvements
October 15, 2005
6.4
Bug fixes, updates toPerl, Python, and Ruby support
May 7, 2006
7.0[27]
Spellchecking, codecompletion,tab pages (multiple viewports/window layouts), current line andcolumn highlighting, undo branches, and more
May 12, 2007
7.1
Bug fixes, new syntax andruntime files, etc.
August 9, 2008
7.2[28]
Floating point support inscripts, refactored screen drawing code, bug fixes, new syntaxfiles, etc.
August 15, 2010
7.3
Lua support,Python3 support, Blowfish encryption,persistent undo/redo
August 10, 2013
7.4[29]
A new, faster regularexpression engine.
附录二 .vimrc样例
"===============================================================================" Filename: vimrc" Author: ZZL(赵真灵)" Email: zzl_ing@126.com" Homepage: http://blog.csdn.net/lvjing2" Created: 20013-8-23"==============================================================================="set encoding=gb2312set guifont=Luxi/Mono/9 " 设置字体,字体名称和字号set tabstop=4 " 设置tab键的宽度set backspace=2 " 设置退格键可用set nu! " 显示行号":hi linenr ctermfg=darkblueset vb t_vb= "vim进行编辑时,如果命令错误,会发出一个响声,该设置去掉响声"setwrap "自动换行"setnowrap " 不自动换行set linebreak " 整词换行set whichwrap=b,s,<,>,[,] "光标从行首和行末时可以跳到另一行去"setlist " 显示制表符"setlistchars = tab:>-,trail:- " 将制表符显示为'>---',将行尾空格显示为'-'set listchars=tab:./,trail:. " 将制表符显示为'. 'set autochdir " 自动设置目录为正在编辑的文件所在的目录set hidden "没有保存的缓冲区可以自动被隐藏set scrolloff=5"--------------------------------------------------------------------------------"查找/替换相关的设置"--------------------------------------------------------------------------------set hlsearch " 高亮显示搜索结果set incsearch "查询时非常方便,如要查找book单词,当输入到/b时,会自动找到 "第一个b开头的单词,当输入到/bo时,会自动找到第一个bo开头的 "单词,依次类推,进行查找时,使用此设置会快速找到答案,当你 "找要匹配的单词时,别忘记回车set gdefault "替换时所有的行内匹配都被替换,而不是只有第一个"--------------------------------------------------------------------------------"状态栏相关的设置"--------------------------------------------------------------------------------set statusline=[%F]%y%r%m%*%=[Line:%l/%L,Column:%c][%p%%]set laststatus=2 " always show the status lineset ruler "在编辑过程中,在右下角显示光标位置的状态行"--------------------------------------------------------------------------------"编程相关的设置"--------------------------------------------------------------------------------set completeopt=longest,menu " 关掉智能补全时的预览窗口filetype plugin indent on "加了这句才可以用智能补全:set tags=/home/nfs/microwindows/src/tagssyn on " 打开语法高亮set showmatch "设置匹配模式,类似当输入一个左括号时会匹配相应的那个右括号set smartindent " 智能对齐方式set shiftwidth=4 " 换行时行间交错使用4个空格set autoindent " 自动对齐set ai! " 设置自动缩进colorscheme peachpuff"--------------------------------------------------------------------------------"代码折叠"--------------------------------------------------------------------------------"set foldmarker={,}"set foldmethod=markerset foldmethod=syntaxset foldlevel=100 " Don'tautofold anything (but I can still fold manually)"set foldopen-=search " don't open folds when you searchinto them"set foldopen-=undo " don't open folds whenyou undo stuff"set foldcolumn=4"--------------------------------------------------------------------------------"模仿MSWindows中的快捷键"--------------------------------------------------------------------------------vmap<C-c> "yyvmap<C-x> "ydnmap<C-v> "ypvmap<C-v> "ypnmap<C-a> ggvG$"--------------------------------------------------------------------------------"窗口操作的快捷键"--------------------------------------------------------------------------------nmap wv <C-w>v "垂直分割当前窗口nmap wc <C-w>c "关闭当前窗口nmap ws <C-w>s "水平分割当前窗口"--------------------------------------------------------------------------------"模仿MSWindows中的保存命令:Ctrl+S"--------------------------------------------------------------------------------imap<C-s> <Esc>:wa<cr>i<Right>nmap<C-s> :wa<cr>"###############################################################################"The following is the Plugins' setting"###############################################################################"--------------------------------------------------------------------------------"TagList :Tlist"--------------------------------------------------------------------------------let Tlist_Show_One_File=1let Tlist_Exit_OnlyWindow = 1"let Tlist_Use_Right_Window=1"--------------------------------------------------------------------------------"netrw 文件浏览器:e<PATH>"--------------------------------------------------------------------------------"letg:netrw_winsize = 30 "浏览器宽度"--------------------------------------------------------------------------------"QuickFix"--------------------------------------------------------------------------------nmap<F6> :cn<cr> " 切换到下一个结果nmap<F7> :cp<cr> " 切换到上一个结果"--------------------------------------------------------------------------------"WinManager :WMToggle"--------------------------------------------------------------------------------let g:winManagerWindowLayout='FileExplorer|TagList'"let g:winManagerWidth = 30"let g:defaultExplorer = 0"nmap<C-w><C-b> :BottomExplorerWindow<cr> "切换到最下面一个窗格"nmap<C-w><C-f> :FirstExplorerWindow<cr> "切换到最上面一个窗格nmap wm :WMToggle<cr> " 是nomal模式的命令,不是Ex模式的"--------------------------------------------------------------------------------"MiniBufExp"--------------------------------------------------------------------------------"let g:miniBufExplMapWindowNavVim = 1let g:miniBufExplMapWindowNavArrows = 1let g:miniBufExplMapCTabSwitchBufs = 1"let g:miniBufExplModSelTarget = 1"--------------------------------------------------------------------------------"cscope"--------------------------------------------------------------------------------cs add /home/nfs/microwindows/src/cscope.out /home/nfs/microwindows/src:set cscopequickfix=s-,c-,d-,i-,t-,e-:set cscopetag"按下面这种组合键有技巧,按了<C-_>后要马上按下一个键,否则屏幕一闪"就回到nomal状态了"<C-_>s的按法是先按"Ctrl+Shift+-",然后很快再按"s"nmap<C-_>s :cs find s <C-R>=expand("<cword>")<cr><cr>:cw<cr>nmap<C-_>g :cs find g <C-R>=expand("<cword>")<cr><cr>:cw<cr>nmap<C-_>c :cs find c <C-R>=expand("<cword>")<cr><cr>:cw<cr>nmap<C-_>t :cs find t <C-R>=expand("<cword>")<cr><cr>:cw<cr>nmap<C-_>e :cs find e <C-R>=expand("<cword>")<cr><cr>:cw<cr>nmap<C-_>f :cs find f <C-R>=expand("<cfile>")<cr><cr>nmap<C-_>i :cs find i <C-R>=expand("<cfile>")<cr><cr>:cw<cr>nmap<C-_>d :cs find d <C-R>=expand("<cword>")<cr><cr>:cw<cr>"--------------------------------------------------------------------------------"Grep"--------------------------------------------------------------------------------"直接按下<F3>键来查找光标所在的字符串nnoremap<silent> <F3> :Rgrep<CR>"--------------------------------------------------------------------------------"A"--------------------------------------------------------------------------------nnoremap<silent> <F12> :A<CR>"--------------------------------------------------------------------------------"NERD_commenter"--------------------------------------------------------------------------------let NERD_c_alt_style = 1 " 将C语言的注释符号改为//,默认是/**/"nmap<F5> ,cc"--------------------------------------------------------------------------------"SuperTab :SuperTabHelp"--------------------------------------------------------------------------------let g:SuperTabRetainCompletionType = 2let g:SuperTabDefaultCompletionType = "<C-X><C-O>""--------------------------------------------------------------------------------"CVim :help csupport"--------------------------------------------------------------------------------let g:C_Comments = "no" " 用C++的注释风格let g:C_BraceOnNewLine = "no" " '{'是否独自一行let g:C_AuthorName = "zzl"let g:C_Project="F9"let g:Cpp_Template_Function = "c-function-description-wuyin"let g:C_TypeOfH = "c" " *.h文件的文件类型是C还是C++"##################################################################"##########################End Of Vimrc ##########################"##################################################################"if filetype is C" TODO"fi
- Vim史上最全面的知识点总结
- 非常全面的Linux知识点总结
- Android Activity 知识点全面总结
- Android Activity 知识点全面总结
- Android 开发需要掌握的技术知识点全面总结
- vim编辑器及bash基础学习的知识点总结
- linux下关于vim的一些小知识点总结
- 一篇文章,全面总结Android面试知识点
- 一篇文章,全面总结Android面试知识点
- Vim的各种小知识点
- const 的全面总结
- const 的全面总结
- Service的全面总结
- 数组的全面总结
- Ajax 的全面总结
- Ajax 的全面总结
- Ajax 的全面总结
- Ajax的全面总结
- 【G-BLASTN 1.0正式发布】
- 以java为例理解协变性
- MPEG-2视频编码技术漫谈
- 前还算是个新鲜事物
- H264基本概念--【转】图像、帧、片、NALU
- Vim史上最全面的知识点总结
- NAND write: '$filesize' is not a number
- 指针的错误赋值
- UVAlive 2911 Maximum(贪心)
- 【菜鸟学习Linux】-第二章- Linux环境搭建-使用VMware9联网设置”
- Eclipse cdt安装与使用 (C/C++插件安装)
- HDU4697 Convex hull
- 查找首个非重复字符
- HDU 4704 Sum 费马小定理+快速幂