第一章:Vim 解决问题的方式

前言

本质上讲,我们的工作是重复性的.凡是可以简化重复性操作的方式,都会成倍地节省我们的时间.

Vim 对重复性操作进行了优化.它之所以能高效地重复,是因为它会记录我们最近的操作,让我们用一次按键就能重复上次的修改.

.--这个看似简单的命令是 Vim 中的瑞士军刀.

修改的定义

定义:

修改是改变文档内文本的任意操作,分为两类:

  1. 它可以是在普通模式、可视模式、命令行模式中所触发的指令.
  2. 插入模式在按 Esc 之前的操作,包括输入的文本.

将两个动作合并成一次按键——一箭双雕

复合命令 等效的长命令
C c$
S cl
S c
I i
A $a
o A
0 ko

重复 & 回退

在执行一个修改的时候,要想办法做到两点:

  1. 使修改可重复
  2. 使移动可重复

并且当发生错误,或者针对不同对象有不同的操作的时候,我们能够执行回退操作.

目的 操作 重复 回退
作出一个修改 {edit} . u
在行内查找下一指定字符 f{char}/t{char} ; ,
在行内查找上一指定字符 F{char}/T{char} ; ,
在文档中查找下一处匹配项 /pattern n N
在文档中查找上一处匹配项 ?pattern n N
查找当前光标下的单词 * n N
执行替换 :/target/replacement & u
执行一系列修改 qx{changes}q @x u

“. 范式”

定义:使用 “.” 命令重复上一次的修改,并且只需一次按键就可以把光标移到下一个目标上.
即理想模式:用一键移动,另一键执行.

第二章:普通模式

导言

这一章节讲述了 Vim 中的默认模式:普通模式,探讨了如下问题:

  1. 在执行时可指定执行的次数的普通模式命令
  2. 普通模式命令将操作符与动作命令结合在一起的特点
  3. 普通模式命令执行简单的算术运算

构造「可重复的」修改

依据:使用这种手段的时候 ,需要的按键次数最少.
示例:
文中比对了三种命令的效果:
db-x, b-dw. daw 都是能够删除一个句子中的一个单词的命令,但是如果要重复执行操作,即执行 "." 命令的时候,

  1. db-x, 只重复 x 命令,即删除一个字符
  2. b-dw,重复 dw 命令,即删除下一个单词.
  3. daw, 删除一个单词.

<C-x>&<C-a> 命令

定义:
<C-x>:把当前光标之上或者之后的数值加上 [count]
<C-a>:把当前光标之上或者之后的数值减去 [count]

控制粒度

普通模式的命令可以指定操作的次数,但是应该只在必要的时候使用次数,一般的情况下可以使用重复的命令.

operator 与 motion

operator 定义:进行操作的类型,其中控制的范围由 {motion} 来决定,
motion 定义: 字符l, 一个单词 aw, 一个段落 ap 等等.

语法

operation = operator + motion
例外:
当一个 operator 被连续调用两次的时候,它会作用于当前行,例如 : >>, dd 等等

操作符待决模式

格式:在按下 operator 和 motion 之间的一段时间.
本质:
如果我们把 Vim 想象成有限状态机,那么操作符待决模式就是一个只接受动作命令的状态.这个状态只在我们调用操作符时被激活,直到得到一个动作命令.
当操作符待决模式被激活时,我们可以按 返回到普通模式.

类别

目的 命令
修改 c
删除 d
复制到寄存器 y
反转大小写 g~
转换为小写 gu
转换为大写 gU
增加缩进 >
减小缩进 <
自动缩进 =
使用外部程序过滤 {motion} 所跨越的行 !

