0%

[linux] 5.vim指令

what is vim?#

Vim是从 vi 发展出来的一个 文本编辑器。简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。

vim 的模式#

vim 共分为三种模式,分别是: - 命令模式(Command mode) - 输入模式(Insert mode) - 底线命令模式(Last line mode)

命令模式#

用户刚刚启动 vim,便进入了命令模式。

此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。下面列举常用的命令模式

查找 与 替换#

查找#

  • Command模式下按 “/” 即可进入查找模式,输入要查找的字符串并 按下Enter。 Vim会跳转到第一个匹配。 按下 “n” 查找下一个,按下 “N” 查找上一个
  • 在查找模式中加入 示大小写不敏感查找,表示大小写敏感查找, 例如
    1
    /foo\c

替换#

1
:{作用范围}s/{目标}/{替换}/{替换标志}

例如 在全局范围(%)查找 foo 并替换为 bar,所有出现都会被替换(g)

作用范围#
作用范围 示例
当前行 :s/foo/bar/g
全文 :%s/foo/bar/g
选区,在 Visual 模式下选择区域后输入 :,Vim 即可自动补全为 :'<,'>。 :'<,'>s/foo/bar/g
2-11 行 :2,11s/foo/bar/g
当前行 . 与接下来两行 +2 :.,+2s/foo/bar/g
替换标志符#
替换标志符 示例
只替换从光标位置开始,目标的第一次出现 :%s/foo/bar
i 表示大小写不敏感查找 :%s/foo/bar/i
I 表示大小写敏感 :%s/foo/bar/I
c 表示需要确认 :%s/foo/bar/c
g 表示全局 global 替换 :%s/foo/bar/gc

插入#

1
2
3
4
5
6
7
8
9
10
11
12
13
-----进入输入模式(Insert mode)-----
i 当前位置前插入
I 当前行首插入

a 当前位置后插入
A 当前行尾插入

o 当前行之后插入一行
O 当前行之前插入一行

-----进入取代模式(Replace mode)-----
r 取代光标所在的那一个字符一次
R 一直取代光标所在的文字,直到按下 ESC 为止

移动#

以行为单位移动#

命令 作用
^ 移动到行首第一个词的首字母。
| 移动到行首第一个字符
$ 移动到行尾
j 移动到下一行。
k 移动到上一行。
:10 移动光标到文件第 10 行。可以 :set number 来让 vim 显示行号。
gg 移动到文件首行
G 移动到文件尾行

以屏幕为单位移动#

命令 作用
Ctrl + e 向下滚动一行
Ctrl + y 向上滚动一行
Ctrl + d(down) 向下滚动半屏
Ctrl + u(up) 向上滚动半屏
Ctrl + f(forward) 向下滚动一屏
Ctrl + b(back) 向上滚动一屏
Shift + g 切换到最后

以单词为单位移动#

命令 作用
w 移动到下一个单词的词首
b 移动到上一个单词的词首
e 移动到下一个单词的结尾

删除#

命令 作用
x, X 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用)
nx n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。
dd 删除游标所在的那一整行(常用)
ndd n 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用)
d1G 删除光标所在到第一行的所有数据
dG 删除光标所在到最后一行的所有数据
d$ 删除游标所在处,到该行的最后一个字符
d0 那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符

复制#

命令 作用
yy 复制游标所在的那一行(常用)
nyy n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用)
y1G 复制游标所在行到第一行的所有数据
yG 复制游标所在行到最后一行的所有数据
y0 复制光标所在的那个字符到该行行首的所有数据
y$ 复制光标所在的那个字符到该行行尾的所有数据
p, P p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用)

撤销与重做#

命令 作用
u 撤销 (常用)
[Ctrl]+r 重做上一个动作 (常用)

查看历史输入#

1
q + (Ctrl + :)

输入模式#

在命令模式下按下 i就进入了输入模式。在输入模式中,可以使用以下按键:

  • 字符按键以及Shift组合,输入字符
  • ENTER,回车键,换行
  • BACK SPACE,退格键,删除光标前一个字符
  • DEL,删除键,删除光标后一个字符
  • 方向键,在文本中移动光标
  • HOME/END,移动光标到行首/行尾
  • Page Up/Page Down,上/下翻页
  • Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
  • ESC,退出输入模式,切换到命令模式

底线命令模式#

在命令模式下按下 :(英文冒号) 就进入了底线命令模式。

底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。

在底线命令模式中,基本的命令有(已经省略了冒号):

1
2
3
4
5
6
7
8
9
10
:q          退出程序
:q! 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存
:w 保存文件
:w! 若文件属性为『只读』时,强制写入该档案。到底能不能写入, 还是跟权限有关

----环境的变更----
:set nu 显示行号,设定之后,会在每一行的前缀显示该行的行号
:set nonu 与 set nu 相反,为取消行号

ESC 退出底线命令模式
惊叹号 ("!") 在 vim 当中,常常具有『强制』的意思

更改vim配置#

打开配置文件

1
sudo vi /etc/vim/vimrc
如设置显示行号, 跳转到文本末尾, 输入
1
set number  "显示行号

reference#

1.Linux vi/vim