返回介绍

Vim 编辑器

发布于 2025-02-25 23:29:29 字数 17862 浏览 0 评论 0 收藏 0

学习使用强大 Vim 编辑器,Vim 是从 vi 发展出来的一个文本编辑器,在程序员中被广泛使用。和 Emacs 并列成为类 Unix 系统用户最喜欢的编辑器。

一、实验说明

1. 环境登录

无需密码自动登录,系统用户名 shiyanlou 若不小心登出后,直接刷新页面即可

2. 环境使用

实验报告可以在个人主页中查看,其中含有每次实验的截图及笔记,以及每次实验的有效学习时间(指的是在实验桌面内操作的时间,如果没有操作,系统会记录为发呆时间)。这些都是您学习的真实性证明。

3. 课程来源

VIM 在线手册

二、vim 模式介绍

以下介绍内容来自维基百科 Vim

从 vi 演生出来的 Vim 具有多种模式,这种独特的设计容易使初学者产生混淆。几乎所有的编辑器都会有插入和执行命令两种模式,并且大多数的编辑器使用了与 Vim 截然不同的方式:命令目录(鼠标或者键盘驱动),组合键(通常通过 control 键(CTRL)和 alt 键(ALT)组成)或者鼠标输入。Vim 和 vi 一样,仅仅通过键盘来在这些模式之中切换。这就使得 Vim 可以不用进行菜单或者鼠标操作,并且最小化组合键的操作。对文字录入员或者程序员可以大大增强速度和效率。

Vim 具有 6 种基本模式和 5 种派生模式,我们这里只简单介绍下 6 种基本模式:

  • 普通模式(Normal mode)

>在普通模式中,用的编辑器命令,比如移动光标,删除文本等等。这也是 Vim 启动后的默认模式。这正好和许多新用户期待的操作方式相反(大多数编辑器默认模式为插入模式)。

>Vim 强大的编辑能来自于其普通模式命令。普通模式命令往往需要一个操作符结尾。例如普通模式命令 dd 删除当前行,但是第一个"d"的后面可以跟另外的移动命令来代替第二个 d ,比如用移动到下一行的"j"键就可以删除当前行和下一行。另外还可以指定命令重复次数, 2dd (重复 dd 两次),和 dj 的效果是一样的。用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式的编辑命令,并且能够灵活组合使用的话,能够比那些没有模式的编辑器更加高效的进行文本编辑。

>在普通模式中,有很多方法可以进入插入模式。比较普通的方式是按 a (append/追加)键或者 i (insert/插入)键。

  • 插入模式(Insert mode)

>在这个模式中,大多数按键都会向文本缓冲中插入文本。大多数新用户希望文本编辑器编辑过程中一直保持这个模式。

>在插入模式中,可以按 ESC 键回到普通模式。

  • 可视模式(Visual mode)

>这个模式与普通模式比较相似。但是移动命令会扩大高亮的文本区域。高亮区域可以是字符、行或者是一块文本。当执行一个非移动命令时,命令会被执行到这块高亮的区域上。Vim 的"文本对象"也能和移动命令一样用在这个模式中。

  • 选择模式(Select mode)

> 这个模式和无模式编辑器的行为比较相似(Windows 标准文本控件的方式)。这个模式中,可以用鼠标或者光标键高亮选择文本,不过输入任何字符的话,Vim 会用这个字符替换选择的高亮文本块,并且自动进入插入模式。

  • 命令行模式(Command line mode)

>在命令行模式中可以输入会被解释成并执行的文本。例如执行命令( : 键),搜索( /? 键)或者过滤命令( ! 键)。在命令执行之后,Vim 返回到命令行模式之前的模式,通常是普通模式。

  • Ex 模式(Ex mode)

>这和命令行模式比较相似,在使用 :visual 命令离开 Ex 模式前,可以一次执行多条命令。

>这其中我们常用到就是普通模式、插入模式和命令行模式,本课程也只涉及这三个常用模式的内容

2.三种常用模式的切换

