vim快速入门

发布时间:2023-08-16 11:00

一下转载自实验楼笔记

vim快速入门

在开始之前,我们先简单介绍下 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 模式前,可以一次执行多条命令。

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

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

\"vim快速入门_第1张图片\"

使用 vim 命令进入 vim 界面

vim 后面加上你要打开的已存在的文件名或者不存在(则作为新建文件)的文件名。在环境里输入下面的命令:

vim practice_1.txt

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

vim

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

游标移动

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

12345678
abcdefghijk
shiyanlou.com

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

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

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

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

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

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

命令行模式下保存文档

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

命令行模式下退出 vim

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

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

命令 说明
:q! 强制退出,不保存
:q 退出
:wq! 强制保存并退出
:w <文件路径> 另存为
:saveas 文件路径 另存为
:x 保存并退出
:wq 保存并退出
普通模式下退出 vim

普通模式下按下 Shift+zz 即可保存退出 vim。

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

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

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

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

2dd 表示一次删除 2 行。

我们来做如下练习:

cp /etc/protocols .
vim protocols

\"vim快速入门_第2张图片\"

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

vim文档编辑

重复执行上次命令

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

拷贝测试文件到本地目录:

cd /home/shiyanlou
cp /etc/protocols .

打开文件进行编辑

vim protocols

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

执行指定次数相同的命令

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

打开文件文件进行编辑

vim protocols

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

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

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

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

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

还是来练习一下吧,使用 vim 打开练习文档:

vim protocols

依次进行如下操作练习:

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

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

行内跳转

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

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

依次进行如下操作练习:

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

\"vim快速入门_第3张图片\"

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

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

vim protocols
剪切及粘贴

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

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

\"vim快速入门_第4张图片\"

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

vim查找替换

查找和替换是编辑器中最常用的功能之一,在普通编辑器当中查找替换时,你可能需要先移动鼠标在菜单中点击查找的功能,输入查找内容,再点击确认查找。而在 vim 中,所有的操作只需要敲击几下键盘就行了,手不用离开键盘区域,速度自然会快很多很多。

替换和撤销(Undo)命令

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

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

打开文件进行编辑:

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

然后依次进行如下操作

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

\"vim快速入门_第5张图片\"

最后可以尝试下输入更多行的文本内容,并进行跳转到指定行的操作:

  • 输入 2G,跳转到 2 行
  • 替换和撤销(Undo)命令

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

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

    打开文件进行编辑:

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

    然后依次进行如下操作

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

    \"vim快速入门_第6张图片\"

    最后可以尝试下输入更多行的文本内容,并进行跳转到指定行的操作:

    • 输入 2G,跳转到 2 行
使用命令进行快速调整缩进操作

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

打开文件进行编辑:

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

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

获取目前的设定值:

:set shiftwidth?

设置缩进为 10 个字符:

:set shiftwidth=10

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

调整文本位置

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

:ce

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

:ri

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

:le

\"vim快速入门_第7张图片\"

快速查找

普通模式下输入 / 然后键入需要查找的字符串,按回车后就会进行查找。?/ 功能相同,只不过 ? 是向上而 / 是向下查找。

进入查找之后,输入 nN 可以继续查找。n 是查找下一个内容,N 查找上一个内容。

快速查找练习

使用 vim 打开文件进行编辑(搜索高亮需要在配置文件 .vimrc 中设置 set hls,实验环境中已经设置好了)。

vim protocols
  • 普通模式下输入 /icmp 然后回车即可查找字符串 icmp
  • 普通模式下输入 n 查找下一个 icmp
  • 普通模式下输入 ?tcp 向上查找字符串 tcp
  • 普通模式下输入 N 查找上一个出现的 tcp
  • 命令行模式下输入 noh 然后回车即可取消搜索
