Practical Vim 第一章 & 第二章
第一章:Vim 解决问题的方式
前言
本质上讲,我们的工作是重复性的.凡是可以简化重复性操作的方式,都会成倍地节省我们的时间.
Vim 对重复性操作进行了优化.它之所以能高效地重复,是因为它会记录我们最近的操作,让我们用一次按键就能重复上次的修改.
.--这个看似简单的命令是 Vim 中的瑞士军刀.
修改的定义
定义:
修改是改变文档内文本的任意操作,分为两类:
- 它可以是在普通模式、可视模式、命令行模式中所触发的指令.
- 插入模式在按 Esc 之前的操作,包括输入的文本.
将两个动作合并成一次按键——一箭双雕
| 复合命令 | 等效的长命令 |
|---|---|
| C | c$ |
| S | cl |
| S | c |
| I | i |
| A | $a |
| o | A |
| 0 | ko |
重复 & 回退
在执行一个修改的时候,要想办法做到两点:
- 使修改可重复
- 使移动可重复
并且当发生错误,或者针对不同对象有不同的操作的时候,我们能够执行回退操作.
| 目的 | 操作 | 重复 | 回退 |
|---|---|---|---|
| 作出一个修改 | {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 中的默认模式:普通模式,探讨了如下问题:
- 在执行时可指定执行的次数的普通模式命令
- 普通模式命令将操作符与动作命令结合在一起的特点
- 普通模式命令执行简单的算术运算
构造「可重复的」修改
依据:使用这种手段的时候 ,需要的按键次数最少.
示例:
文中比对了三种命令的效果:
db-x, b-dw. daw 都是能够删除一个句子中的一个单词的命令,但是如果要重复执行操作,即执行 "." 命令的时候,
- db-x, 只重复 x 命令,即删除一个字符
- b-dw,重复 dw 命令,即删除下一个单词.
- 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 第一章 & 第二章的更多相关文章
- 《细说PHP》第四版 样章 第二章 PHP的应用与发展 1
<细说PHP>第四版 样章 第二章 PHP的应用与发展 1 学习任何编程语言之前,先了解一下它的应用与发展是很有必要的.从Web开发的历史看来,PHP.Python和Ruby几乎是同时出现 ...
- CSS3秘笈复习:第一章&第二章&第三章
第一章: 1.<cite>标签不仅可以将网页设置为斜体,还能给标题做上标记,使它便于被搜索引擎搜索到. 第二章: 1.import指令链接样式表: CSS本身有一种添加外部样式的方法:@i ...
- Linux第一章第二章学习笔记
第一章 Linux内核简介 1.1 Unix的历史 它是现存操作系统中最强大最优秀的系统. 设计简洁,在发布时提供原代码. 所有东西都被当做文件对待. Unix的内核和其他相关软件是用C语言编写而成的 ...
- Linux内核设计与实现 第一章 第二章
第一章 Linux内核简介 Unix特点: (1) Unix很简洁,仅仅提供几个几百个系统调用并且有一个非常明确的设计目的 (2) 在Unix中,所有的东西都被当作文件对待,通过一套相 ...
- 通过游戏学python 3.6 第一季 第二章 实例项目 猜数字游戏--核心代码--猜测次数 可复制直接使用 娱乐 可封装 函数
猜数字游戏--核心代码--猜测次数 #猜数字--核心代码--猜测次数 number=33 amount=3 count=0 while count<=amount: conversion ...
- 《Practical Vim》第五章:命令行模式
前言 出于历史原因,命令行模式又叫 Ex 模式,它具有的功能有: 读写文件:比如 :edit, :write 等等 创建标签页或者窗口:比如 :tabnew :split 操作缓存区,比如: bnex ...
- progit 学习笔记-- 1 第一章 第二章
* 1 起步** 关于版本控制*** 什么是版本控制?记录文件变化,查阅特定版本,回溯到之前的状态.任何类型的文件进行版本控制.复制整个目录 加上备份时间 简单 混淆 无法恢复本地版本控制 数据库记 ...
- Java入门 第一季第二章 变量和常量
这是我学习慕课网Java课程的笔记.原视频链接为:http://www.imooc.com/learn/85 2-1 Java中的keyword PS:Javakeyword区分大写和小写 2-2 认 ...
- 《Linux内核设计与实现》课本第一章&第二章学习笔记
<Linux内核设计与实现>课本学习笔记 By20135203齐岳 一.Linux内核简介 Unix内核的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆文件 ...
随机推荐
- bash 配置文件
两类: profile类:为交互式登录的shell进程提供配置 bashrc类:为非交互式登录的shell进程提供配置 登录类型: 交互式登录shell进程: 直接通过某终端输入账号和密码后登录打开的 ...
- 【Python019--函数与过程】
一.函数与过程 1.Python只有函数没有过程 >>> def hello(): print('Hello fishC!')>>> temp = hell ...
- 前端 --- 7 Bootstrop框架
一.基本结构 1.下载地址 官方地址:https://getbootstrap.com 中文地址:http://www.bootcss.com/ 2.HTML基本搭建结构 <!DOCTYPE ...
- topcoder srm 705 div1 -3
1.设有一个字母表$T$,对于一个单词$w$,若对于任意的$0\leq i< |w|-1$,满足$w_{i}$在$T$中的排名小于等于$w_{i+1}$在$T$中的排名,则称$s$在$T$中是合 ...
- Firemonkey的几个特色属性(二)
3.RotationAngle 控件的旋转角度,可以通过TAnimation进行角度旋转控制. 4.RotationCenter 控件旋转的中心位置,从(0,0)到(1,1),缺省是(0.5,0.5) ...
- CodeForces 430A Points and Segments (easy)(构造)题解
题意:之前愣是没看懂题意...就是给你n个点的坐标xi,然后还规定了Li,Ri,要求给每个点染色,每一组L,R内的点红色和黑色的个数不能相差大于1个,问你能不能染成功,不能输出-1,能就按照输入的顺序 ...
- 【做题】CF285E. Positions in Permutations——dp+容斥
题意:求所有长度为\(n\)的排列\(p\)中,有多少个满足:对于所有\(i \,(1 \leq i \leq n)\),其中恰好有\(k\)个满足\(|p_i - i| = 1\).答案对\(10^ ...
- 深度学习课程笔记(十一)初探 Capsule Network
深度学习课程笔记(十一)初探 Capsule Network 2018-02-01 15:58:52 一.先列出几个不错的 reference: 1. https://medium.com/ai% ...
- [bug] - 关于poi导入excel时间格式会减少8小时的问题.
这个bug发生在使用poi组件导入导出excel时,(这里是导入) 首先在excel中的格式设定是 yyyy-mm-dd hh:mm:ss 通过配套使用ExcelUtil中 getCellValue( ...
- 【C#】C#学习笔记_1
C#的程序入口为某一个类里面的static void Main(string[] args){}方法,如果一个工程有多个Main方法,那么需要在工程配置中选择一个作为程序入口. C#的输入.输出操作在 ...