20_Shell语言———VIM编辑器基础知识三之窗口属性定制、配置文件及查找替换功能

Vim编辑器可以让用户按照需求来定制一些使用属性。

一、窗口属性定义

1)显示行号

行号不是内容,只是用来帮助用户确认文本所在的行。在vim编辑器中,如果要显示行号,可以在末行模式下输入:

set number

如果想关闭,则可以在功能名称前面加上no,即:

set nonumber

命令可以被简写,如set number 可以简写为 set nu;set nonumber 可以简写为 set nonu

注意,上述设定仅对当前vim的进程有效,一旦当前进程关闭,这些设定就会失效,如果要使设定永久有效,需要修改vim的环境变量。

2)自动缩进

Vim编辑器默认不自动缩进,如果要开启自动缩进功能,可以在末行模式下输入:

set autoindent 简写为 set ai

取消此功能,可以使用 set noai

3)不区分字符的大小写

使用 set ignorecase,简写为 set ic 可以使文本查找时不区分大小写;

如果要取消此功能,可以使用 set noic

4)语法着色功能

在使用vim编辑器时,它会根据文本的后缀来自动识别文件,从而实现语法高亮着色的功能。如果不想要语法高亮,可以使用 syntax off 命令,开启此功能使用 syntax on,默认使用的是开启。

5)搜索结果高亮显示

在使用vim编辑器进行查找,会将查找内容高亮显示。关闭后再次打开vim编辑器,会发现上次查找的结果仍然高亮显示了,如果想要关闭上次查询结果的高亮效果,可以使用set nohlsearch,如果要再次开启此功能,可以使用set hlsearch。注意,此设定只对当前vim进程有效,再次打开时会发现上次查询的结果仍然高亮显示了。

6) 更多set命令

在末行模式下直接输入 set 命令,即可开启set命令的帮助文档,通过帮助文档,可以了解所有的自定义的属性。如果要关闭set 的帮助文档,直接敲回车键即可。

事实上vim 编辑器的帮助功能非常强大,在末行模式下直接输入help命令即可获取vim的所有命令;如果要知道具体的命令,可以使用help+keyword

二、vim编辑器的配置文件

前面介绍过,使用set命令来设定vim编辑器的窗口属性,仅对当前进程有效,如果要使设定永久有效,需要修改vim编辑器的配置文件。

Vim编辑器的配置文件有两种:

1. 全局配置文件:/etc/vimrc

2. 个人配置文件:~/.vimrc

注意此文件原本不存在,可以由用户自行创建

如果想让vim编辑器显示行号的功能永久有效,且对全部用户都有效,那么就可以由root用户来修改/etc/vimrc这个文件:

[[email protected] ~]# vim /etc/vimrc

在/etc/vimrc文件中任意处加上 set nu的属性,保存关闭此文件,再次使用vim打开一个文件,就可以看到行号了。

通过这样的方式修改的配置文件,对所有的用户都有效。比如切换到openstack用户,再次用vim打开某个文件,依然可以看到行号。

如果希望配置只对当前用户有效,则可以配置用户家目录下的隐藏文件 ~/.vimrc,此文件原本不存在,可以由用户自行创建。如想让当前用户在输入时具有自动缩进功能,则可以在~/.vimrc文件中添加set ai的属性。

三、查找替换

查找替换功能并不仅局限于vim编辑器,在sed等工具中同样需要实现查找替换功能,但这里着重介绍vim编辑器中的查找替换功能,sed工具相较于vim更简单,且大多数操作时一样的。

查找替换功能在vim编辑器的末行模式下实现,使用以下形式:

地址定界s/查找模式(可使用正则模式)/替换成的内容(不能使用正则)/gi

这里s表示使用查找替换命令,/为分隔符,g和i是常用的修饰符,g表示global,即全局替换;i表示ignorecase,表示替换时不区分大小写。

如要查找functions这个文件中以d开头,以n结尾,中间包含任意两个字符的单词,查找到之后,将之替换为“what”这个单词,则可以使用以下命令:

1,$s/\<d[a-zA-Z]\{2\}n\>/what/g

再比如,要将文件中 /dev/null 替换为 /tmp/a.txt,则可以使用以下命令:

%s/\/dev\/null/\/tmp\/a.txt/g

// 这里%表示全文搜索,g表示全文替换,如果不加g,则只替换第一个匹配到的字符串。

上述查找替换的操作中大量的\ /应用,使得表达式的书写显得极为混乱且不易辨认。事实上/可以替换成其他特殊符号作为分隔符,只要和要查找的字符串不一致即可,如@或#,从而使得表达式更清楚明了。故上述两个表达式可以写成:

1,[email protected]\<d[[:alpha:]]\{2\}n\>@[email protected]

%s#\/dev\/null#\/tmp\/a.txt#g

还是这个例子,如果要将d改为大写的D,n改为大写的N,而其他字符不变,如down 改为 DowN,可以采用分组引用的匹配方式:

%[email protected]\<d\([[:alpha:]]\{2\}\)n\>@D\[email protected]

使用vim进行查找替换操作还有更简单的方法,使用&符号来引用前面查找到的全部字符串。例如要将全文的dev都换成device,查找时忽略大小写,而替换时大写的DEV和小写的dev,或者是Dev都保留原状,常规的表达式为:

%[email protected]\([dD][eE][vV]\)@\[email protected]

而更简洁的写法是:

.,[email protected][dD][eE][vV]@&[email protected]

// .,+4表示当前行加4行,&符号就表示当前字符串,在后面附加新内容

