vim常用命令

By | 九月 8, 2016

转自:http://yazku.blog.163.com/blog/static/12355625520106505228575/
vi/vim 命令手册
本手册介绍了 vi/vim 编辑器的主要功能。为了便于查找,这里一并给出了命令和它们的定制参数。在使用这个手册之前,必须注意以下几点:
●很多命令可以与重复因子一起使用(vi);
●vim(不是vi)把一个区域(region)定义为一个连续的文本块,许多命令与文本块有关;
一个区域可以用v定义,后面跟一个光标移动命令;
●用[Ctrl+l]组合键可以清除并重画屏幕;
●:set命令用来定制编辑环境。

移动光标
命令 功能
h 光标左移
l(或空格键) 光标右移
k(或[Ctrl+p]) 光标上移
j(或[Ctrl+n]) 光标下移
[Ctrl+f] 向前翻页
[Ctrl+b] 向后翻页
[Ctrl+d] 向前翻半页
[Ctrl+u] 向后翻半页
1G 跳到文件首
40G 跳到第40行
G 跳到文件尾
[Ctrl+g] 显示当前行号及文件的百分比
:set number 显示所有带行号的行

在一行内移动光标
B、E和W命令的作用与b、e和w的作用一样,只是后者忽略了标点符号。
命令 功能
b 向后移动到单词首
e 向前移动到单词尾
w 向前移动到单词首
0或| 移动到行首
30| 移动到第30列
^ 移动到本行的第一个单词的首字符
$ 移动到行尾

插入文本
命令 功能
i 在光标的左侧插入字符
20i-[Esc] 插入20个连字符
I 在行首插入字符
[Ctrl+v][Ctrl+b] 插入[Ctrl+b]字符
[Ctrl+v][Esc] 插入[Esc]字符
a 在光标的右侧添加文本
A 在行尾添加文本
o 在当前行下面插入一空行
O 在当前行上面插入一空行
:set showmode 当vi处在输入模式下时显示提示信息
:set sm 即时显示配对的)或}
:set ts=n 把制表符设置为n(默认为8)
:set ai 下一行从前一行的缩进位置开始

删除和移动文本
命令 功能
x 删除光标所在的字符
6x 删除光标位置的字符以及右侧的5个字符
X 删除前一个字符
dd 删除当前行
4dd 删除4行
64dd 删除64行
dw 删除一个单词
d0 删除到行首
d$ 删除到行尾
d 删除一个区域(只用于vim)
p 把被剪切的文本粘贴到下面(整行)或右侧(部分行)
P 把被剪切的文本粘贴到上面(整行)或左侧(部分行)
“add 把当前行粘贴到缓冲区a里
“ap 把缓冲区a里的内容粘贴到当前位置
J 把当前行于下一行合并为一行
xp 调换两个字符的位置

修改文本
命令 功能
rch 把光标位置的字符替换为ch
R 替换光标右边的文本
s 把光标所在的字符替换为任意个字符
S 替换整行内容
cw 修改一个单词
c 修改区域里的文本(vim)
~ 改变所扫描的或区域里的字母的大小写
!tr'[a-z]”[A-Z]’ 把区域里的字母转换为大写(vim)
!tr'[A-Z]”[a-z]’ 把区域里的字母转换为小写(vim)

复制文本
命令 功能
yy 复制当前行
6yy 复制六行
yw 复制单词
y 复制区域(vim)
p 把复制的文本粘贴到右边或下面
P 把复制的文本粘贴到左边或上面
“ayy 把当前行复制到缓冲区a里
“ap 恢复缓冲区a里的内容

启动编辑器
命令 功能
vi +100 foo 打开文件foo并把光标定位在100行
vi +/pat foo 打开文件foo并把光标定位在pat第一次出现的行
vi +foo 打开文件foo,把光标定位在文件尾
vi foo1 foo2 … 打开文件foo1,用n切换到foo2等
vi -r foo 把交换文件里的内容恢复到缓冲区里
vi -R foo 一只读模式打开foo文件

保存与退出
命令 功能
:w 保存文件并继续编辑
:w bar 同微软Windows操作系统中的“另存为……”
:w! bar 同上,但是覆盖现存的文件bar
:n1,n2w foo 把n1到n2之间的行保存到文件foo
:n1,n2w>>foo 把n1到n2之间的行添加到foo文件尾
:.w foo 把当前行保存到文件foo
:$w foo 把最后一行保存到文件foo
😡 保存并退出编辑器
:wq 同上
:q 如果文件的内容没有变化则退出编辑器
:q! 放弃修改并退出编辑器

