编辑文本
使用程序处理数据:fmt
使用!和!!(感叹号)命令将把编辑缓冲区中的行发送给另一个程序。该程序的输出将替换原始行。
举例,可以用排好序的行替换原来的行。其工作方式如下:
将光标移到到希望处理的开始位置,键入希望处理的行数,后面跟!!(两个感叹号)以及程序名称,后跟<Return>键。例如,假设有4行文本,希望将其排序,将光标移到到第一行,输入:
5!!sort
一旦键入第二个!,vi就会将光标移到到命令行,并显示“:.,.+3!”(.+3表示当前行之后的三行)。然后可以直接在命令行上键入任意的shell命令。在按<Return>键之前使用<Backspace>(或<Delete>)键进行纠正。
!(单感叹号)命令的工作方式与此相似,只是!命令在指定输入行的范围内更具有灵活性。
输入!,后面跟一个光标移到命令,再后跟程序的名称。从当前行到光标移到命令指向的位置之间的所有行都将被发送给程序进行处理。
有一种格式化整个编辑缓冲区的简易方法。通过键入gg或1G跳转至编辑缓冲区的第一行,然后输入:
!Gfmt
同理,!Gsort是将整个编辑缓冲区排序。
概况:
n!!program 在n个行上执行程序program
!moveprogram 从当前行至move行执行程序program
将数据写入文件
当使用ZZ命令停止vi时,vi会自动地将数据保存起来。但是,vi中还有几条命令可以用来随时将数据写入到文件中。这些命令非常重要,因为它们允许在不退出vi的情况下,不时地备份数据。这些命令还允许将数据保存到不同的文件中:
:w 将数据写入原始文件
:w file 将数据写入到一个新文件中
:w! file 覆盖一个已有的文件
:w>>file 将数据追加到指定的文件中
:w file将数据写入到一个新文件中,如果file为已存在的文件,那么vi将显示一个警告信息,如:
E13: 文件已存在 (请加 ! 强制执行)
因此,需使用:w! file对已存在文件进行覆盖。
如果只希望保持编辑缓冲区中的特定行,则可以采用通常的方法指定行号。例如,为了将前10行写入到文件save中,则:
:10w! save
为了将第10行至第20行追加到文件save中,可以使用:
:10,20w >> save
退出vi的方法,除ZZ和:q!外,还有第三种:
只有使用了:w命令保存了数据,就可以使用:q退出vi。为了方便起见,可以组合使用:
:wq
因此,组合命令:wq和ZZ拥有相同的效果。
切换到一个新文件
当启动vi时,可以指定希望编辑的文件的名称。如果在编辑一个文件的时候,决定编辑另一个文件,这时不必退出并重启vi程序。为了切换到一个新文件,可以使用:e命令,后面跟新文件的名称。
当开始编辑一个新文件的时候,编辑缓冲区中的原有内容将会丢失,所以要确保首先使用:w命令将数据保存。当使用:e命令时,vi将检查数据是否已经保存。如果还有未保存的数据,那么vi将不允许切换到新文件。如果希望忽略这种保护,可以使用:e!命令。
当编辑一个文件时,由于编辑过程中犯了很多错误,因此决定重新打开这个文件。为了忽略编辑缓冲区中数据的改变,重新打开原始文件,可以输入:
:e!
就可以对原始文件的副本进行编辑了——以前的修改都已被丢弃。
概括:
:e file 编辑指定的文件
:e! 重新编辑当前文件,忽略自动检查
:e! file 编辑指定的文件,忽略自动检查