VIM深入研究

vim深入研究

vim入门简介

何为vim


●Vim 是 Linux 系统上的最著名的文本/代码编辑器,也是早年的 Vi 编辑器的加强版,而 gVim 则是其 Windows 版。它的最大特色是**完全使用键盘命令进行编辑**,脱离了鼠标操作虽然使得入门变得困难,但**上手之后键盘流的各种巧妙组合操作却能带来极为大幅的效率提升**。

●因此 Vim 和现代的编辑器(如 Sublime Text)有着非常巨大的差异,而且入门学习曲线陡峭,需要记住很多按键组合和命令,如今被看作是高手、Geek们专用的编辑器。尽管 Vim 已经是古董级的软件,但还是有无数新人迎着困难去学习使用,可见其经典与受欢迎程度。另外,由于 Vim 的可配置性非常强,各种插件、语法高亮配色方案等多不胜数,无论作为代码编辑器或是文稿撰写工具都非常给力。

●往往很多精彩的软件或多或少都会参考 Vim 的一些操作思想去设计它们的热键。而由于其强大灵活的可配置性,各种插件、语法高亮、代码补全、配色方案等资源极其丰富,很多程序员也将其打造成属于自己的首选代码编辑器,对于时下各种热门的编程语言,VIM都支持得相当的完美;而对于一些文字工作者,Vim 作为一款文本撰写器也是极其“锋利”的武器;特别是,如果你是一位 IT 界人士,需要或将要与 Linux 系统打交道,那么学习好 Vim 的操作绝对能让你的工作轻松百倍!!因为很多时候, Linux 作为服务器是不会开启图形界面,当需要远程操作时,你只能利用 SSH“命令字符式”的 Shell 界面对其进行操作,这时如果你需要修改服务器上的网页代码或配置文件,VI 或 VIM 命令就是你最佳最方便也是最强大的伙伴了!


●本篇文章中也将对vim的使用技巧做出总结,包括:文本处理技巧、插件管理、安装markdown插件、支持markdown编辑、预览;安装C语言编程插件,常用快捷键的支持;C编程IDE的打造等内容。

Linux下vim与vi的异同

vi与vim同为编辑器,不同的是vim更高级一些,可以理解成vi的高级版本(全称Vi IMproved)。vi就像Windows中的计事本,而vim则可以算的上是 office中的word。

vi主要用来编辑一些文件,vim则是程序员的好工具。要学更多Vi的用法,可以在shell里运行vimtutor

vim较IDE的优势

●vim对硬件没有要求;

●vimscript;vimscript作为编辑器内置的语言,是很好用的。用一句话来说,就是vim is vimscript。操作vim,就是写vimscript的过程;

●sublime学到了vim的轻巧,同样有IDE的简单,其他编辑器强调的是一体化,功能定制好,上手快。两者的主要区别是,vim你需要会写程序,而后者,只需要学会配置文件就行了,甚至配置都是可视化的。但是,在vim里,写程序的过程是自由的。这点对于一个程序员尤为重要。

●vim和IDE最大区别在于,vim是有模式的,vim是unix一部分,秉承这unix哲学——管道,一切都是文本,vim中的命令是原子性的,可以随意组合。

●下面一一解释,vim的优势非常多,不过也有一些是IDE所擅长的,比如自动提醒之类的,IDE可以内置一个语言引擎,这样提示确实要强大的多。

●vim的模式,是的vim可以有多种编辑状态,普通状态下,所有键盘的按键都是你可以使用的快捷键,这时候,你在用的似乎不是一个编辑器了,更确切的说是,处理文本,键盘不再是输入字符,而是vim的各种命令。这样,使得vim非常快速。写代码过程中,其实我们花更多的时间在调试,修改代码,而不是输入代码,写代码。所以,我们需要vim的正常模式。

●一切都是文本,这样其实意味着,在vim里面高度的编码一致性体验。一致性体验,这个只有在vim和emac里面可以做到的。这意味着,在vim中,你的所有操作,都是vim风格的,处理正常的文本处理,我们有时候需要调用终端,或者文件操作,文件查找等等。在vim里面操作一个文件也是一个文本,这样,修改文件夹和修改文件名一样了。IDE里面总是有着各种窗口,这些窗口彼此是独立的。vim只有一个窗口,在这个窗口里面所有操作都是一致的。

●vim命令是原子性的,这意味着,vim的快捷键是命令组合,其实,所有命令都是调用一个函数。比如,daw,在vim里面表示delete a word,d a w是三个彼此独立的命令,aw(a word),ap(a paragraph)等等可以随意组合,这是其他任何IDE所做不到的,IDE里面的快捷键就是快捷键,快捷键是不能拆分成单独命令。命令可以拆分,你可以在各种模式下使用这些最小命令单位。在vim里面,选择一部分文件修改,和修改整个文件是没有任何区别的。举个例子,vim插件surround,操作文本:"hello", ds" => hello,cs"' => 'hello'。这里使用两个命令ds"和cs"',乍一看似乎很诡异的语法,其实了解了vim的命令原子特征,就可以很轻松拆理解这两个命令了,ds"表示delete surround ",双引号在vim表示双引号围起来的区块,d是vim中删除的基本命令,dw删除一个单词,dap删除一个段落。cs"'这个命令表示,change surround " ',c是change的基本命令,这个命令也就很好理解了吧。在IDE里面,相同的操作大概是一个快捷键,记住那么一个快捷键,你能删除一个",可能你还得记住另外一个快捷键删除一对(,一对{,一对各种其他符号,这些在vim里面,不用看文档都知道怎么做了吧(ds( ds{ ...)。更重要的是,这些原子命令,在任何地方都是有效的。每个vim命令都是一个小功能,组成一个强大的文本编辑器,就像unix由各种小部件构成一样,这是任何IDE所无法做到的。

vim的详细使用教程

vim模式

●正常(normal)模式,缺省的编辑模式;下面如果不加特殊说明,提到的命令都直接在正常模式下输入;任何其它模式中都可以通过键盘上的 Esc 键回到正常模式。

●命令(command)模式,用于执行较长、较复杂的命令;在正常模式下输入“:”(一般命令)、“/”(正向搜索)或“?”(反向搜索)即可进入该模式;命令模式下的命令要输入回车键(Enter)才算完成。

●插入(insert)模式,输入文本时使用;在正常模式下键入“i”(insert)或“a”(append)即可进入插入模式(也有另外一些命令,如“c”,也可以进入插入模式,但这些命令有其它的作用)。

●可视(visual)模式,用于选定文本块;可以在正常模式下输入“v”(小写)来按字符选定,输入“V”(大写)来按行选定,或输入“Ctrl-V”来按方块选定。

●选择(select)模式,与普通的 Windows 编辑器较为接近的选择文本块的方式;在以可视模式和选择模式之一选定文本块之后,可以使用“Ctrl-G”切换到另一模式——该模式很少在 Linux 上使用,本文中就不再介绍了。

关于安装

●如果从 Linux 发布版直接安装 Vim,需要注意的一点是,缺省情况下系统并不一定为你安装了一个完整的 Vim。比如,在 Red Hat(以及后来的 Fedora Core)的发布版中,Vim 被拆成了四个包:vim-common(公用部分),vim-minimal(最小安装),vim-enhanced(除 X Window 支持外的完整安装),和 vim-X11(X Window 图形界面支持)。最小安装不能完整展示 Vim 的优点,通常只是作为 vi 的替代品出现,缺少很多重要的特性如多字节语言支持、鼠标支持和脚本支持。如果装了 X Window 的话,图形界面的 gvim 也比文本模式的 vim 具有更多的特性。建议大家尽可能安装完全的 Vim。

●以下列出了和语言编码的相关的设置:


环境变量 LANG(使用的语言);
环境变量 LC_CTYPE(使用的内部编码);
Vim 选项 encoding(Vim 的内部编码);
Vim 选项 termencoding(Vim 在与屏幕/键盘交互时使用的编码);
Vim 选项 fileencoding(Vim 当前编辑的文件在存储时的编码);
Vim 选项 fileencodings(Vim 打开文件时的尝试使用的编码);
Vim 选项 ambiwidth(对“不明宽度”字符的处理方式;Vim 6.1.455 后引入)。

