`
mylxiaoyi
  • 浏览: 327594 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

vi编辑器的学习使用(十三)

阅读更多
Vim最大的一个优点就是他的灵活性.使得他具有如此灵活性的一个重要原因就是自动命令.所谓的自动命令就是一条命令,所不同的只是他可以在某些事件发生时自动执行.
例如通过Vim的这样自动命令,我们可以使用Vim来编辑压缩文件,这是因为我们可以定义一个自动命令在我们读取文件时解压缩,在我们写入文件时进行压缩.
我们在处理文件时有时希望文件在保存时在文件的结尾处插入当前的日期,而这在Vim当中我们可以使用自动命令来完成.我们可以定义这样的一个函数:
:function DateInsert()
:    $read !date    "在文件的结尾处插入日期
:endfunction
当我们要保存文件时可以调用这个函数:
:call DateInsert()
然后我们就可以保存退出了.
我们还可以将这个功能绑定在一个按键上:
:map <F12>:call DateInsert()<CR>\|:write<CR>
这种方法使用问题的解决更简单,因为我们只需在要保存文件时按一下F12键就可以了.
但是也许有时我们会忘记这样的步骤,而使用正常的保存命令,那么这时这个函数也就失去了意义.我们希望这个插入日期的命令可以自动被执行,这也正是自动命令的意义所在.
下面的命令就可以来满足我们的要求了:
:autocmd FileWritePre * :callDateInsert()<CR>
这个命令会使得所有的文件在保存之前调用这个插入日期的函数.我们并不需要每一次都要输入:write来保存文件,也就是说当我们定义了这个命令以后,当我们输入一次:write命令,vim就会自动检查所有未保存的文件并执行我们定义的这个命令,然后执行保存命令.
:autocmd命令的一般格式如下:
:autocmd group events file_patter nested command
在这个格式中组名(group)是一个可选项,他被用于管理和调用命令.参数事件(events)是一个事件列表,指明引发命令的事件,而嵌套标记(nested)可以允许嵌套自动命令,最后是所要执行的命令.
命令:augroup可以使得我们定义一组自动命令.这个组名最好应是一个和我们要定义的一组自动命令相关联的名字,如下面的例子:
:augroup cprograms
:    autocmd FileReadPost *.c :set cindent
:    autocmd FileReadPost *.cpp :set cindent
:augroup END
在这里因为这些自动命令是在:augroup的作用域之内的,所以他们被放在cprogram这个组内.这组自动命令是在读取C和Cpp之后执行的.如果我们想在这个组中添加关于头文件的自动命令,我们可以使用:augroup命令,或者是在我们的定义中包含这个组名.
如果我们正在编辑的文件名为sam.cx,而我们想将他当作C程序文件来对处理.这时我们可以通过命令来告诉Vim编辑器在文件读入以后将他与*.c文件相匹配.我们所用的命令如下:
:doautocmd group event file_name
在这个命令执行的时候,Vim是将假定当前文件的名字为file_name,而实际上这并不是他真正的文件名.如果在这个命令中我们并没有指明组(group),那么所有的组都会被用到.而且我们必须指明事件,并且Vim会认为这个事件已经发生.与命令:doautocmd相类似的是命令:doautoall,所不同的只是后者是针对每一个缓冲区(buffer).这个命令的格式为:
:doautoall group event file_name
我们可以使用下列的命令来引发命令:
BufNewFile            当编辑一个新文件时引发命令
BufReadPre    BufReadPost    在读入之前或是读入之后引发命令
        BufRead        BufReadPost的另一种说法
BufFilePre    BufFilePost    在通过:file命令更改缓冲区名字之前或是之后引发
FileReadPre    FileReadPost
在用:read命令读入文件之前或之后.在文件读入之后,在文件的开头和结尾处有由[和]来标记
FilterReadPre    FilterReadPost    在用过滤命令(filter)读入文件之前或之后
FileType            当FileType设置时有效
Syntax                当Syntax设置时有效
StdinReadPre    StdReadPost    由标准输入设备读入或是输出
BufWritePre    BufWritePost    在将整个缓冲区写入文件之前或是之后
BufWrite            BufWritePre的另一种说法
FileWritePre    FileWritePost    将部分缓冲区内容写入文件之前或是之后
FileAppendPre    FileAppendPost    将一个文件由过滤命令输入之前或之后
FileChangedShell
这个事件是在Vim运行Shell命令而文件的修改时间已经改变时引发
FocusGained    FocusLost
这个事件是在Vim编辑器得到或是失运输入光标时引发.这意味着vim运行图形界面,并且是Vim成为当前窗口或是其他的成为当前窗口
CursorHold
用户停止输入的时间长于由updatetime所指定的时间时引发
BufEnter    BufLeave    当进入或离开缓冲区时引发
BufUnload            在缓冲区未载入之前引发
BufCreate    BufDelete    在缓冲区产生以后或是在缓冲区删除以前引发
GuiEnter            启动GUI时引发
VimEnter            Vim启动而初始化文件还没有读入进引发
VimLeave            退出Vim编辑器而.viminfo还没有改写时引发
FileEncoding            fileencoding已经被设置时有效
TermChanged            term选项被更改时引发
User
并不是一个真正的事件,而是命令:doautocmd一起使用的一个事件
当存文件时,只有下列事件成对出现时才引发:
BufWritePre    BufWritePost
FilterWritePre    FilterWritePost
FileAppendPre    FileAppendPost
FileWritePre    FileWritePost
当读文件进,只要下列事件中的一个被设置则会引发:
BufNewFile
BufReadPre    BufReadPost
FilterReadPre    FilterReadPost
FileReadPre    FileReadPost
文件名类型与UNIX标准系统相匹配.下面列出是一些特殊字符匹配的情况:
*    匹配任意长度的任意字符
?    匹配单个字符
'    分隔交替的类型
\?    字符?
\,    字符,
\character
将这个字符看作是一个要查找的类型字符,例如:a\+可以匹配,aa,aaa等等
一般情况下一个命令的执行结果并不会引发另一个事件.例如Syntax的执行结果并不会引发FileReadPre事件.但是如果我们在自动命令中加入nested关键字就可以来引发了,例如下面的命令:
:autocmd FileChangedShell *.c nested e!
我们可以使用命令:autocmd列出所有的自动命令.
如果我们想要得到所有这些命令中的一个子集命令,我们可以使用如下的命令:
:autocmd group event pattern
在这个命令中如果我们指定了group,那么就会所有与group相匹配的命令.event可以是以前定义的或是所有的事件,pattern指了与类型相匹配的文件选项.只有那些与命令相匹配的命令才会被列出来.
我们可以建立我们自已的自动命令,当然了我们也可以移除那些我们不再需要的自动命令.例如命令:autocmd!就可以移除所有的自动命令.
我们也可以用下面的命令来移除指定的组命令:
:autocmd! group
在这个命令中我们当然也可以为这个组指定事件或是类型
:autocmd! group event pattern
event可以用*代替所有的事件
我们可以用命令:autocmd!来移除那些已经存在的自动命令,我们还可以同时在一个命令中再新建一个我们自己的自动命令.这个语法的格式如下:
:autocmd! group event pattern nested command
这个命令等价于下面的两个命令:
:autocmd! group event pattern
:autocmd group event pattern nested command
有时我们并不想引发某个命令,在这样的情况下我们可以设置eventignore选项来指定那些要忽略的事件.例如下面的命令将进入窗口和离开窗口的事件忽略掉:
:set eventignore=WinEnter,WinLeave
如果要忽略所有的事件,可以用下面的命令:
:set eventignore=all

分享到:
评论

相关推荐

    linux实验报告vi编辑器的使用.pdf

    学习使用Vi编辑器建立、编辑、显示及加工处理文本,并了解Vi编辑器在Linux系统中的重要性。 二、实验内容 1. 进入和退出Vi 2. 利用文本插入方式建立一个文件 3. 在新建的文本文件上移动光标位置 4. 对文件执行删除...

    学习使用vi编辑器

    "学习使用 vi 编辑器" 在 Linux 操作系统中,vi 编辑器是一个功能强大且广泛使用的文本编辑器。学习使用 vi 编辑器可以提高用户的工作效率和编程能力。下面是学习使用 vi 编辑器的一些知识点: 实验目的 * 练习 ...

    vi编辑器的使用

    vi编辑器分为三种主要模式:Command(命令)模式、Insert(插入)模式和Visual(可视)模式。 1. Command模式是vi的默认模式,用于输入各种编辑命令。在该模式下,你可以执行诸如移动光标、查找替换、保存退出等...

    vi编辑器的使用(一)笔记

    ### vi编辑器的使用(一)笔记 #### 一、vi编辑器的三种模式及其切换命令 vi编辑器是Linux中最基本也是最强大的文本编辑工具之一,在系统管理和服务器配置方面有着不可替代的作用。掌握vi编辑器的基本操作对于任何...

    学习vi和vim编辑器_第7版_中文+英文_PDF

    《学习vi和Vim编辑器(中文版第7版)》将说明使用这两种程序编辑文档的基础技巧,并讨论高级工具,例如交互式宏与扩展编辑器的脚本——我们的内容编写成容易遵循步骤操作的风格,成就本书的经典地位。读者将学到: ·...

    Linux下vi编辑器的使用

    vi编辑器的特点在于它不包含图形界面菜单,而是通过命令模式进行操作,分为命令模式、插入模式和末行模式三个主要工作状态。 **1. vi编辑器的三种模式** - **命令模式(Command Mode)**:在此模式下,你可以移动...

    《Vi 编辑器》pdf版

    通过这本书,读者可以深入学习vi编辑器,掌握文本编辑的高效技巧,无论是进行日志分析、系统配置还是代码编写,vi编辑器都能提供强大而灵活的文本处理能力。而对于Linux公社(***)提供的信息,尽管它在书中被重复...

    Vi编辑器的设置

    对于初学者来说,理解并熟练使用`.vimrc`文件是一个重要的里程碑,它标志着你对Vi编辑器的使用进入了一个新的层次。不断探索和优化你的配置,你会发现Vi不仅是一个工具,更是一种高效的工作方式。

    linux操作系统实验vi编辑器的使用.pdf

    ### Linux操作系统实验vi编辑器的使用 #### 实验目的 本次实验旨在使学习者能够熟练地运用Linux系统中的vi编辑器进行文本编辑工作。通过实际操作掌握以下技能: 1. **掌握Linux系统的vi编辑器的基本操作**:了解vi...

    unix vi 编辑器完全使用手册

    本文是针对初学Unix Vi编辑器的网友的,而文后所付的详尽的命令表也可作为已经熟练使用vi的网友的参考之用, 因此你最好下载本文或打印本文然后对照实践学习。 编辑器是使用计算机的重要工具之一,在各种操作系统...

    linux下vi编辑器命令大全.docx

    但是,用户需要花一些时间来学习和熟悉 vi 编辑器的命令和模式,以便更好地使用 vi 编辑器。 知识点: 1. vi 编辑器是一种功能强大的屏幕编辑器,提供了一个视窗设备,通过它可以编辑文件。 2. vi 编辑器有三个...

    VI编辑器的使用

    #### 三、VI编辑器的学习资源 - **内置教程**:通过命令`vimtutor`启动VI编辑器的学习教程。 - **在线资源**:互联网上有大量的VI编辑器教程和指南可供参考。 - **书籍**:许多计算机编程相关的书籍都会包含VI编辑...

    windows下vi编辑器

    总的来说,"WinVi32.exe"为Windows用户提供了在熟悉的环境中使用VI编辑器的可能性,使得跨平台开发变得更加便捷。对于习惯于VI编辑器的开发者来说,无论是在Linux还是Windows系统下,都能保持一致的工作流程,提高...

Global site tag (gtag.js) - Google Analytics