vim 使用系列(二)-- 基本常用操作

本文详细介绍了Vim编辑器的基本操作,包括不同模式的切换、移动、删除、撤销、替换、查找、复制和粘贴等。重点讲述了正常模式下的hjkl移动、dw/del/de/db用于单词删除、u/Ctrl-R实现撤销和重做、以及查找和复制粘贴功能。此外,还提及了插入模式、命令行模式、可视模式、替换模式和终端作业模式的使用。熟练掌握这些基本操作将有助于提升在Vim中的工作效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vim 基本常用操作

前言

这篇文章介绍的是 vim 的基本常用操作,完成本文的学习就可以跨越 vim 入门的障碍。这篇文章还没有涉及到使用插件,仅是使用 vim 原先就带有的基本编辑器功能。

强烈建议:阅读本文时最好打开 vim 配合操作学习以达到最佳阅读效果。

模式

在 vim 中,每次按键在不同的模式中产生的结果是不同的。vim 8.2 的版本中,一共有 7 种基本模式和 7 种附加模式,附加模式是基本模式的变种。虽然 vim 有着 14 种模式,但是我日常常用的只有以下几种模式:

  1. 插入模式(Insert mode):插入模式是我们用的最多的模式,正常码字就是在这个插入模式。
  2. 正常模式(Normal mode):如果我们不用鼠标上下滑动查看的话,我们就需要在正常模式下进行移动,当然移动只是在正常模式下的众多操作中的一个点。
  3. 命令行模式(Command-line mode / Cmdline mode):在这个模式下可以运行一些命令,包括查看命令帮助,输入命令进行查找、替换等一系列强大操作。
  4. 可视模式(Visual mode):在这个模式下我通常用来复制多个单词,然后粘贴。
  5. 替换模式(Replace mode):在这个模式下我会用来替换文本。
  6. 终端作业模式(Terminal-Job mode):这个模式可以让我进入终端暂时查看一些东西。

更多关于 vim 模式方面的知识,可以在正常模式下 :help vim-modes 查阅。下面分模式分别介绍下一些简单的操作。

正常模式

默认的,当我们使用 vim 打开文件时,vim 就处于正常模式。许多 vim 用户可能有一个习惯,就是喜欢狂按键盘左上角的 <esc> 键,因为从插入模式回到正常模式默认的操作就是按 <esc> ,不过有时按一次可能还没反应,然后就狂按了 😶。还有一个原因就是遇事不决狂按 <esc> ,这个至少我在用 vim 时是这样的。正常模式基本操作我分为以下几点:

  1. 移动
  2. 删除
  3. 撤销
  4. 替换
  5. 查找
  6. 复制 && 粘贴

切换到正常模式

正常模式是其他各种模式切换的中转站,譬如要从可视模式切换到插入模式,就得先切换到正常模式,然后再从正常模式切换到插入模式。那么如何切换到正常模式呢,从我的使用经验中总结有两种情况:

  1. 从终端作业模式切换:键入Ctrl-\ Ctrl-N ,不过这个切换的模式理应叫终端正常模式(Termianl-Normal mode),它是 7 种附加模式之一,不过在这里把它归为正常模式的一种特殊情形了,具体信息请看下面的终端作业模式章节。
  2. 从其他模式切换:按一次 <esc> / 狂按 <esc> 。这是我办公的大部分情况,不过真实情形是我把<esc> 按键禁用了,映射成了其他键,觉得<esc> 有点远,不方便按。

移动

    ^
	k
<h      l>
    j
    v

每次按下 h 就会向左移动,按下 j 就会向下移动,按下 k 就会向右移动,按下 l 就会向右移动。当然,vim 也是支持方向键移动的,不过当你习惯于用 hjkl 移动时,你的手指活动将集中在键盘的主要活动区域,而不用在需要移动时将手指从键盘主区域移开到方向键。唯一的 tips 就是勤加练习,多用 vim 打代码。

移动

折行移动

在上图中使用 vim 进行移动时,你可能会发现这么一个问题,当你在一行中输入过长的字符之后,vim 默认会将超出屏幕的部分在下一行显示,这个和 vim 中默认的 wrap 属性相关,这个属性的内容会在下一篇文章中介绍。当文字被这行之后,用 jk 移动是到不了被折的那一行的,这时候你需要的是 gjgk ,也就是快速键入两个字符。

折行移动

