# Step 1
《 V I M 教 程 》摘要(版本 1.5)
(注释:本文仅为个人学习摘要,推荐启动本教程学习,只需vi里要输入命令$ vimtutor )
vim 是一个具有很多命令的功能非常强大的编辑器。限于篇幅,在本教程当中
就不详细介绍了。本教程的设计目标是讲述一些必要的基本命令,而掌握好这
些命令,您就能够很容易将vim当作一个通用的万能编辑器来使用了。
完成本教程的内容大约需要25-30分钟,取决于您训练的时间。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第一讲小结
1. 光标在屏幕文本中的移动既可以用箭头键,也可以使用 hjkl 字母键。
h (左移) j (下行) k (上行) l (右移)
2. 欲进入vim编辑器(从命令行提示符),请输入∶vim 文件名 <回车>
3. 欲退出vim编辑器,请输入以下命令放弃所有修改∶
<ESC> :q! <回车>
或者输入以下命令保存所有修改∶
<ESC> :wq <回车>
4. 在正常模式下删除光标所在位置的字符,请按∶ x
5. 在正常模式下要在光标所在位置开始插入文本,请按∶
i 输入必要文本 <ESC>
特别提示∶按下 <ESC> 键会带您回到正常模式或者取消一个不期望或者部分完成
的命令。
好了,第一讲到此结束。下面接下来继续第二讲的内容。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第二讲小结
1. 欲从当前光标删除至单字/单词末尾,请输入∶dw
2. 欲从当前光标删除至当前行末尾,请输入∶d$
3. 欲删除整行,请输入∶dd
4. 在正常模式下一个命令的格式是∶
[number] command object 或者 command [number] object
其意是∶
number - 代表的是命令执行的次数
command - 代表要做的事情,比如 d 代表删除
object - 代表要操作的对象,比如 w 代表单字/单词,$ 代表到行末等等。
$ (to the end of line), etc.
5. 欲撤消以前的操作,请输入∶u (小写的u)
欲撤消在一行中所做的改动,请输入∶U (大写的U)
欲撤消以前的撤消命令,恢复以前的操作结果,请输入∶CTRL-R
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第三讲小结
1. 要重新置入已经删除的文本内容,请输入小写字母 p。该操作可以将已删除
的文本内容置于光标之后。如果最后一次删除的是一个整行,那么该行将置
于当前光标所在行的下一行。
2. 要替换光标所在位置的字符,请输入小写的 r 和要替换掉原位置字符的新字
符即可。
3. 更改类命令允许您改变指定的对象,从当前光标所在位置直到对象的末尾。
比如输入 cw 可以替换当前光标到单词的末尾的内容;输入 c$ 可以替换当
前光标到行末的内容。
4. 更改类命令的格式是∶
[number] c object 或者 c [number] object
下面我们继续学习下一讲。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第四讲小结
1. Ctrl-g 用于显示当前光标所在位置和文件状态信息。Shift-G 用于将光标跳
转至文件最后一行。先敲入一个行号然后按 Shift-G 则是将光标移动至该行
号代表的行。
2. 输入 / 然后紧随一个字符串是则是在当前所编辑的文档中向后查找该字符串。
输入问号 ? 然后紧随一个字符串是则是在当前所编辑的文档中向前查找该字
符串。完成一次查找之后按 n 键则是重复上一次的命令,可在同一方向上查
找下一个字符串所在;或者按 Shift-N 向相反方向查找下该字符串所在。
3. 如果光标当前位置是括号(、)、[、]、{、},按 % 可以将光标移动到配对的
括号上。
4. 在一行内替换头一个字符串 old 为新的字符串 new,请输入 :s/old/new
在一行内替换所有的字符串 old 为新的字符串 new,请输入 :s/old/new/g
在两行内替换所有的字符串 old 为新的字符串 new,请输入 :#,#s/old/new/g
在文件内替换所有的字符串 old 为新的字符串 new,请输入 :%s/old/new/g
进行全文替换时询问用户确认每个替换需添加 c 选项,请输入 :%s/old/new/gc
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第五讲小结
1. :!command 用于执行一个外部命令 command。
请看一些实际例子∶
:!dir - 用于显示当前目录的内容。
:!rm FILENAME - 用于删除名为 FILENAME 的文件。
2. :w FILENAME 可将当前 VIM 中正在编辑的文件保存到名为 FILENAME 的文
件中。
3. :#,#w FILENAME 可将当前编辑文件第 # 行至第 # 行的内容保存到文件
FILENAME 中。
4. :r FILENAME 可提取磁盘文件 FILENAME 并将其插入到当前文件的光标位置
后面。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第六讲小结
1. 输入小写的 o 可以在光标下方打开新的一行并将光标置于新开的行首,进入
插入模式。
输入大写的 O 可以在光标上方打开新的一行并将光标置于新开的行首,进入
插入模式。
2. 输入小写的 a 可以在光标所在位置之后插入文本。
输入大写的 A 可以在光标所在行的行末之后插入文本。
3. 输入大写的 R 将进入替换模式,直至按 <ESC> 键退出替换模式而进入正常
模式。
4. 输入 :set xxx 可以设置 xxx 选项。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第七讲∶在线帮助命令
** 使用在线帮助系统 **
Vim 拥有一个细致全面的在线帮助系统。要启动该帮助系统,请选择如下三种方
法之一∶
- 按下 <HELP> 键 (如果键盘上有的话)
- 按下 <F1> 键 (如果键盘上有的话)
- 输入 :help <回车>
输入 :q <回车> 可以关闭帮助窗口。
提供一个正确的参数给":help"命令,您可以找到关于该主题的帮助。请试验以
下参数(可别忘了按回车键哦。:)∶
:help w <回车>
:help c_<T <回车>
:help insert-index <回车>
:help user-manual <回车>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第八讲∶创建一个启动脚本
** 启用vim的功能 **
Vim的功能特性要比vi多得多,但大部分功能都没有缺省激活。为了启动更多的
功能,您得创建一个vimrc文件。
1. 开始编辑vimrc文件,这取决于您所使用的操作系统∶
:edit ~/.vimrc 这是Unix系统所使用的命令
:edit $VIM/_vimrc 这是Windows系统所使用的命令
2. 接着导入vimrc范例文件∶
:read $VIMRUNTIME/vimrc_example.vim
3. 保存文件,命令为∶
:write
在下次您启动vim的时候,编辑器就会有了语法高亮的功能。您可以继续把您喜
欢的其它功能设置添加到这个vimrc文件中。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vim 教程到此结束。本教程只是为了简明地介绍一下vim编辑器,但已足以让您
很容易学会使用本编辑器了。毋庸质疑,vim还有很多很多的命令,本教程所介
绍的还差得远著呢。所以您要精通的话,还望继续努力哦。下一步您可以阅读
vim手册,使用的命令是∶
:help user-manual
# Step 2
(注释:本文仅为个人学习摘要,推荐网上下载本文学习)
Vi IMproved 简介
edyfox@smth.org ( 滇狐)
清华大学软件学院
北京大学Linux 俱乐部
Unix 下的全屏幕可视化编辑器
由于其源代码不可获得,衍生了许多克隆版本
nvi 、elvis 、vile 、VIM...
VIM 即Vi IMproved , vi 克隆版本之一
VIM 简介
目前最流行的vi 克隆版本
支持目前绝大部分平台
Windows 、Unix 、Linux 、MacOS 、DOS...
功能强大,扩展性强
Bram Moolenaar 编写
1991 年11 月完成第一个版本
目前最新稳定版本为6.3
慈善软件
不强制注册
即使不通过注册,也能使用VIM 全部功能
注册用户可以投票选择想要的功能
个人家庭使用注册费10 欧元
用于专业领域编辑工作注册费30 欧元
缴纳的注册费将用于救助乌干达的可怜儿童
主要用于救助艾滋病肆虐的地区失去父母的孤儿
什么人适合使用VIM ?
追求编辑效率的程序员
VIM 的作者是程序员
他为程序员开发了许多有用的功能
其它经常处理纯文本的人员
中小型企业Web 开发人员
编写LaTeX 文档的研究人员
Unix / Linux 系统管理员
什么人不适合使用VIM ?
生活、工作和学习无需和纯文本打交道的人
处理其它类型的文件有专门的工具
打字速度慢于智能感知运行速度的人
VIM 目前暂不支持智能感知
被强大的IDE 惯坏了的人强大顺手的IDE 比方便快捷的编辑器更重要
主要内容
VIM 简介
VIM 入门
VIM 基本操作
VIM 快速编辑示例
编写自己的.vimrc
VIM 进阶
屏蔽系统自带的vimrc
Linux 用户
创建~/.vimrc 文件
Windows 用户
在个人主目录下创建空文本文件_vimrc
注意显示扩展名问题
Linux 下中文处理
编辑时不能输入中文
:set encoding=cp936
菜单显示是乱码
:so $VIMRUNTIME/delmenu.vim
:so $VIMRUNTIME/menu.vim
选择喜欢的字体
通过菜单与对话框选择字体
编辑--> 选择字体
只有等宽字体可以被选中
适合程序员使用的字体基本原则
Bitstream Vera Sans Mono
0Oo 1Il
:set guifont?
记住选中的字体名称
将显示结果抄下来备用
写入.vimrc
VIM 不能自动记住你所做的配置修改
需要手工写入.vimrc
双引号开头的行表示注释
你现在的.vimrc 也许是这个样子的:
" Windows 下建议也加上这句set encoding=cp936
" 这两句只在Linux 下需要so $VIMRUNTIME/delmenu.vim so $VIMRUNTIME/menu.vim
" 设置字体。" 字体名称可以通过前一节介绍的语句获得," 如果字体名称中含有空格," 需要在空格前面加上一个反斜杠,如下:set guifont=Courier/ 9
VIM 基本操作
VIM 是一个有模式的编辑器
Normal 模式下按键序列对应命令
按i 键进入Insert 模式
按: 进入command 模式
Insert 模式下可以输入文本
按ESC 回到Normal 模式
Command 模式下输入命令
有模式导致VIM 快捷键长度较短
使用hjkl
VIM 支持使用方向键移动光标
在insert 状态下移动光标会比较方便
使用hjkl 移动光标编辑效率更高
距离近,按键方便,眼睛无需离开屏幕
俄罗斯方块
http://vim.sf.net/scripts/script.php?script_id=172
vimtutor
vimtutor 是VIM 入门非常好的学习材料
Linux 用户
在终端中输入vimtutor
启动字符界面的vimtutor
Windows 用户
在开始菜单中找vimtutor 快捷方式
启动后出现乱码,重新选择一个中文字体即可
快速编辑示例
不再详细VIM 基本操作
时间所限,对VIM 的介绍不可能面面俱到
水平所限,所讲内容不可能强过vimtutor
介绍几个VIM 快速编辑示例
对于老用户,进一步增强记忆
对于新用户,坚定学习VIM 的决心
查找替换
准备工作
打开VIM ,按i ,输入:
this is a test
查找替换
按ESC 回到normal 状态,输入:
:%s/ /^M/g
其中^M 使用Ctrl-v.Ctrl-m 的方式输入
将所有空格替换为回车,文本变为4 行
行的拼接
查找/n 替换为空格可以实现拼接
这里使用j 命令拼接行
按ggVG ,全选
按: ,此时命令行显示为:
:'<,'>
在其后输入j ,回车
拼接完毕
复制粘贴与重复动作
在normal 状态下按yy ,复制当前行
按12p ,屏幕上即出现13 行上述字样
12 表示将其后的命令执行12 次
p 表示粘贴到当前行之后
VIM 里大部分命令都可以加上数字表明执行次数
列操作
选中全文第一列
按gg 跳到开头
按Ctrl-v 进入列选择状态
按G 跳到末尾
将每行第一列变为大写
按U 表示把选中内容变大写
按u 表示把选中内容变小写
按~ 表示翻转原有大小写
列操作
在每行前面加一个星号和一个空格
选中第一列
按I 进入插入状态
输入* ,按ESC
选中前两列后按x ,可以进行列删除
编程时可以用于批量注释和批量解注释
宏的录制
将所有偶数行的a 改成another
录制宏
按gg 进入第一行
按qm 进入宏录制状态,录制到寄存器m
按j 进入第二行,按$ 跳到行末
按2b ,光标停在字母a 上
按caw ,输入another ,按ESC ,按j 进入下一行
按q 结束宏的录制
宏的播放
单次播放
按下@m ,执行m 寄存器中的宏
可以发现第4 行的a 也变成了another
多次播放
输入1000@m
可以发现所有偶数行的a 都变成了another
到达文件底部时宏执行出错,会自动停止
最终并没有真的执行1000 次
点命令
在每行末尾添加一个感叹号
执行次数不多的简单操作无需使用宏
按gg 进入第一行,按A 进入行尾添加状态
输入! ,按ESC ,按j 进入第二行
按. 表示重复前一个操作,即行尾添加!
反复按j.j.j.j.
推荐大家左手鼠标
:%s/$/!/g
VIM 入门
21 天学习计划
多读文档,少走弯路
第一周:每天一遍vimtutor
熟悉基本操作,做到随心所欲
第二周、第三周:通读用户手册
读用户手册的同时修订出适合自己的.vimrc
目前手册有中文版译本可供下载
.vimrc for Beginners
基本设置
set nocp -设置不兼容模式
set ru -打开状态栏标尺
set hls -搜索时高亮显示被找到的文本
set is -递进搜索
syntax on -打开关键字上色
set backspace=indent,eol,start
set whichwrap=b,s,<,>,[,]
h,l,~
编码设置
一段可以自动猜测编码的脚本,很强的
" Encoding settings
if has("multi_byte")
" Set fileencoding priority
if getfsize(expand("%")) > 0
set fileencodings=ucs-bom,utf-8,cp936,big5,euc-jp,euc-kr,latin1
else
set fileencodings=cp936,big5,euc-jp,euc-kr,latin1
endif
" CJK environment detection and corresponding setting
if v:lang =~ "^zh_CN"
" Use cp936 to support GBK, euc-cn == gb2312
set encoding=cp936
set termencoding=cp936
set fileencoding=cp936
elseif v:lang =~ "^zh_TW"
" cp950, big5 or euc-tw
" Are they equal to each other?
set encoding=big5
set termencoding=big5
set fileencoding=big5
编码设置
续前页
elseif v:lang =~ "^ko"
" Copied from someone's dotfile, untested
set encoding=euc-kr
set termencoding=euc-kr
set fileencoding=euc-kr
elseif v:lang =~ "^ja_JP"
" Copied from someone's dotfile, unteste
set encoding=euc-jp
set termencoding=euc-jp
set fileencoding=euc-jp
endif
" Detect UTF-8 locale, and replace CJK setting if needed
if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8
endif
else
echoerr "Sorry, this version of (g)vim was not compiled with multi_byte"
endif
.vimrc for Beginners
文本编辑设置
set sw=4 -缩进尺寸4 个空格
set ts=4 -Tab 宽度为4 个字符
set et -将所有Tab 替换为空格
.vimrc for Beginners
C/C++ 编码设置
set cin -自动缩进
set ai -还是自动缩进
set cino=:0g0t0(sus
set sm -显示括号匹配
在console 下粘贴的版式问题
“ :set paste” 、“ set nopaste”
“ =” 命令重调格式
.vimrc for Beginners
断行设置
set lbr -不在单词中间断行
set fo+=mB -打开断行模块对亚洲语言支持
其它设置
set selectmode=
set mousemodel=popup
set keymodel=
set selection=inclusive
.vimrc for Beginners
图形界面与字符界面分别设置
if (has("gui_running")) -图形界面设置set nowrap -不折行set guioptions+=b -水平滚动条colo torte -配色方案
else -字符界面设置set wrap -折行colo ron -配色方案
endif
主要内容
VIM 简介
VIM 入门
VIM 进阶
VIM 常用插件简介
在VIM 中编写程序
在VIM 中编写LaTeX 文档
插件安装路径
$HOME/.vim 或%HOME%/vimfiles
$VIM/vimfiles
$VIMRUNTIME
$HOME/.vim/after 或%HOME%/vimfiles/after
$VIM/vimfiles/after
插件目录结构
colors
ftplugin
compiler
indent
doc
keymap
plugin
etc
ftdetect
syntax
常用插件推荐
日程安排工具Calendar
常用插件推荐
涂鸦插件Sketch
常用插件推荐
一系列插件实现的VIM.IDE
窗口管理器+ 文件浏览器(窗口管理器插件)
Tlist + ctags
VIM + ctags + cscope
ctags 、cscope 简介
常用插件推荐
ViKi + Deplate
类似WiKi 的语法
用于制作基于内容的简单个人主页
滇狐的个人主页就是使用ViKi 制作的
优点
使用方便,功能比较强大
缺点
配置复杂,依赖项太多
在VIM 下编写程序
正确地编写Makefile
设置合适的makeprg
例如在有的系统下你也许想用gmake
在Windows 下最好安装一份tee
能够看到编译过程
:set shellpipe=2>&1/|/ tee
根据编译器输出正确设置errorformat
在VIM 下编写程序
常见编译器可通过VIM 自带脚本设置参数
:compiler xxx
菜单项:工具--> Set compiler
使用:make 编译程序
使用:copen 查看错误列表
:make
:make clean
copen 小技巧
在多个文件中搜索指定字符串
将搜索结果列在一个buffer 中
可以条目跳转到相应文件的相应位置
copen 具备这样的能力
需求
在文件中检索指定字符串的工具
在检索结果给出文件名和行号信息
合适的errorformat 设置
copen 小技巧
设置grep 参数
:set grepprg=grep/ -nH/ $*
建议写到.vimrc 中
使用grep 命令查找文件
:grep "test string 2" *
:grep -R "test string 2"
:grep "function" *.cpp
在VIM 下编写LaTeX 文档
安装LaTeX Suite
配置正向、反向搜索
正向搜索
在生成的dvi 文件中查找源代码所对应元素
反向搜索
在生成的dvi 文件中查找元素所对应源代码的位置。
初学者关于<++> 的困惑
是LaTeX Suite 一项非常好用的功能
主要内容
VIM 简介
VIM 入门
VIM 进阶
VIM 使用小结
VIM 是非常强大而方便的文本编辑器
需要通过学习才能够用好
学习付出的努力是值得的
不要报怨VIM 作为IDE 不够强大
先想想自己为所谓“强大”的IDE 付了多少钱
开源社区的项目需要所有人为之付出劳动
谢谢大家!
感谢大家支持!
Q&A
Happy VIMming~~
#Step 3...
http://blog.youkuaiyun.com/iiprogram/archive/2006/03/14/624403.aspx
学习资源
VIM 网站
中文站点
水木社区VIM 版及版面附属FTP
学习资源
VIM 邮件列表