Vim技巧之四大模式_普通模式

  • Vim技巧之四大模式_普通模式
  • 一见不钟情的普通模式
    • 普通模式下面的强悍操作

      • 什么是操作符
      • 什么是动作命令
    • 误操作怎么办
    • 那种操作更划算
    • 普通模式下的神秘大招

Vim技巧之四大模式_普通模式

众所周知,vim里面最具特色的东西就是它可以切换模式,那什么是模式呢?可以简单的理解为在不同的模式下面按相同的键而得到不同的效果。比如Vim在插入模式下面连按两次d,那么就会在光标位置插入两个字母d,如果在普通模式下面连按两次d,那么光标所在当前行将会被删除。

既然说是Vim的四大模式,那么Vim到底有那四大模式呢?

  • 普通模式
  • 插入模式
  • 可视模式
  • 命令行模式

用户可以通过按<ESC>来在各个模式之间进行切换,下面我们将详细的介绍普通模式,其他模式我们将在后续的文章中进行详细介绍

一见不钟情的普通模式

Emacs,Sublime Text这些主流的编辑器在打开以后直接就可以向里面输入自己的想要的内容,但是对于第一次使用Vim的新手来说,并不和自己想象中的一样,倒腾了一会儿就会开始抓狂:

  1. 怎么在这个框框里面输入文本啊?
  2. 天啦噜,怎么退出这个黑框框???!!(博主一开始都是kill -9关掉的,哭死)

Vim在开启的时候默认是使用普通模式的,如下图所示

如果你需要在这个黑框框里面输入一些什么东西的话,你可以在屏幕上按下面任意一个健,Vim就会进入插入模式,接着就可以输入文本了

按键 功能
a 在光标后面进行插入
A 在当前光标所在行末尾插入
i 从光标所在出插入
I 在当前光标所在行首插入
o 在当前行下面新建一行,并进行插入
O 在当前行上面新建一行,并进行插入

那要是退出插入模式回到之间的普通模式呢?直接按<ESC>就可以啦

这时候你可能就会问了,不是有一个插入模式就可以了么?为啥还要加一个普通模式呢?你看其他编辑器都没有这么多的模式。。。这就是Vim的精化所在,对于其他编辑器来说,如果要实现一个比较复杂的操作,基本上都是通过<Ctrl>,<Alt>,<Shilt>组合来完成的,但是Vim偏不这样,Vim是通过在不同模式之间的切换来实现复杂的操作,简单来说,普通模式就是用来发动技能的!而插入模式则是进行简单的文本操作

比如需要删除当前光标所在行,对于没有模式的编辑器是这样发动这个技能的

<CTRL-K>(Emacs)

<CTRL-L><Backspace>(Sublime Text)

如果是Vim,那么首先进入普通模式,然后发动删除行的技能

<ESC>(进入到普通模式),dd(删除当前行)

个人还是比较喜欢Vim一点,简洁明了;之前也试过Ctrl到死的Emacs,组合按键真是多,对与手小的人来说简直就是一种折磨!

普通模式下面的强悍操作

普通模式下面的操作可以解释为下面这个公式:

操作符+动作命令=操作

什么是操作符?

操作符就是你打算接下来要干什么?比如上文中提到的d,就是删除操作符,除了删了操作符,还有下面这些操作符:

操作符 用途
c 修改
d 删除
y 复制
g~ 大小写反转
gu 转为小写
gU 转为大写
> 向右缩进
< 向佐缩进
= 自动缩进

什么是动作命令?

操作符是用来指定一个操作,这个操作也不能瞎操作吧?我要删除一行文本,不能把整个文件的全部内容都给删了吧。。。所以,简单来说,动作命令就是用来指定操作符作用的范围

那动作命令有那些呢?其实动作命令比较灵活,这里我总结为有两类:

  • 一类是文本对象,比如aw , ap
  • 一类是位置范围, 比如l ,j,k,f{char},$,^,0…

文本对象类型的动作命令