Practical Vim 第一章 & 第二章的更多相关文章

  1. 《细说PHP》第四版 样章 第二章 PHP的应用与发展 1

    <细说PHP>第四版 样章 第二章 PHP的应用与发展 1 学习任何编程语言之前,先了解一下它的应用与发展是很有必要的.从Web开发的历史看来,PHP.Python和Ruby几乎是同时出现 ...

  2. CSS3秘笈复习:第一章&第二章&第三章

    第一章: 1.<cite>标签不仅可以将网页设置为斜体,还能给标题做上标记,使它便于被搜索引擎搜索到. 第二章: 1.import指令链接样式表: CSS本身有一种添加外部样式的方法:@i ...

  3. Linux第一章第二章学习笔记

    第一章 Linux内核简介 1.1 Unix的历史 它是现存操作系统中最强大最优秀的系统. 设计简洁,在发布时提供原代码. 所有东西都被当做文件对待. Unix的内核和其他相关软件是用C语言编写而成的 ...

  4. Linux内核设计与实现 第一章 第二章

    第一章 Linux内核简介 Unix特点: (1)     Unix很简洁,仅仅提供几个几百个系统调用并且有一个非常明确的设计目的 (2)     在Unix中,所有的东西都被当作文件对待,通过一套相 ...

  5. 通过游戏学python 3.6 第一季 第二章 实例项目 猜数字游戏--核心代码--猜测次数 可复制直接使用 娱乐 可封装 函数

      猜数字游戏--核心代码--猜测次数   #猜数字--核心代码--猜测次数 number=33 amount=3 count=0 while count<=amount: conversion ...

  6. 《Practical Vim》第五章:命令行模式

    前言 出于历史原因,命令行模式又叫 Ex 模式,它具有的功能有: 读写文件:比如 :edit, :write 等等 创建标签页或者窗口:比如 :tabnew :split 操作缓存区,比如: bnex ...

  7. progit 学习笔记-- 1 第一章 第二章

    * 1 起步**  关于版本控制*** 什么是版本控制?记录文件变化,查阅特定版本,回溯到之前的状态.任何类型的文件进行版本控制.复制整个目录 加上备份时间 简单 混淆 无法恢复本地版本控制 数据库记 ...

  8. Java入门 第一季第二章 变量和常量

    这是我学习慕课网Java课程的笔记.原视频链接为:http://www.imooc.com/learn/85 2-1 Java中的keyword PS:Javakeyword区分大写和小写 2-2 认 ...

  9. 《Linux内核设计与实现》课本第一章&第二章学习笔记

    <Linux内核设计与实现>课本学习笔记 By20135203齐岳 一.Linux内核简介 Unix内核的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆文件 ...

随机推荐

  1. day28 网络编程

    网络编程 什么是网络编程? 编写基于网络的应用程序的过程称之为网络编程 一.CS构架 C/S构架 服务器和客户端之间用网线连接 提供数据的计算机称为服务器,访问数据的计算机称为客户端 二.网络通讯的基 ...

  2. CentOS7搭建jdk

    背景 现在很多Linux系统在安装完成时就自带jdk,但是系统自带的jdk有时候并不符合我们的需求,这时候我们需要自己来安装jdk. 步骤 下载jdk,我下载的是64位的jdk-8u161-linux ...

  3. uniGUI试用笔记(十一)

    最近研究了一下UniGUI的TuniDBGrid,记录一下免得忘记了. TuniDBGrid的重要属性包括: 1.列—TUniDBGridColumns和TUniDBGridColumn 每个列对象( ...

  4. What are the differences between Flyweight and Object Pool patterns?

    What are the differences between Flyweight and Object Pool patterns? They differ in the way they are ...

  5. 【htop】Linux CentOS 6.5下安装htop进程管理工具

    一.Htop的使用简介 This is htop, an interactive process viewer for Linux. It is a text-mode application (fo ...

  6. Excel lastindex of a substring

    I think I get what you mean. Let's say for example you want the right-most \ in the following string ...

  7. 4-Four-Seeing hands

      ①Several cases have been reported in Russia recently of people who can read and detect colours wit ...

  8. latex建立参考文献的超链接

    在Latex生成的pdf文档中建立超链接(如从正文到参考文献,从目录到相应内容,从页码编号到实际页面等),有利于读者快速定位当前阅读的信息. 如何在生成的pdf文件中包含超链接呢?需要注意一下两点: ...

  9. layui upload 后台获取不到值

    后台获取不到值方法一: <script> layui.use('upload', function () { var upload = layui.upload; //执行实例 var u ...

  10. git切换分支报错:error: pathspec 'origin/XXX' did not match any file(s) known to git

    项目上有一个分支test,使用git branch -a看不到该远程分支,直接使用命令git checkout test报错如下: error: pathspec 'origin/test' did ...