学习vi和vim编辑器(10):高级编辑方法(1)

从本章开始将介绍一些vi和ex编辑器的高级功能。这一篇文章主要介绍如何自定义编辑环境,如何在vi中执行UNIX命令以及如何通过UNIX命令在vi中过滤文本。

自定义vi:

vi编辑器中有许多可以设置的选项,这些选项将影响vi编辑器的运作。

可以使用ex命令 " :set "在vi中改变选项。而且,只要vi被打开,就会读取位于你的主目录的" .exrc "文件,以取得vi的相关设置。在这个文件中使用" :set "命令,就可以改变vi的运作方式。除此之外,可以在当前目录中创建" .exrc "文件,从而在不同的目录中使用不同的选项来初始化vi。但是首先是主目录下的"
.exrc "文件先被执行,然后才是当前目录的" .exrc "文件。除此之外,任何存储在环境变量EXINIT中的命令都会在vi打开时执行。EXINIT中的设置会比主目录中的" .exrc "文件先执行。

:set 命令:" :set "命令可以改变两种类型的选项:一种是切换选项,只能选择开启与关闭,另一种可接受数值或字符串值。要将某个切换选项开启,使用
" :set option", 要将某个切换选项关闭,使用 " :set nooption "。而对于要设置某些值的选项,可以使用等号(=)来设置这些选项。通过" :set all "会显示选项的完整列表,包括用户的设置值和vi所选择的默认值。通过
" :set option? " 来查看某个选项的当前值。命令 " :set "用于显示特别更改或设置过的选项,这些选项可以是在" .exrc "文件或者是在当前编辑会话中设置过的选项。

.exrc文件:控制vi环境的" .exrc "文件位于你的主目录中(home目录)。如果主目录中没有" .exrc "文件,可以使用vi创建。可以在" .exrc "文件中写入设置vi选项的命令,而且这个文件实际上是由ex读入,所以在"
.exrc "文件中输入的命令前面不需要加冒号。如下图所示,设置tab键占4个空格:

vi除了读取主目录中的" .exrc "文件,还可以读取当前目录中的" .exrc "文件,这样就可以在不同的目录下设置不同的选项。但是在vi读取当前目录中的" .exrc "文件之前,首先需要在你的主目录中的 " .exrc "文件中设置exrc选项,即set exrc。

还可以将选项设置保存到" .exrc "以外的文件,并用 " :so "命令读入即可(so为source的缩写)。

一些有用的选项:vi编辑器中可以设置的选项非常多,其中很多是给vi内部使用的,通常不需要修改。这里介绍几个有用的选项:

(1)选项wrapmargin用于指定行结尾到右边界的距离,这样当输入的一行超过该限制时,便可以自动换行(只会在空白处换行)。但实际测试时,感觉wrapmargin选项并不是很好用。如果想设置一行的宽度,还可以使用textwidth选项;

(2)另外有三个选项可以控制vi搜索时的动作,例如搜索时是否忽略大小写,是否回到文件开头继续搜索,模式匹配时是否辨识通配符,这三个选项的默认值分别为noignorecase,wrapscan,magic;

(3)编程者可能感兴趣的选项: autoindent(自动缩进),showmatch(括号的匹配),tabstop(tab键占几个空格), number(显示行号),list(将tab键打印为^I,行结尾标记为$等);

(4)autowrite选项:当设置该选项时,如果下达" :n "命令以切换到下一个文件,或者使用" :! "来执行shell命令时,vi都会自动将更改过的缓冲区内容写入磁盘。

执行UNIX命令:

使用vi时,可以显示或者读入任何UNIX命令所产生的结果。感叹号会告诉ex创建一个shell,并将后续的文本视为UNIX命令,即" :!command "。如果想要执行一系列命令,而中途不想回到vi,则可以使用" :!sh "来创建一个shell,然后通过CTRL+D来结束shell并回到vi。

" :read "命令可以与UNIX命令结合使用,把UNIX命令的执行结果读入到文件中。在" :read "命令前面加上行地址,便可以在指定行的下一行插入命令的执行结果,否则默认是插入到当前行的下一行。如下图所示,读入当前的路径并插入到文件中:

通过命令过滤文本:

文本块也可以作为UNIX命令的标准输入,这个命令的输出则替换了缓冲区中原来的文本。因此可以在ex或vi中通过命令来过滤文本。ex是通过行地址来指定文本块,而vi则是通过文本对象(移动命令)来指定文本块。

用ex过滤文本:如下图所示,对文件的前5行进行排序:

用vi过滤文本:用vi过滤文本的命令形式为 " !textobject command "。因此如果当前光标处于文件的第一行,可以输入" !4j sort "来对文件的前5行排序。这里需要注意,当输入感叹号时,vi编辑器并不显示任何内容,当输入"4j"之后,vi编辑器则显示如下内容:

接着再输入sort命令即可。从中可以发现,用vi过滤文本其实还是通过ex来过滤文本(vi编辑器使用的底层编辑器就是ex行编辑器)。除了使用该命令,还可以使用" !5!sort ",其中第二个感叹号代表当前行的意思,而前面的数字代表重复的意思。

本章vi命令总结:

" :set option "," :set nooption "," :set all "," :set option? "," :set ",wrapmargin选项,textwidth选项,ignorecase选项,wrapscan选项,magic选项,autoindent选项,showmatch选项,tabstop选项,number选项,list选项,autowrite选项,"
:!command "," :r !command "," :linenum, linenum  !command ", "  !textobject command。 "

时间: 2024-10-10 17:40:51

学习vi和vim编辑器(10):高级编辑方法(1)的相关文章

学习vi和vim编辑器(15):vim对vi的主要改进

