linux vi 排序命令,10 个你必须掌握的超酷 VI 命令技巧

摘要:大部分Linux开发者对vi命相当熟悉,可是遗憾的是,大部分开发者都只能掌握一些最常用的Linux vi命令,下面介绍的10个vi命令虽然很多不为人知,但是在实际应用中又能让你大大提高效率。

在使用vi 编辑器时—无论是初次使用的用户,还是有经验的用户—大多数人往往只掌握核心命令集,这些命令可以执行最常用的功能:导航或保存文件;插入、更新、删除或搜索数据;退出但不保存修改。

但是,vi 编辑器极其强大,特性和功能非常丰富。即使在多年使用vi 之后,您仍然可能会发现有不知道的新命令。本文讨论的命令就属于不太为人所知的命令,但是它们可以简化您目前采用的操作方法,让您的工作方式更高效,或者 让您能够完成原来不知道可以用vi 完成的操作。

打开和关闭行号

vi 编辑器的许多选项可以控制编辑会话的外观和感觉。使用 :set 命令修改vi 中的会话设置。按 Escape 键进入命令模式之后,可以使用 :set all 命令显示选项和设置的列表。可以设置的选项之一是 number,它的作用是打开和关闭行号

#

# Internet host table

#

::1 localhost

127.0.0.1 localhost loghost

192.168.0.6 CentOS5

192.168.0.10 appserv

192.168.0.11 webserv

192.168.0.12 test

192.168.0.5 solaris10 # Added by DHCP

~

~

~

:set number

这个vi命令 在当前编辑的文件中的每个记录上显示行号。让vi 进入命令模式之后,可以输入 :set number 并按回车来打开行号

#

# Internet host table

#

::1 localhost

127.0.0.1 localhost loghost

192.168.0.6 centos5

192.168.0.10 appserv

192.168.0.11 webserv

192.168.0.12 test

192.168.0.5 solaris10 # Added by DHCP

可以使用 :set nonumber 命令关闭行号。还可以使用这个命令和 :set number 命令的简写,即 :set nu 和 :set nonu。如果需要快速计算要用vi 函数处理的行数,显示行号会非常有帮助。当行数很多,可能跨多个屏幕时,行号尤其有用。另外,有时候您知道要处理的行范围,但是需要查明要在vi 命令中使用的初始和结束行号。如果希望每次进入vi 会话时都显示行号,那么在主目录中的.exrc 文件中添加 set number 行。

自动缩进

在用某些编程语言编写代码时,缩进是样式的重要部分,可以确保代码的可读性更好。如果需要,可以在vi 编辑器中根据编程语言的样式设置自动缩进。使用 autoindent 打开或关闭自动缩进.

#!/bin/ksh

#

#