vim 启动进入普通模式,处于插入模式或命令行模式时只需要按 Esc 或者 Ctrl+[ (这在 vim 课程环境中不管用) 即可进入普通模式。普通模式中按 i (插入)或 a (附加)键都可以进入插入模式,普通模式中按 : 进入命令行模式。命令行模式中输入 wq 回车后保存并退出 vim。

三、进入 vim

1.使用 vim 命令进入 vim 界面

vim 后面加上你要打开的已存在的文件名或者不存在(则作为新建文件)的文件名。 打开 Xfce 终端,输入以下命令

$ vim practice_1.txt

直接使用 vim 也可以打开 vim 编辑器,但是不会打开任何文件。

$ vim

进入命令行模式后输入 :e 文件路径 同样可以打开相应文件。

2.游标移动

在进入 vim 后,按下 i 键进入插入模式。在该模式下您可以输入文本信息,下面请输入如下三行信息:

12345678
abcdefghijk
shiyanlou.com

Esc 进入普通模式,在该模式下使用方向键或者 h , j , k , l 键可以移动游标。

按键 | 说明
-----|----
   h | 左 l | 右(小写 L) j |下 k |上 w |移动到下一个单词 b |移动到上一个单词

请尝试在普通模式下使用方向键移动光标到 shiyanlou 这几个字母上面。

四、进入插入模式

1.进入插入模式

在普通模式下使用下面的键将进入插入模式,并可以从相应的位置开始输入

命令 | 说明
-----|-----
   i | 在当前光标处进行编辑 I | 在行首插入 A | 在行末插入 a | 在光标后插入编辑 o | 在当前行后插入一个新行 O | 在当前行前插入一个新行 cw | 替换从光标所在位置后到一个单词结尾的字符

请尝试不同的从普通模式进入插入模式的方法,在最后一行 shiyanlou 前面加上 www.注意每次要先回到普通模式才能切换成以不同的方式进入插入模式

五、保存文档

1.命令行模式下保存文档

从普通模式输入 : 进入命令行模式,输入 w 回车,保存文档。输入 :w 文件名 可以将文档另存为其他文件名或存到其它路径下

六、退出 vim

1.命令行模式下退出 vim

从普通模式输入 : 进入命令行模式,输入 wq 回车,保存并退出编辑

以下为其它几种退出方式:

命令|说明
----|----
   :q! | 强制退出,不保存 :q | 退出 :wq! |强制保存并退出 :w <文件路径> |另存为 :saveas 文件路径 |另存为 :x |保存并退出 :wq |保存并退出

2.普通模式下退出 vim

普通模式下输入 Shift+zz 即可保存退出 vim

七、删除文本

1.普通模式下删除 vim 文本信息

进入普通模式,使用下列命令可以进行文本快速删除:

命令 | 说明
-----|----
   x | 删除游标所在的字符 X | 删除游标所在前一个字符 Delete |同 x dd |删除整行 dw | 删除一个单词(不适用中文) d$D | 删除至行尾 d^ | 删除至行首 dG | 删除到文档结尾处 d1G | 删至文档首部

除此之外,你还可以在命令之前加上数字,表示一次删除多行,如:

2dd 表示一次删除 2 行

我们来做如下练习:

$ cp /etc/protocols .
$ vim protocols

八、总结

vim 初体验你是不是觉得很奇妙呢,或许目前你还没有 vim 产生任何好感,不觉得它是一款优秀的编辑器,那只能是因为你还没能掌握 vim 的精髓,或者是 你打字太慢,回去在小霸王学习机上再练练吧-_-|| 。这里也可以先透露下,vim 的精髓就在于命令键的组合,全键盘的操作,可以使你收不离开键盘输入区域即可完成所有的操作,那可真实即高效又炫酷的体验啊,当你掌握这项技能绝对可以秒掉其它不会用 vim 的程序员几条街(起码在气势上吧,当然还要除掉哪些只会 Emacs 的程序员,因为 Emacs 与 Vim 之间有场战争,感兴趣的可以看这里 Emacs 和 Vim:神的编辑器和编辑器之神 )

九、思考练习

为什么 vim 会使用这么奇葩的方向键 h , j , k , l 及那么别扭反人类的 Esc 作为退出插入模式的键。给点提示:你可以了解下这货 ADM-3A

一、vim 重复命令

1.重复执行上次命令

在普通模式下 . (小数点) 表示重复上一次的命令操作

拷贝测试文件到本地目录

$ cp /etc/protocols .

打开文件进行编辑

$ vim protocols

普通模式下输入 x ,删除第一个字符,输入 . (小数点) 会再次删除一个字符,除此之外也可以重复 dd 的删除操作

2.执行指定次数相同的命令

进入普通模式输入 N<command> ,N 表示重复后面的次数,下面来练习以下:

打开文件文件进行编辑

$ vim protocols

下面你可以依次进行如下操作练习:

  • 输入 10x ,删除 10 个连续字符
  • 输入 3dd ,将会删除 3 行文本

在普通模式下,你还可以使用 dw 或者 daw (delete a word) 删除一个单词,所以你可以很容易的联想到 dnw ( n 替换为相应数字 ) 表示删除 n 个单词

二、游标的快速跳转

普通模式下,下列命令可以让光标快速调转到指定位置,我们分别讨论快速实现 行间 跳转和 行内 跳转

1.行间跳转

命令 | 说明
-----|----
   nG (n Shift+g) | 游标移动到第 n 行 (如果默认没有显示行号,请先进入命令模式,输入 :set nu 以显示行号) gg | 游标移动到到第一行 G (Shift+g) | 到最后一行

还是来练习一下吧:

使用 vim 打开练习文档

$ vim protocols

依次进行如下操作练习:

  • 快速跳转到第 9 行,然后将其该行删除
  • 回到第一行,向下删除 8 行
  • 跳转到文档末,然后删除该行

小技巧:你在完成依次跳转后,可以使用 Ctrl+o 快速回到上一次(跳转前) 光标所在位置 ,这个技巧很实用,比如当你在写代码时,忽然想起有个 bug,需要修改,这时候你跳过去改好了,只需要按下 Ctrl+o 就可以回到你之前的位置。vim 中会用很多类似的小技巧就等着你去发掘。

2.行内跳转

普通模式下使用下列命令在行内按照单词为单位进行跳转

命令 | 说明
----|-----
   w | 到下一个单词的开头 e | 到下一个单词的结尾 b | 到前一个单词的开头 ge | 到前一个单词的结尾 0^ | 到行头 $ | 到行尾 f<字母> | 向后搜索<字母>并跳转到第一个匹配的位置(非常实用) F<字母> | 向前搜索<字母>并跳转到第一个匹配的位置 t<字母> | 向后搜索<字母>并跳转到第一个匹配位置之前的一个字母(不常用) T<字母> | 向前搜索<字母>并跳转到第一个匹配位置之后的一个字母(不常用)

依次进行如下操作练习:

  • 在普通模式下,任意跳转到一行,使用 w 跳转到一个单词的开头,然后使用 dw 删除这个单词
  • 在普通模式下,使用 e 跳转到一个单词的结尾,并使用 ~ 将游标所在字母变成大写或小写

三、复制粘贴和剪切

1.复制及粘贴文本

  • 普通模式中使用 y 复制
    • 普通模式中, yy 复制游标所在的整行( 3yy 表示复制 3 行)
    • 普通模式中, y^ 复制至行首,或 y0 。不含光标所在处字符。
    • 普通模式中, y$ 复制至行尾。含光所在处字符。
    • 普通模式中, yw 复制一个单词。
    • 普通模式中, y2w 复制两个单词。
    • 普通模式中, yG 复制至文本末。
    • 普通模式中, y1G 复制至文本开头。
  • 普通模式中使用 p 粘贴
    • 普通模式中, p (小写) 代表粘贴至光标后(下)
  • 普通模式中, P (大写) 代表粘贴至光标前(上)

打开文件进入普通模式练习上述命令,这会儿你就可以随意 yy 了,一 一+

$ vim protocols

2.剪切及粘贴

其实前面讲得 dd 删除命令就是剪切,你每次 dd 删除文档内容后,便可以使用 p 来粘贴,也这一点可以让我们实现一个很爽快的功能——交换上下行:

ddp ,就这么简单,即实现了快速交换光标所在行与它下面的行

四、总结

这一小节你应该掌握了几个经常使用到的操作,包括快速行间移动和快速行内移动,以及剪切和复制粘贴等操作,希望你能够多加练习熟练掌握,一旦当你熟练了这些操作将会极大地提高你的工作效率。

五、思考练习

我们前面学过的那些命令、操作,除了提到过的还有哪些支持前面加上数字实现重复多次操作,如 3dd

一、字符的替换及撤销(Undo 操作)

1.替换和撤销(Undo) 命令

替换和 Undo 命令都是针对普通模式下的操作

命令 | 说明
-----|-----
   r +<待替换字母> | 将游标所在字母替换为指定字母 R | 连续替换,直到按下 Esc cc | 替换整行,即删除游标所在行,并进入插入模式 cw | 替换一个单词,即删除一个单词,并进入插入模式 C (大写)|替换游标以后至行末 ~ | 反转游标所在字母大小写 u {n} | 撤销一次或 n 次操作 U (大写)| 撤销当前行的所有修改 Ctrl+r | redo,即撤销 undo 的操作

打开文件进行编辑:

$ vim practice_2
# 输入以下文本
www.shiyanlou.com

然后依次进行如下操作

  • 输入 11G ,跳转到 11 行
  • 输入 fa 跳转到第一个 a 字符
  • 输入 r ,并且输入 b,a 字符被 b 字符替换(实用)
  • 输入 R 替换字符,输入新字符串,输入完按 ESC 回到普通模式(实用)
  • 输入 cc 替换整行字符,输入新字符串,输入完按 ESC 回到普通模式
  • 输入 cw 替换一个英文字(word),输入完按 ESC 回到普通模式(实用)
  • 输入 ~ ,翻转游标所在字符的大小写
  • 输入 C 替换至行尾,即游标所在处以后的字都会被替换,输入完按 ESC 回到普通模式
  • 输入 u 撤销上一次的操作

二、快速缩进

1.使用命令进行快速调整缩进操作

这一小节学习如何在 vim 中进行快速缩进,缩进操作均在普通模式下有效

打开文件进行编辑

$ vim protocols
  • 普通模式下输入 15G ,跳转到 15 行
  • 普通模式下输入 >> 整行将向右缩进(使用,用于格式化代码超爽)
  • 普通模式下输入 << 整行向左回退
  • 普通模式下输入 : 进入命令行模式下对 shiftwidth 值进行设置可以控制缩进和回退的字符数

2.shiftwidth 命令

shiftwidth 命令是指上一节 >> 命令产生的缩进(可以简写成 sw ) 普通模式下输入 : 进入命令行模式下对 shiftwidth 值进行设置可以控制缩进和回退的字符数 获取目前的设定值

:set shiftwidth?

设置缩进为 10 个字符

:set shiftwidth=10

输入 ESC 回到普通模式,再次尝试 >> 看缩进量是否变化

3.调整文本位置

命令行模式下输入 :ce (center) 命令使本行内容居中

:ce

命令行模式下输入 :ri (right) 命令使本行文本靠右

:ri

命令行模式下输入: le (left) 命令使本行内容靠左

:le

三、查找

1.快速查找

普通模式下输入 / 然后键入需要查找的字符串 按回车后就会进行查找。 / 功能相同,只不过 是向上而 / 是向下查找。 进入查找之后,输入 nN 可以继续查找 n 表示继续查找, N 反向查找

2.快速查找练习

使用 vim 打开文件进行编辑

$ vim protocols
  • 普通模式下输入 /icmp 查找字符串 icmp
  • 普通模式下输入 n 查找下一个 icmp
  • 普通模式下输入 ?tcp 向上查找字符串 tcp
  • 普通模式下输入 N 查找上一个出现的 tcp

3.高级查找

  • 普通模式下输入 \* 寻找游标所在处的单词
  • 普通模式下输入 \# 同上,但 \* 是向前(上)找,#则是向后(下)找
  • 普通模式下输入 g\*\* ,但部分符合该单词即可
  • 普通模式下输入 g\#\# ,但部分符合该单词即可

以上查找 n , N 的继续查找命令依然可以用

四、总结

这一节学习了替换,撤销操作及快速查找,其中替换和文档内快速查找的功能十分实用,希望能够熟练掌握

一、多文件编辑

1.使用 vim 编辑多个文件

编辑多个文件有两种形式,一种是在进入 vim 前使用的参数就是多个文件。另一种就是进入 vim 后再编辑其他的文件。 同时创建两个新文件并编辑

$ vim 1.txt 2.txt

默认进入 1.txt 文件的编辑界面

  • 命令行模式下输入 :n 编辑 2.txt 文件,可以加 !:n! 强制切换,之前一个文件的输入没有保存,仅仅切换到另一个文件
  • 命令行模式下输入 :N 编辑 1.txt 文件,可以加 !:N! 强制切换,之前文件内的输入没有保存,仅仅是切换到另一个文件

2.进入 vim 后打开新文件

  • 命令行模式下输入 :e 3.txt 打开新文件 3.txt
  • 命令行模式下输入 :e# 回到前一个文件
  • 命令行模式下输入 :ls 可以列出以前编辑过的文档
  • 命令行模式下输入 :b 2.txt (或者编号)可以直接进入文件 2.txt 编辑
  • 命令行模式下输入 :bd 2.txt (或者编号)可以删除以前编辑过的列表中的文件项目
  • 命令行模式下输入 :e! 4.txt ,新打开文件 4.txt,放弃正在编辑的文件
  • 命令行模式下输入 :f 显示正在编辑的文件名
  • 命令行模式下输入 :f new.txt ,改变正在编辑的文件名字为 new.txt

3.恢复文件

如果因为断电等原因造成文档没有保存,可以采用恢复方式, vim -r 进入文档后,输入 :ewcover 1.txt 来恢复

$ vim -r 1.txt

二、可视模式

1.可视模式命令简介

  • 在普通模式下输入 v (小写),进入字符选择模式,就可以移动光标,光标走过的地方就会选取。再次按下 v 会后就会取消选取。
  • 在普通模式下输入 Shift+v (小写),进入行选择模式,按下 V 之后就会把整行选取,您可以上下移动光标选更多的行,同样,再按一次 Shift+v 就可以取消选取。
  • 在普通模式下输入 Ctrl+v (小写),这是区域选择模式,可以进行矩形区域选择,再按一次 Ctrl+v 取消选取。
  • 在普通模式下输入 d 删除选取区域内容
  • 在普通模式下输入 y 复制选取区域内容

2.可视模式命令练习

拷贝练习文件到当前目录

$ cp /etc/protocols .

打开练习文件

$ vim protocols
  • 在普通模式下 9G 跳转到第 9 行,输入 Shift+v (小写 V),进入可视模式进行行选择,选中 5 行,按下 >> 缩进,将 5 行整体缩进一个 shiftwidth
  • 在普通模式下输入 Ctrl+v (小写 v),进入可视模式进行矩形区域选择,选中第一列字符然后 x 删除整列

三、视窗操作

1.视窗操作简介

vim 可以在一个界面里打开多个窗口进行编辑,这些编辑窗口称为 vim 的视窗。 打开方法有很多种,例如可以使用在命令行模式下输入 :new 打开一个新的 vim 视窗,并进入视窗编辑一个新文件(普通模式下输入 Ctrl+w 也可以,但是 Ctrl+w 在 chrome 下会与 chrome 关闭标签页的快捷键冲突,所以使用该快捷键你可以在 IE 或其它浏览器进行练习),除了 :new 命令,下述列举的多种方法也可以在命令模式或普通模式下打开新的视窗:

  • 命令行模式下输入 :sp 1.txt 打开新的横向视窗来编辑 1.txt
  • 命令行模式下输入 :vsp 2.txt 打开新的纵向视窗来编辑 1.txt
  • 普通模式下 Ctrl-w s 将当前窗口分割成两个水平的窗口
  • 普通模式下 Ctrl-w v 将当前窗口分割成两个垂直的窗口
  • 普通模式下 Ctrl-w q 即 :q 结束分割出来的视窗。如果在新视窗中有输入需要使用强制符!即:q!
  • 普通模式下 Ctrl-w o 打开一个视窗并且隐藏之前的所有视窗
  • 普通模式下 Ctrl-w j 移至下面视窗
  • 普通模式下 Ctrl-w k 移至上面视窗
  • 普通模式下 Ctrl-w h 移至左边视窗
  • 普通模式下 Ctrl-w l 移至右边视窗
  • 普通模式下 Ctrl-w J 将当前视窗移至下面
  • 普通模式下 Ctrl-w K 将当前视窗移至上面
  • 普通模式下 Ctrl-w H 将当前视窗移至左边
  • 普通模式下 Ctrl-w L 将当前视窗移至右边
  • 普通模式下 Ctrl-w - 减小视窗的高度
  • 普通模式下 Ctrl-w + 增加视窗的高度

2.视窗操作练习

打开练习文件

$ vim 1.txt
  • 命令行模式下输入 :new 打开一个新的 vim 视窗
  • 命令行模式下输入 :sp 2.txt 打开新的横向视窗来编辑 2.txt
  • 命令行模式下输入 :vsp 3.txt 打开新的横向视窗来编辑 3.txt
  • 如果使用非 chrome 浏览器可以使用 Ctrl+w 进行视窗间的跳转
  • 分别在不同视窗的命令行模式下输入 :q! 退出多视窗编辑

四、文档加密

1.创建加密文档

$ vim -x file1

输入您的密码 确认密码 这样在下一次打开时,vim 就会要求你输入密码

五、在 vim 执行外部命令

在命令行模式中输入 ! 可以执行外部的 shell 命令

  • :!ls 用于显示当前目录的内容
  • :!rm FILENAME 用于删除名为 FILENAME 的文件
  • :w FILENAME 可将当前 VIM 中正在编辑的文件另存为 FILENAME 文件

六、帮助系统

1.vim 中的查看帮助

  • 普通模式下按 F1 打开 vim 自己预设的帮助文档
  • 命令行模式下输入 :h shiftwidth 打开名为 shiftwidth 的帮助文件
  • 命令行模式下输入 :ver 显示版本及参数

七、功能设定

1.vim 的功能设定

可以在编辑文件的时候进行功能设定,如命令行模式下输入 :set nu (显示行数),设定值退出 vim 后不会保存。要永久保存配置需要修改 vim 配置文件。 vim 的配置文件 ~/.vimrc ,可以打开文件进行修改,不过务必小心不要影响 vim 正常使用

2.获取目前的设定

  • 命令行模式下输入 :set 或者 :se 显示所有修改过的配置
  • 命令行模式下输入 :set all 显示所有的设定值
  • 命令行模式下输入 :set option? 显示 option 的设定值
  • 命令行模式下输入 :set nooption 取消当期设定值

3.set 功能的说明

  • 命令行模式下输入 :set autoindent(ai) 设置自动缩进
  • 命令行模式下输入 :set autowrite(aw) 设置自动存档,默认未打开
  • 命令行模式下输入 :set background=darklight ,设置背景风格
  • 命令行模式下输入 :set backup(bk) 设置自动备份,默认未打开
  • 命令行模式下输入 : set cindent(cin) 设置 C 语言风格缩进

更多详细参数请参考 vim 手册

八、总结

通过这四章的简单学习,相应你应该掌握了 vim 的基本操作和使用,但本课程的主要目的是为了让你在学习实验楼上面其他需要用到 vim 的课程中不会有任何问题。如果你想单纯的学习并熟练掌握 vim 编辑器,通过各类教程包括本课程的学习是不能够满足的,因为要熟练掌握是跟你个人的选择有关,这需要你不断的联系并坚持长期使用 vim 完成各种编辑操作才能达到,同时你还需要掌握如何更改和编写 vim 的配置文件及安装各类 vim 插件来实现各种强大的功能满足你的各种苛刻的需求,最后希望你在实验楼玩得愉快

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文