多文件编辑
如果当前行还没有保存(并且 autowrite 未设置),则不能使用:e、:n和:rew命令。命令后面的!使得安全特性无效。
命令 功能
:e foo 停止对当前文件的编辑,开始编辑foo文件
:e! foo 同上,但是取消对当前文件的修改
:e! 装入当前文件的最近保存的内容
[Ctrl+^] 返回到最近编辑的文件
:n 编辑下一个文件(当用vi同时编辑多个文件时)
:set autowrite(aw) 在用:n切换到下一个文件之前自动保存当前文件
:rew 返回到文件列表的第一个文件(当用vi同时编辑多个文件时)
:r foo 把foo文件的内容插入当前行的下面
多窗口(vim)
命令 功能
:sq 把当前窗口拆分为两个
:new 打开一个新的空白窗口
:[Ctrl+w][Ctrl+w] 在窗口之间切换 Ctrl+w+R 将窗口移到右边 Ctrl+w+L 将窗口移到左边
:on 把当前窗口变为唯一的窗口
:q 退出当前窗口
:qa 退出所有窗口
:xa 保存并退出全部窗口
[Ctrl]+ 增大窗口尺寸
[Ctrl]- 减小窗口尺寸
搜索与重复
搜索模式pat可以时一个字符串,也可以是一个正则表达式。vi使用一套专用的字符序列来执行一行内的搜索。
命令 功能
/pat 向前搜索pat
?pat 向后搜索pat
/printf 向前搜索printf
?[0-0]$ 向后搜索行尾的数字
/^# 向前搜索行首的#
n 按上次搜索方向重复搜索
N 按与前次搜索的相反方向重复搜索
:set wrapscan(ws)
继续搜索直至达到文件尾
:set ignorecase(ic)
搜索时不区分大小写
:set magic 保留正则表达式字符的意义
fc 在当前行向前搜索字符c
Fc 在当前行向后搜索字符c
; 在当前行重复上次向前搜索
, 在当前行重复上次逆向搜索
替换
源模式s1也可以是正则表达式。使用欧冠地址时,”.”代表当前行,”$”代表最后一行,”1,$”代表整个文件。
命令 功能
:.s/s1/s2 把当前行中第一次出现的s1替换为s2
:1,$s/s1/s2 把整个文件里的s1替换为s2
:1,$s/echo/printf/g 把全部的echo替换为printf
:1,$s/s1/s2/gc 按交互方式把全部s1替换为s2
:1,$s/#//g 删除文件中所有的“#”
:3,10s/^/#/g 在3至10行的行首插入“#”
:$s/$/;/ 在最后一行的行尾插入“;”
:1,$s/s1/s2/g 把所有的s1替换为s2
:1,$s/HEAD/<&>/g 把所有的HEAD替换为
标志与书签
命令 功能
ma 设置一个标签a
‘a 移动到标签a
” 在当前标志与前一个标志位置之间切换
重做与恢复
命令 功能
. 重复上次命令
u 取消上次的编辑命令(在vim里取消所有以前的命令)
[Ctrl+r] 重做上次取消的操作(只限于vim)
U 取消所有对当前行的操作
“4p 从缓冲区中恢复第4次最近的删除操作
缩写表示
命令 功能
:ab name stg 把name缩写为stg
:unab stg 删除stg缩写
:ab 列出所有的缩写
映射键
命令 功能
:map key commands 把key映射到commands
:map! key commands 在输入模式下把key映射到commands
:unmap key 取消命令模式下的key映射
:unmap! key 取消输入模式下的key映射
:map 显示命令模式下所有的映射
:map! 显示输入模式下的所有映射
与UNIX的接口命令
命令 功能
:!cmd 执行UNIX的cmd命令
:!% 把当前文件作为shell或perl脚本执行
:r !cmd 把cmd命令的结果插入到当前行的下面
:r !head -n 3 foo 把foo文件前三行内容插入到当前行的下面
sh 暂时退出UNIX shell 环境
[Ctrl+z] 暂停编辑(用fg命令可以返回vi编辑器)
:!cc% 编译正在编辑的C程序
:!javac % 编译正在编辑的Java程序

发表评论