●需要设定的选项通常放在用户的 Vim 资源配置文件中,即在 ~/.vimrc 文件中加入:


set encoding=utf-8
set fileencoding=chinese
set fileencodings=ucs-bom,utf-8,chinese
set ambiwidth=double

鼠标支持 “set mouse = a”

●Vim 主要支持的鼠标操作有:


单击移动光标到点击的位置;
在帮助的关键字上双击显示该关键字相关的帮助信息;
在普通文本上双击选中点击位置的单词;
拖动鼠标选中文本;
使用鼠标滚轮滚动当前缓冲区中的文本;
多窗口编辑时可以拖动窗口分栏的位置。

空格、制表符和缩进

●下面给出一些常用的组合:


shiftwidth=4 tabstop=4:很多 Windows 出身的程序员会习惯这样的设置,让缩进等于制表符宽度。
shiftwidth=4 tabstop=8:很多 Unix 程序员的设置,仍使用较常用的 4 格缩进,但制表符宽度为标准的 8。
cinoptions=>4,n-2,{2,^-2,:2,=2,g0,h2,p5,t0,+2,(0,u0,w1,m1 shiftwidth=2 tabstop=8:标准的 GNU 编码风格的设置,对 Vim 缺省的 C 缩进风格作了很多微调,比如,if 语句下的“{”、“}”要在“if”后缩进两格,但函数定义部分“{”、“}”仍和函数名一行对齐。开源软件经常使用该种缩进风格。

在编辑代码时一个很有用的命令是调整代码缩进,可以很方便地增加(或减少)若干级缩进,并自动根据选项设定使用正确的空格或制表符。只需要使用“V”选中你要调整的代码行,然后键入“<”(或“>”)即可增加(或减少)一级缩进;在键入“<”(或“>”)之前键入数字则可以指定增加(或减少)的缩进级数。

关于模式行

●Vim 是第一个支持在文件中记录代码风格设定的编辑器。这个特性在 Vim 中叫做模式行,实际上,它所做的是在打开文件时根据文件中的 Vim 指令设定相关的 Vim 选项。下面就是一个嵌在 C 源代码中的模式行:/* vim: set tabstop=4 shiftwidth=4 expandtab: */

●模式行有好几种形式。本文只介绍上面的这种形式(其它形式类似,请自行参考“:help modeline”):行首的“/”和尾部的“/”告诉 C 编译器这是一行注释,不是代码的一部分;而 Vim 可通过后面的“vim:”识别出模式行的开始(必须出现在行首或前面有一个空白字符);后面则是“set”和空格间隔开的一串 Vim 选项;“:”表示模式行结束。出于安全的考虑,模式行中的选项只影响当前文件(“:help modeline-local”),也不能做任何设置选项以外的工作。

Linux系统下vim的基本使用方法

在linux家族中,vim编辑器是系统自带的文本编辑器,基本的使用方法与vi相同。

1、进入vim编辑器

VIM编辑器,可以新建文件也可以修改文件,命令为:vim /usr/local/con.cfg,如果这个文件,以前是没有的,则为新建,则下方有提示为新文件,如果文件已存在,则没有提示。

进入编辑器后,我们先按"I”,即切换到“插入”状态。就可以通过上下左右移动光标,或空格、退格及回车等进行编辑内容了,和WINDOWS是一样的了。

2、退出vim编辑器的方法及区别

当文本编辑结束之后,通常需要退出编辑器。退出编辑器又分为4种情况:保存退出、正常退出、不保存退出及强制退出。

1)、保存退出;

法一:按键盘左上角的"ESC",输入:wq;(W:write,写入;Q:quit,退出)回车即可;

法二:在最后输入命令时,直接输入"x",即X=WQ;

法三:最快捷的方法:按了ESC后,直接按shift+zz,或切换到大写模式按ZZ,即可。

2)、正常退出;

正常退出有个前提条件是:打开的文本文件在内容上没有被改动过。

按了ESC后再输入冒号,在输入命令时,直接输入"q",即可。

