x 删除字符
在交互模式下,将光标定位到一个你想删除的字符上,按下字母键 x(小写的 x),你会发现这个字符被删除了。
效果和在插入模式下用 BackSpace 键(退格键)来删除字符一样。
我们也可以一次性删除多个字符,只需要在按 x 键之前输入数字即可。比如我要删除从光标处字符开始到后面的 4个字符,我可以先按下键盘上的数字键 4,然后再按 x。你会发现,4 个字符被删除了。如果输入 12,再按下 x,那么从光标处开始往后的 12 个字符都会被删除。
d 删除单词
我们用字母键 d(d 是 delete 的首字母,是英语“删除”的意思)来删除单词或者行。其实被删除的内容会被暂存在
内存里,就好像“剪切”。被剪切的内容之后是可以被粘贴的。我们之后会学到,要使用字母键 p。
先从删除行开始:
dd 删除行
连按两次 d 来删除光标所在的那一行。
dd
也可以和数字配合,以实现一次性删除多行。例如,先输入 2,再按下 dd ,就会删除从光标所在行开始的 2 行。
dw :删除一个单词
将光标置于一个单词的首字母处,然后按下 dw (delete word 的缩写,表示“删除单词”),整个单词就会被删除了。如果光标置于单词中的某个字符上,那么只会删除从当前字符开始到下一个空格前的所有字符。当然,你也可以一次性删除 3 个单词,只需要依次按下 3dw 。而且如果你把数字放在 d 和 w 之间也是可以的,例如 d3w 。
d0 和 d$ :删除行首或行末
还记得 0 键和 $ 键吗?之前我们请大家在 Vim 中尽量用这两个键来实现跳转到行首和行末,而不要用 Home 和End 键。
按下 d 键,再加 0 键,就会删除从光标处到行首的所有字符。
按下 d 键,再加 $ 键,就会删除从光标处到行末的所有字符。
yy :复制行到内存中
按两次 y 会把光标所在行复制到内存中。和 dd 类似, dd 用于“剪切”光标所在行到内存中,而 yy 是“复制”。
yw 会复制一个单词, y$ 是复制从光标所在处到行末的所有字符, y0 是复制从光标所在处到行首的所有字符。
y 是 yank 的首字母,是英语“拔出,抽出”的意思。在 Vim 中,yank 就是复制(copy)的意思。就好像把文本拔(yank)起来,之后要粘贴就是放(put)上去。
p :粘贴
如果你之前用 dd 来剪切过一行,或者用 yy 来复制过一行,或者是同类操作(比如 y
,
d
w
,
y
0
,
d
0
,
d
等等),那么可以使用 p 键来粘贴这些内容。
p 是英语 paste 的首字母,表示“粘贴”
注意:用 p 来粘贴时,内容会被粘贴到光标之后。如果你用 yy 复制了一行,再用 p 来粘贴,那么这一行会被粘贴到光标所在行的下一行处。
我们也可以将同样的内容粘贴多次,只需要在 p 前面加上次数。例如 7p ,表示粘贴 7 次。
r: 替换一个字符
如果你输入文本时不小心输错了一个字符,你可以用替换来解决。
在交互模式下,将光标置于想要替换的字符上,按下 r 键(r 是 replace 的首字母,是英语“替换”的意思),接着输入你要替换的字符。例如,rs 表示替换当前字符为 s。
如果你用大写的 R,那就是切换到替换模式了。左下角会显示 -- REPLACE -- 。在替换模式下,你可以一次性替换多个字符。
u: 撤销操作
这是 Vim 中使用频率很高的按键。
如果要撤销最近的修改,只需要按下 u 键(u 是 undo 的首字母,是英语“撤销”的意思)。同样的,如果想要撤销最近四次修改,可以按下 4,再按下 u。
为了取消撤销,也就是重做之前的修改,只需要按下 Ctrl 键 + r 键(r 是 redo 的首字母,是英语“重做”的意思)。
g: 跳转到指定行
g 是 go 的首字母,是英语“去”的意思。
Vim 编辑的文件中,每一行都有一个行号。行号从 1 开始,逐一递增。
在 Vim 中,我们可以注意到右下角有类似这样的字样
4,6
:4 表示行号,6 表示列号。因此 4,6 表示当前光标位于第四行,第六列。
跳转到指定行:
行号 + G 或 行号 + gg 或 行号 + shift+g
要跳转到最后一行,按下 G(大写的 G,Shift + g)
/: 查找
如果你按下 /(斜杠)键,那么就进入了查找模式。这时,你会在左下角看到一个斜杠符号,而且光标会转到斜杠右边,意思是让你输入要查找的字符串:
此时输入你要查找的字符串,然后按下回车。光标就会转到文件中下一个查找到的匹配处。
如果字符串不存在,那么会显示 “Pattern not found”,表示“没有找到匹配项”
。如下图中我要查找 “dd”,我在 / 之后输入了 dd,再按回车。但是文件中没有这个字符串:
如果要查找下一个匹配项,只需要按 n 键(n 是next 的缩写,表示“下一个”)。如果要反向查找,需要按 N(大写的 n,也就是 Shift + n)。
用斜杠来进行的查找是从当前光标处开始,向文件尾搜索。
如果你要从当前光标处开始,向文件开头搜索,那么将斜杠(/)替换为问号(?)即可,其它功能是一样的。
s: 查找并替换
有时候我们光查找字符串还不够,还想实现查找替换。要实现字符串替换,有好几种方法。
最简单的就是:
:s/旧字符串/新字符串 。
但是这种方法只会替换光标所在行的第一个匹配的字符串。
我们列出几乎所有实现查找替换的方法:
:s/旧字符串/新字符串
:替换光标所在行的第一个匹配的旧字符串为新字符串。例如 :s/write/read 会“替换光标所在行的第一个 write 为 read”
:s/旧字符串/新字符串/g
:替换光标所在行的所有匹配的旧字符串为新字符串。
:#,# s/旧字符串/新字符串/g
:替换文件中第 # 行到第 # 行的所有匹配的旧字符串为新字符串。例如 :3,6 s/just/love/g 会“替换文件中第 3 行到第 6 行的所有 just 为 love”
:%s/旧字符串/新字符串/g :替换文件中所有匹配的字符串(应该是最常用的吧)。例如 :%s/just/love/g会“替换文件中所有 just 为 love”
r: 合并文件
我们可以用 冒号 + r( :r )实现在光标处插入一个文件的内容。例如:
:r 另一个文件名
可以用 Tab 键来自动补全另一个文件的路径。
:sp :横向分屏
可以看到,myFile 文件又被打开了一次。这时两个 viewport 的内容是同一个文件:myFile。
当然,我们也可以在两个分开的屏幕中分别打开不同的文件。只需要在输入 :sp 之后空一格,再输入要打开的另一个文件名:
:sp 另一个文件名
可以用 Tab 键来自动补全另一个文件的路径。
你可以再输入一次 :sp ,来把屏幕分成 3 块。再输入一次,屏幕会被分成 4 块,以此类推。
:vsp :垂直分屏
分屏切换快捷键:
| 快捷键 | 作用 |
|-------|-------|-------|
| Ctrl+w然后按h(或者方向键←) | 移动光标到左边的 viewport |
| Ctrl+w然后按j(或者方向键↓) | 移动光标到下边的 viewport |
| Ctrl+w然后按k(或者方向键↑) | 移动光标到上边的 viewport |
| Ctrl+w然后按l(或者方向键→) | 移动光标到右边的 viewport |
Ctrl + w 然后按 + :扩大当前 viewport。
Ctrl + w 然后按 - :缩小当前 viewport。
Ctrl + w 然后按 = :重新均匀分配各个 viewport 的占比。
Ctrl + w 然后按 r :调换各个 viewport 的位置。用 R 的话是反向调换。
Ctrl + w 然后按 q 或按 c :关闭当前 viewport。输入 :quit 或 :close 也有一样效果。q 是 quit 的缩写,表示“退出”
Ctrl + w 然后按 o :只保留当前所在 viewport,关闭其他 viewport。输入 :only 也有一样效果,o 是 only 的缩写
:! :运行外部命令
在 Vim 中可以运行一些终端命令。只要先输入 :! ,然后接命令名称。
例如, :!ls ,就是 Vim 打开的文件所在目录运行 ls 命令,就会列出当前目录包含的文件:
可以看到,在 Vim 中运行 ls 命令后,终端暂时隐藏了 Vim 的界面,而显示了 ls 命令的运行结果。底下有一句话:“Press ENTER or type command to continue”,表示“按回车键或输入命令来继续”。
我们按下回车键,就切换回我们 Vim 的界面了
选项参数功用
以命令模式激活选项参数
“短暂性”配置选项参数的方法是通过运行一些命令。一旦 Vim 被打开后,要激活一个选项参数,只需要输入:
:set 选项名
,而不激活(取消)一个选项参数,只需要输入
:set no 选项名
;有些选项参数需要被指定一个值,像这样:
:set 选项名=数值
;如果想了解一个选项参数的状态,只需要输入:
:set 选项名?
在配置文件中配置选项参数
如果你不喜欢“短暂性”的用命令来配置选项参数的方法,那么可以用一个配置文件,在里面写入所需选项参数的配置。而这也是我们比较推荐的方法,毕竟没有几个人愿意每次打开 Vim 重新配置一次选项参数。
目前在我们的用户家目录还没有 .vimrc (注意前面有一点 . ,表示是隐藏文件)这个 Vim 的配置文件。但是在/etc/vim 目录中有一个文件叫做 vimrc (注意前面没有一点 . )。
我们把 /etc/vim 目录下的 vimrc 拷贝到我们家目录中,并且重命名为 .vimrc。如下:
cp /etc/vim/vimrc ~/.vimrc
,打开文件。可以看到一些选项参数的配置行前面有双引号,表示这个选项参数还没有被激活,那么你可以删除行首的双引号来激活这个选项参数。
syntax:配置语法高亮
syntax on
background:背景着色
background:背景着色
number:显示行号
set number
showcmd:显示当前命令:当你在 Vim 中输入命令时,有时(主要是在交互模式下)不能看到自己输入的命令。
例如你输入 2dd ,想要删除光标所在的一行和下面的一行,但是你看不到自己输入的命令,不确定到底输了 2dd与否。在 Vim 中,如果你想实时看到自己输入的命令,只要设置:
set showcmd
ignorecase:在查找时忽略大小写
一般模式切换到命令行模式
【:w】 保存文件
【:w!】 若文件为只读,强制保存文件
【:q】 离开vi
【:q!】 不保存强制离开vi
【:wq】 保存后离开
【:wq!】 强制保存后离开
【:! command】 暂时离开vi到命令行下执行一个命令后的显示结果
【:set nu】 显示行号
【:set nonu】 取消显示行号
【:w newfile】 另存为
【:set fileencoding】 查看当前文件编码格式
【:set fileencoding=utf-8】 设置当前文件编码格式为utf-8,也可以设置成其他编码格式
【:set fileformat】 查看当前文件的断行格式(dos\windows,unix或macintosh)
【:set fileformat=unix】 将当前文件的断行格式设置为unix格式
编辑模式快捷键
【i】 从目前光标所在处插入
【I】 从目前光标
【a】 从当前光标所在的下一个字符处开始插入
【A】 从光标所在行的最后一个字符处开始插入
【o】 英文小写字母o,在目前光标所在行的下一行处插入新的一行并开始插入
【O】 英文大写字母O,在目前光标所在行的上一行处插入新的一行并开始插入
文件恢复模式
【[O]pen Read-Only】 以只读方式打开文件
【[E]dit anyway】 用正常方式打开文件,不会载入暂存文件内容
【[R]ecover】 加载暂存文件内容
【[D]elete it】 用正常方式打开文件并删除暂存文件
【[Q]uit】 按下q就离开vi,不进行其他操作
【[A]bort】 与quit功能类似
varfun
后端开发工程师 @北京安定门医院二床患者
粉丝