多文件编辑 如果当前行还没有保存(并且 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] |
在窗口之间切换 |
| :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程序 |