下面再举几个个例子来演示查找替换功能:

例1:如果要删除行首开头的#:

%[email protected]^#@@  //注意,这里使用的是替换命令,而不是直接使用删除命令

例2:如果要删除行首开头的#及后面紧跟的空白字符:

%[email protected]^#[[:space:]]*@@

例3: 为以空白字符开头的行的行首加上#:

%[email protected]^[[:space:]]@#&@

至此,vim编辑器的基础知识已经介绍完了,如果要深入学习vim编辑器的使用方法,可以使用vimtutor命令打开vim编辑器的使用教程,逐课学习。

20_Shell语言———VIM编辑器基础知识三之窗口属性定制、配置文件及查找替换功能,布布扣,bubuko.com

时间: 06-30

20_Shell语言———VIM编辑器基础知识三之窗口属性定制、配置文件及查找替换功能的相关文章

Java基础知识强化41:StringBuffer类之StringBuffer的替换功能

1. StringBuffer的替换功能: public  StringBuffer   replace(int  start,  int  end, String  str): 2. 案例演示: 1 package cn.itcast_04; 2 3 /* 4 * StringBuffer的替换功能: 5 * public StringBuffer replace(int start,int end,String str):从start开始到end用str替换 6 */ 7 public cl

计算机科学基础知识(三)静态库和静态链接

三.将relocatable object file静态链接成可执行文件 将relocatable object file链接成可执行文件分成两步,第一步是符号分析(symbol resolution),第二步是符号重新定位(Relocation).本章主要描述这两个过程,为了完整性,静态库的概念也会在本章提及. 1.为什么会提出静态库的概念? 程序逻辑有共同的需求,例如数学库.字符串库等,如果每个程序员在撰写这些代码逻辑的时候都需要自己重新写那么该是多么麻烦的事情,而且容易出错,如果有现成的,

5-24 c++语言之【基础知识】

最近一段时间继续开始了c++的学习,作为c plus plus 难免会与c语言做一个对比,很明显的感受到c++语言注重代码的复用性和拓展性,而c语言更加注重其算法的高效性,这也是今后需要注意的地方,避免用c++语言写出c语言的思想,接下来就是正文 关于c++的语言特点: c++是一门面向对象的语言(很重要) 面向对象的三大特点(封装,继承,多态) c++库函数的头文件没有.h endl 换行并清空缓冲区 第一个,命名空间作用域 首先  :: 为作用域运算符(其中一个用法),在初写c++程序中有这

vim编辑器基础

vim编辑器 问题一:文本编辑器,字处理器之间的区别? 文本编辑器只处理纯ASCII文件 nano(全屏编辑), sed(行,命令行下) 问题二:什么是vi? vi: Visual Interface vim: VI iMproved(vi的加强版) VI:全屏编辑器,模式化编辑器 vim模式: 编辑模式(命令模式) 输入模式 末行模式 模式转换: 编辑-->输入: i: 在当前光标所在字符的前面,转为输入模式: a: 在当前光标所在字符的后面,转为输入模式: o: 在当前光标所在行的下方,新建

Struts2基础知识(三)

本文主要包括以下内容 OGNL表达式 标签 防止表单重复提交 使用第三方插件 OGNL表达式 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目.Struts2框架使用OGNL作为默认的表达式语言. 相对EL表达式,它提供了平时我们需要的一些功能,如: 支持对象方法调用,如xxx.sayHello(); 支持类静态方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@[方法名|值名],例如:@[email protect

Dapper基础知识三

在下刚毕业工作,之前实习有用到Dapper?这几天新项目想用上Dapper,在下比较菜鸟,这块只是个人对Dapper的一种总结. Dapper,当项目在开发的时候,在没有必要使用依赖注入的时候,如何做到对项目的快速开发这里对Dapper做一个小的进阶. 结合上一篇的博客,就可以使用了. public class Demo { public string name { get; set; } public string DapperTest { get; set; } } public class

HTML和HTML5的基础知识2——元素及属性

HTML元素 在基础知识一种写过元素由开始标签.元素内容.结束标签所构成,如:<p>这是一个段落</p>就是一个段落元素 其实简单的来说HTML文档就是由嵌套的HTML元素构成的. 例如:一个简单的HTML文档 <!DOCTYPE html> <html> <body> <p>这是第一个段落.</p> </body> </html> 上实例就包括了三个HTML元素分别是:<html>元素

【基础知识三】线性模型

一.基本形式 通过属性的线性组合来进行预测, 许多非线性模型可以在线性模型的基础上,引入层级结构或高维映射而得. 二.线性回归 最小二乘法:求解ω和b: 多元线性回归:样本由多个属性描述,即x为多维向量: 若矩阵不满秩产生多个解,解决方法:引入正则化项: 三.对数/逻辑线性回归 广义线性模型: g(.)条件:连续且充分光滑(单调可微) 为了预测值连续,引入Sigmoid函数 得到, 极大似然估计:求解ω和b 四.线性判别分析LDA 也叫"Fisher判别" 将样例投影到一条直线上,使同

KnockoutJS基础知识(三)

对于knockoutJS来讲,模板绑定和Mapping插件绑定是十分重要的功能,虽然模板绑定在我工作中用的及其少,但模板绑定的重要性不可忽视,在其他前端框架中,如Angular.Vue等等,模板存在的意义十分重要,Mapping插件使得我们能够脱离手工绑定,及其方便我们快速绑定达到预期效果. KnockoutJS模型绑定更多用法:https://knockoutjs.com/documentation/template-binding.html 本文地址:https://www.cnblogs.