Vim 是从 vi 发展出来的一个文本编辑器;代码补全、编译及错误跳转等方便编程的功能特别丰富。
#下载安装
yum -y install vim
命令模式
用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被 Vim 识别为命令,而非输入字符,比如我们此时按下 i,并不会输入一个字符,i 被当作了一个命令。
以下是普通模式常用的几个命令:
- i -- 切换到输入模式,在光标当前位置开始输入文本。
- x -- 删除当前光标所在处的字符。
- : -- 切换到底线命令模式,以在最底一行输入命令。
- a -- 进入插入模式,在光标下一个位置开始输入文本。
- o:在当前行的下方插入一个新行,并进入插入模式。
- O -- 在当前行的上方插入一个新行,并进入插入模式。
- p(小写) -- 粘贴剪贴板内容到光标下方。
- P(大写)-- 粘贴剪贴板内容到光标上方。
- u -- 撤销上一次操作。
- Ctrl + r -- 重做上一次撤销的操作。
- :w -- 保存文件。
- :q -- 退出 Vim 编辑器。
- :q! -- 强制退出Vim 编辑器,不保存修改。
若想要编辑文本,只需要启动 Vim,进入了命令模式,按下 i 切换到输入模式即可。
命令模式只有一些最基本的命令,因此仍要依靠底线命令行模式输入更多命令。
ctrl+v #进入可视块模式
shift+v #进入可视行模式
#可视模式下,d:删除;y:复制;p:粘贴
输入模式
在命令模式下按下 i 就进入了输入模式,使用 Esc 键可以返回到普通模式。
在输入模式中,可以使用以下按键:
- 字符按键以及Shift组合,输入字符
- ENTER,回车键,换行
- BACK SPACE,退格键,删除光标前一个字符
- DEL,删除键,删除光标后一个字符
- 方向键,在文本中移动光标
- HOME/END,移动光标到行首/行尾
- Page Up/Page Down,上/下翻页
- Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
- ESC,退出输入模式,切换到命令模式
底线命令模式
在命令模式下按下 :(英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
在底线命令模式中,基本的命令有(已经省略了冒号):
- :w:保存文件。
- :q:退出 Vim 编辑器。
- :wq:保存文件并退出 Vim 编辑器。
- :q!:强制退出Vim编辑器,不保存修改。
按 ESC 键可随时退出底线命令模式。
#全局替换:s:swich:替换;g:全局
#语法:范围 s/原内容/新内容/选项
#1到5行,把所有 a_str 替换成 b_str
:1,5 s/a_str/b_str/g
#替换行内关键字;%表示替换所有行,没有g只替换每行第一个
:%s/a_str/b_str/
#i不区分大小写
s/a_str/b_str/gi
#将文件另存(另存为):覆盖另存
:w 文件路径
#把当前文件 另存为/tmp下的a.txt
:w /tmp/a.txt
#把当前文件的第2-5行 另存为/tmp下的a.txt
:2,5 w /tmp/a.txt
光标移动:
[Ctrl] + [f] |
屏幕『向下』移动一页,相当于 [Page Down]按键 (常用) |
[Ctrl] + [b] |
屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用) |
[Ctrl] + [d] |
屏幕『向下』移动半页 |
[Ctrl] + [u] |
屏幕『向上』移动半页 |
0 或功能键[Home] |
这是数字『 0 』:移动到这一行的最前面字符处 |
$ 或功能键[End] |
移动到这一行的最后面字符处(常用) |
H |
光标移动到这个屏幕的最上方那一行的第一个字符 |
M |
光标移动到这个屏幕的中央那一行的第一个字符 |
L |
光标移动到这个屏幕的最下方那一行的第一个字符 |
G |
移动到这个档案的最后一行(常用);数字G:移动到第几行 |
gg |
移动到这个档案的第一行,相当于 1G 。(常用) |
搜索替换:
/string |
向光标之下寻找一个名称为 string 的字符串。 |
?string |
向光标之上寻找一个字符串名称为 string 的字符串。 |
n |
这个 n 是英文按键。代表重复前一个搜寻的动作。 |
N |
这个 N 是英文按键。为『反向』进行前一个搜寻动作。 |
全局替换:s:swich
#语法:范围 s/原内容/新内容/全局
:1,5 s/a_str/b_str/g
#1到5行,把a_str替换成b_str,g:全局
删除复制:
命令模式:下方的删除命令,都带有剪切的意思,可以通过p复制已删除的内容。
x 或 X |
x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) |
nx |
n 为数字,连续向后删除 n 个字符。 |
dd |
剪切游标所在的那一整行(常用),用 p/P 可以粘贴。 |
ndd |
n 为数字。剪切光标所在的向下 n 行。 |
d1G |
删除光标所在到第一行的所有数据 |
dG |
删除光标所在到最后一行的所有数据 |
d$ |
删除游标所在处,到该行的最后一个字符 |
d0 |
那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符 |
yy |
复制游标所在的那一行(常用) |
nyy |
n 为数字。复制光标所在的向下 n 行。 例如 20yy 则是复制 20 行 |
p 或 P |
p 为将已复制的数据在光标下一行贴上; P 则为贴在游标上一行。 |
y1G |
复制游标所在行到第一行的所有数据 |
yG |
复制游标所在行到最后一行的所有数据 |
y0 |
复制光标所在的那个字符到该行行首的所有数据 |
y$ |
复制光标所在的那个字符到该行行尾的所有数据 |
J |
将光标所在行与下一行的数据结合成同一行 |
c |
重复删除多个数据,例如向下删除 10 行,[ 10cj ] |
u |
复原前一个动作。(常用) |
[Ctrl]+r |
重做上一个动作。(常用) |
. |
小数点!意思是重复前一个动作的意思。 重复删除、重复贴上等等动作,按下小数点『.』就好了! |
环境更变:
:set nu |
显示行号 |
:set nonu |
与 set nu 相反,为取消行号 |
:set list |
显示控制字符 |
:noh | 取消高亮显示 |