常见的命令可参考:
1. vim的工作模式
vi/vim 共分为三种模式,命令模式、编辑输入模式和末行(命令行)模式。
1.1 命令模式
任何时候,不管用户处于何种模式,只要按一下ESC键,即可使vi进入命令模式。我们在shel环境(提示符为$)下输入启进入编辑器时,也是处于该模式下。
在命令模式下,用户可以输入各种合法的vi命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释,若输入的字符是合法的vi命令,则vi在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不在屏幕上显示出来。若输入的字符不是vi的合法命令,vi会响铃报警。
用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被 Vim 识别为命令,而非输入字符,比如我们此时按下 i ,并不会输入一个字符,i 被当作了一个命令。以下是普通模式常用的几个命令:
- i -- 切换到输入模式,在光标当前位置开始输入文本。
- x -- 删除当前光标所在处的字符。
- : -- 切换到底线命令模式,以在最底一行输入命令。
- a -- 进入插入模式,在光标下一个位置开始输入文本。
- o:在当前行的下方插入一个新行,并进入插入模式。
- O -- 在当前行的上方插入一个新行,并进入插入模式。
- dd -- 剪切当前行。
- yy -- 复制当前行。
- p(小写) -- 粘贴剪贴板内容到光标下方。
- P(大写)-- 粘贴剪贴板内容到光标上方。
- u -- 撤销上一次操作。
- Ctrl + r -- 重做上一次撤销的操作。
- :w -- 保存文件。
- :q -- 退出 Vim 编辑器。
- :q! -- 强制退出Vim 编辑器,不保存修改。
命令模式只有一些最基本的命令,因此仍要依靠底线命令行模式输入更多命令。
1.2 编辑模式
在命令模式下按下 'i' ,'a','o' 都可以进入了输入模式,区别可参考上面的介绍,按 Esc 键可以返回到命令模式。
进入输入模式
在输入模式中,可以使用以下按键:
- 字符按键以及Shift组合,输入字符
- ENTER,回车键,换行
- BACK SPACE,退格键,删除光标前一个字符
- DEL,删除键,删除光标后一个字符
- 方向键,在文本中移动光标
- HOME /END,移动光标到行首/行尾
- Page Up /Page Down,上/下翻页
- Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
- ESC,退出输入模式,切换到命令模式
1.3 末行模式
在命令模式下,输入冒号即可进入未行模式。此时窗口的状态行会显示出冒号,等待用户输入命令。用户输入完成后,按回车执行,之后vi编辑器又自动返回到命令模式下。常见的末行命令:
- :w:保存文件。
- :q:退出 Vim 编辑器。
- :wq:保存文件并退出 Vim 编辑器。
- 进入末行模式后(esc),直接按(小写状态)shift+zz或者(大写状态)ZZ ,也可以保存退出当前文件
- :q!:强制退出Vim编辑器,不保存修改。
- :%d:清空文件内容。
- :nohl:取消由 Vim 内部命令(如搜索)引起的高亮显示。
按 ESC 键可随时退出底线命令模式。
2. VIM末行模式中分屏
按键 | 功能 |
---|---|
:sp | 当前文件水平分屏 |
:vsp | 当前文件垂直分屏 |
:sp 文件名 | 当前文件和另一个文件水平分屏 |
:vsp 文件名 | 当前文件和另一个文件垂直分屏 |
ctrl+w+w | 在多个窗口切换光标 |
:wall/:wqall//:qall | 保存/保存退出/退出所有分屏窗口 |
vim -O a.c b.c | 垂直分屏 |
vim -o a.c b.c | 水平分屏 |
3. vim其他用法
按键 | 功能 |
---|---|
:!man 3 printf | 在vim中执行自定义命令 ,我这里查看printf的用法(q退出) |
:r !ls -l | 将ls -l执行的结果写入当前文件中 |
:r /etc/passwd | 将/etc/passwd文件中的内容写入到当前文件中 |
:w /tmp/txt | 将当前文件内容写入到/tmp/txt文件中 |
:w! /tmp/txt | 强制将当前文件内容写入到/tmp/txt文件中 |
:1,10s/^/\/\// | 将第1行到10行行首添加// (^表示行首) /\/\转移字符 |
:1,10s#^#// | 将第1行到10行行首添加//(#可以临时代替/ 分隔) |
:%s/;/\r{\r\treturn0;\r}\r/g | 将 ; 替换成{ return 0; } |
:1,10s#//## | 将第1行到10行行首去掉//(#可以临时代替/ 分隔) |
- :1,10s/^/\/\//
:1,10s
:表示在第1行到第10行之间执行替换操作。^
:表示行的开头。//
:表示替换为的内容,这里是//
(注释符号)。
- :1,10s#^#//
:1,10s
:表示在第1行到第10行之间执行替换操作。#^#
:表示查找模式,这里的^
表示行的开头。//
:表示替换为的内容,这里是//
。
- :%s/;/\r{\r\treturn0;\r}\r/g
:%s
:表示在整个文件范围内执行替换操作。/;/
:要查找的模式,这里是分号;
。\r
:表示换行符。{
:表示替换为的内容的一部分。\t
:表示一个制表符(Tab)。return0;
:这是替换后插入的代码部分,表示return 0;
。}
:表示替换为的内容的一部分。g
:表示全局替换,即在每一行中替换所有匹配的分号。
- :1,10s#//##
s
:表示替换操作。#
:作为分隔符,指定要替换的模式。//
:要被替换的字符串。##
:替换为的内容(这里是空字符串,表示删除//
)。
如何删除自定义列:
使用 Visual Block 模式:
- 首先,将光标移动到你想删除的列的第一个字符上。
- 按下 Ctrl-v 进入 Visual Block 模式。
- 使用方向键(h, j, k, l)或者鼠标来选择你想要删除的列的范围。
- 按下 d 来删除选中的块。
如何解决vim乱码?(中文不能正常显示)
打开用户目录下的vim配置文件
vim ~/.vimrc
输入
set termencoding=utf-8
set encoding=utf8
set fileencodings=utf8,ucs-bom,gbk,cp936,gb2312,gb18030
如图,中文显示正常