3)、不保存退出;

很多时候打开了文件,或者修改了一些地方,才发现错了,这时就需要不保存退出。

先按ESC,再输入冒号,在输入命令时,直接输入"q!",即可。

4)、强制退出。

先按ESC,再按冒号,在输入命令时,直接输入"!",即可。

3.文本处理技巧

●VI的命令是非常具有美感的,下面是几个例子:


i	在光标前插入	I	在行首插入
a	在光标后插入	A	在行末插入
o	在下一行插入	O	在上一行插入
x	删除当前字符	X	删除前一个字符

●类似的还有b,B,ge,gE,w,W,e,E,f,F,t,T,这些命令都可以用:help cmdname查到帮助。


dd	删除一行	yy	拷贝一行
h j k l 左下上右移动光标
Ctrl-w h,Ctrl-w j,Ctrl-w k,Ctrl-w l 切换到左下上右窗口

●类似ed,VI/VIM的命令大多都可以带一个数字前缀或者一个数字范围,比如:


5dd	从当前行开始删除5行
5yy	从当前行开始拷贝5行
1,3d	删除1至3行
1,3y	拷贝1至3行	(.代表当前行,$代表最后一行)

●d,y,c,v分别代表删除/拷贝/修改/选择
命令指定的范围,比如

int main(void)
{
	......;
}

