以下文章来源于CSDN,作者翼天使56,本文章经原作者同意后授权转载。

今天看 vim帮助文档的 user-manual 的第二章,发现了还有U(大写)这个命令,于是反复实验,略微搞懂了一点它的用处,特地拿来和大家分享一下!

首先说个人理解吧,个人认为命令U之后有一个缓存,这个缓存每次只保存一行的内容。那么这个缓存什么时候更新呢?两种情况:

  1. 开始编辑某一行之后(注意是之后),这个编辑的概念就是对某一行作出了改变,并且再去编辑其他行之前。那么这个缓存就会保存这一行最开始的内容!如果此时再改变这一行,U的缓存是不会更新的!

  2. 按下U键之后,按下U键之后,U把缓存中的内容还原出来,并且把当前内容存到缓存里面!

举个例子,首先说每次只针对一行,比如说我有一个文件如下(这个句子到底要表达个啥,我也不明白, vim 的 user-manual 就是给出了个这句子!):


然后,我用v+d键首先删除第二行的 Found,然后再删除第一行的 A young。这时文本内容变成了这个样子:


此时,如果我按一下U键,那么还原的将是第一行的内容,如下:


因为U键每回只保存一行的缓存,我编辑完第二行之后,保存的是第二行的缓存,然后我又去编辑第一行,编辑完第一行之后,保存的又是第一行的缓存。编辑完之后,我按下U键,自然就是还原第一行的缓存了!如果我此时再按下U键,又会发生什么情况呢?如下:


为什么会变成这样呢?这是因为我编辑完第一行之后,保存的缓存是 “A young intellingent turtle”(第一点,每次编辑完第一行之后,更新缓存),所以第一次按U第一行会还原成 "A yong intellingent turtle",就在还原的同时, U的缓存自动更新,更新成了 "intellingent turtle",所以在我第二次按下U之后,又把第一行还原成了 "intellingent turtle"。(第二点,按下U键之后更新缓存!)

对于第一点我再举个例子,还是刚刚那个文件,如下:


如果我先删除了第二行的 Found,然后按下 返回到了 normal 模式,又去删除了 UNIX,结果如下:


此时,我按下U,那么还原的结果将会是这个样子的,如下:


这就是我在第一点说的,缓存中保存的是(开始编辑)某一行(前)最开始的样子!

Ok,以上就是我对于vimU键的理解,由于本人才疏学浅,若有缪误之处,还请多多指出!

本文分享自微信公众号 - 生信科技爱好者(bioitee)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

vim 之中 U 命令的浅析的更多相关文章

  1. vim在编译器 . 命令(点命令)

    时间:2014.06.28 地点:基地 -------------------------------------------------------------------------------- ...

  2. vi/vim 光标移动命令(转载)

    转载至:https://www.cnblogs.com/Jacklovely/p/6015037.html vi/vim 光标移动命令 移动光标上:k nk:向上移动n行 9999k或gg可以移到第一 ...

  3. vi/vim 光标移动命令

    vi/vim 光标移动命令 移动光标上:k nk:向上移动n行 9999k或gg可以移到第一行 G移到最后一行下:j nj:向下移动n行左:h nh:向左移动n列右:l nl:向右移动n列 w:光标以 ...

  4. vi和vim区别及命令详解

    vi和vim都是Linux中的编辑器,不同的是vim比较高级,可以视为vi的升级版本.vi使用于文本编辑,但是vim更适用于coding.     现将vim的命令行收集于下: vi有3个模式:插入模 ...

  5. vim显示历史命令

    [vim显示历史命令] q: 进入命令历史编辑.类似的还有 q/ 可以进入搜索历史编辑.注意 q 后面如果跟随其它字母,是进入命令记录. 可以像编辑缓冲区一样编辑某个命令,然后回车执行.也可以用 ct ...

  6. Vim保存文件命令 ":wq" 与 ":x" 的区别

    CSDN转载 [1] Vim是Unix/Linux系统最常用的编辑器之一,在保存文件时,我通常选择":wq",因为最开始学习vim的时候,就只记住了几个常用的命令:也没有细究命令的 ...

  7. Linux下Vim工具常用命令

    原文地址: http://www.cnblogs.com/lizhenghn/p/3675011.html 在linux下做开发,甚至是只做管理维护工作,也少不了Vim的使用.作为一个新手,我也是刚刚 ...

  8. vim经常使用命令总结

    vim 选择文本,删除,复制,粘贴   文本的选择,对于编辑器来说,是非常主要的东西,也常常被用到,总结例如以下: v    从光标当前位置開始,光标所经过的地方会被选中,再按一下v结束. V     ...

  9. 再探vim经常使用命令

     最開始学习过vim,见 http://blog.csdn.net/u011848617/article/details/12837873 之后以前不了了之,当再次学习后,发现经常使用命令的掌握还 ...

  10. vim全局替换命令

    vim全局替换命令   语法为 :[addr]s/源字符串/目的字符串/[option]全局替换命令为::%s/源字符串/目的字符串/g [addr] 表示检索范围,省略时表示当前行.如:“1,20” ...