vim对vi做了大量改进,本章将讨论在vim中添加的主要功能:包括内置帮助功能.启动与初始化选项.新的移动命令.扩展的正则表达式.扩展的撤销.自定义可执行文件等. 内置帮助功能: vim的说明文档超过10万行,几乎所有的说明都可以通过vim内置的帮助工具取得,使用它最简单的形式就是调用" :help "命令.使用内置的帮助功能需要了解vi的导航技巧,知道如何在标签间前进与后退.当光标处于某个标签上时,按下" CTRL+] "前往该标签,按下" CTRL+T

学习vi和vim编辑器(9):全局替换(2)

上一篇文章已经学习了如何通过vi编辑器中" :s "命令进行全局替换,而且可以在替换命令中使用正则表达式以进行强大的模式匹配.这一篇文章将学习模式匹配的更多范例,以进一步熟悉正则表达式. 模式匹配的范例: (1)匹配一个完整的单词:如下图所示,如果需要将文本里所有的child单词替换成为children,可能最先想到的就是下图所示的替换命令: 但是这个命令会把childrendish,Fabrichild这两个单词中的child都做替换,这不是我们想要的.替换的关键就是child要是一

学习vi和vim编辑器(16):vim的多窗口功能(1)

vim默认是在一个窗口中编辑所有文件,在文件间移动或者移动到文件的不同部分时只显示一个缓冲区.但vim也提供了多窗口编辑功能,可以简化复合的编辑任务.这篇文章将学习如何在一个运行的vim进程里使用多窗口,包括多窗口编辑工作的初始化与启动,在窗口间移动光标,在显示区中移动窗口等. 启动多窗口编辑: 可以在打开vim时启动多窗口编辑,也可以在编辑会话中分割窗口. 从命令行(shell)启动多窗口: 默认情况下,vim为一个会话只打开一个窗口,即使打开时已经指定多个文件.如果想从命令行中打开多个窗口,

学习vi和vim编辑器(11):高级编辑方法(2)

本章学习在vi编辑器中如何保存命令. 保存命令: vi和ex中提供了许多方法来保存一长串命令序列,这样当调用已保存的序列时,只需要输入几个字符即可. 单词缩写: 可以定义缩写,让vi在处于插入模式时替你自动将输入展开成原文.定义缩写的命令为:"  ab abbr phrase ",其中abbr就是给phrase指定的缩写.注意,在插入模式中,只有将缩写当成单个单词输入时,缩写才会被展开,单词内的abbr不会被展开.如下图所示,将"vi"定义为"visual

学习vi和vim编辑器(13):vi同类品的功能总览

本章将学习vi同类品提供的相关功能. 它们都是我兄弟: 有许多可以自由取得的vi编辑器同类品.<vi和vim编辑器>重点介绍了vim编辑器,也简要地介绍了另外三种常用的同类品:nvi,elvis,vile.这些同类品都提供了vi之外的许多扩展功能,尽管方式可能不同,但这些同类品通常会提供相同的扩展功能.本篇文章将总体介绍这些同类品提供的扩展功能. 多窗口编辑:可以将屏幕分割成多个"窗口",从而在每个窗口编辑不同的文件,或者观察同一文件的不同部分.这使得同时在多个文件中工作更

学习vi和vim编辑器(8):全局替换(1)

本章学习vi编辑器中的全局替换命令.通过全局替换命令,可以自动替换文件中所有出现过的某个单词.全局替换一般会用到两个ex命令:":g"(global),":s"(substitute). 替换命令: 替换命令的语法如下: " :s/old/new/ ",该命令会将当前这一行中第一个出现的old模式替换为new.其中斜线用来分隔命令的各部分(如果斜线位于该命令的最后一个字符,则该斜线可以省略). " :s/old/new/g "

学习vi和vim编辑器(12):高级编辑方法(3)

本章主要学习vi编辑器中的@功能,ex脚本以及ctags工具的使用. @功能: 命名缓冲区提供了另一种方法来创建"宏",即可以将复杂的命令序列保存到某个命名缓冲区中,再通过@命令执行缓冲区中的内容.举个例子,首先在插入模式中输入如下一行: 然后将该行内容删除并将其保存到" a "这个命名缓冲区中,之后便可以将光标移动到某个单词的首部,执行" @a ",就可以将缓冲区中的内容作为命令进行执行.在这个例子中就是将该单词修改为function,同时仍然

学习vi和vim编辑器(17):vim的多窗口功能(2)

接着上一篇文章,继续学习vim编辑器的多窗口功能.本篇文章主要学习调整窗口尺寸.缓冲区及其与窗口的交互.分页编辑.关闭与离开窗口. 调整窗口尺寸: 在gvim中,可以使用鼠标调整窗口尺寸,只需要用鼠标点击及拖动窗口边界即可.如果是在vim中,只要开启mouse选型(" :set mouse=a "),也能够用鼠标调整窗口尺寸. 窗口尺寸调整命令: ^W=:试图调整所有窗口至相同尺寸(此命令受当前的winwidth和winheight选项值的影响).如果可用的屏幕块不能平均划分,vim也

学习vi和vim编辑器(1):vi文本编辑器

UNIX系统中有很多编辑器,可以分为两种类型:行编辑器和全屏编辑器.行编辑器每次只能在屏幕中显示文件的一行,如ed和ex编辑器,全屏编辑器可以在屏幕上显示文件的一部分. vi(读为vee-eye)编辑器是UNIX_Like操作系统的标准文本编辑器.vi是 visual editor的缩写,vi编辑器属于全屏编辑器,可以在阅读文件时当场就修改,并且立刻看到修改后的结果.对于新手而言,vi编辑器难度还是非常大的,但是一旦熟悉了vi编辑器,可能就再也不想重新使用其他"简单"的编辑器了.学习v