●将光标放在{处,然后输入v%就可以把大括号中内容选定,然后按=就可以按照C语言格式缩排(:help =可以看到=命令的描述),%命令的作用是跳到匹配处,比如括号之间,C的
宏指令#if #else #endif之间。

int some_ugly_modifier and some_ugly_name (void)

●如果光标放在第一个s上,想删除到“(”为止,则输入dt(就可以了,t(的作用是跳到下一个"("前。

●dG可以从当前位置一直删除到文件末尾,因为G的作用是跳到文件最后一行。

●VIM的命令可以非常快捷的做到一些复杂的编辑操作,下面是几个示例:

(a)
将“(1), ...., (2), ....,(100)”替换成“(2), ...., (3), ...., (101)”。在文本中一处处找到并修改是很累的,在VIM下一条命令就可以搞定:
:%s/((\d+))/="(".(submatch(1)+1).")"/g

命令解释如下:


%       全文(“%”是“1,$”范围的缩写)
s       替换
/       搜索字符串开始
(       左括号
\)      开始记录匹配
\d+     一个或多个数字
\)      结束记录匹配
)       右括号
/       搜索字符串结束
\=      把后面的表达式计算出来作为替换字符串
"("     左括号
.       字符串连接运算符
(submatch(1) + 1)       把第一个匹配的结果加一作为一个整体返回
.")"    添上右括号
/g      替换字符串结束,g表示替换每一行的所有匹配结果。

(b)
log系统对于输出行长度有限制,因此在输出很长的log时需要断行,在断行时以单行的“-$-”标记,现在的需求是把这些行连起来,在VIM中也可以很方便的做到(edyfox at newsmth指点)::%s/\n-\$-\n//g

命令的含义就是把“换行-$-换行”替换成空,另一个办法是::g/-\$-/norm ddkJx

命令g/-$-/的含义就是找到所有的断行标记,然后norm表示在找到的每一个行上执行后面的命令,dd删除这个断行标记,k移动到上一行,J合并当前行和下一行,由于J合并后会留一个空格(只对于英文情况下),所以x来删除这个空格。

(c)
在Fortran代码integer, dimension(:, :), allocatable :: &short_var, &A_very_long_name_var, & other中,想把每行的&符号定位到固定的一列,比如第78列,手动对齐也是很麻烦的,这个问题可以用VIM的Align插件(http://www.vim.org/scripts/script.php?script_id=294)解决,另外利用宏也可以:

:set ve=all 使得光标可以定位到屏幕任何位置(缺省下VIM的光标只能放在行内的字符上)


gg              到文件第一行
/\s\+&\s*$      找以&结尾的行,&前至少一个空白字符,后0或多个空白字符
qa              记录宏到寄存器a
D               删除到行尾
78|             定位到第78列
i&<ESC>         插入&并返回到命令模式
n               查找下一个&
q               停止记录宏
10000@a         执行一万遍寄存器a中保存的命令
:set ve=""      恢复ve缺省值

(d)连续插入72个等号按ESC进入Normal mode,输入72i=再按ESC即可。

(e)在多行开始插入//

移动光标到需要注释掉的第一行开头,然后按Ctrl-v(如果使用了VIM的mswin.vim,则Ctrl-v表示粘贴,这时需要用Ctrl-q代替)进入Visual blockwise模式,这个模式是Visual mode的一种,相当于UltraEdit中的块选择。 然后按j选择上所有需要注释行的行首(看起来效果是选择了第一列),输入I//再按ESC就可以在每一行开头插入//了。

Reference:

http://newsmth.org VIM board

http://edyfox.codecarver.org/html/index.html

这些例子也许初看起来有点吓人,可是在很多时候VIM这些强大的命令能省不少力,VIM可谓是为“编辑”这个功能费尽心思。

关于vim编程辅助功能

既然是程序员的编辑器,自然要show一下它的编程辅助功能。

(1) ctags,cscope

● 现在的IDE都提供了类、函数的索引功能,可以方便的找到某个类或者函数的在哪里定义的,VIM这方面可以利用ctags、cscope做到,Exuberant ctags支持的语言种类非常多,UltraEdit的tags功能也是利用的ctags。cscope只支持C,它能实现Source Insight的一些功能,比如查找某个函数调用了哪些函数,某个函数被哪些函数调用。VIM对这两个工具集成的非常好,利用它们就可以在源文件中方便的跳转搜索类和函数了。

参考学习网址:(http://ctags.sourceforge.net)	Exuberant ctags
		    (http://iamphet.nm.ru/cscope/)	cscope for Win32

(2)multi window,multi buffer,multi tab page

● 一个buffer对应一个文件,它可以对应多个window,这样可以方便的对照编辑一个文件的不同部分,tab page跟现在许多编辑器上常见的标签页意义并不一样,可以将tab page理解为一个windows的容器,这样如果想新建一个窗口编辑文件但又不想打乱现在的多窗口布局,那么就可以新开一个tab page,把新窗口放到这个新的tab page里头。tab page是VIM 7.0不久前新增的特性,目前VIM 7.0还未正式发布。

(3) 语法高亮

●VIM发行版里带了450多种语言的语法高亮,在其主页vim.org上还可以找到更多。

(4) 自动缩进

●在打开自动缩进选项后,VIM会自动的控制缩进,比如输入{自动向右缩进一个tab字符(具体用什么缩进可以配置),输入}自动回退缩进。 使用=命令可以对选择的程序块排版缩
进,这对于整理代码非常有帮助。 另外对选择的块用>>和<<命令可以很方便的控制一个程序块的缩进。

(5) 类和函数列表

●taglist等插件可以提供很方便的类和函数列表功能。

(6) 自动完成

● VIM在Insert mode下输入一个单词的前几个字符,然后用Ctrl-p或者Ctrl-n就可以列出以这些字符开头的单词,特别在配置了ctags后也能列出头文件中的符号,特别方便,除此外VIM还有行自动完成、文件名自动完成等,这点即使是现在强大的IDE也未免不足。

●如果设置了如下选项:

:set wildmode=list:full
:set wildmenu

则在命令行打开文件或者输入命令时按Tab(以输入字符为前缀补全)或者Ctrl-d(列出包含输入字符的所有匹配项目)自动补全,这一功能大大降低了VIM的使用难度。

●另外有许多插件可以实现许多IDE中的自动完成类成员的功能,当然,这个功能还比不上Eclispe、Visual Studio等IDE中的强大,这一点是VIM比较可惜的地方。VIM 7.0引入了OmniCompletion,可以自定义匹配完成函数,也许可以弥补这个缺陷。

(7) folding

● VIM支持折叠代码,还可以根据文件中特殊的标记对文件中的行折叠,可以实现Outline视图,这可以极大的方便编辑很大的文件。

(8) quickfix

●许多人对于UNIX开发的印象都是“编辑代码,退出编辑器,编译,发现错误,记录出错信息,遍辑代码,退出编辑器,编译,用gdb调试,再编辑代码……”,这是古老的VI时代的事情了,有了VIM的quickfix特性,我们可以在VIM里编译然后直接跳到编译出错的行,这个反复的过程无需退出编辑器,而且VIM的quickfix特性可以经配置后支持不同的编译器以及不同的语言:只要编译器在出错信息里包含文件名和行号。

●不过比较遗憾的是VIM对于集成调试支持还不好,有些项目尝试集成GDB到VIM,比如(http://skawina.eu.org/mikolaj/vimgdb/) 和( http://www.volny.cz/zellerin/gdbvim/),
在(http://www.vim.org/search.php)中的scripts处搜索gdb也可以找到一些插件.这方面Emacs的GUD(Grand Unified Debugger)调试界面要更强大,毕竟GCC/GDB/Emacs是一家。

(9)auto command

●VIM可以在某些事件发生时比如打开文件、保存文件、切换窗口时自动执行一些VIM命令,VIM的许多插件都利用了这个功能。常用的一种情况是把某种文件后缀指定到一种文件格式上,比如*.jv指定到Java文件格式,这样在每次打开.jv类型的文件时自动使用Java的语法高亮::autocmd BufNewFile, BufRead *.jv :set ft=Java

(10)mode line

●在编辑文件时常常指定一些选项,比如缩进量、是否将制表符转换成空格等,每次手动指定这些选项很麻烦,写到vimrc中却又成了全局选项,而且换了一份VIM,原有的设置就丢失了。VIM可以识别文件中的特殊行,自动设置一些选项,下面是写在C源文件开头的一个mode line示例:

/* vi:set tw=0 ts=8 sw=8 noet nowrap ft=c fdm=syntax: */
/*
 * File: xxxx.c
 * Author: xxx
 */

强大的帮助系统

VIM的帮助是超链接形式的,它使用的就是tags,所以可以跟ctags功能一样按Ctrl-]跳转到链接所指处,按Ctrl-t返回。

:help		打开帮助首页,这个首页分类非常清楚
:help cmd	查找normal mode命令,比如:help dd
:help i_cmd	查找insert mode命令,比如:help i_Ctrl-y
:help :cmd	查找command-line命令,比如:help :s  
:help 'option	查找选项,比如:help 'tabstop

(这些信息都在:help打开的帮助首页上)

如果你记不清命令或者选项的全称,那么可以利用Tab或者Ctrl-d的自动补全功能。

:help options	可以找到所有的选项说明

查看某一个选项的值(实际上选项是VIM中的一种变量,类似SHELL的变量以$符号引用,VIM的选项以&引用,另外VIM的寄存器以@引用):

:echo &tabstop

其他高级功能

(1)寄存器

● VIM里面的寄存器可以用来保存拷贝的文本、记录的宏、设置的书签等等,一般的编辑器都只有一个剪切板(MS Office加入了多个剪切板),而VIM和Emacs编辑器中的多寄存器可以实现多个剪切板的功能。VIM中有九类寄存器:

无名寄存器   	"	最近一次删除/修改/替换操作的文本都会放入这个寄存器
10个数字寄存器	0-9	拷贝或者删除的文本存入这些寄存器,这些寄存器是循环使用的,在每次存入内容到寄存器1时,原有的内容会依次存入到后一个寄存器中。
小删除寄存器	-	删除内容少于一行时放入这个寄存器
26个命名寄存器	a-zA-Z  大小写无关。这些寄存器可以在拷贝或者删除等操作中指定使用。
四个只读寄存器      :.%#	特殊用途。
表达式寄存器	=	特殊用途。
选择和拖放寄存器    *+~	用于与系统剪切板交互,以及接收拖放操作的内容。
黑洞寄存器   	_	放到这里面的内容都被丢弃,这样可以删除或拷贝时不影响其它寄存器。
最后一次搜索模式寄存器 /	保存最后一次搜索的正则表达式。

●使用:reg命令可以看到所有寄存器中的内容,使用"+y或者"y可以将visual mode下选择的内容拷贝到系统剪切板,使用"+p或者"p可以将剪切板中的内容粘贴到VIM中,如果打开了mswin特性的话则在insert mode下使用Ctrl-x,Ctrl-v,Ctrl-c了。

(2) 宏

Normal mode下按q<reg>,<reg>{a-zA-Z0-9"}37个寄存器中的一个,然后可以进行任何操作,包括在模式间切换,最后在Normal模式下按q可以结束宏录制,用@<reg>命令可以应用这个宏,命令前可以带数字前缀表示执行多少次这个宏。

(3) 书签

Normal mode下按m<reg>作书签,指26个命名寄存器中的一个,然后可以用'或者`跳到书签处。

(4) 映射

●VI/VIM可以将某个按键序列映射到一个命令序列上,比如在配置文件.vimrc(Windows下是_vimrc)中写入map <F6> <ESC>i<C-R>=strftime("%Y-%m-%d")<ESC><ESC>即可以在Normal mode下插入当前日期。

(5) 缩写

●VI/VIM支持用一个缩写字符串代替一个长的字符串,比如:ab hw hello world然后在Insert mode下输入“hw ”(不包括引号)后VIM就自动替换成了“hello world”
这里展示一个Emacs下abbrev功能的动画(是Emacs的):

(http://www.bloomington.in.us/~brutt/msf-abbrev.html)

(http://www.bloomington.in.us/~brutt/msf-abbrev-demo.gif)

(6) 😒//和:g//,:!g//

●这两个命名加上正则表达式,常常能完成非常复杂的编辑任务。:s是替换操作,:g是查找匹配模式的行,:!g是查找不匹配模式的行。

(http://www.vim.org/tips/tip.php?tip_id=1063) 这个tip可以把:g找到的行拷贝到一个新的缓冲区中,非常有用。

(7) 插件

●VIM自己有脚本语言,另外也支持用Perl/Python/Tcl/Ruby/Scheme编写插件,这些插件极大的丰富了VIM的功能。

markdown插件的安装

1、安装好vim:

    sudo apt-get install vim
  sudo apt-get install gvim
  sudo apt-get install git(这个很重要,到后面下载插件的时候要用 git 来下载)

2、在用户的主目录中建立 .vim 目录,在 .vim 目录中建立 bundle 目录,以后Vundle自动下载的插件都保存在这里。

3、然后,进入 Bundle 目录,使用 git clone 命令下载vundle。
  git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
  执行下载完成的话就可以在 bundle 下看到 vundle 目录了。

4、可以在终端输入 vim 然后输入 :echo $VIM 看到自己的 vim 目录,然后在该目录下看看有没有 .vimrc 文件,没有的话就自己创建:touch .vimrc

5、更改.vimrc文件需要 sudo vim vimrc使用vim来修改,也可以使用 sudo gedit vimrc.可以参考别人的设置来设定功能:

(https://github.com/VundleVim/Vundle.Vim)此网址有详细步骤。

6、将以下代码复制进去(代码来自简书作者:许宏川),其中Plugin 'VundleVim/Vundle.vim'这个插件是必须的。


set nocompatible    " be iMproved, required
filetype off " required
" 启用vundle来管理vim插件
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" 安装插件写在这之后
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'
" 安装插件写在这之前
call vundle#end() " required
filetype plugin on 
" required" 常用命令
" :PluginList - 查看已经安装的插件
" :PluginInstall - 安装插件
" :PluginUpdate - 更新插件
" :PluginSearch - 搜索插件,例如 :PluginSearch xml就能搜到xml相关的插件
" :PluginClean - 删除插件,把安装插件对应行删除,然后执行这个命令即可
" h: vundle - 获取帮助

接着使用:wq命令保存vimrc,然后再打开Vim:

sudo vim

然后在vim里面敲这个安装插件的命令:

:PluginInstall

至此插件管理软件vundle已安装完成。

7、安装Markdown所需的三款插件

●step 1:vim-markdown插件

Plugin 'godlygeek/tabular'
Plugin 'plasticboy/vim-markdown'

将这两句写入vimrc中,以后要安装新插件都需要将其写入配置文件,打开方式如前,放的位置有明确说明,“安装……之后”与“安装……之前”的中间,已经有一个插件Plugin 'VundleVim/Vundle.vim'存在,不要放错位置。之后重复上面的部分操作。

使用:wq命令保存vimrc,然后再打开Vim:
sudo vim

然后在vim里面敲这个安装插件的命令:
:PluginInstall

●step2:vim-instant-markdown插件

实时预览的插件,当你用vim打开markdown文档的时候,会自动打开一个浏览器窗口,从而进行实时预览。

(图片来自网络,因为我的虚拟机在进行到这里时彻底卡死了)

安装之前需要先安装node.js和并且安装了npm


安装新版的node.js:
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs
安装完node.js之后安装instant-markdown-d
sudo npm -g install instant-markdown-d

Ps:如果显示npm找不到,直接sudo apt-get install npm

安装vim-instant-markdown插件:在vim配置文件中添加:Plugin 'suan/vim-instant-markdown'

vim里面执行::PluginInstall

到此即可用vim编写markdown文档了,你可以在terminal中输入:vim jianshu.md开始使用。

(8) color scheme

●VIM有许多配色方案,下面这个链接有许多配色方案效果的图样:
(http://www.cs.cmu.edu/~maverick/VimColorSchemeTest/)

(9) 二进制编辑

● VIM可以利用xxd实现二进制编辑,不过这项功能还是不够好用。

(10) sign

●sign指在编辑窗口的最左列显示一个标记,利用这个功能能实现很多IDE中的书签标记或者断点标记。

vim学习资料总结

一、官方文档

当首次安装好 Vim 之后,可以用 :help tutor 或者 :help tutor@cn 命令,进入一个30分钟的 Vim 入门教程。也可以下载一个 Vim Documentation Chinese Version (Vim官方文档中文版)的安装包,安装好之后使用 :help @cn 命令查看中文官方文档。另外,还可以下载一个 Vim 用户手册的中文翻译版本 PDF 电子书去了解更多。

二、更多vim学习资源整理汇总:

•[大家来学 Vim](http://www.study-area.org/tips/vim/) | 李果正 (台湾网友编写的手册,PDF格式,80多页。)

•Vim 使用技术 | IBM 吴咏炜 (共分3篇:实用技巧常用插件定制 Vim

神奇的VIM|IBM 闫石 (举了很多例子,尽显Vim之神奇,特别推荐阅读。)

•史上最强的 vimrc 文件|amix (约800行,未必全用,但通读有益!该版本为国内网友改进版,更符合中文习惯。)

史上最强的 Vim Tips

Vi / Vim 使用进阶|Easwy (vim的使用技巧、vim的配置及vimrc、vim的命令和vim的插件。包括:序言(讲述我使用vi/vim的经历和心得,以及对vi/vim初学者的一些建议)

•Vim对程序员与普通人分别有什么用? (Dieken写过 程序员的编辑器VIM 后,xbeta写了 普通人的编辑利器 Vim。)

用心绘制的Vim入门图解说明 | vgod

vim深入研究 心得体会

通过本次自己动手查找VIM编辑器的相关资料,刷新了自己之前对Vim的认知,也更加理解老师之前博客中vim的学习曲线的涵义了,此次项目,对我而言是一个学习新知识的过程,也复习了之前简单的在Linux下,尤其是在编写代码、拷贝老师给的代码时的操作,但现在看来,那不过是vim功能的惊鸿一瞥,不足一提。我从vim的定义开始,了解了它是重要的代码甚至文本编辑工具,更是了解了它的一些高级功能:如:插件、宏、以及它强大的帮助系统等,个人而言受益匪浅。

此篇博客,是对vim功能及使用的一个简略总结,我知道学习vim非一日之功,为给大家提供一个简单指导,从什么是vim开始介绍、简单的使用方法、高级功能概述,以及更多学习资源链接,希望对大家的学习有所帮助。

posted on 2016-12-21 18:37  xzhkuma  阅读(1074)  评论(1编辑  收藏  举报