工作中经常用vi,所以统计整理了一下自己用得最多一些vi编辑器的快捷键。
常用的设置项
| 命令 | 作用 |
| set nu | 显示行号 |
| set nonu | 隐藏行号 |
| set ts=4 |
将1个制表符的长度设为4 将缩进长度设为4 |
| set sw=4 (shiftwidth) | |
| set expandtab | |
| syntax on | 开启语法高亮 |
常用快捷键
| 复制 | |
| 命令 | 作用 |
| yy => p | 复制光标所在行,p粘贴 |
| nyy => p | 复制包含光标以内的n行,p粘贴 |
| yy =>np | 将复制的内容粘贴n次 |
| yw | 复制光标所在的一个词(光标之后部分) |
| ynw | 复制光标所在的之后n个词 |
| yb | 复制光标所在的一个词(光标之前的部分) |
| ynb | 复制光标所在处的之前n个词 |
| y^ | 复制行首到光标之间的内容 |
| y$ | 复制光标所在处到行尾的内容 |
| y1G | 复制文档首部到光标所在处的内容 |
| yG | 复制光标处到文档尾部的内容 |
| 剪切 | |
| 命令 | 作用 |
| x | 剪切光标所在的单个字符 |
| nx | 剪切包括光标所在及其后的n个字符 |
| dw,de | 剪切光标之后一个词(或者说是光标所在的word的后部分) |
| dnw,dne | 剪切光标之后n个词 |
| db | 剪切光标前面一个词(或者说是光标所在的word的前部分) |
| dnb | 剪切光标之前n个词 |
| d$或者D或者C | 剪切至行尾 |
| d^ | 剪切至行首 |
| dd | 剪切当前行,注意是剪切,而不是删除,之后可以使用p招贴 |
| ndd | 剪切包含本行在内的n行 |
| dG | 从光标所在处,删除至文档结尾处 |
| dnG | 删除从第n行到光标所在行的内容 |
| v | 进入visual视图 |
| d => p | 在visual视图模式下,利用方向键选中内容后,d表示剪切,然后p粘贴 |
| 粘贴 | |
| p | 粘贴在光标之后 |
| P | 粘贴在光标之前 |
| 替换 | |
| r + char | 将光标所在的字符替换为char |
| R | 从光标处开始,持续替换,知道ESC退出替换 |
| ~ | 命令模式下翻转光标所在的大小写,如果在visual模式下,则翻转所选中的内容的大小写 |
| u | 撤销 |
| ctrl + r | 反撤销 |
| :s/old/new | 将本行的第一个old替换为new,注意只替换本行的第一个old |
| :s/old/new/g | 将本行的所有old替换为new,注意替换本行的所有old |
| :s/old/new/gc | 将本行的所有old替换为new,每次替换前,先询问是否替换 c->confirm |
| :10,20s/old/new | 将第10行到第20行之间的第一个old替换为new |
| :10,20s/old/new | 将第10行到第20行之间所有的old都替换为new |
| 查找 | |
| /keyword | 向后查找keyword |
| ?keyword | 向前查找keyword 然后n查找下一个,N查找上一个 |
| :noh | 取消查找后keyword的高亮状态 |
| 缩进 | |
| << | 向左缩进 |
| >> | 向右缩进 |
| n<<或者n>> | 向左或向右缩进n个tab |
| shift + j | 删除行末的换行(代码提交之前的压缩) |
| 光标移动 | |
| h | 光标左移 |
| j | 光标下移 |
| k | 光标上移 |
| l | 光标右移 |
| shift + h | 光标移动到屏幕的第一行 |
| shift + l | 光标移动到屏幕的最后一行 |
| 加密 | |
| vi -x a.txt | 编辑a.txt之前设定密码或者输入密码,输入密码不对,看不到真实内容 |
| 文件切换 | |
| vi a.txt b.txt c.txt | 同时编辑多个文件 |
| :first | 切换到第一个文件 |
| :previous | 切换到上一个文件 |
| :next | 切换到写一个文件 |
| :last | 切换到最后一个文件 |
| 文字大小 | |
| ctrl + | 放大字体(注意是ctrl+shift+=) |
| ctrl - | 减小字体 |
| mac下对应 | |
| command + | 放大 |
| command - | 缩小 |
| 多栏多列窗口 | |
| vi -o a.txt b.txt | 多窗口的方式打开a.txt,b.txt |
| :split a.txt | 水平分出一栏,打开a.txt,呈上下两块 |
| :vsplit a.txt | 垂直分出一栏,打开a.txt,呈左右两块 |
| ctrl + w(两下w) | 光标切换到下栏(一次切换) |
| ctrl + w + h | 光标切换到当前窗口的左边窗口 |
| ctrl + w + j | 光标切换到当前窗口的下边窗口 |
| ctrl + w + k | 光标切换到当前窗口的上边窗口 |
| ctrl + w + l | 光标切换到当前窗口的右边一窗口 |
| ctrl + w + t | 光标切换到最上面的窗口 |
| ctrl + w + b | 光标切换到最下面的窗口 |
| :wall | 保存所有做过修改的窗口的文件 |
| :qall | 退出所有保存过的文件 |
| 视野移动 | |
| zt | 将光标所在行移到屏幕最上面 |
| zz | 将光标所在行移到屏幕中间 |
| zb | 将光标所在行移到屏幕最下面 |