总结:一般来说,正常的移动 hjkl 已经足够,但是当遇到折行时,你就可能需要 gjgk 了。

删除

单词

为了更方便地描述,我在这里先说下 vim 中单词的含义,单词是指由 vim 中 iskeyword 变量指定的字符组成的字符串,单词之间由空白字符(空格、TAB、<EOL>)分隔的,特别的,一个空白行也是一个单词。在这篇文章中我们不讨论多字节字符集,譬如中文。在 vim 中,默认的,像 谢谢 这四个字是被当做一个单词的,谢谢关注 也是一个单词。在 vim 的正常模式下,键入 :echo &iskeyword 就可以看到 iskeyword 的定义了:@,48-57,_,192-255

  1. @表示 isalpha()返回 true 的字符,也即是字母

  2. 48-57192-255 可通过以下方法查看:
    :echo map(range(48, 57), 'nr2char(v:val)'):echo map(range(192, 255), 'nr2char(v:val)') 查看,命令具体的含义在之后的 vim 脚本系列会讲。这两条命令的输出如下:

    ['0', '1', '2', '3', '4', '5', '6'
    , '7', '8', '9']
    
    ['À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ'
    , 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í
    ', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', '
    Ô', 'Õ', 'Ö', '×', 'Ø', 'Ù', 'Ú',
    'Û', 'Ü', 'Ý', 'Þ', 'ß', 'à', 'á',
     'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è'
    , 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï
    ', 'ð', 'ñ', 'ò', 'ó', 'ô', 'õ', '
    ö', '÷', 'ø', 'ù', 'ú', 'û', 'ü',
    'ý', 'þ', 'ÿ']
    
  3. _ 就是 ‘_’ 字符。

iskeyword 也是可以由我们用户来自定义修改的,譬如我要改成是字母和逗号::set iskeyword=@,\,就可以了。

有了单词是什么的认知之后,接下来我们就可以学习有关删除的操作了。

删除操作我分为字符删除和单词删除,字符删除由 xX 来控制,单词删除由 d 来操作,当然,通过一些小技巧,字符删除由 d ,单词删除由 x 也可以做到,不过就是不方便。

字符删除

在正常模式下,键入 x 将删除光标当前字符,键入 X 将删除光标前一个字符。

单词删除

删除一个单词由 d 来控制,既然 d 是操作单词的,那么它的行为就和 iskeyword 属性绑在了一起,读者可以自行修改 iskeyword 体验一番。d 常用的操作有以下这些:

  1. dw:删除一个单词到下一个单词开始位置,dw 会连空白字符一起删除。但是dw 除了删除单词之外,像---><> 这样的也会当作一个单词删除。
  2. de:行为和dw 类似,但是不会删除空白字符。
  3. db:行为和 dw 类似,但是不是删除后一个单词,而是删除前面一个单词。
  4. dd:删除一整行。

撤销

撤销主要有两种行为:撤销和撤销之前的撤销。撤销是由u控制,撤销之前的撤销由Ctrl-R控制。

替换

替换分为单个字符替换和单词替换。

  1. 单个字符替换是由字符r控制的,先键入r,然后键入要替换的字符。
  2. 单词替换由c来控制,将单词替换一节的d换成c就是对应的行为了,只不过c会自动进入插入模式等待输入。
  3. 更强的替换:R进入替换模式,随移替换光标所在位置,替换完成之后按<esc>退出替换模式。

查找

在正常模式中查找是键入/ ,键入之后在 vim 窗口下方你会看到 vim 正在等待你输入要查找的字符串,输入字符串之后按回车就可以查找了。查找到之后按n 跳转到下一个匹配项,按N 跳转到上一个匹配项。vim 支持快速查找光标处单词,键入* ,不过这是完全匹配查找。

vim 还支持更加强大的正则表达式查找,不过这已经超出本文讨论的主题,留到之后的文章中再叙。

复制 && 粘贴

  1. yy :复制一行,vim 中的复制术语不是叫做 copy,而是 yank。
  2. p :粘贴

vim 中使用了寄存器的概念,我们上述很多操作都使用了寄存器,只是这些工作 vim 在默默的做了,我们不知道罢了,譬如删除一行dd ,会将删除了的内容放在一个未命名的寄存器中,可以通过:reg " 来查看未命名的寄存器,yy 操作也会把内容默认放在未命名的寄存器中,粘贴时再从中将内容拿出来,所以如果 yy 之后 dd ,接着 p ,发现粘贴的结果和复制的不一样,可以查下寄存器内容。更多寄存器知识,请用 :help reg 查看。

