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>

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

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

    Vim技巧之四大模式_插入模式 在插入模式中及时更正错误 插入-普通模式 在插入模式模式以下直接粘贴指定寄存器的内容 插入模式中做运算 用字符编码插入很常使用字符 替换已有的文本 Vim技巧之四大模式 ...

  2. 【LabVIEW技巧】工厂模式_简单工厂

    前言 上一个文章介绍了如何学习LabVIEW OOP,简要的提及了一些OOP学习中注意的事项,许多文章的读者反映写的太范,后文会逐步缩小范围,讨论在LabVIEW中各个模式的应用. 工厂模式概述 工厂 ...

  3. 技巧:Vim 的纵向编辑模式【转】

    转自:https://www.ibm.com/developerworks/cn/linux/l-cn-vimcolumn/ 张 曜民 和 卢 丹2011 年 2 月 18 日发布 WeiboGoog ...

  4. 技巧:Vim 的纵向编辑模式

    https://www.ibm.com/developerworks/cn/linux/l-cn-vimcolumn/ 开始之前 人类大脑对文字的处理是平面式的,所以我们浏览文章.查找资料或者重构代码 ...

  5. 【转载】技巧:Vim 的纵向编辑模式

    如果要我选一个Vim中让我觉得Life Changing功能的话,我一定会选Vim的块编辑功能,也就是Ctrl+V,虽然还有些别的编辑器也有这功能,但目前为止,我从中受益颇大 原文地址:技巧:Vim ...

  6. vim的四大模式

    vim的四大模式 总结了下我经常使用的模式中的一些基本命令 正常模式 通过vim进入到界面, 首次即为正常模式 编辑模式 (i,a,o,s,I,A,S) i: 当前节点插入光标点 a: 下一个字母后插 ...

  7. 最佳vim技巧

    最佳vim技巧----------------------------------------# 信息来源----------------------------------------www.vim ...

  8. vimcommandfilepatchcmdfold VIM技巧之分隔窗口 一级精华

    VIM技巧之分隔窗口 分类: 技术2010-07-08 09:57 754人阅读 评论(1) 收藏 举报   同时显示两个不同的文件, 或者同时查看同一个文件的两个不同位置, 或者是同步显示两个文件的 ...

  9. vim技巧2

    vim技巧总结-查找 1.查找命令1.1 执行一次查找普通模式下,/会调用查找提示符,如果vim扫描到文档尾部仍没有找到目标,会提示"search hit BOTTOM, continuin ...

随机推荐

  1. day03_12/13/2016_bean属性的设置之构造器方式注入

  2. JSP执行原理图

  3. Squirrel的安装(windows上Phoneix可视化工具)

    一.下载安装 下载地址:http://www.squirrelsql.org/下载所需版本       或者 从网址http://www.squirrelsql.org/下载相应版本的squirrel ...

  4. PHP 在线 编辑 解析

    http://www.w3schools.com/php/default.asp    http://www.w3schools.com/php/showphp.asp?filename=demo_s ...

  5. canves应用

    canves用得好可以有好多效果: html:<canvas id="myCanvas" width="700" height="300&quo ...

  6. html——导航demo

    通过行内块.伪类对导航栏进行设置 <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...

  7. JS——try catch throw

    本例检测输入变量的值.如果值是错误的,会抛出一个异常(错误).catch 会捕捉到这个错误,并显示一段自定义的错误消息: <script> function myFunction() { ...

  8. python网络编程调用recv函数完整接收数据的三种方法

    最近在使用python进行网络编程开发一个通用的tcpclient测试小工具.在使用socket进行网络编程中,如何判定对端发送一条报文是否接收完成,是进行socket网络开发必须要考虑的一个问题.这 ...

  9. postgresql用sql语句查询表结构

    用到的postgresql系统表 关于postgresql系统表,可以参考PostgreSQL 8.1 中文文档-系统表. pg_class 记录了数据库中的表,索引,序列,视图("关系&q ...

  10. 在CentOS6,CentOS7安装 Let'sEncrypt 免费SSL安全证书

    相对来说,个人网站建立SSL是昂贵的,而且往往过程繁琐.一个标准的2048位证书费用至少150美元/年,网站除了要支付一笔昂贵的费用.重新配置Web服务器,并需要解决大量的配置错误.这让广大中小网站望 ...