for file in /etc/*

do

if [[ -f ${file} ]] ; then

echo “${file} is a file”

~

~

~

~

~

:set autoindent

在此之后,如果在一行的开头输入空格或制表符,那么后续的新行将会缩进到相同的位置。在命令模式下,输入 :set autoindent,然后按回车打开自动缩进。通过设置 shiftwidth 确定缩进级别。例如,:set shiftwidth=4 把每级缩进设置为四个空格。

#!/bin/ksh

#

#

for file in /etc/*

do

if [[ -f ${file} ]] ; then

echo “${file} is a file”

elif [[ -d ${file} ]] ; then

echo “${file} is a directory”

fi

done

~

~

:set shiftwidth=4

在命令模式下,可以使用>> 命令让现有的一行增加一级缩进,使用<< 命令减少一级缩进。在这些命令前面加上一个整数,即可让多行增加或减少一级缩进。例如,把游标放在清单 4 中第 6 行的开头,进入命令模式之后,输入 5>> 就会让下面五行增加一级缩进。

#!/bin/ksh

#

#

for file in /etc/*

do

if [[ -f ${file} ]] ; then

echo “${file} is a file”

elif [[ -d ${file} ]] ; then

echo “${file} is a directory”

fi

done

~

~

可以使用 :set noautoindent 命令关闭自动缩进。还可以使用这个命令和 autoindent 命令的简写,即 :set ai 和 :set noai。还可以使用 :set ai sw=4 在一个命令中打开缩进并设置缩进级别。如果希望每次启动vi 会话时都启用自动缩进并把缩进级别设置为四个空格,那么在主目录中的.exrc 文件中添加 set ai sw=4 行。

在搜索时不区分大小写

如您所知,在 UNIX®中执行搜索时,模式匹配是区分大小写的。但是,如果希望vi 不区分大小写,那么可以使用 :set ignorecase 命令。使用 :set noignorecase 恢复区分大小写。还可以使用简写(:set ic 和 :set noic)。如果希望每次进入vi 会话时都启用不区分大小写的搜索,那么在主目录中的.exrc 文件中添加 set ignorecase 行。

复合搜索

在vi 中,可以使用/命令搜索字符串,这需要以字面字符串或正则表达式的形式指定要匹配的模式。例如,要想在文件中搜索单词 echo,只需进入命令模式,输入/echo,然后按回车。这个命令会找到清单 6 所示文件的第 3 行的第一个单词。

#!/bin/ksh

#

echo “Starting”

file=${1}

echo ${file}

if [[ ${file} = 1 ]] ; then

((file=${file}+1))

echo “Adding one gives ” \

${file}

fi

echo “Ending”

exit

可以使用简单的正则表达式指定寻找包含某一单词而且后面有另一个单词的行。例如,要想寻找包含字符串 echo、后面有零个或更多字符、之后是字符串 file 的第一行,应该使用/echo.*file。在清单 6 所示的文件中,这个命令会找到第 6 行的第一个单词。

但是,只有这两个字符串出现在同一行上,这个命令才认为是匹配的。如果希望搜索出现在另一个模式或字符串后面的某个模式或字符串,不管这两个模式或 字符串是否在同一行上,那么可以指定由分号(;)分隔的两个搜索命令,从而执行复合搜索。例如,要想搜索出现在字符串{file}+1 后面的字符串 echo,应该使用/{file}+1/;/echo/。在清单 6 所示的文件中,这个命令会找到第 10 行的第一个单词。复合搜索对于寻找代码中出现在另一个命令后面的某个命令尤其有用—例如,在设置某个变量之后调用函数的地方。

重放搜索模式

当在文件中搜索要替换的模式时,可以让vi 把要匹配的任何模式保存在缓冲区中;然后,在执行替换时,可以用缓冲区引用号重放它们。方法是把模式放在 \(和 \)之间,这会指示vi 把模式放在编号的缓冲区(1 到 9)中。在执行替换时,可以用缓冲区引用号 \1 到 \9 引用这些缓冲区。

例如,假设要在清单 7 所示的文件中搜索以单词 Martin 开头的行并对每个匹配添加前缀 Mr 和后缀 Wicks,那么进入命令模式,输入vi 命令 :%s/^\(Martin\)/Mr \1 Wicks/g,然后按回车。

Martin is an IT consultant. Martin likes

snowboarding and mountain biking. Martin has

worked on UNIX systems for over 15 years. Martin also

worked for many years before that on mainframes.

Martin lives in London.

~

~

~

~

:%s/^\(Martin\)/Mr \1 Wicks/g

下面把这个命令分解开解释一下:

:%s —指示vi 执行替换。

/—模式分隔符。

^\(Martin\)—寻找以字符串 Martin 开头的行并把这个字符串保存在缓冲区 1 中。

/—模式分隔符。

Mr \1 Wicks —把找到的字符串替换为字符串 Mr,加上缓冲区 1 中的内容,再加上字符串 Wicks。

/—模式分隔符。

g —全局修改(即修改所有匹配的地方)

在搜索和替换字符串中都可以使用缓冲区引用。

Mr Martin Wicks is an IT consultant. Martin likes

snowboarding and mountain biking. Martin has

worked on UNIX systems for over 15 years. Martin also

worked for many years before that on mainframes.

Mr Martin Wicks lives in London.

~

~

~

~

:%s/^\(Martin\)/Mr \1 Wicks/g

书签

可以让vi 在文件中的特定位置放上书签。方法是按 Escape 键,再按 M 键,然后输入另一个表示书签引用的字母表字符。因此,最多可以有 26 个书签,分别名为 a 到z。要返回到上一书签,按 Escape 键,再按反撇号(`),然后输入书签引用字符。

例如,按 Escape 之后按 M 和 A 键,就会把当前游标位置保存在书签 a 中。在编辑会话中,以后希望返回到这个游标位置时,只需按 Escape,然后输入 `A。可以使用双反撇号(“)命令在当前书签和前一个书签之间切换。

查找、更新、查找下一个、重复

在vi 编辑器中,最有用的搜索/替换特性之一是查找与某个模式匹配的字符串,更新它,然后继续搜索下一个匹配的字符串,然后选择是否以相同方式更新它。这与 Microsoft® Word 中的查找下一个/替换功能很相似。您可能已经知道可以在vi 中搜索字符串模式,方法是进入命令模式,输入/search_pattern(其中的 search_pattern 是字符串或正则表达式),然后按回车。这样做就会找到与指定的模式匹配的第一个字符串。在此之后,可以在找到的文本上执行任何操作。例如,按 Escape,再按 C 和 W 键,再输入更多文本,就会把找到的字符串替换为另一个单词。

要想快速地找到与模式匹配的下一个地方,应该按 Escape,然后按 N 键。在找到下一个匹配时,可以使用点号键(.)在这个位置重复最近的文本操作,比如前一个示例中使用的修改单词(cw)操作。然后,可以使用这些键继续寻 找其他匹配(n)并选择重复文本操作(.),操作方式与使用 Word 中的查找下一个/替换功能很相似。

切换大小写

在vi 中,可以切换游标下的字母字符的大小写,方法是按 Escape,然后按波浪号键(~)。这会在小写和大写之间来回切换。按着这个键,移动游标经过行中的每个字符,就会切换遇到的每个字母字符的大小写。可 以在波浪号前面输入一个数字,表示希望改变多少个字母字符的大小写。

筛��

您可能知道,在vi 中按 Escape,输入 :!command(其中的 command 是要执行的 UNIX 命令),然后按回车,就可以在 shell 中执行命令。例如,:!pwd 显示编辑会话当前的工作目录。

但是,还可以把文件的一部分作为标准输入发送给 UNIX 命令,并用产生的输出替换编辑缓冲区中的相同部分。例如,如果希望在vi 会话内对清单 9 所示的整个文件进行排序,可以按 Escape,输入 :1,$!sort 并按回车,这让vi 把从第一行到文件末尾($)的所有内容传递给 sort 命令,用输出替换指定的部分。

另外,还可以在 shell 命令前面加上从当前游标位置开始希望操作的行数。方法是按 Escape,然后输入指定行数的数字,然后输入两个惊叹号(!!),最后输入 UNIX 命令。

可以使用管道分隔符(|)把 UNIX 命令连接在一起,从而在vi 会话中执行复杂强大的筛选。例如,假设要把当前vi 会话的编辑缓冲区中的文件内容替换为每行的第一个空格分隔的字段,按升序排序并转换为大写,那么在按 Escape 之后输入:

:1,$!awk ‘{print $1}’ | sort | tr [:lower:] [:upper:]

保存部分内容

可以保存当前编辑的文件的部分内容,方法是按 Escape,然后输入 :start,endw file,其中的 start 是当前文件中要保存的第一行,end 是要保存的最后一行,w表示希望写到另一个文件中(或者覆盖现有的文件),file 是指定的部分要保存到的文件。对于最后一行,可以使用$表示文件的末尾。可以在w后面使用两个大于号(>>)表示希望把内容附加到文件中而不 是覆盖文件。清单 12 中的示例把第 6 到第 9 行(含)附加到文件/tmp/newfile 中。

#

# Internet host table

#

::1 localhost

127.0.0.1 localhost loghost

192.168.0.6 centos5

192.168.0.10 appserv

192.168.0.11 webserv

192.168.0.12 test

192.168.0.5 solaris10 # Added by DHCP

~

~

~

:6,9w >> /tmp/newfile

结束语

vi 编辑器是一个极其强大的工具,本文提供了一些技巧和诀窍,希望能够帮助您更高效地编辑文件。请记住,vi 还有更多不太为人所知的特性。祝工作愉快!0b1331709591d260c1c78e86d0c51c18.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431351.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

arduino 水位传感器_云南可信赖的威卡压力传感器哪里有

云南可信赖的威卡压力传感器哪里有 k52gh264云南可信赖的威卡压力传感器哪里有 在生产生活中&#xff0c;对压力表的正确使用为工业生产提供了一定程度的便利。.指针转动受阻在检修过程中&#xff0c;先给弹賛管式压力表施加压力&#xff0c;如果发现被检测表的指针成比例变快或…

小甲鱼Python笔记(下)

二十八 二十九 文件 打开文件 open(文件名[,模式][,缓冲])  注意open是个函数不是方法 模式&#xff1a; 缓冲&#xff1a; 大于1的数字代表缓冲区的大小&#xff08;单位是字节&#xff09;&#xff0c;-1&#xff08;或者是任何负数&#xff09;代表使用默认缓冲区大小 只…

linux服务器搭建_学linux可以做什么具体的就业方向是什么

学linux可以做什么当今世界流行的操作系统有3大类&#xff0c;Linux、Mac OS和Windows操作系统&#xff0c;Linux操作系统因其开源、免费、跨平台、良好的界面等特性&#xff0c;深受广大程序员们的青睐&#xff01;Linux操作系统被广泛的应用于企业服务器领域&#xff0c;目前…

linux下安装两个tomcat,linux安装两个tomcat-Go语言中文社区

解压apache-tomcat-7.0.86.tar.gz&#xff0c;把解压后的复制一份修改/etc/profile文件&#xff1a;vim /etc/profile#################我添加的start######################################first tomcat######################CATALINA_BASE/root/app/apache-tomcat-7.0.86CA…

中文域名销售平台_中国开关网.商城被搭建为南京某公司官网,这样的域名你喜欢吗?...

南京盛企电子有限公司是一个民营企业&#xff0c;成立于1997年6月&#xff0c;主要生产led广告板、薄膜开关、薄膜面板及其相类似的产品。公司拥有国内先进的制版系统、精细的丝网晒版设备、世界先进的丝网印刷机、数控恒温远红外烘道、uv固化机、模切机、激光切割机、电子产品…

linux远程虚拟桌面,2020-07-23 Linux 远程连接虚拟桌面

写在前面我的服务器为Centos7&#xff0c;其他 Linux 发行版可能略有差异。此方法不需要有物理显示屏。可以多用户同时登录&#xff0c;同一用户可以开启多个虚拟桌面。TigerVNC 安装使用这个软件提供 VNC 服务。Centos 下安装sudo yum install -y tigervnc-server用户模式开启…

2019数据安装勾选_【安装部署】esweb服务器如何单独部署

推荐指数&#xff1a;☆☆☆☆☆背景&#xff1a;在勤哲Exce服务器软件的使用过程中&#xff0c;有的客户并发用户数多&#xff0c;可将esweb服务器单独部署。具体安装步骤&#xff1a;首先&#xff0c;在一台服务器上安装除填报网站外的应用程序。双击安装包运行。点击”接受“…

html css 前端实现消息提醒数_自学的福音,web前端学习全套视频教程+最新学习思维导图都在这里...

1、产品经理。这些是负责策划应用程序的一群人。他们会想出很多新鲜的、奇怪的、甚至是不可能实现的应用。一般来说&#xff0c;产品经理都追求丰富的功能。2、UI设计师。这些人负责应用程序的视觉设计和交互模拟。3、项目经理。这些人负责实际地运行和维护应用程序。4、最终用…

5233杨光--Linux第一次实验

学习计时&#xff1a;共14小时 读书&#xff1a;2小时 代码&#xff1a;7小时 作业&#xff1a;2小时 博客&#xff1a;3小时 一、学习目标 1. 能够独立安装Linux操作系统 2. 能够熟练使用Linux系统的基本命令 3. 熟练使用Linux中用户管理命令/系统相关命令/文件目录相关命…

asp.net web开发步骤_WEB开发流程

1.需求确定2.分析与设计 (1)架构分析与设计 (2)业务逻辑分析 (3)业务逻辑设计 (4)界面设计3.开发环境搭建4.开发-测试-开发-测试5.文档编纂各个阶段过程都是有文档的,需求有需求的文档,设计有设计的文档,测试也有测试的文档.首先来看需求确定:需求…

psv黑商店pkgj最新版下载_e收银app下载安装_e收银软件最新版免费下载

e-Cashier应用程序是一种高效的收银员服务客户端应用程序。 e-Cashier的移动版本支持多种刷卡方法&#xff0c;使商户可以自定义订单日期&#xff0c;从而使每天的收入一目了然&#xff0c;并且从多个角度分析商店的业务状况非常实用 。特征电子收银机是一种高效便捷的收银工具…

微分方程的数值解法与程序实现 pdf_初中数学知识点|一元一次方程的概念及讲解(二)建议收藏!内含pdf版...

长按关注【初中数学解题大全】 获取更多&#xff01;电子课本|学习资料|学习方法|家教知识后台回复“数学”等学科名称即可获取初中数学电子课本后台回复“初一”等相应年级即可获取数学视频讲解及知识点大全后台回复“真题”即可获取2017-2019初中数学各市真题试卷大全后台回复…

Linux下rgmii接口与fpga相连,FPGA控制RGMII接口PHY芯片88E1512网络通信

一、前言网络通信中的PHY芯片接口种类有很多&#xff0c;之前接触过GMII接口的PHY芯片RTL8211EG。但GMII接口数量较多&#xff0c;本文使用RGMII接口的88E1512搭建网络通信系统。这类接口总线位宽小&#xff0c;可以降低电路成本&#xff0c;在实际项目中应用更广泛。二、从GMI…

esxi usb插口_酷暑大作战 | USB-C风扇新体验

“枯藤老树昏鸦&#xff0c;空调 Wi-Fi 西瓜”每到炎热的夏天&#xff0c;人类的梦想就变得朴实、无华而简单但当我们吹不到空调时&#xff0c;如何还能享受阵阵清凉&#xff1f;今天我们介绍的两款新型电扇或许可以提供新思路&#xff1a;edon 循环电扇GUZI 挂颈电扇越来越多人…

手写tomcat socket closed_【消费电子】:重在阅读,新增手写 BOOX Nova Pro 体验评测...

此文出自于《消费电子》对BOOX Nova Pro的评测&#xff0c;本文已征得李强作者授权转载。【《消费电子》杂志社】越来越多的人选择在移动设备上阅读、学习&#xff0c;正所谓“需求诞生市场”&#xff0c;如今这类产品已经相当之丰富。越来越多的人选择在移动设备上阅读、学习&…

mysql insert 不需要日志_详解MySQL|你不知道的新特性-8.0错误日志增强

MySQL 8.0 重新定义了错误日志输出和过滤&#xff0c;改善了原来臃肿并且可读性很差的错误日志。比如增加了 JSON 输出&#xff0c;在原来的日志后面以序号以及 JSON 后缀的方式展示。比如我机器上的 MySQL 以 JSON 保存的错误日志 mysqld.log.00.json&#xff1a;[rootcentos-…

idea中java文件怎么运行_Java入门基础篇-如何在Java中创建只读文件

本文选自千锋教育《Java语言程序设计》&#xff0c;如需转载请注明出处&#xff0c;谢谢&#xff01;1、如何创建只读文件要使文件只读&#xff0c;我们只要将文件属性更改为只读就行&#xff1b;可以使用File类的setReadOnly()方法来实现。它会返回一个布尔值&#xff0c;这样…

模仿JavaAppArguments.java示例

要求&#xff1a;编写一个程序&#xff0c;此程序从命令行接受多个数字&#xff0c;求和之后输出结果。 设计思想&#xff1a;命令行的参数都是字符串&#xff0c;需要定义一个整形数组将其转化为整数&#xff0c;然后实现数字的相加&#xff0c;最后输出结果。 程序流程图&…

2020年408真题_自考书院:2020年10月00830现代语言学真题

免费发布2020年10月全国统一命题《00830现代语言学》试卷其他真题&#xff1a;甘肃自考网 >> 历年试题 >>http://www.gseea.net点击历年真题查看更多真题和复习资料【互动交流平台】&#xff1a;交流QQ一群&#xff1a;35167222交流QQ二群&#xff1a;251822544自考…

linux优先级队列,Python3 线程优先级队列( Queue)

导读Python 的 Queue 模块中提供了同步的、线程安全的队列类&#xff0c;包括FIFO(先入先出)队列Queue&#xff0c;LIFO(后入先出)队列LifoQueue&#xff0c;和优先级队列 PriorityQueue。这些队列都实现了锁原语&#xff0c;能够在多线程中直接使用&#xff0c;可以使用队列来…