插入模式

插入模式可以说是我们的工作模式,在插入模式中我们可以像在记事本中做文本输入一样。在正常模式中,键入 i 就可以进入插入模式了,狂按<esc> 就可以返回正常模式了。根据光标插入位置的不同,vim 为我们提供了其他指令从正常模式进入插入模式:

  1. i : 在光标之前进入
  2. I :在行首进入
  3. a :在光标之后进入
  4. A :在行末进入
  5. o :在下一行插入新行
  6. O :在上一行插入新行
  7. s :删除当前字符并进入插入模式,相当于xi ,先删除当前字符,再在当前位置进入插入模式。
  8. S :删除当前行并进入插入模式。

在以上 8 条指令中,前 6 条是我用的最多的,这些都是可以快速提高效率的命令,需要勤加练习。

命令行模式

命令行模式是一个很强大的模式,从最简单的保存退出到支持各式各样的函数,插件。在本文中,我只挑选在办公中常用的命令叙述。

进入命令行模式

键入: 就可以看到 vim 窗口下方等待你键入命令了。

注意:以下操作都是进入命令模式之后的操作!

保存

  1. 保存文件:w
  2. 退出:vim 要求文件如果修改了不能退出,如果要强制退出,使用 q! 。正常退出使用q
  3. 保存并退出:wq

行数跳转

跳转到文件的哪一行可以通过:n 来实行跳转,n 表示要跳转到第几行,譬如要到第 100 行,就是 :100

帮助手册

:help 字符串 进入某条帮助手册,譬如 :help vim-modes 查看 vim-modes 的帮助手册,值得一提的是,vim 命令行模式支持 TAB 键帮忙补全。

执行 shell 命令

:! shell命令 可以到 shell 中执行 shell 命令,譬如 :!pwd 查看当前目录是什么(中间有无空格无所谓,如 :! pwd 也可以),按 q 返回到 vim。

进入终端工作模式

这个请阅读下面关于终端工作模式章节。

可视模式

在可视模式中,我们可以删除、复制任意多的字符。进入可视模式有两种方式:

  1. v :逐个字符选择,使用 hjklggG进行移动。
  2. V :逐行选择,使用 hjklggG进行移动。

在可视模式下选择了字符之后,可以键入 d 就可以删除选择的字符,键入y 就可以复制选择的字符。譬如我要删除从光标行到首行的内容,就可以先键入V 进入逐行可视模式,然后键入gg 选中从光标处到首行的文本,键入d 删除这段内容。

替换模式

替换模式在正常模式的替换一节中也提到了,键入R 就进入替换模式,然后就可以随意输入替换光标处文本了。

终端作业模式

首先通过:echo has('terminal') 查看是否支持 terminal 模式,结果为 1 才支持。

进入终端作业模式就相当于进入了一个终端,然后就可以正常键入 shell 命令来执行了。我一般是直接通过:terminal 进入,在终端页面键入Ctrl-\ Ctrl-N 进入终端正常模式,在终端正常模式下,可以使用正常模式的那些指令,不过不能修改里面的内容,在终端正常模式下,键入i 就可以回到终端作业模式了,在作业模式下,键入exit 就可以退出作业模式了。在终端作业模式下,你可能还需要时不时地跳到 vim 的其他“面板”,可以用Ctrl-W + hjkl 来跳转,譬如 Ctrl-W j 跳到下面那个“面板”,Ctrl-W k 跳到上面那个“面板”。

结束语

至此,vim 的基本操作就结束了,学会这篇文章的内容之后,在 vim 上做一些基础编辑阅读操作基本上就没什么问题了,但是如果需要更有效率的码代码,就需要插件的配合了,关于插件的内容,在接下来 vim 系列文章中将会介绍。

由于 vim 的学习曲线是比较难,但是认真学习过一段时间之后,路就比较平坦了。重点是勤加练习,多使用 help 命令,多上网查资料。vim 还自带教程,在终端中通过vimtutor 可以查看。
公众号
更多好玩的内容欢迎关注我的公众号~
公众号主要介绍一些 linux 上的效率工具,C 语言, linux 咨询以及 linux 内核源码学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值