文本对象 操作范围
aw 光标所在单词加上一个空格
iw 光标所在单词
ap 光标所在段落
i< <>里面的文本
i{ {}里面的文本
i” ""里面的文本

假设现在有这样一行文本

I am a Vimer

我们需要删除Vimer这个单词

$ (移动到行尾)

daw(删除光标所在单词以及一个空格)

最后得到:

I am a

位置范围类型的动作命令

那什么是位置范围呢?就是从当前光标开始,经过一次移动命令以后新的光标位置之间的文本,比如3j,10<Space>,3l,f{char}等等等等,只要可以移动光标的命令都可以

假设现在有这样一行文本

I am a Vimer

我们要将Vimer这个单词字幕e之间的文本全部转为大写

(移动到行首)

gUte(操作符(gU)+(新的光标位置te))

最后得到:

I AM A VIMer

注意一点:

当一个操作符当被连续两次调用的时候,对应的作用范围就是当前行,比如dd就是删除当前行,yy就是复制当前行,gUgU就是将当前行转为大写

误操作怎么办?

我们可以切换到普通模式,然后u,就可以撤消之前进行的误操作,比如用dd误删了一行文本,我们直接输入u就可以撤消之前的删除操作

下面我们来看一个栗子:

输入一行文本

I am a Vimer

发现将Vimer误输为Vier,于是返回到普通模式,点击u希望撤消这个错误的单词输入,但是惊奇的发现之前输入的I am a文本也不见了,Vim撤消的太多了!!

那该怎么办?怎么控制Vim撤消的粒度呢?

u键会触发撤消命令,它会撤消最新的修改。一次修改可以是改变文档内文本的任意操作,其中包括了在普通模式,可视模式,以及命令行模式中所触发的命令,而且一次修改也包括了在一次插入模式中输入或者删除的文本,也就是说i{insert some stuff}<ESC>算是一次修改

所以我们还是可以控制u撤消的粒度的,在插入模式中,每一次<ESC>就算是一次粒度的控制

那种操作更划算?

什么叫做划算?那就是用最少的按键操作完成更多的文本操作

举个栗子:

现在需要删除下面文本的最后一个单词

I am a Vimer

操作一:

$

db(向前删除单词)

x(删除x)

操作二:

$

b(最后一个单词的词首)

dw(删除单词)

操作三:

$

daw

上面三个操作都是用相同的按键数,这一步上大家打成平手,要是我们还要把剩下的两个单词都删除呢?前两个操作明显还需要从头重复一次,但是第三个操作我们只需要用.操作就可以重复修改命令,所以操作三明显更划算!所以划算的更宽广的定义不仅是当前操作,还有将来的操作也要计算进来

普通模式下的神秘大招

这个神秘大招其实就是

  • <C-a>:对数字进行加操作
  • <C-x>:对数字进行减操作

<C-a>命令会把当前光标之上或者之上的数加1,如果需要加多次,可以[count]<C-a>,这样就会使数值加上count

举个栗子:

现有一段文本:

I am 23 years old

现在需要将23改为24,如果现在你不知道这个技巧,那就只有

f3(移动到3)

r4(将3改为4)

未免太繁琐了

现在我们只需要

<Ctrl-a>(光标立马跳转到23上,并将数值加1,变为24)

要是现在需将23改为1023(千年老妖了)

只需要

1000<Ctrl-a>

同理可得<C-x>

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-13 03:19:57

Vim技巧之四大模式_普通模式的相关文章

Vim技巧之四大模式_可视模式

Vim技巧之四大模式_可视模式 什么是可视模式 如何选中一块区域 如何快速选中目标区域 如何重复选择目标区域 如何在选中中切换选择模式 如何对选中的区域进行操作 可视命令的重复 最好使用操作符命令而不是可视命令 Vim技巧之四大模式_可视模式 在前面的两篇文章<Vim技巧之四大模式_插入模式>和< Vim技巧之四大模式_普通模式>我们已经介绍了插入模式和普通模式里面的技巧,下面我们将继续介绍四大模式之一的可视模式 什么是可视模式? 可视模式简单来说就是选中一块编辑区域,然后在上面执

Vim技巧之四大模式_插入模式

Vim技巧之四大模式_插入模式 在插入模式中及时更正错误 插入-普通模式 在插入模式模式下面直接粘贴指定寄存器的内容 插入模式中做运算 用字符编码插入非常用字符 替换已有的文本 Vim技巧之四大模式_插入模式 在前面的文章<Vim技巧之四大模式_普通模式>中我们提到过四大模式之一的普通模式,今天我们继续讲讲Vim四大模式里面的插入模式 普通模式好比是发动一个技能,而插入模式则好比是一般的物理攻击,但是就算是平平淡淡的物理攻击,还是有不少的技巧可言的 在插入模式中及时更正错误 在普通模式中,我们

技巧:Vim 的纵向编辑模式

https://www.ibm.com/developerworks/cn/linux/l-cn-vimcolumn/ 开始之前 人类大脑对文字的处理是平面式的,所以我们浏览文章.查找资料或者重构代码,要么是横向读,要么是纵向读,要么使用搜索功能,将文字作为一个平面整体.而在编辑文字.编写代码的时候则不是横向就是纵向.常规文本编辑器都是横向编辑,而纵向编辑也常被作为特色功能.比如 Vim.EditPlus.UltraEdit 这些编辑器都有纵向编辑模式,或者称为列模式.像日常文字处理工具 Mic

最佳vim技巧

最佳vim技巧----------------------------------------# 信息来源----------------------------------------www.vim.org         : 官方站点comp.editors        : 新闻组http://www.newriders.com/books/opl/ebooks/0735710015.html : Vim书籍http://vimdoc.sourceforge.net/cgi-bin/vim

vim技巧2

vim技巧总结-查找 1.查找命令1.1 执行一次查找普通模式下,/会调用查找提示符,如果vim扫描到文档尾部仍没有找到目标,会提示"search hit BOTTOM, continuing at TOP".这意味着文档会回绕至开头继续查找.如果想关闭文档回绕查找,可以关闭'wrapscan'选项::set nowrapscan1.2 指定查找方向/键查找时,执行正向扫描,?键查找时,执行反向扫描.1.3 重复上一次查找n用于跳转到下一次匹配,N用于跳转到上一次匹配.1.4 回溯之前

会务准备期间材料准备工作具体实施总结 ----(vim技巧应用, python信息提取与整合, microsoft word格式调整批量化)

会务准备期间材料准备工作具体实施总结(vim, python, microsoft word) span.kw { color: #007020; font-weight: bold; } code > span.dt { color: #902000; } code > span.dv { color: #40a070; } code > span.bn { color: #40a070; } code > span.fl { color: #40a070; } code >

vim技巧4 删除/保留文本中匹配行

vim技巧:如何删除/保留文本中特定的行呢? <ol><a href="/ss/ss/www"> show invisibles</a> <a href="/ss/ssg/gg/ff/"> one world one dream</a> 任务1:只保留<a>标签内的标题,而把其他行都删掉:g/re/d 知识点:使用:global与:delete命令 运行一下命令: /\v\<\ /?\w+

如何使用VIM的列编辑模式 [转]

如何使用VIM的列编辑模式? * windows 我使用的VIM FOR WINDOWS,一直都听说VIM有列编辑模式,一直没有使用过,试了几次都失败了.今天又因为工作需要,到网上查了一下,经过不断的尝试,终于使用成功了,在这里和大家分享一下: 1. 在命令模式使用下面的快捷键:CTRL+q,小写的q就可以了 2. 然后使用HJKL四个键来移动和选中相关的行和列,你发现你可以选中一个区块了,千万不能用鼠标. 3. 如果想在区块的左侧增加一列文本,选中区块后,按大写的I,然后光标自动到区块左上角的

vim技巧:折叠快捷键

vim技巧:折叠快捷键 以前用的挺熟的,一段时间不用了,快捷键又忘了,不得不重新再看手册,今天专门整理一下,以后查找起来也比较方便. zc 折叠,只折叠最外层的折叠zC 对所在范围内所有嵌套的折叠点进行折叠,包括嵌套的所有折叠.zo 展开折叠,只展开最外层的折叠.zO 对所在范围内所有嵌套的折叠点展开,包括嵌套折叠.[z 到当前打开的折叠的开始处.]z 到当前打开的折叠的末尾处.zj 向下移动.到达下一个折叠的开始处.关闭的折叠也被计入.zk 向上移动到前一折叠的结束处.关闭的折叠也被zd 删除