vi(vim) 编辑器

是Linux上最常用的编辑器,vim是vi的增强版。

vi 编辑器一般分为三种模式,一般模式、编辑模式 和 命令模式。不同模式下可以进行不同的操作。

一般模式

一般模式下,可进行光标位置的移动,删除字符 以及 复制 字符等。

光标移动快捷键

操作

快捷键

说明

向下移动光标

↓(向下方向键)、j键 或 space(空格)

每按一次光标向下移动一行




向上移动光标

↑(向上方向键)、k键 或 backspace

每按一次光标向上移动一行




向左移动光标

←(向上方向键)、h键

每按一次光标向左移动一行




向右移动光标

→(向上方向键)、k键 或 backspace

每按一次光标向移动一行




移至下一行行首

回车键

每按一次光标移动到下一行行首




移至上一行行首

-键

每按一次光标移动到上一行行首




移至文件最后一行行首

G键

将光标移动到最后一行行首




移至文件第一行行首

gg键

将光标移动到第一行行首




移至文件指定行(n)行首

ngg键 / nG / :n / vim +n filename (进入文件时)

将光标移动到指定行行首

除了上述表中的光标移动的快捷键之外,还有部分快捷键是在命令模式下使用的→(后面细说)

文本操作快捷键

操作

快捷键

说明

右插入

a

在当前光标所处位置的右边插入文本




左插入

i

在当前光标所处位置的左边插入文本




行尾追加

A

在当前行的末尾追加文本




行首插入

I

在当前行的开始处插入文本




插入行

O或o

O键是在当前位置的上一行位置插入新行,o是在下一行




覆盖文本

R

覆盖当前光标所在位置以及后面的若干文本




合并行

J

将当前光标所在行与下面的一行合并为一行

在上述表中的快捷键中,除了J键,其他的快捷键都会让vi编译器从一般模式进入编辑模式。

进入编辑模式后 可以通过 Esc 键来退出编辑模式,再次进入一般模式

文本复制和粘贴快捷键

操作

快捷键

说明

复制行

yy

将当前行复制到缓冲区




复制多行

nyy

将当前行及以下的n行复制到缓冲区,其中n为一个整数。




复制单词

yw

复制从光标当前位置到当前单词词尾的字符




复制多个单词

nyw

从光标位置开始复制后面n个单词,n为一整数




复制光标到行首

y^

从光标当前位置开始,复制到行首




复制光标到行首

y$

从光标当前位置开始,复制到行尾




粘贴到光标后面的位置

p

将缓冲区中的字符串插入到当前光标的后面




粘贴到光标前面的位置

P

将缓冲区中的字符串插入到当前光标的前面

如果光标在单词中间,那么yw不能复制完整的单词。

删除文本快捷键

操作

快捷键

说明

删除当前字符

x

删除光标所在位置的字符




删除多个字符

nx

删除从光标所在位置开始,后面的n个字符




删除当前行

dd

删除光标所在位置的整行




删除多行

ndd

删除包含当前行在内的n行




撤销上一步操作

u

撤销刚刚执行的操作




撤销多个操作

U

撤销针对当前行的所有操作

多字符组成的快捷键,按的时候快一点

编辑模式

编辑模式下,和txt文本编辑器差不多

不能再用h、j、k、l,来移动光标了,也不能用x来删除了。他们就是他们自己。

命令模式

在命令模式下,用户主要完成文件的打开、保存、将光标跳转到某行,以及显示行号等操作。

在一般模式下, 按 “:” 之后,进入命令模式

常用的vi命令

操作

快捷键

说明

打开文件

:e

打开另外一个文件,将文件名作为参数




保存文件

:w

保存文件,即将文件的改动写入磁盘。如果将文件另存为其他文件名,则可以将新文件名作为参数




退出vi编辑器

:q

退出




直接退出编辑器

q!

不保存修改,直接退出vi编辑器




退出并保存

:wq

将文件保存后 再 退出vi 编辑器

感叹号 “ ! ” 在编辑器中表示跳过某些检查,强制执行某些操作。

例如:直接退出 :q! ,这样vi将不保存修改,直接退出,,类似的 还有 :e! ,也是不保存修改,直接跳到下一个文件。当然,:w! 也能强制修改 只读文件,可了不得!!!

常用的其他命令

操作

快捷键

说明

跳至指定行

:n 、 :+n 或 : -n

:n 表示跳到行号为n 的行,:+n 表示向下跳 n 行,:-n 表示向上跳n行




显示或隐藏行号

:set nu 或 set nonu

:set nu 表示在每行前面显示行号;set nonu 表示隐藏行号




替换字符串

:s/old/new、:s/old/new/g (这个 “冒号” 应该是英文的,但是 :+s 会变成小表情 → 😒)、:n,m s/old/new/g 或 :%s/old/new/g

:s/old/new 表示用字符串 new 替换 当前行中首次出现的字符串 old; :s/old/new/g 表示用字符串new 替换 当前行 所有的 old;:n,m s/old/new/g 表示用字符串new替换从 n 行到 m 行 所有的old;:%s/old/new/g 表示用字符串 new 替换当前文件中所有的字符串old




设置文件格式

:set fileformat=linux

将文件修改为 unix 格式,如win下面的文本文件在Linux下会出现^M。其中fileformat 可以取unix 或 dos 等值

到这,三个模式就大致说完了,,但。。
还有个 搜索 ,
搜索有点特殊,也比较常用,所以单独拿出来说,并且再介绍一种 非vi命令的 查找(grep)
搜索:Shell——文件内容的查询