文章目录
- 普通命令模式下
- 技巧汇总
- 切换到插入模式
- 切换到可视模式
- 切换至底行命令模式
- 复制内容
-
- 粘贴/恢复
- 修改/改写
- 删除/剪切
- 字符大小写切换
- 选择文本
- 游标移动
- 剪切文本/移动文本
- 滚屏/翻页
- 撤回
- 查看文档状态
- 查找/搜索字符串
- 查看历史命令
- 查看历史搜索记录
- 多窗口操作
- 保存退出
- 字符可视模式
- 选择文本
- 复制文本
- 删除文本
- 修改替换
- 大小写切换
- 合并多行
- 保存文本
- 移动光标
- 切换到插入模式
- 退出可视模式
- 底行命令模式下
- 删除文本
- 保存/退出
- 另存为文件
- 显示行号
- 文件信息统计
- 文件管理器
- 翻阅历史命令
- 执行上一次的命令
- 执行外部的 shell 命令
- vim 与 shell 互相切换
- 直接执行 shell 命令
- 文件设置和取消密码
- 文件编码
- 文件格式
- 关闭窗口
- 插入模式下
- (一)选择文本
- (二)复制文本
- (三)粘贴文本/插入寄存器的内容
- (四)运算表达式
- (五)删除文本
- (六)移动文本
- (七)移动光标
- (八)临时切换到普通命令模式
- (九)修改/替换
- (十)搜索
- (十一)退出插入模式
- (十二)自动补全
- (十三)翻页
普通命令模式下
技巧汇总
假如我要一次性输入 30
个等号 =
,可以在普通命令模式下,输入:30i=<esc>
,就是先输入数量 30
,接着按 i
切换到插入模式,接着输入 1
个等号 =
,最后按 esc
返回普通命令模式,就成功插入 30
个等号 =
啦!这在插入分割线时非常有用哦~
切换到插入模式
执行内容 | 命令 | 备注 |
---|
切换到插入模式,在游标前插入字符 | i | 就是游标的左边插入字符 |
切换到插入模式,在行首插入字符 | I | |
切换到插入模式,在行尾插入字符 | A | |
切换到插入模式,在游标所在行的下面插入新行 | o | |
切换到可视模式
执行内容 | 命令 | 备注 |
---|
切换到按字选择文本的可视模式 | v | 所谓“可视”,就是被选中的字符会“高亮”显示 |
切换到按行选择文本的可视模式 | V 或 Shift + v | 按上下箭头来选择行 |
切换到按块选择文本的可视模式 | Ctrl + v | 按上下左右箭头来选择矩形区域。它选中屏幕上的一个矩形区域 |
切换至底行命令模式
执行内容 | 命令 | 备注 |
---|
: | 切换到底行命令模式,可以在最底一行输入 ex 命令 | |
复制内容
执行内容 | 命令 | 备注 |
---|
复制当前整行 | yy | 复制游标所在行到缓冲区,所谓的缓冲区就是剪贴板,或者叫寄存器 |
复制整个文档 | ggyG | 复制全部文本,注意:G 必须大写 |
复制游标所在行及其上面的所有行 | y1G 或 ygg | |
复制游标所在行及其下面的所有行 | yG | |
复制游标所在位置的词 | yaw 或 yiw | |
复制游标所在位置的句子 | yas | |
复制游标所在行上从游标位置算起到后面第 1 个字符的文本内容 | yf{character} | 例如,yft 复制游标所在行上从游标位置算起到后面第 1 个字符 t 之间的文本内容。注意:指定字符也复制 |
复制游标所在行上从游标位置算起到前面第 1 个字符的文本内容 | yF{charater} | 例如,yFt 复制游标所在行上从游标所在位置起到前面第 1 个字符 t 的文本内容。注意:指定字符也复制 |
复制游标所在位置的标签的内容 | yit | 例如:<table><tr><td>sfd</td></tr></table> ,假设当前游标落在标签 <table> 上,那么按下 yit 则会复制 <tr><td>sfd</td></tr> |
复制命令的记忆技巧
y
表示复制,G
表示跳到文档最后一行,gg
表示跳到文档第一行,所以复制当前行到文档最后一行,就是 yG
,所以复制当前行到文档第一行就是 ygg
,ggyG
其实就是游标先跳到文档第一行,再执行 yG
,就是复制所有行了。
粘贴/恢复
执行内容 | 命令 | 备注 |
---|
将缓冲区(寄存器)的内容粘贴到游标所在位置的后面 | p | |
将缓冲区(寄存器)的内容粘贴到游标所在位置的前面 | P | |
粘贴指定的寄存器的内容 | #p | 常用来恢复被删除的内容,其中 # 为寄存器的名称,详见《vim 的寄存器/剪贴板》 |
修改/改写
执行内容 | 命令 | 备注 |
---|
改写游标所在位置的字符 | s | 该命令表示用随后输入的文本替换游标所在位置的字符,先删除,再进入“插入模式” |
改写游标所在行 | S 或 cc | 该命令表示用新输入的正文替换游标所在行(不管游标位于何列)。输入此命令后,游标所在行成为空行,并切换到“插入模式”,光标停在行的开始位置 |
改写游标所在位置到词尾之间的内容 | cw | 先将游标所在位置到词尾之间的字符删除,再切换到“插入模式” |
改写游标所在位置到行尾之间的内容 | c$ 或 C | 先将游标所在位置到行尾之间的字符删除,再切换到“插入模式” |
删除/剪切
执行内容 | 命令 | 备注 |
---|
删除游标所在位置的字符 | x | 注意此时没有进入“插入模式”,依旧是在“普通命令模式”下 |
删除游标所在的行 | dd | |
删除游标所在位置的字符到行尾的内容,游标位置的字符也删除 | D 或者 d$ | |
删除游标所在位置的字符到行首的内容,保留游标位置的字符 | d0 或者 d^ | |
删除游标所在行至文档结尾处,游标所在行也删除 | dG | |
删除游标所在行至文档开始处,游标所在行业删除 | 1dG or dgg | |
删除游标所在位置的词 | daw | |
删除游标所在位置到指定字符之间的内容 | d/{character} | 例如,d/f 它将删除游标所在位置到下一个字符 f 之间的内容。输入完 d/f 后,要按下“回车键”才行。注意:指定字符保留 |
删除游标所在位置到下一个指定的字符 | df{character} | 这其实是指令 d 和指令 f 的组合指令,例如,dfk ,表示将删除当前游标所在位置到下一个字符 k ,注意:指定字符也删除掉。 |
删除游标所在位置到上一个指定的字符 | dF{character} | 例如,dFk ,删除游标所在位置到上一个字符 k 。注意:指定字符也删除了 |
字符大小写切换
选择文本
执行内容 | 命令 | 备注 |
---|
选中文档的全部内容 | ggVG | 按下此命令会进入可视模式下,然后选中全部的文本,选中的文本高亮显示 |
游标移动
执行内容 | 命令 | 备注 |
---|
移动游标到文档最后 1 行的首个字符处 | Shift + g or G | |
移动游标到文档开始位置,即移动到文档第 1 行的首个字符处 | gg | |
游标移动到文档的第 # 行首个字符处 | #G | 例如:15G 表示移动游标至文章的第 15 行的第 1 个字符处 |
游标移动到所在行的第 1 个字符处 | 0 | |
游标移动到所在行的最后 1 个字符处 | $ | |
将游标移至屏幕所显示文本的第 1 行的第 1 个字符处 | H | 注意:是当前屏幕显示文本的第 1 行,而不是整个文档的第 1 行 |
将游标移到屏幕所显示文本的最后 1 行的第 1 个字符处 | L | 如果当前屏幕已经充满,则将游标移至屏幕最底行的第 1 个字符处;如果没有充满,则将游标移至屏幕所显示文本的最后 1 行的第 1 个字符处 |
移动到匹配的括号处 | % | 例如,光标现在处于左小括号 ( 位置,按下 % 就会把光标移动到与之匹配的右小括号 ) 处 |
游标跳到下一行的第 1 个字符处 | Ctrl + m 或 Enter 或 + | |
游标移动到上一行的第 1 个字符处 | - | |
移动游标到下一个词的第 1 个字符处 | w/W | |
移动游标到下一个词的最后 1 个字符处 | e/E | 移动到词尾 |
移动游标到上一个词的第 1 个字符处 | b/B | 移动到词首 |
移动游标到上一个词的最后 1 个字符处 | ge | |
将游标移至上一个句子的第 1 个字符处 | ( | |
将游标移至下一个句子的第 1 个字符处 | ) | |
将游标向前移至上一个段落的第 1 个字符处 | { | |
将游标向后移至下一个段落的第 1 个字符处 | } | |
向后(游标后面)查找指定的字符,游标移动到该字符处 | f | 例如,某行(háng)为 you can you up, no can no bb ,现在需要将游标移动到字符 p 处,则可以使用 fp 命令,这样游标就会迅速定位到字符 p 处。按下 ; 向后继续查找,按下 , 向前继续查找 |
向前查找指定的字符,游标定位到该字符处 | F | 按下 ; 向后继续查找,按下 , 向前继续查找 |
剪切文本/移动文本
我们可以利用下面的步骤完成文本行(1 行或者多行)从一个地方移至另外一个地方。
- 将光标移至待移动文本的首行
- 按
#dd
命令(其中 #
为待移动的行数),此时 vim 把光标所在行起下面的 #
行文本删除,将其放入到 "1
寄存器中 - 接着将游标移动到要粘贴文本的地方
- 按
1p
将 "1
寄存器的内容粘贴到游标所在行的下方
滚屏/翻页
执行内容 | 命令 | 备注 |
---|
将屏幕向前(文件头方向)翻滚半屏 | Ctrl+u | 可以在这命令之前加上一个数字 # ,则屏幕向前翻滚 # 行。并且这个值被系统记住,以后再用 Ctrl+u 命令滚屏时,还滚相应的行数 |
将屏幕向后(文件尾方向)翻滚半屏 | Ctrl+d | 可以在这命令之前加上一个数字 # ,则屏幕向后翻滚 # 行。并且这个值被系统记住,以后再用 Ctrl+d 命令滚屏时,还滚相应的行数 |
整个文档向上移动一行,但是光标所在位置不变 | Ctrl + e | 可以在这命令之前加上一个数字 # ,则文档向上移动 # 行 |
整个文档向下移动一行,但是光标所在位置不变 | Ctrl + y | 可以在这命令之前加上一个数字 # ,则文档向下移动 # 行 |
翻到上一页 | Ctrl+b | 将屏幕向文件首方向翻滚一屏(即一页)。在命令之前加上一个数字 # ,则屏幕向前移动 # 页 |
翻到下一页 | Ctrl+f | 将屏幕向文件尾方向翻滚一屏(即一页)。在命令之前加上一个数字 # ,则屏幕向后移动 # 页 |
撤回
执行内容 | 命令 | 说明 |
---|
撤销 | u | 如果您误执行一个命令,可以马上按下 u ,撤回到上一个操作。按多次 u 可以执行多次撤回 |
查看文档状态
执行内容 | 命令 | 备注 |
---|
显示文档状态 | Ctrl+G | 在 vi/vim 状态行显示文档的状态信息,包括正在编辑的文件名、是否修改过、游标所在行号(未必显示这项)、文件的总行数以及游标之前的行占整个文件的百分比 |
查找/搜索字符串
执行内容 | 命令 | 备注 |
---|
向后查找游标所在位置的词 | * | 实际是引用模式 /\<$word\> ,/ 向后查找指定的字符串;\< 匹配词首;\> 匹配词尾;$word 就是游标所在位置的单词。只能用于普通命令模式下,直接输入 * 即可查找 |
向前查找游标所在位置的词 | # | 实际是引用模式 ?\<$word\> ,? 向前查找指定的字符串;\< 匹配词首;\> 匹配词尾;$word 就是游标所在位置的单词。只能用于普通命令模式下,直接输入 # 即可查找 |
向后查找指定的字符串 | / | 先输入 / ,再输入要查找的字符串,再按下“回车键”。例如,输入 /people ,会在游标后面匹配查找字符串 people ,可以按n 往后移动游标到匹配的字符串处或者按 N 往前移动游标到匹配的字符串处。普通命令模式和底行命令模式下均可以使用 |
向前查找指定的字符串 | ? | 先输入 ? ,再输入要查找的字符串,再按下“回车键”。例如,输入 ?people ,会在游标前面匹配查找字符串 people ,可以按n 往前移动游标到匹配的字符串处或者按 N 往后移动游标到匹配的字符串处。普通命令模式和底行命令模式下均可以使用 |
游标所在行上从游标位置起向后查找指定的字符 | f | ; 重复前一个搜索,即继续向后搜索,, 重复前一个搜索,但是方向相反,即向前搜索 |
游标所在行上从游标位置起向前查找指定的字符 | F | ; 重复前一个搜索,即继续向前搜索,, 重复前一个搜索,但是方向相反,即向后搜索 |
查看历史命令
执行内容 | 命令 | 备注 |
---|
查看历史命令 | q: | 在普通命令模式下直接输入此命令就可以打开历史命令窗口 |
查看历史搜索记录
多窗口操作
执行内容 | 快捷键 | 备注 |
---|
切换到上个窗口 | Ctrl + w + k | |
切换到下个窗口 | Ctrl + w + j | 如果是大写的 J 则会把当前窗口移到下面,即和下面的窗口调换位置,其它组合键估计也有类似的效果 |
关闭除当前窗口外的所有窗口 | Ctrl + w + o | |
当前窗口的高度最大化 | Ctrl + w + _ | |
退出当前窗口 | Ctrl + w + q | 按下 :q 也可以退出当前窗口 |
保存退出
执行内容 | 命令 | 备注 |
---|
保存并退出 | ZZ | 注意这是大写的 Z 。你可以按下 Shift 的同时,按两次 z ,就可以了。若文档没有修改过,则不保存直接退出;若文档已经编辑过,则会保存文档后退出 |
字符可视模式
选择文本
执行内容 | 命令 | 备注 |
---|
按字符选择文本 | ↑↓←→ | 通过上下左右箭头键选择文本 |
选择到下一个单词的开头 | w | |
选择到下一个单词的词尾 | e | |
选择到上一个单词的开头 | b | |
复制文本
命令 | 说明 |
---|
复制选中的文本 | y |
Y | 按下 Y 复制选中字符的所在行 |
删除文本
执行内容 | 命令 | 备注 |
---|
删除选中的文本 | d 或 x | 删除文本后会返回到“普通命令模式”下 |
删除选中的字符的所在行 | D | |
修改替换
执行内容 | 命令 | 备注 |
---|
更改被选中的文本 | c | 按下此命令后被选中的文本被删除,进入“插入模式”,此时可以在其中添加新文本,完成修改替换 |
更改被选中的字符的所在行的文本 | C | 也是先删除文本,再进入“插入模式” |
大小写切换
执行内容 | 命令 | 备注 |
---|
将选中的文本中的大写字母全部转换成小写 | u | |
将选中的文本中的小写字母全部转换成大写 | U | |
合并多行
执行内容 | 命令 | 备注 |
---|
将光标所在行下面的文本行合并到光标所在行后面 | . | |
保存文本
执行内容 | 指令 | 备注 |
---|
将选中的文本的所在行另存为文件 | :write filename | 在可视化模式下选好文本,然后输入 :write filename 命令,就可以将选中的字符所在的行内容保存到文件 filename 中,文件存放在当前工作目录下 |
移动光标
执行内容 | 命令 | 备注 |
---|
将光标在选中的文本区域首尾切换 | o | 例如,光标在选中的文本区域的末尾,按下 o 光标跳到文本区域的开头位置 |
切换到插入模式
执行内容 | 命令 | 备注 |
---|
切换到插入模式 | Shift + i | 光标会跳到被选中的字符的所在行的第 1 个字符处,表示在行首插入字符 |
退出可视模式
再次按下 v
退出“字符可视模式”
底行命令模式下
删除文本
命令 | 说明 |
---|
-,+ d | 删除游标所在行,上一行和下一行,共三行 |
-2,+2 d | 删除游标所在行,前二行和后二行,共五行 |
.,$ d | 将当前行至文档最后 1 行的内容全部删除 |
% d | 删除文档的所有行 |
保存/退出
命令 | 说明 |
---|
w | 把当前缓冲区(buffer)的内容写入文件,即进行保存动作,但不退出 vim |
wq | 保存后退出 vim |
wq! | 则为强制保存后退出vim(常用) |
w! | 强制保存,若文件属性为“只读”时,强制写入该档案 |
wall 或 wa | 把所有的缓冲区的内容写入文件,即保存所有的文件(如果你打开了多个文件) |
q | 如果只有 1 个文件则会退出 vim,多个文件则仅退出当前文件,前提是已经保存过了,如果没有保存 vim 会提醒你 |
q! | 强制退出且不储存档案 |
x | 保存文档并退出,它与 wq 的区别在于,文档没有修改过则不会保存,从而不会更新文件的时间戳,这样文件的 mtime,atime 就不会改变,因此就不需要重新编译。而 wq 命令,即使文件未修改也会进行保存,从而修改时间戳,这样就会触发重新编译。作为程序员常用此命令! |
xa | 保存并退出所有的文件 |
exit | 保存所有文件并退出 vim |
注意:! 表示强制执行,在 vim 中不能放在指令的前面,因为放在指令的前面表示执行 shell 的指令,例如,输入 !q 是错误的命令,因为shell 命令终端没有 q 这个指令。
另存为文件
命令 | 说明 |
---|
w %.bak | 另存当前文件为 b.txt.bak,"% 是当前文件名寄存器 |
f filename | 改变编辑的文件名,这时再保存相当于另存为 |
w filename | 另存为 filename |
显示行号
命令 | 说明 |
---|
set nu or set number | 设置显示行号,会在文本的每一行前面显示行号,nu 就是number 的缩写 |
set nonu or set nonumber | 设置不显示行号 |
文件信息统计
指令 | 说明 |
---|
= | 打印文件的总行数 |
f 或 Ctrl + g | 显示文档名,光标所在位置,是否修改,文档第 1 行到光标所在行之间的内容在整个文档中的占比 |
文件管理器
在“底行命令模式”下输入大写的 E
,可以进入“文件管理器”,在“文件管理器”中,可以使用上下箭头来移动光标选择要打开的目录或文件,选中后按下“回车键”即可打开,文件管理器的界面如下图所示:
按下连字符 -
可以跳转到上级目录中。
翻阅历史命令
在底行命令模式下输入以下的命令。
命令 | 说明 |
---|
Ctrl + p | 向前翻阅历史命令 |
Ctrl + n | 向后翻阅历史命令 |
↑ | 查看前一条历史命令 |
↓ | 查看后一条历史命令 |
如下图所示,按住 Ctrl
不放,然后每按一下 p
就可以在底行显示前一个历史命令,每按一下 n
则显示后一个历史命令
执行上一次的命令
指令 | 说明 |
---|
@: | 执行上一次的命令,如果输入 ": 则是引用最近一次的命令,没有执行 |
执行外部的 shell 命令
可以在底行命令模式下输入以下的命令。
命令格式 | 说明 |
---|
! {shell command} | 例如:! ls ,在不退出 vim 进程下执行 shell 命令 ls ,叹号和命令之间允许没有空格,执行后会跳到 shell 界面中,按“回车”键返回 vim |
vim 与 shell 互相切换
命令 | 说明 |
---|
shell 或 sh | 可以在不关闭 vim 的情况下切换到 shell 终端界面,在 shell 中输入 exit 可以返回到 vim 界面中 |
直接执行 shell 命令
对于大部分 Shell 命令可以在 vim 底行命令模式下直接执行,其操作结果显示在状态行。
命令 | 说明 |
---|
pwd | 显示 vim 工作目录 |
cd path | 改变 vim 的工作目录 |
文件设置和取消密码
命令 | 说明 |
---|
X | 为当前文件设置密码 |
set key= | 去除文件的密码 |
文件编码
命令 | 说明 |
---|
e ++enc=utf8 filename | 让vim用utf-8的编码打开这个文件 |
w ++enc=gbk | 不管当前文件什么编码,把它转存成 gbk 编码 |
set fenc 或 set fileencoding | 查看当前文件的编码 |
扩展:在 vimrc
中添加 set fileencoding=ucs-bom,utf-8,cp936
,vim 会根据要打开的文件选择合适的编码。 注意:编码之间不要留空格。 cp936
对应于gbk
编码。 ucs-bom
对应于 windows
下的文件格式。
文件格式
主要有三种文件格式:Unix、DOS、Mac。三种格式的区别主要在于换行符的编码:DOS/Windows 下是回车加换行(\r\n
),Unix 下只有换行符(\n
),Mac 下只有回车符(\r
)。
命令 | 说明 |
---|
e ++ff=dos filename | 让 vim 用 dos 格式打开这个文件 |
w ++ff=mac filename | 以 mac 格式存储这个文件 |
set ff | 显示当前文件的格式 |
扩展:在 vimrc 中添加 set fileformats=unix,dos,mac
,让 vim 自动识别文件格式。
关闭窗口
命令 | 说明 |
---|
q | 退出当前窗口 |
close | 最后一个窗口不能使用 close 关闭。使用 close 只是暂时关闭窗口,其内容还在缓存中,只有使用 q 、x 等才能真正关闭 |
only | 保留当前窗口,关闭其它所有窗口 |
qall 或 qa | 退出所有窗口 |
插入模式下
(一)选择文本
无法选择文本,只能返回到“普通命令模式”下,再进入“可视模式”下进行选择
(二)复制文本
快捷键 | 说明 |
---|
Ctrl + y | 对应正上方的行,挨个复印字符。非常有意思的命令。 |
Ctrl + e | 与上个命令类似,但拷贝的是下方的行 |
(三)粘贴文本/插入寄存器的内容
快捷键 | 说明 |
---|
<C r>{register} | 将寄存器的内容插入到光标所在的位置 |
(四)运算表达式
命令 | 说明 |
---|
C-r = | 先按下 C-r ,接着按 = ,再输入运算表达式,再按下“回车”,就能在光标处插入计算结果 |
(五)删除文本
快捷键 | 说明 |
---|
Back Space | 退格键,删除光标后(光标右边)一个字符,Fn+Del 就是Back Space |
Del | 删除键,删除光标前一个字符 |
Ctrl + w | 删除光标左边的单词 |
Ctrl + u | 从光标所在位置删除到行首,光标所在位置的字符保留 |
注:上述不是命令,而是快捷键
(六)移动文本
好像不行
(七)移动光标
快捷键 | 说明 |
---|
Home | 移动光标到行首,MacBook 的键盘使用 Fn+← 就是Home 键 |
End | 移动光标到行尾,Fn+→ 就是End 键 |
Shift + ← | 移动到前一个单词 |
Shift + → | 移动到后一个单词 |
(八)临时切换到普通命令模式
快捷键 | 说明 |
---|
Ctrl + o | 进入命令模式并在执行一个命令后自动返回插入模式。很常用 |
(九)修改/替换
命令 | 说明 |
---|
Insert | 切换光标为输入/替换模式,光标将变成竖线/下划线,MacBook 内置键盘下没有此键 |
(十)搜索
好像不行
(十一)退出插入模式
退出插入模式,返回到普通命令模式。
命令 | 说明 |
---|
Esc | 退出输入模式,切换到“普通命令模式” |
<C [> | 同上 |
(十二)自动补全
命令 | 说明 |
---|
Ctrl + N | 所谓补全,就是你按下这个组合键,会出来一个列表,当前所有打开的窗口中与光标所在位置的字符或字符串有关的词会出现在这个列表中 |
(十三)翻页
命令 | 说明 |
---|
Page Up | 上翻页,Fn+↑ 就是Page Up |
Page Down | 下翻页,Fn+↓ 就是Page Down |
文章目录
- 普通命令模式下
- 技巧汇总
- 切换到插入模式
- 切换到可视模式
- 切换至底行命令模式
- 复制内容
-
- 粘贴/恢复
- 修改/改写
- 删除/剪切
- 字符大小写切换
- 选择文本
- 游标移动
- 剪切文本/移动文本
- 滚屏/翻页
- 撤回
- 查看文档状态
- 查找/搜索字符串
- 查看历史命令
- 查看历史搜索记录
- 多窗口操作
- 保存退出
- 字符可视模式
- 选择文本
- 复制文本
- 删除文本
- 修改替换
- 大小写切换
- 合并多行
- 保存文本
- 移动光标
- 切换到插入模式
- 退出可视模式
- 底行命令模式下
- 删除文本
- 保存/退出
- 另存为文件
- 显示行号
- 文件信息统计
- 文件管理器
- 翻阅历史命令
- 执行上一次的命令
- 执行外部的 shell 命令
- vim 与 shell 互相切换
- 直接执行 shell 命令
- 文件设置和取消密码
- 文件编码
- 文件格式
- 关闭窗口
- 插入模式下
- (一)选择文本
- (二)复制文本
- (三)粘贴文本/插入寄存器的内容
- (四)运算表达式
- (五)删除文本
- (六)移动文本
- (七)移动光标
- (八)临时切换到普通命令模式
- (九)修改/替换
- (十)搜索
- (十一)退出插入模式
- (十二)自动补全
- (十三)翻页
普通命令模式下
技巧汇总
假如我要一次性输入 30
个等号 =
,可以在普通命令模式下,输入:30i=<esc>
,就是先输入数量 30
,接着按 i
切换到插入模式,接着输入 1
个等号 =
,最后按 esc
返回普通命令模式,就成功插入 30
个等号 =
啦!这在插入分割线时非常有用哦~
切换到插入模式
执行内容 | 命令 | 备注 |
---|
切换到插入模式,在游标前插入字符 | i | 就是游标的左边插入字符 |
切换到插入模式,在行首插入字符 | I | |
切换到插入模式,在行尾插入字符 | A | |
切换到插入模式,在游标所在行的下面插入新行 | o | |
切换到可视模式
执行内容 | 命令 | 备注 |
---|
切换到按字选择文本的可视模式 | v | 所谓“可视”,就是被选中的字符会“高亮”显示 |
切换到按行选择文本的可视模式 | V 或 Shift + v | 按上下箭头来选择行 |
切换到按块选择文本的可视模式 | Ctrl + v | 按上下左右箭头来选择矩形区域。它选中屏幕上的一个矩形区域 |
切换至底行命令模式
执行内容 | 命令 | 备注 |
---|
: | 切换到底行命令模式,可以在最底一行输入 ex 命令 | |
复制内容
执行内容 | 命令 | 备注 |
---|
复制当前整行 | yy | 复制游标所在行到缓冲区,所谓的缓冲区就是剪贴板,或者叫寄存器 |
复制整个文档 | ggyG | 复制全部文本,注意:G 必须大写 |
复制游标所在行及其上面的所有行 | y1G 或 ygg | |
复制游标所在行及其下面的所有行 | yG | |
复制游标所在位置的词 | yaw 或 yiw | |
复制游标所在位置的句子 | yas | |
复制游标所在行上从游标位置算起到后面第 1 个字符的文本内容 | yf{character} | 例如,yft 复制游标所在行上从游标位置算起到后面第 1 个字符 t 之间的文本内容。注意:指定字符也复制 |
复制游标所在行上从游标位置算起到前面第 1 个字符的文本内容 | yF{charater} | 例如,yFt 复制游标所在行上从游标所在位置起到前面第 1 个字符 t 的文本内容。注意:指定字符也复制 |
复制游标所在位置的标签的内容 | yit | 例如:<table><tr><td>sfd</td></tr></table> ,假设当前游标落在标签 <table> 上,那么按下 yit 则会复制 <tr><td>sfd</td></tr> |
复制命令的记忆技巧
y
表示复制,G
表示跳到文档最后一行,gg
表示跳到文档第一行,所以复制当前行到文档最后一行,就是 yG
,所以复制当前行到文档第一行就是 ygg
,ggyG
其实就是游标先跳到文档第一行,再执行 yG
,就是复制所有行了。
粘贴/恢复
执行内容 | 命令 | 备注 |
---|
将缓冲区(寄存器)的内容粘贴到游标所在位置的后面 | p | |
将缓冲区(寄存器)的内容粘贴到游标所在位置的前面 | P | |
粘贴指定的寄存器的内容 | #p | 常用来恢复被删除的内容,其中 # 为寄存器的名称,详见《vim 的寄存器/剪贴板》 |
修改/改写
执行内容 | 命令 | 备注 |
---|
改写游标所在位置的字符 | s | 该命令表示用随后输入的文本替换游标所在位置的字符,先删除,再进入“插入模式” |
改写游标所在行 | S 或 cc | 该命令表示用新输入的正文替换游标所在行(不管游标位于何列)。输入此命令后,游标所在行成为空行,并切换到“插入模式”,光标停在行的开始位置 |
改写游标所在位置到词尾之间的内容 | cw | 先将游标所在位置到词尾之间的字符删除,再切换到“插入模式” |
改写游标所在位置到行尾之间的内容 | c$ 或 C | 先将游标所在位置到行尾之间的字符删除,再切换到“插入模式” |
删除/剪切
执行内容 | 命令 | 备注 |
---|
删除游标所在位置的字符 | x | 注意此时没有进入“插入模式”,依旧是在“普通命令模式”下 |
删除游标所在的行 | dd | |
删除游标所在位置的字符到行尾的内容,游标位置的字符也删除 | D 或者 d$ | |
删除游标所在位置的字符到行首的内容,保留游标位置的字符 | d0 或者 d^ | |
删除游标所在行至文档结尾处,游标所在行也删除 | dG | |
删除游标所在行至文档开始处,游标所在行业删除 | 1dG or dgg | |
删除游标所在位置的词 | daw | |
删除游标所在位置到指定字符之间的内容 | d/{character} | 例如,d/f 它将删除游标所在位置到下一个字符 f 之间的内容。输入完 d/f 后,要按下“回车键”才行。注意:指定字符保留 |
删除游标所在位置到下一个指定的字符 | df{character} | 这其实是指令 d 和指令 f 的组合指令,例如,dfk ,表示将删除当前游标所在位置到下一个字符 k ,注意:指定字符也删除掉。 |
删除游标所在位置到上一个指定的字符 | dF{character} | 例如,dFk ,删除游标所在位置到上一个字符 k 。注意:指定字符也删除了 |
字符大小写切换
选择文本
执行内容 | 命令 | 备注 |
---|
选中文档的全部内容 | ggVG | 按下此命令会进入可视模式下,然后选中全部的文本,选中的文本高亮显示 |
游标移动
执行内容 | 命令 | 备注 |
---|
移动游标到文档最后 1 行的首个字符处 | Shift + g or G | |
移动游标到文档开始位置,即移动到文档第 1 行的首个字符处 | gg | |
游标移动到文档的第 # 行首个字符处 | #G | 例如:15G 表示移动游标至文章的第 15 行的第 1 个字符处 |
游标移动到所在行的第 1 个字符处 | 0 | |
游标移动到所在行的最后 1 个字符处 | $ | |
将游标移至屏幕所显示文本的第 1 行的第 1 个字符处 | H | 注意:是当前屏幕显示文本的第 1 行,而不是整个文档的第 1 行 |
将游标移到屏幕所显示文本的最后 1 行的第 1 个字符处 | L | 如果当前屏幕已经充满,则将游标移至屏幕最底行的第 1 个字符处;如果没有充满,则将游标移至屏幕所显示文本的最后 1 行的第 1 个字符处 |
移动到匹配的括号处 | % | 例如,光标现在处于左小括号 ( 位置,按下 % 就会把光标移动到与之匹配的右小括号 ) 处 |
游标跳到下一行的第 1 个字符处 | Ctrl + m 或 Enter 或 + | |
游标移动到上一行的第 1 个字符处 | - | |
移动游标到下一个词的第 1 个字符处 | w/W | |
移动游标到下一个词的最后 1 个字符处 | e/E | 移动到词尾 |
移动游标到上一个词的第 1 个字符处 | b/B | 移动到词首 |
移动游标到上一个词的最后 1 个字符处 | ge | |
将游标移至上一个句子的第 1 个字符处 | ( | |
将游标移至下一个句子的第 1 个字符处 | ) | |
将游标向前移至上一个段落的第 1 个字符处 | { | |
将游标向后移至下一个段落的第 1 个字符处 | } | |
向后(游标后面)查找指定的字符,游标移动到该字符处 | f | 例如,某行(háng)为 you can you up, no can no bb ,现在需要将游标移动到字符 p 处,则可以使用 fp 命令,这样游标就会迅速定位到字符 p 处。按下 ; 向后继续查找,按下 , 向前继续查找 |
向前查找指定的字符,游标定位到该字符处 | F | 按下 ; 向后继续查找,按下 , 向前继续查找 |
剪切文本/移动文本
我们可以利用下面的步骤完成文本行(1 行或者多行)从一个地方移至另外一个地方。
- 将光标移至待移动文本的首行
- 按
#dd
命令(其中 #
为待移动的行数),此时 vim 把光标所在行起下面的 #
行文本删除,将其放入到 "1
寄存器中 - 接着将游标移动到要粘贴文本的地方
- 按
1p
将 "1
寄存器的内容粘贴到游标所在行的下方
滚屏/翻页
执行内容 | 命令 | 备注 |
---|
将屏幕向前(文件头方向)翻滚半屏 | Ctrl+u | 可以在这命令之前加上一个数字 # ,则屏幕向前翻滚 # 行。并且这个值被系统记住,以后再用 Ctrl+u 命令滚屏时,还滚相应的行数 |
将屏幕向后(文件尾方向)翻滚半屏 | Ctrl+d | 可以在这命令之前加上一个数字 # ,则屏幕向后翻滚 # 行。并且这个值被系统记住,以后再用 Ctrl+d 命令滚屏时,还滚相应的行数 |
整个文档向上移动一行,但是光标所在位置不变 | Ctrl + e | 可以在这命令之前加上一个数字 # ,则文档向上移动 # 行 |
整个文档向下移动一行,但是光标所在位置不变 | Ctrl + y | 可以在这命令之前加上一个数字 # ,则文档向下移动 # 行 |
翻到上一页 | Ctrl+b | 将屏幕向文件首方向翻滚一屏(即一页)。在命令之前加上一个数字 # ,则屏幕向前移动 # 页 |
翻到下一页 | Ctrl+f | 将屏幕向文件尾方向翻滚一屏(即一页)。在命令之前加上一个数字 # ,则屏幕向后移动 # 页 |
撤回
执行内容 | 命令 | 说明 |
---|
撤销 | u | 如果您误执行一个命令,可以马上按下 u ,撤回到上一个操作。按多次 u 可以执行多次撤回 |
查看文档状态
执行内容 | 命令 | 备注 |
---|
显示文档状态 | Ctrl+G | 在 vi/vim 状态行显示文档的状态信息,包括正在编辑的文件名、是否修改过、游标所在行号(未必显示这项)、文件的总行数以及游标之前的行占整个文件的百分比 |
查找/搜索字符串
执行内容 | 命令 | 备注 |
---|
向后查找游标所在位置的词 | * | 实际是引用模式 /\<$word\> ,/ 向后查找指定的字符串;\< 匹配词首;\> 匹配词尾;$word 就是游标所在位置的单词。只能用于普通命令模式下,直接输入 * 即可查找 |
向前查找游标所在位置的词 | # | 实际是引用模式 ?\<$word\> ,? 向前查找指定的字符串;\< 匹配词首;\> 匹配词尾;$word 就是游标所在位置的单词。只能用于普通命令模式下,直接输入 # 即可查找 |
向后查找指定的字符串 | / | 先输入 / ,再输入要查找的字符串,再按下“回车键”。例如,输入 /people ,会在游标后面匹配查找字符串 people ,可以按n 往后移动游标到匹配的字符串处或者按 N 往前移动游标到匹配的字符串处。普通命令模式和底行命令模式下均可以使用 |
向前查找指定的字符串 | ? | 先输入 ? ,再输入要查找的字符串,再按下“回车键”。例如,输入 ?people ,会在游标前面匹配查找字符串 people ,可以按n 往前移动游标到匹配的字符串处或者按 N 往后移动游标到匹配的字符串处。普通命令模式和底行命令模式下均可以使用 |
游标所在行上从游标位置起向后查找指定的字符 | f | ; 重复前一个搜索,即继续向后搜索,, 重复前一个搜索,但是方向相反,即向前搜索 |
游标所在行上从游标位置起向前查找指定的字符 | F | ; 重复前一个搜索,即继续向前搜索,, 重复前一个搜索,但是方向相反,即向后搜索 |
查看历史命令
执行内容 | 命令 | 备注 |
---|
查看历史命令 | q: | 在普通命令模式下直接输入此命令就可以打开历史命令窗口 |
查看历史搜索记录
多窗口操作
执行内容 | 快捷键 | 备注 |
---|
切换到上个窗口 | Ctrl + w + k | |
切换到下个窗口 | Ctrl + w + j | 如果是大写的 J 则会把当前窗口移到下面,即和下面的窗口调换位置,其它组合键估计也有类似的效果 |
关闭除当前窗口外的所有窗口 | Ctrl + w + o | |
当前窗口的高度最大化 | Ctrl + w + _ | |
退出当前窗口 | Ctrl + w + q | 按下 :q 也可以退出当前窗口 |
保存退出
执行内容 | 命令 | 备注 |
---|
保存并退出 | ZZ | 注意这是大写的 Z 。你可以按下 Shift 的同时,按两次 z ,就可以了。若文档没有修改过,则不保存直接退出;若文档已经编辑过,则会保存文档后退出 |
字符可视模式
选择文本
执行内容 | 命令 | 备注 |
---|
按字符选择文本 | ↑↓←→ | 通过上下左右箭头键选择文本 |
选择到下一个单词的开头 | w | |
选择到下一个单词的词尾 | e | |
选择到上一个单词的开头 | b | |
复制文本
命令 | 说明 |
---|
复制选中的文本 | y |
Y | 按下 Y 复制选中字符的所在行 |
删除文本
执行内容 | 命令 | 备注 |
---|
删除选中的文本 | d 或 x | 删除文本后会返回到“普通命令模式”下 |
删除选中的字符的所在行 | D | |
修改替换
执行内容 | 命令 | 备注 |
---|
更改被选中的文本 | c | 按下此命令后被选中的文本被删除,进入“插入模式”,此时可以在其中添加新文本,完成修改替换 |
更改被选中的字符的所在行的文本 | C | 也是先删除文本,再进入“插入模式” |
大小写切换
执行内容 | 命令 | 备注 |
---|
将选中的文本中的大写字母全部转换成小写 | u | |
将选中的文本中的小写字母全部转换成大写 | U | |
合并多行
执行内容 | 命令 | 备注 |
---|
将光标所在行下面的文本行合并到光标所在行后面 | . | |
保存文本
执行内容 | 指令 | 备注 |
---|
将选中的文本的所在行另存为文件 | :write filename | 在可视化模式下选好文本,然后输入 :write filename 命令,就可以将选中的字符所在的行内容保存到文件 filename 中,文件存放在当前工作目录下 |
移动光标
执行内容 | 命令 | 备注 |
---|
将光标在选中的文本区域首尾切换 | o | 例如,光标在选中的文本区域的末尾,按下 o 光标跳到文本区域的开头位置 |
切换到插入模式
执行内容 | 命令 | 备注 |
---|
切换到插入模式 | Shift + i | 光标会跳到被选中的字符的所在行的第 1 个字符处,表示在行首插入字符 |
退出可视模式
再次按下 v
退出“字符可视模式”
底行命令模式下
删除文本
命令 | 说明 |
---|
-,+ d | 删除游标所在行,上一行和下一行,共三行 |
-2,+2 d | 删除游标所在行,前二行和后二行,共五行 |
.,$ d | 将当前行至文档最后 1 行的内容全部删除 |
% d | 删除文档的所有行 |
保存/退出
命令 | 说明 |
---|
w | 把当前缓冲区(buffer)的内容写入文件,即进行保存动作,但不退出 vim |
wq | 保存后退出 vim |
wq! | 则为强制保存后退出vim(常用) |
w! | 强制保存,若文件属性为“只读”时,强制写入该档案 |
wall 或 wa | 把所有的缓冲区的内容写入文件,即保存所有的文件(如果你打开了多个文件) |
q | 如果只有 1 个文件则会退出 vim,多个文件则仅退出当前文件,前提是已经保存过了,如果没有保存 vim 会提醒你 |
q! | 强制退出且不储存档案 |
x | 保存文档并退出,它与 wq 的区别在于,文档没有修改过则不会保存,从而不会更新文件的时间戳,这样文件的 mtime,atime 就不会改变,因此就不需要重新编译。而 wq 命令,即使文件未修改也会进行保存,从而修改时间戳,这样就会触发重新编译。作为程序员常用此命令! |
xa | 保存并退出所有的文件 |
exit | 保存所有文件并退出 vim |
注意:! 表示强制执行,在 vim 中不能放在指令的前面,因为放在指令的前面表示执行 shell 的指令,例如,输入 !q 是错误的命令,因为shell 命令终端没有 q 这个指令。
另存为文件
命令 | 说明 |
---|
w %.bak | 另存当前文件为 b.txt.bak,"% 是当前文件名寄存器 |
f filename | 改变编辑的文件名,这时再保存相当于另存为 |
w filename | 另存为 filename |
显示行号
命令 | 说明 |
---|
set nu or set number | 设置显示行号,会在文本的每一行前面显示行号,nu 就是number 的缩写 |
set nonu or set nonumber | 设置不显示行号 |
文件信息统计
指令 | 说明 |
---|
= | 打印文件的总行数 |
f 或 Ctrl + g | 显示文档名,光标所在位置,是否修改,文档第 1 行到光标所在行之间的内容在整个文档中的占比 |
文件管理器
在“底行命令模式”下输入大写的 E
,可以进入“文件管理器”,在“文件管理器”中,可以使用上下箭头来移动光标选择要打开的目录或文件,选中后按下“回车键”即可打开,文件管理器的界面如下图所示:
按下连字符 -
可以跳转到上级目录中。
翻阅历史命令
在底行命令模式下输入以下的命令。
命令 | 说明 |
---|
Ctrl + p | 向前翻阅历史命令 |
Ctrl + n | 向后翻阅历史命令 |
↑ | 查看前一条历史命令 |
↓ | 查看后一条历史命令 |
如下图所示,按住 Ctrl
不放,然后每按一下 p
就可以在底行显示前一个历史命令,每按一下 n
则显示后一个历史命令
执行上一次的命令
指令 | 说明 |
---|
@: | 执行上一次的命令,如果输入 ": 则是引用最近一次的命令,没有执行 |
执行外部的 shell 命令
可以在底行命令模式下输入以下的命令。
命令格式 | 说明 |
---|
! {shell command} | 例如:! ls ,在不退出 vim 进程下执行 shell 命令 ls ,叹号和命令之间允许没有空格,执行后会跳到 shell 界面中,按“回车”键返回 vim |
vim 与 shell 互相切换
命令 | 说明 |
---|
shell 或 sh | 可以在不关闭 vim 的情况下切换到 shell 终端界面,在 shell 中输入 exit 可以返回到 vim 界面中 |
直接执行 shell 命令
对于大部分 Shell 命令可以在 vim 底行命令模式下直接执行,其操作结果显示在状态行。
命令 | 说明 |
---|
pwd | 显示 vim 工作目录 |
cd path | 改变 vim 的工作目录 |
文件设置和取消密码
命令 | 说明 |
---|
X | 为当前文件设置密码 |
set key= | 去除文件的密码 |
文件编码
命令 | 说明 |
---|
e ++enc=utf8 filename | 让vim用utf-8的编码打开这个文件 |
w ++enc=gbk | 不管当前文件什么编码,把它转存成 gbk 编码 |
set fenc 或 set fileencoding | 查看当前文件的编码 |
扩展:在 vimrc
中添加 set fileencoding=ucs-bom,utf-8,cp936
,vim 会根据要打开的文件选择合适的编码。 注意:编码之间不要留空格。 cp936
对应于gbk
编码。 ucs-bom
对应于 windows
下的文件格式。
文件格式
主要有三种文件格式:Unix、DOS、Mac。三种格式的区别主要在于换行符的编码:DOS/Windows 下是回车加换行(\r\n
),Unix 下只有换行符(\n
),Mac 下只有回车符(\r
)。
命令 | 说明 |
---|
e ++ff=dos filename | 让 vim 用 dos 格式打开这个文件 |
w ++ff=mac filename | 以 mac 格式存储这个文件 |
set ff | 显示当前文件的格式 |
扩展:在 vimrc 中添加 set fileformats=unix,dos,mac
,让 vim 自动识别文件格式。
关闭窗口
命令 | 说明 |
---|
q | 退出当前窗口 |
close | 最后一个窗口不能使用 close 关闭。使用 close 只是暂时关闭窗口,其内容还在缓存中,只有使用 q 、x 等才能真正关闭 |
only | 保留当前窗口,关闭其它所有窗口 |
qall 或 qa | 退出所有窗口 |
插入模式下
(一)选择文本
无法选择文本,只能返回到“普通命令模式”下,再进入“可视模式”下进行选择
(二)复制文本
快捷键 | 说明 |
---|
Ctrl + y | 对应正上方的行,挨个复印字符。非常有意思的命令。 |
Ctrl + e | 与上个命令类似,但拷贝的是下方的行 |
(三)粘贴文本/插入寄存器的内容
快捷键 | 说明 |
---|
<C r>{register} | 将寄存器的内容插入到光标所在的位置 |
(四)运算表达式
命令 | 说明 |
---|
C-r = | 先按下 C-r ,接着按 = ,再输入运算表达式,再按下“回车”,就能在光标处插入计算结果 |
(五)删除文本
快捷键 | 说明 |
---|
Back Space | 退格键,删除光标后(光标右边)一个字符,Fn+Del 就是Back Space |
Del | 删除键,删除光标前一个字符 |
Ctrl + w | 删除光标左边的单词 |
Ctrl + u | 从光标所在位置删除到行首,光标所在位置的字符保留 |
注:上述不是命令,而是快捷键
(六)移动文本
好像不行
(七)移动光标
快捷键 | 说明 |
---|
Home | 移动光标到行首,MacBook 的键盘使用 Fn+← 就是Home 键 |
End | 移动光标到行尾,Fn+→ 就是End 键 |
Shift + ← | 移动到前一个单词 |
Shift + → | 移动到后一个单词 |
(八)临时切换到普通命令模式
快捷键 | 说明 |
---|
Ctrl + o | 进入命令模式并在执行一个命令后自动返回插入模式。很常用 |
(九)修改/替换
命令 | 说明 |
---|
Insert | 切换光标为输入/替换模式,光标将变成竖线/下划线,MacBook 内置键盘下没有此键 |
(十)搜索
好像不行
(十一)退出插入模式
退出插入模式,返回到普通命令模式。
命令 | 说明 |
---|
Esc | 退出输入模式,切换到“普通命令模式” |
<C [> | 同上 |
(十二)自动补全
命令 | 说明 |
---|
Ctrl + N | 所谓补全,就是你按下这个组合键,会出来一个列表,当前所有打开的窗口中与光标所在位置的字符或字符串有关的词会出现在这个列表中 |
(十三)翻页
命令 | 说明 |
---|
Page Up | 上翻页,Fn+↑ 就是Page Up |
Page Down | 下翻页,Fn+↓ 就是Page Down |
本文标签:
常用命令vim
发表评论