随机推荐

  1. SpringBoot接入微信JSSDK,看这篇妥妥的

    先给猴急的客官上干货代码 GitHub 接入微信JSSDK GitHub地址 Gitee 接入微信JSSDK GitHub地址 前言 事情的起因是因为疫情严重,领导要求做一个专题页,能够尽可能帮助所需 ...

  2. Maven 的仓库、周期和插件

    一.Maven 仓库 在 Maven 的世界中,任何一个依赖.插件或者项目构建的输出,都可以称为构建.Maven 在某个统一的位置存储所有项目的共享的构建,这个统一的位置,我们就称之为仓库.任何的构建 ...

  3. Hadoop 安装及目录结构

    一.准备工作 [1]创建用户:useradd 用户名[2]配置创建的用户具有 root权限,修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示:(注意:需要先给sud ...

  4. DES算法流程

    初始置换IP 表格的使用方法: 将输入的64bit的明文从1开始标号,依次放入到IP初始置换表中数字对应的位置.填充完毕后,按照行优先的顺序从第1行开始依次读取获得输出. 16轮轮结构 整体结构 因为 ...

  5. flutter issue---->Scaffold.of(context)

    当我们想showSnackBar的时候,需要通过Scaffold.of(context)得到Scaffold.但是如果这个context用错的话,flutter就会抛出错误.下面我们通过代码仔细看一下 ...

  6. 每日复习------main()方法以及对象的初始化顺序

    由于 Java 虚拟机需要调用类的 main()方法,所以该方法的访问权限必须是 public,又因为 Java 虚拟机在执行 main()方法时不必创建对象,所以该方法必须是 static 的,该方 ...

  7. 【牛客小白月赛70】A-F题解【小d和超级泡泡堂】【小d和孤独的区间】【小d的博弈】【小d和送外卖】

    比赛传送门:https://ac.nowcoder.com/acm/contest/53366 难度适中. 作者:Eriktse 简介:19岁,211计算机在读,现役ACM银牌选手力争以通俗易懂的方式 ...

  8. 带你用三种不同的工具体验AI作诗

    摘要:本实验基于华为云API Arts和API Explorer,向用户介绍诗歌生成API,指导用户使用华为云工具,体验AI作诗的过程. 本文分享自华为云社区<AI语言能力体验:通过三种不同的工 ...

  9. SpringBoot 配置CORS处理前后端分离跨域配置无效问题解析

    前言 浏览器有跨域限制,非同源策略(协议.主机名或端口不同)被视为跨域请求,解决跨域有跨域资源共享(CORS).反向代理和 JSONP的方式.本篇通过 SpringBoot 的资源共享配置(CORS) ...

  10. HashMap实现原理和自动扩容

    HashMap实现原理: JDK1.7:数组+单向链表(头插) 在并发情况下头插可能出现循环链表(死循环)问题.原因:因为头插,在新数组中链表的元素顺序发生了变化, 如上图,假设线程1在扩容,刚刚调整 ...