高级查找
  • 普通模式下输入 \\* 寻找游标所在处的单词
  • 普通模式下输入 \\# 同上,但 \\# 是向前(上)找,\\* 则是向后(下)找
  • 普通模式下输入 g\\*\\*,但部分符合该单词即可
  • 普通模式下输入 g\\#\\#,但部分符合该单词即可

以上查找 nN 的继续查找命令依然可以用。

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

vim 高级功能

本次实验将学习 vim 中的其他高级功能,带大家体验更多 vim 的魔力。

使用 vim 编辑多个文件

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

vim 1.txt 2.txt

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

  • 命令行模式下输入 :n 编辑 2.txt 文件,可以加 !:n! 强制切换,之前一个文件的输入没有保存,仅仅切换到另一个文件
  • 命令行模式下输入 :N 编辑 1.txt 文件,可以加 !:N! 强制切换,之前文件内的输入没有保存,仅仅是切换到另一个文件
进入 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
恢复文件
由于在线环境无法复现此场景,请在本地尝试。

如果因为断电,终端意外关闭等原因造成文档没有保存,可以采用恢复方式。

vim 在编辑的时候会自动在当前文件目录下生成一个交换文件,一般以 .swp 的格式保存,如果有多个版本的交换文件,还可能是 .swn.swm 等字母。注意这个交换文件的更新不是实时的,因为实时的更新会占用磁盘,影响系统其他正常进程的速度。

当 vim 意外终止且没有保存已编辑的内容时,可以使用交换文件对文件进行恢复,注意需要在编辑这个文件的地方进行编辑,因为交换文件默认在编辑的目录生成。

例如假设 1.txt 意外关闭,我们可以输入 vim 然后输入 :recover 1.txt

vim
:recover 1.txt

# 出现如下提示按下回车即可恢复,如果有多个版本需要输入对应的交换文件前的数字选择要恢复的版本。
Using swap file \".1.txt.swp\"
Original file \"~/test/1.txt\"
Recovery completed. You should check if everything is OK.
(You might want to write out this file under another name
and run diff with the original file to check for changes)
You may want to delete the .swp file now.

或者输入 vim -r 后直接选择用于恢复的文档的交换文件即可:

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

拷贝练习文件到当前目录

cp /etc/protocols .

打开练习文件

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

\"vim快速入门_第8张图片\"

创建加密文档
vim -x file1

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

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

  • :!ls 用于显示当前目录的内容
  • :!rm FILENAME 用于删除名为 FILENAME 的文件
  • :w FILENAME 可将当前 VIM 中正在编辑的文件另存为 FILENAME 文件
vim 中的查看帮助
  • 普通模式下按 F1 打开 vim 自己预设的帮助文档
  • 命令行模式下输入 :h shiftwidth 打开名为 shiftwidth 的帮助文件
  • 命令行模式下输入 :ver 显示版本及参数
vim 的功能设定

可以在编辑文件的时候进行功能设定,如命令行模式下输入 :set nu(显示行数),设定值退出 vim 后不会保存。要永久保存配置需要修改 vim 配置文件。

vim 的配置文件 ~/.vimrc(实验楼环境中配置文件在 /etc/vim/vimrc),可以打开文件进行修改,不过务必小心不要影响 vim 正常使用。

获取目前的设定
  • 命令行模式下输入 :set 或者 :se 显示所有修改过的配置
  • 命令行模式下输入 :set all 显示所有的设定值
  • 命令行模式下输入 :set 显示 option 的设定值
  • 命令行模式下输入 :set nooption 取消当前设定值
set 功能的说明
  • 命令行模式下输入 :set autoindent(ai) 设置自动缩进
  • 命令行模式下输入 :set autowrite(aw) 设置自动存档,默认未打开
  • 命令行模式下输入 :set background=darklight,设置背景风格
  • 命令行模式下输入 :set backup(bk) 设置自动备份,默认未打开
  • 命令行模式下输入 : set cindent(cin) 设置 C 语言风格缩进

更多详细参数请参考 VIM 在线手册

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号