[TOC]
1. vim-vi简介
在UNIX系统中,创建和修改配置文件、shell脚本、初始化文件、编写程序都离不开VI。
- vi属于两个主要的UNIX规范:POSIX和单一UNIX规范。
- vi编辑器由Bill Joy于1976年创建。
- vi是一种面向屏幕的编辑器。
- vi来源于另一个编辑器ex。
- vim是vi的增强版。
- 1988年,荷兰的Bram Moolenaar创建了vim。
下来看下vim的启动屏幕:
2. 帮助
学习vi,学会使用联机手册或帮助命令是非常重要的。Unix有两个最重要的文档资料系统:Unix手册和Info(GNU项目的官方文档资料系统)。
常用常见命令:
man vi
vi --help
info vi
对于较长的说明页,可使用分页程序分页显示。常用的分页程序有:less、more、pg。例如:
man cp | less
查找说明书页的其它方法(基于web):
- 使用google搜索:(一定要确保包含双引号)
**“man vi ”**
**“man pages” vi**
- 另外一种基于web的说明书页的方法是xman,xman是一个基于GUI的程序,它充当说明书页浏览器。在命令行启动xman:xman&。
- vi-vim帮助
如果还没接触vim,可在shell中输入vimtutor,查看教程。
vi-vim的帮助命令:
:help
- 一些其他
英文不好的同学,可在http://sourceforge.net/projects/vimcdoc/files/vimcdoc/1.5.0/vimcdoc-1.5.0.tar.gz/download?use_mirror=jaist,下载vim中文帮助。
使用中文帮助文档
set helplang=cn
使用英文帮助文档:
set helplang=en
3. 模式和命令
3.1 输入模式和命令模式
命令模式[[2]]:所键入的键都被解释成命令。
输入模式(input mode):键入的任何内容都直接插入到编辑缓冲区中。
当离开输入模式时,使用Esc键切换到命令模式。
了解所处模式的方法:
:set showmode
3.2 vi和ex命令
vi和ex是同一个程序的两种不同的表现形式。也就是说可以同时使用vi和ex命令。
vi:
①大多数vi命令都是单字母或双字母的表现形式。
②vi键入时命令不回显。
ex:
①ex命令比vi命令长。
②所有的ex命令都以一个:(冒号)开头。键入:后,vi就将光标移动到命令行上(屏幕最底部)。
③ex命令的每个字符都将回显。
④ex命令结束,必须按下
3.3 命令补全
命令补全:Tab
关键字补全:^N ^P
4. 启动与编辑vi-vim
4.1 编辑一个文件
语法:
vi 【-rR】 【file……】
常用命令:
vi file 启动vi,编辑指定的文件
vi -R file 以只读模式启动vi
view file 以只读模式启动vi (vi -R file等同于view file)
vim file 启动vim,编辑指定的文件
vim -C file 以兼容模式启动vi
4.2 编辑技巧
编辑技巧:
vi +[num] file 打开文件,并将光标置于第n行首
vi + file 打开文件,并将光标置于最后一行首
vi +/pattern file 打开文件,并将光标置于第一个与pattern匹配的字符串
vi +?pattern file 编辑工作从匹配pattern的最后一行开始
vi -r file (-r 即recover,恢复)
4.3 文本插入
操作键说明
i 在当前光标位置前插入数据
a 在当前光标位置后插入数据
I 在当前行开头处插入数据
A 在当前行末尾处插入数据
o 在当前行下面出入一行
O 在当前行上面插入一行
4.4 写入文件
常用命令:
:w 将数据写入到原始文件
:w file 将数据写入到指定文件
:w >> file 将数据追加到指定文件
:r [filename] 在编辑的数据中,读取另一个档案的数据,亦将档案内容加到游标所在行的后面
:n1,n2 w [filename] 将n1到n2的内容存储成另一个档案。
4.5 退出文件、停止vi
常用命令:
:q 退出文件
:q! 不保存数据,强制退出
:wq 保存退出文件
shift+ZZ 停止vi
ZQ 无条件退出
4.6 多档编辑
通常用法:语法:vi a.txt b.txt c.txt,切换文件: :next
:n 编辑下一个档案
:2n 编辑下两个档案
:N 编辑前一个档案
:e 在不离开当前vim窗口的情形下,在编辑其它档案
:e# 编辑前一个档案
:e! 放弃目前正在编辑的档案
:r 在游标所在处插入一个档案内容
:9r 将档案插入到9行之后
:f 显示当前正在编辑的档名,相当于^g
:f filename 改变编辑中的档名。
:files 列出目前buffer中的所有档案,相当于:ls 或 :buffers
:bn 移至下一个buffer
:bl 移至前一个buffer
:b 档名 移至该档名
4.7 vi与vim命令行常用选项
-b 以二进制模式编辑文件
-c command 启动后立即运行给定的ex命令
-d 以diff模式运行
-o[num] 启动vim时打开num个窗口
-O[num] 启动vim时打开num个水平排列
-r 恢复模式
-R 于只读模式中编辑文件
-t tag 编辑包含tag的文件,并将光标置于tag位置
-T type 设置可选终端类型
5. 视窗操作
5.1.常见用法:
$ vi -o file1.txt file2.txt #水平分割
$ vi -O fiel.txt file2.txt #垂直分割
5.2.vim视窗用法
视窗分割:
^w n 将视窗一分为二
^w p 等同:split,把当前窗口水平分割
:vsplit 把当前窗口垂直分割
^w s 打开一新视窗,且原档分属两个视窗
视窗关闭:
^w q 结束分割出来的视窗
:close 关闭当前窗口
视窗打开:
^w o 等同于:only,只显示当前的窗口,隐藏其它视窗
:all 打开所有窗口
:vertical all 垂直打开所有的窗口
:buffers 列出所有的当前窗口
:buffer 2 编辑第二个窗口
视窗移动:
^w j 移至下视窗
^w k 移至上视窗
6. 光标移动、缓冲区移动、搜索移动、行号跳转]
移动和跳转
不论任何时候,光标必然位于屏幕的某一行上,这一行就称之为当前行。
在当前行中,光标位于某个字符之上或者之下,这个字符就称之为当前字符。
为了增强光标移动命令的功能,可以通过在命令前面键入一个数字来重复执行光标移动命令,这个数字称为重复次数。
6.1 获取光标当前位置
获取方式:^G
6.2 缓冲区移动
^F 向下移动一屏
^B 向上移动一屏
n^F 向下移动n屏
n^B 向上移动n屏
^D 向下移动半屏
^U 向上移动半屏
n^D 向下移动n行
n^U 向上移动n行
^E 向屏幕顶端多滚动一行
^L 向屏幕底端多滚动一行
z**ENTER** 将光标所在的行移动到屏幕顶端
z. 将光标所在的行移动到屏幕中间
z- 将光标所在的行移动到屏幕底端
6.3 光标移动、单词句段移动
操作键说明:
h 将光标向左移动一个位置
j 将光标向下移动一个位置
k 将光标向上移动一个位置
l 将光标向右移动一个位置
- 将光标移动到上一行的开头
+ 将光标移动到下一行的开头
^ 将光标移动到当前行的第一个非空格/制表符的字符上
数字0 将光标移动到当前行的开始
$ 将光标移动到当前行的末尾
单词、句段移动
w W 将光标移动到下一个单词的词首(大写字母,略过空格)
e E 将光标移动到下一个单词的词尾(大写字母,略过空格)
b B 将光标移动到上一个单词的词首(大写字母,略过空格
)
) 向前移动到下一个句子
( 向后移动到上一个句子
{ 向前移动到下一个段落
} 向后移动到上一个段落
H 将光标移动到屏幕顶部
M 将光标移动到屏幕中间
L 将光标移动到屏幕的最后一行
% 已匹配一个括号为目的的移动
说明:
命令计数:在移动命令前加数字,如3j,可实现向下移动三行。
语法:
**n**command (n为数字,command为移动命令)
规律:一个命令的大写字母
形式会做同样的事情,但是方向相反。
6.4 搜索移动
fcharacter 单字符搜索移动(f为搜索命令,character为要搜索的字符)
Fcharacter 单字符左方向搜索移动
6.5 行号跳转
显示行号: :set number
关闭行号: :set nonumber
命令说明:
nG 、 :n 跳转到第n行
1G 、 gg 、 :1跳转到编辑缓冲区的第一行
G 、 :$ 跳转到编辑缓冲区最后一行
附加:
另一个移动到某行的办法是:在命令 **% **前加一个命令计数,如 50% 会把光标定位在文件中间。
6.6 跳转到前一位置
返回前一位置:
**``** (两个反引号)
‘’ (两个单引号)
6.7 使用名称标示任意行,进行跳转
用不可见的名称标识任意行,当需要时使用此名称跳转到这一行。
可以键入m
标示这一行,后跟一个字母,这个字母就是这一行的名称。
例如:用”b“标示这一行,可以键入b
。为了跳转到这一行,可以键入一个反引号或单引号,后面跟这一行的名称。如````b或
’b```
7. 搜索
7.1搜索常用命令
向前搜索: /
向后搜索: ?
/ 向前重复搜索
? 向后重复搜索
/regex 向前搜索指定的正则表达式
?regex 向后搜索指定的正则表达式
n 重复上一条/或?命令,搜索方向相同
N 重复上一条/或?命令,搜索方向相反
附:
命令历史记录:用上下箭头来查找用过的搜索
7.2查找字符串便捷方式
命令 : 将光标定位于字符串,按下键,vi将会取当前光标所在的字符串并将它作用目标字符串进行搜索。
命令: 与*
相反。
% 搜索与当前花括号、圆括号、方括号成对的符号。
7.3 查找整个字符串
方法: 使用\< \>
进行匹配。
例子:```/
8. 文本改动(替换)
8.1替换之vi命令
r: 精确替换一个字符(不进入输入模式)。
R: 替换多个字符(以覆盖方式替换)。(先将光标移动到希望开始替换的位置,然后输入R。切换到输入模式,随后键入的每个字符都将替换当前行上的一个字符。)
s: 允许使用多个字符替换一个单个的字符(以插入方式替换)。
C: 允许替换从当前光标位置到本行末尾的所有字符。
S 或 cc: 以插入方式替换当前整行。
cmove: 以插入方式从当前光标处替换到move所给出的位置处。
8.2 替换之ex命令_常用方法
ex命令:
语法::s/pattern/replace/
其中,pattern是替换的模式,replace是替换的文本。
使用方法总结:
:s/pattern/replace/ 替换当前行
s/pattern/replace/g 替换当前行所有
:lines/pattern/raplace/ 替换指定行
:line,lines/pattern/replace/ 替换指定范围内的行
:%s/pattern/replace/ 替换所有行
:.,$s/pattern/replace/g 从当前行末尾至编辑缓冲区的末尾进行相同的替换
:line,.s/pattern/replace/g 从编辑缓冲区的指定位置到当前行进行相同的替换
说明 :
- 所有的ex命令都以
:
开头。 -
:s
只替换当前行上该模式的第一个匹配项。 - 为了替换所有匹配项,需在该命令的末尾键入字母g。例如:
:s/UNIX/linux/g
- 替换前进行确认,可在命令末尾添加
c
。例如::s/UNIX/linux/cg
-
.
点号代表当前行。$
代表缓冲区最后一行。%
代表编辑缓冲区内所有的行。
8.3 交换字符
交换两个字符的位置: xp
交换两行的位置:ddp
调换两个单词(光标开始处于第一个单词的左边):deep
9. 大小写转换
大小写帮助::h~
一些常用命令:
~ 将光标下的字母改变大小写
3~ 将光标位置开始的3个字母改变其大小写
g~~ 改变当前行字母的大小写
U 将可视模式下选择的字母全改成大写字母
u 将可视模式下选择的字母全改成小写
gUU 将当前行的字母改成大写
3gUU 将从光标开始到下面3行字母改成大写
guu 将当前行的字母全改成小写
gUw 将光标下的单词改成大写。
guw 将光标下的单词改成小写。
10. 删除、撤销、恢复删除、复制删除
10.1 删除命令
x 删除当前光标处的字符
X 删除光标左边的字符
D 删除从当前光标到本行末尾的字符
J 删除两行之间的换行符 (亦可用于合并两行)
dmove 删除从当前光标到move所给位置的字符
dd 删除当前行
ex命令
:lined 删除指定行
:line,lined 删除指定范围内的行
10. 2 常用的删除组合命令
说明:操作符命令+位移命令
1 nx 删除多个字符(n为删除的字符个数)
2 dw 删除1个单词
3 d10w 删除10个单词
4 d10W 删除10个单词,忽略标点符号。
5 db 向后删除一个单词
6 d2) 删除两个句子
7 d5} 删除5个段落
8 dG 或 :.,$d 删除当前行到编辑缓冲区末尾的所有行
9 dgg 或 d1G 或:1,.d 删除当前行到编辑缓冲区开头的所有行
10 :1,$d 或 :%f 删除整个编辑缓冲区
11 d/word 删除从光标所在位置到单词word的所有文本
12 .,/word/d 删除从光标所在位置到单词word的所有文本
13 df x 删除至当前行中x所在的位置
14 d^ 删除至该行的开始处
15 :g/^$/d 删除文件中所有空行
10.3插入模式中删除操作
^U 删除当前行
^H 删除前一个字符
^W 删除前一个词
10.4 撤销或重复改变
vi命令:
1 u 撤销上一命令对编辑缓冲区的修改
2 U 恢复当前行(即一次撤销对当前行的全部操作)
3 .点号 重复上一命令对编辑缓冲区的修改
10.5 恢复删除
语法:"1p(P)
说明:
1
为缓冲区的编号。p
在当前行的下面插入,P
在当前行的上面插入。
10.6 复制上一次删除
命令
说明
p 复制上一次删除的内容,插入到光标的后面/下面
P 复制上一次删除的内容,插入到光标的前面/上面
10.7其它有用的一些删除
删除行尾多个空格 : :%s/\s\+$//g
删除行首多个空格 : :%s/^\s*//g
删除重复行: :%s/^(.*)n1/1$/
删除所有中文: :%s/\v[^\x00-\xff]+//g
删除所有数字: :%s/\d//g
11.接出复制
当在不删除文本的情况下将文本复制到无名缓冲区时,称为接出(yank)。(因此将命令命名为y、yy、Y
)。
小提示: 可使用大写V
选择一行文本。
11.1 接出(复制单词、句子、段落)
步骤:
- 使用y、yy、Y将文本由编辑缓冲区复制到无名缓冲区中,但不删除原始文本。
- 将光标移动到希望插入文本的位置。
- 使用P或p命令执行插入。
常用命令
yw 接出一个单词
y10w 接出10个单词
y10W 接出10个单词,忽略标点符号
yb 向后接出一个单词
y2) 接出两个句子
y2} 接出5个段落
yy 接出一行
10yy 接出10行
y$ 接出从当前字符到本行末尾的的文本
y0 接出从当前字符到这一行开头之间的文本
11.2 复制与移动行
语法:
:x,ycoz
:x,ymz
说明:
1 x,y,z
都是行号。x,y
是源行,z
是目标行号。
2 源行x,y
被复制或移动,插入到z
行的下面。
3 :m
删除原始行,:co
不删除原始行。
例子:
:2co4 复制第2行,插入到第4行下面
:2,4co8 复制第2行到第4行,插入到第8行下面
:2m4 移动第2行,插入到第4行下面
:2,4m8 移动第2行到第4行,插入到第8行下面。
12. 文本重排
12.1.查看目前的设定值
:set shiftwidth
12.2.简单的重排
gqq 本行重排
:ce(nter) 本行文字居中
:ri(ght) 本行文字靠右
:le(ft) 本行文字靠左
shift + > 整行向右移动一个
shift + < 整行向左移动一个
12.3.重排段落
命令: gqip
12.4.全文重排
命令: gqQ
12.5.设置行间距
命令: set linespace
13. 正则表达式
中介字元:
\s 表示空白字元,即或
\S 表示非空白字元
\d 表示数字字元,即[0-9]
\D 便是非数字字元,即[^0-9]
\w 表示一般字元,即[0-9a-zA-Z]
\W 表示非一般字元,即[^0-9a-zA-Z]
\a 表示英文字母,即[a-zA-Z]
\A 表示非英文字母,即[^a-zA-Z]
\l 表示小写字母,即[a-z]
\L 表示非小写字母,即[^a-z]
\u 表示大写字母,即[A-Z]
\U 表示非大写字母,即[^A-Z]
vim正则表达式:
http://www.softpanorama.org/Editors/Vimorama/vim_regular_expressions.shtm
14. 加密
文件加密 X(大写)
15. 缩写
要为经常使用的单词或表达式创建缩写,可使用:ab
命令。
- 创建缩写,语法:
:ab [ short long ]
short是缩写,long是缩写的原文。 - 删除缩写,语法:
:una short
16. vim-shell命令
16.1 执行shell命令
:!command 暂停vi,执行制定的shell命令
:!! pause vi 执行上一条shell命令
:sh 暂停vi,启动一个新的shell
:!csh 暂停vi,启动一个新的c-shell
16.2 使用shell命令处理数据
n!! command 对n行数据执行command
!move command 对当前光标至move所指定的位置的数据执行command
!move fmt 格式化当前光标到move所指定的行
17. 显示与设置选项
17.1 显示选项
语法: set [option]
显示所有选项的值: :set all
显示一个选项的值: :set option?
17.2 设置选项
语法::set [no]option..... :set option[=value]...
17.3常用设置命令
设置行号显示与否: 简写 :set nu / :set no nu
设置自动缩进: 简写 :set ai / :set no ai
设置缩进宽度: 简写 :set sw=4
设置大小写忽略与否: 简写 :set ic / :set no ic
17.4 tab和空格替换
设置tab=4个空格
set ts=4
set expandtab
set autoindent
修改文件中的tab=4:
set ts=4
set expandtab
:%retab!
18. 初始化文件与配置文件
18.1 初始化文件
vi的初始化文件:.exrc
vim的初始化文件:vimrc
18.2 配置文件
linux配置文件: /usr/share/vim/vimrc
查找Windows配置文件: scriptnames
19. 参考资料
- vim configuration file资料:http://vim.wikia.com/wiki/Open_vimrc_file
- vim配置文件:http://amix.dk/vim/vimrc.html
- 史上最强vim配置文件:http://blog.csdn.net/redguardtoo/article/details/1172136