vim 从嫌弃到依赖(4)—— .命令
通过之前几篇文章的介绍,如果各位小伙伴能够勤加练习,并在日常工作上经常使用,那么相信那些内容已经会对工作效率的提升产生好的影响。但是如果那些就是vim的全部的话,我们也就没那么大的必要花这么大的精力来学习如何使用它,而且它也不会在程序员中口口相传,并且令很多程序员对它如此着迷。接下来让我们更加深入到vim中,去学习更多更好的,可以进一步提升效率的技巧
Don’t Repeat Yourself. Let vim repeat it for you
不要进行重复的操作,让vim替你自动完成这些重复的操作。
vim之所以好用,效率高。就是它对重复操作进行了大量的优化,并且提供了一些方式方法能让你不必做重复功。而且尽量让这些方法简单易用。最简单的就是使用.
来重复上次修改(确实是够简单的)
废话不多说,还是以例子来说明
假设我有这样一段Python代码
if user == "vim":
print("vim is best!")
else:
print("vim is not best")
我需要将第2行和第3行进行缩进,可以这么做,先使用j
移动光标到第二行,然后使用 >>
缩进代码,接着使用 2j
跳转光标到第四行,然后使用 .
重复上一次修改
配合搜索命令可以完成对文本的快速修改,但是我们现在还没介绍到搜索相关操作,所以先按下不表
如何定义上次修改
不同的编辑器对上次修改的定义不同,有的可能是词、句子、段甚至有的可能按照输入时间来算,一段时间内的输入算作上次修改,而vim可以自己定义上次修改范围是多少。
vim一般将从进入插入模式开始,到从插入模式退出这段时间内做的修改做为上次修改,或者在普通模式下将我们使用一次operat = operator + motion
公式作为一次修改,例如我们有这么一段话
this is no more one line
this is no more one line
我们将光标移动到 第一个n
处。然后使用d2w
删除两个单词,然后再下一行再次使用.
发现它执行与上一行一样的操作
在进入插入模式时,连同进入插入模式的操作一起与在插入模式下输入的内容一同被算作上次修改,例如
this is only one line
this is only one line
改为
this is no more one line
this is no more one line
我们可以先将光标移动到 only 的首位,然后使用 cw
进入插入模式,输入 no more
退出输入模式,接着使用j
移动到下一行,再使用 2b
移动到第二行同样的位置,最后使用 .
来重复
上一次修改仅限于进入插入模式的一次操作,而之前进行的移动光标之类的操作就不再统计为一次修改。例如有这么一段代码
var foot = "foot"
var ball = "ball"
var football = foot + bar
我们要在每行的后面加上一个分号。
- 方案一:可以先使用
$
移动光标到行尾,然后使用a
插入模式,接着添加一个分号,在下一行需要先使用$
移动光标到行尾,然后使用.
直接使用,就会变成这样
针对这种情况只有事先手动的调整光标位置,然后使用点命令。这里就不演示了
针对这个例子,我们有更高效的方法,可以使用复合命令。使用A
可以直接从行尾进入插入模式
- 方案二:使用
A
在行尾进入插入模式,节省后续移动光标的步骤
通过这个例子,我们看到了使用复合命令加上.
可以极大的简化重复操作,提高效率。在这里再给出一些类似的复合命令给各位小伙伴参考
复合命令 | 等效长命令 | 含义 |
---|---|---|
A | $a | 在行尾进入插入模式 |
I | ^i | 在行首进入插入模式 |
o | A<CR> | 在下一行进入插入模式 |
O | ko(k$a<CR>) | 在上一行进入插入模式 |
S | ^c$ | 删除当前行并进入插入模式 |
C | c$ | 删除当前光标位置到行尾的内容并进入插入模式 |
s | cl | 删除光标后的一个字符并进入插入模式 |
在《vim实用技巧》这本书中,作者介绍了一个实用vim的经典范式——一个键移动、另一个键操作。例如上述实用.
命令的操作中,使用j
来移动行,然后使用.
来执行操作。后续将有许多操作使用该范式。
最后还是做一个总结:本篇讲述了vim中比较强大的一个命令——.
命令,它能重复上次修改。但是需要注意以下几点:
- 上次修改是从进入插入模式开始,到回到普通模式为止这段时间内做的修改,或者在普通模式下使用一条命令进行的修改
.
命令并不关心上次修改的位置,只会简单的重复上次修改。所以在使用前尽量考虑该使用哪些命令能最大限度的让.
重复更多操作。- 使用复合命令不光能减少输入字符数,配合
.
命令将产生强大的效果
vim 从嫌弃到依赖(4)—— .命令的更多相关文章
- VIM中的正则表达式及替换命令
VIM中的正则表达式及替换命令 一.使用正则表达式的命令 使用正则表达式的命令最常见的就是 / (搜索)命令.其格式如下: /正则表达式 另一个很有用的命令就是 :s(替换)命令,将第一个//之间的正 ...
- vim的保存文件和退出命令
文章来源:http://blog.sina.com.cn/s/blog_5e357d2d0100zmth.html 命令 简单说明 :w 保存编辑后的文件内容,但不退出vim编辑器.这个命令的作用是把 ...
- 二、vim的保存文件和退出命令
vim的保存文件和退出命令 命令 简单说明 :w 保存编辑后的文件内容,但不退出vim编辑器.这个命令的作用是把内存缓冲区中的数据写到启动vim时指定的文件中. :w! 强制写文件,即强制覆盖原有 ...
- vi / vim 删除以及翻页 其它命令
vim中翻页的命令 vim中翻页的命令 整页翻页 ctrl-f ctrl-b f就是forword b就是backward 翻半页 ctrl-d ctlr-u d=down u=up 滚一行 ctrl ...
- 【转】 Vim多行缩进及高级命令
学习别人的帖子,把内容变成自己的就是成长,此处MARK下 Vim多行缩进技巧 1.按v进入visual状态,选择多行,用>或<缩进或缩出 2. 通常根据语言特征使用自动缩进排版:在命令状态 ...
- 远程拷贝、查看端口、vim常见快捷键、查找替换命令、grep命令、查看存储空间的命令、chkconfig命令、系统自动启动级别、主机名配置、IP地址配置、域名映射、防火墙设置
2.1.远程拷贝 (将/export/servers/hadoop上的文件拷贝到bigdate@192.168.1.1:/export/servers/ ) scp –r /export/server ...
- Linux的vim编辑器中的翻页命令
当我们进入Linux的vim编辑器查看脚本时,按上下键查看是不是非常慢?这个时候就要用到我们的翻页快捷键了,快捷键命令如: 整页翻页命令为:Ctrl + f 键 f 的英文全拼为:forward: ...
- 《Practical Vim》第八章:利用动作命令在文档中移动
面向单词的移动 定义: Vim 提供了面向单词的动作命令,用于将光标正向/反向移动一个单词; 功能 命令 正向移动到下一单词开头 w 反向移动到上一单词的开头 b 正向移动到下一单词(当前单词)的结尾 ...
- docker容器中安装vim 、telnet、ifconfig, ping命令
在使用docker容器时,有时候里边没有安装vim,敲vim命令时提示说:vim: command not found,这个时候就需要安装vim,可是当你敲apt-get install vim命令时 ...
- 记录vim经常使用的几个命令
vi/vim 基本使用方法 vi编辑器是所有Unix及Linux系统下标准的编辑器. $ vim 1.txt 以vi打开一个文件就直接进入一般模式了(这是默认的模式).在这个模式中, 你可以使用上下左 ...
随机推荐
- Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
1.Nuget包添加引用: X.PagedList.Mvc.Core 2.View: @using VipSoft.Web.Model @model X.PagedList.IPagedList< ...
- zsh踩坑记录
1. zsh: no matches found: uvicorn[standard] 方法一 # 在~/.zshrc中添加下面这句话 setopt no_nomatch # 然后source ~/. ...
- Android RxJava 异常时堆栈信息显示不全(不准确),解决方案都在这里了
现象 大家好,我是徐公,今天为大家带来的是 RxJava 的一个血案,一行代码 return null 引发的. 前阵子,组内的同事反馈说 RxJava 在 debug 包 crash 了,捕获到的异 ...
- 阿里云视频云「 vPaaS 」演绎了怎样的音视频应用开发「未来图景」?
vPaaS是阿里云视频云最新推出的低代码音视频应用开发产品,其中,vPaaS低代码音视频工厂,彻底打破了音视频应用的繁冗技术开发壁垒:vPaaS视频原生应用开发平台,全新定义了音视频应用的开发方式. ...
- 【HZERO】分支管理
分支管理 分支类型 feature-[任务编号]-简单描述: 任务开发分支,针对迭代子任务建立的开发分支 bugfix :修复分支,用于缺陷修复. develop:开发分支,所有开发人员都可以提交代码 ...
- .NET CORE实战项目之CMS 部署篇 思维导图
.NET Core实战项目之CMS 第十七章 CMS网站系统的部署 如何优雅的利用Windows服务来部署ASP.NET Core程序
- java使用递归及迭代方式实现前序遍历 中序遍历 后序遍历 以及实现层序遍历
本文为博主原创,转载请注明出处: 目录: 一.快速理解前序,中序,后序遍历的区别 二.使用递归的方式实现前序,中序,后序遍历 三. 使用迭代的方式实现前序 中序 后序遍历 四.层序遍历 一.快速理解前 ...
- maven总结二: 常用标签及属性
本文为博主原创,未经允许不得转载 目录: 1. maven 依赖属性:groupId.artifactId.version 2.插件执行: execution,id ,phase,goals,con ...
- 4.Prometheus之存储及WAL
一.整体介绍 二.block 2.1 head block 三.WAL(Write-ahead logging, 预写日志) 3.1 数据流向 四.和存储相关的启动参数 五.总结 一.整体介绍 Pro ...
- 缓存选型:Redis or MemCache
★ Redis24篇集合 1 背景 互联网产品为了保证高性能和高可用性,经常会使用缓存来进行架构设计.最常用的就是使用Redis了,也有部分企业会选择使用Memcache. 所以了解 Redis 和 ...