vim 命令手册
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 |
| :x | 保存并退出编辑器 |
| :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替换为<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程序 |
下面为自己加的东西:
在文件中要修改部分文本的缩进:
在命令模式下,按v去选择多行,再按shift+>(<)来改变缩进。
也可以使用3再按shift+>(<)来改变缩进(3倍)
转自:http://yazku.blog.163.com/blog/static/12355625520106505228575/
浙公网安备 33010602011771号