当前位置: 首页 > news >正文

转:Vim实战指南(四):ex命令

原文地址:Vim实战指南(四):ex命令

Introduction

ex是Unix下的一个文本编辑器。至于为什么突然讲到这个,那是因为vi就是ex的"visual mode"。
你已经见过vi中的":w", ":q!",没错,这些就是来自于ex命令。
ex命令远不止这些,实际上所有":"开头的命令,也就是你在vi最下面看到的命令行,都属于ex命令。
接下来我要详细的介绍一下,ex命令的用法。

ex简介

首先我们打开ex:

$ ex file
"file" 3L, 16C Entering Ex mode. Type "visual" to go to Normal mode.

输入1,3,屏幕上将显示1-3行的内容。
试着输入"visual"或者"vi",是不是回到了熟悉的vi界面?
想要使用ex,输入":",是不是在最下面看到了ex命令行?
ex究竟是什么东西?事实上这和历史有关,在早期,显示器并不像现在这么好用,那会的“显示器”只有按行显示的功能。当你希望显示某行,输入命令,“显示器”上才会显示那行。试着想想一个不支持上下左右滚动的界面。
而控制这个“显示器”显示文本的命令行工具,就是ex。

ex vs vi

为什么我们有了vi还要使用ex?因为对于大段文本的操作,ex命令比vi命令行模式(command mode)更方便。
ex的命令都是基于行的(早期的“显示器”,或者你的小型计算器,除了行列什么都没有了),如:

:3:显示第三行
:3,5:显示第3到5行
:3s/hello/hi:将第三行的hello替换成hi,这里s是substitute的缩写

而在vi命令行模式下,你只需要简单的:

3G

但是对于删除3-6行,ex命令只需要:

:3,6d:这里d是delete的缩写

而在vi命令行模式下,你需要:

3G
3dd:这里你还需要计算6-3=3

另外一个例子,将3-6行放到14行的后面,ex命令只需要:

:3,6m14

而在vi命令行模式下,你需要:

3G
3dd
14G
pp

ex的优势就体现在这里。

ex行

上面我们见过,ex命令都是基于行的,而获得行号有下面几种方法:

3:直接输入行号
3-6:行范围
.:当前行
/pattern/:满足pattern的第一行
$:最后一行
%:每一行

你可以组合这些,如:

:3,$d:删除3行到最后一行
:%d:删掉每一行

你也可以:

:.,.+3d:删除当前行及后面3行
:/pattern/d:删除包含pattern的第一行
:/pattern1/,/pattern2/d:删除从pattern1到pattern2的行

搜索

在vi中,使用/进行搜索,是不是觉得每次使用n/N来查找下一个太慢了?试试ex吧:

:g/pattern/nu

是不是所有包含pattern的行以及行号都打印出来了?这里g的意思是global,全文的意思,nu是number,行号的意思。
你也可以把g换成3,6之类的,只在3-6行中搜索。

批处理

在ex中,也可以用"|"来批处理多条命令,如:

3,6d | g/csprojectedu/nu:删除3-6行后,打印所有包含csprojectedu的行。

保存和退出文件

在Vim实战指南(一):基础编辑命令中,我们介绍过保存和退出文件的方法,实际上:

ZZ:是vi命令行模式下的命令
:q:ex命令,退出文件,如果有未保存的修改则无法退出
:q!:ex命令:强制退出
:x:ex命令,保存和退出文件
:w:ex命令,保存文件
:w!:ex命令,强制保存
:w another:将文件另存为文件another
:3,6w another:将3-6行另存为文件another(编辑神器)
:9,13w >>another:将9-13行追加到文件another后面(编辑神器2)
:r another2:将another2文件的内容追到到当前文件光标后(编辑神器3)
:3r /home/user/another3:将/home/user/another3文件的内容追到到当前文件第3行后(编辑神器4)

编辑神器1-4,是不是很方便?

多文件处理

vi支持多文件处理,同时处理多文件不仅节省你多次打开和退出vi的时间,也可以让你反复利用vi的缓存区,关于缓存区的说明见Vim实战指南(三):高级技巧。
首先在命令行打开多个文件:

$ vi filename1 filename2

首先打开filename1,你可以通过ex的命令来切换:

:n:切换到下一个文件
:N:切换到上一个文件
:args:显示所有文件
:rewind/:rew:跳到第一个文件
:last:跳到最后一个文件

记住,缓存区是公用的,你可以将filename1中选择的内容,通过缓存区拷贝到filename2中。

Summary

掌握ex命令后,是不是发现vi越来越好用了?别着急,更强大更好用的ex命令还在后面。

  • 2月9日发布

转载于:https://www.cnblogs.com/dasn/articles/5240991.html

相关文章:

  • Eclipse配置信息
  • 如何在CentOS 5/6上安装EPEL源
  • csu 1600: Twenty-four point
  • 常用的Linux操作命令(一)
  • 2014103《JAVA程序设计》第一周学习总结
  • 2月第4周网络安全报告:境内69.1万主机感染病毒
  • 本地环境,Ecshop安装教程
  • 使用maven+eclipse构建spark项目
  • pull解析和sax解析的差别
  • eclipse中JS文件乱码
  • JavaScript设计模式与开发实践系列之策略模式
  • 颜色名列表
  • 设计模式简介
  • 获取坐标封装 getPos
  • 修改vsftp默认端口
  • 收藏网友的 源程序下载网
  • Consul Config 使用Git做版本控制的实现
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • laravel with 查询列表限制条数
  • PHP面试之三:MySQL数据库
  • Redux 中间件分析
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • Vue 重置组件到初始状态
  • 半理解系列--Promise的进化史
  • 从伪并行的 Python 多线程说起
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 高度不固定时垂直居中
  • 给第三方使用接口的 URL 签名实现
  • 和 || 运算
  • 类orAPI - 收藏集 - 掘金
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​一些不规范的GTID使用场景
  • #{} 和 ${}区别
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (C语言)二分查找 超详细
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (五)关系数据库标准语言SQL
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)平衡树
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • (转载)深入super,看Python如何解决钻石继承难题
  • **CI中自动类加载的用法总结
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl