vi编辑器常用命令,编辑器vim的三种模式

  vi编辑器常用命令,编辑器vim的三种模式

  Vim最大的优势是它的灵活性。其灵活性的一个重要原因是自动指挥。所谓自动命令,就是一个命令,但不同的是,它可以在某些事件发生时自动执行。

  比如我们可以通过Vim这样的自动命令来使用Vim编辑压缩文件,因为我们可以定义一个自动命令,在读取文件时解压文件,在写入文件时压缩文件。

  当我们处理文件时,我们有时希望在保存文件时在文件末尾插入当前日期,这可以通过使用Vim中的自动命令来实现。我们可以定义这样一个函数:

  :函数日期插入()

  :$read!“日期”在文件末尾插入一个日期。

  :结束功能

  当我们想保存文件时,我们可以调用这个函数:

  :调用DateInsert()

  然后我们可以保存并退出。

  我们还可以将这个函数绑定到一个键上:

  :map F12:call date insert()CR/:write CR

  这种方法更容易解决问题,因为我们只需要在想要保存文件时按F12。

  但是也许有时候我们忘记了这一步,使用了正常的保存命令,那么这个功能就失去了意义。我们希望插入日期的命令能够自动执行,这就是自动命令的意义。

  以下命令可以满足我们的要求:

  :autocmd file write pre *:calldate insert()CR

  该命令将使所有文件在保存前调用插入日期的功能。我们不需要输入:每次都写保存文件。也就是说,我们定义了这个命令之后,当我们输入一次:write命令,vim会自动检查所有未保存的文件并执行我们定义的这个命令,然后执行save命令。

  :autocmd命令的一般格式如下:

  :autocmd组事件file _ patter嵌套命令

  在这种格式中,组名是一个可选项目,用于管理和调用命令。参数事件是一个事件列表,指示触发命令的事件,嵌套标签可以允许嵌套自动命令,并最终执行命令。

  命令:augroup允许我们定义一组自动命令。该组名最好是与我们要定义的自动命令集相关联的名称,如下例所示:

  :通用程序组

  :autocmd FileReadPost *。c:设置cindent

  :autocmd FileReadPost *。cpp:设置事件

  :普通组结束

  这里,因为这些自动命令在:augroup的范围内,所以它们被放在组cprogram中。这组自动命令是在读取C和Cpp之后执行的。如果我们想给这个组添加关于头文件的自动命令,我们可以使用:augroup命令,或者在我们的定义中包含这个组名。

  如果我们正在编辑的文件名是sam.cx,我们想把它当作一个C程序文件,那么我们可以告诉Vim editor把它和*匹配起来。c文件,在文件被读入后。我们使用的命令如下:

  :doautocmd组事件文件名

  当执行这个命令时,Vim会假设当前文件的名称是file_name,但实际上这不是它真正的文件名。如果我们在这个命令中没有指定组,那么所有的组都将被使用。而且,我们必须指定事件,Vim会认为这个事件已经发生了。类似于命令:doautocmd,它是命令:doautoall,只不过后者是针对每个缓冲区(

  :doautoall组事件文件名

  我们可以使用以下命令来触发命令:

  BufNewFile在编辑新文件时引发一个命令。

  BufReadPre BufReadPost在读取之前或之后引发命令。

  BufRead BufReadPost的另一种说法

  fileprebuf filepost在缓冲区名称被:file命令更改之前或之后引发。

  文件读取前文件读取后

  使用:read命令读取文件之前或之后。读取文件后,文件的开头和结尾用[和]标记。

  FilterReadPre FilterReadPost是在使用filter命令读取文件之前或之后。

  当设置了FileType时,FileType有效。

  设置语法时,语法有效

  StdinReadPre StdReadPost由标准输入设备读入或输出。

  将整个缓冲区写入文件之前或之后

  BufWrite BufWritePre的另一种说法

  写前置文件写后置文件在文件之前或之后写部分缓冲区内容。

  FileAppendPre FileAppendPost在filter命令之前或之后输入一个文件。

  FileChangedShell

  当Vim运行Shell命令并且文件的修改时间已经更改时,会引发此事件。

  焦点获得焦点丢失

  当vim编辑器获得或失去光标时,会引发此事件。这意味着Vim运行图形界面,Vim成为当前窗口或者其他什么成为当前窗口。

  光标控制

  当用户停止输入的时间超过updatetime指定的时间时引发。

  进入或离开缓冲区时,BufEnter BufLeave被引发。

  BufUnload在缓冲区未加载之前引发。

  BufCreate BufDelete在生成缓冲区之后或删除缓冲区之前引发。

  GuiEnter启动GUI时会引发GUI。

  Vimentvim已启动,初始化文件尚未读入。

  当VimLeave退出Vim编辑器并且。viminfo没有被重写。

  FileEncoding fileencoding在设置后有效。

  当TermChanged术语选项更改时引发。

  用户

  不是真实的事件,而是命令doautocmd使用的事件。

  保存文件时,只有下列事件成对发生:

  BufWritePre BufWritePost

  FilterWritePre FilterWritePost

  文件追加前文件追加后

  文件写入前文件写入后

  读取文件时,只要设置了下列事件之一,就会引发该问题:

  BufNewFile

  BufReadPre BufReadPost

  FilterReadPre FilterReadPost

  文件读取前文件读取后

  文件名与UNIX标准系统相匹配。以下是一些特殊的字符匹配情况:

  *匹配任意长度的任意字符。

  ?匹配单个字符

  分隔交替类型。

  /?人物?

  /,字符,

  /字符

  把这个字符想成要找的类型字符,比如:a/可以匹配,aa,aaa等。

  一般来说,一个命令的执行结果不会触发另一个事件。比如Syntax的执行结果不会触发FileReadPre事件。但是,如果我们将嵌套关键字添加到automatic命令,例如下面的命令,就会触发该错误:

  :autocmd FileChangedShell *。c嵌套e!

  我们可以使用命令:autocmd列出所有自动命令。

  如果我们想得到所有这些命令的子集,我们可以使用以下命令:

  :autocmd组事件模式

  在该命令中,如果我们指定group,将列出与该组匹配的所有命令。事件可以在所有事件之前定义,模式是指与类型匹配的文件选项。只会列出那些与命令匹配的命令。

  我们可以创建自己的自动命令,当然,我们也可以删除那些我们不再需要的自动命令。比如命令:autocmd!您可以删除所有自动命令。

  我们也可以使用下面的命令来删除指定的组命令:

  :autocmd!组

  当然,在这个命令中,我们还可以为这个组指定事件或类型。

  :autocmd!群体事件模式

  事件可以用*替换所有事件。

  我们可以使用命令:autocmd!要删除那些现有的自动命令,我们还可以同时在一个命令中创建一个新的我们自己的自动命令。该语法的格式如下:

  :autocmd!组事件模式嵌套命令

  该命令等效于以下两个命令:

  :autocmd!群体事件模式

  :autocmd组事件模式嵌套命令

  有时我们不想触发命令。在这种情况下,我们可以设置eventignore选项来指定要忽略的事件。例如,以下命令忽略进入和离开窗口的事件:

  :set eventignore=WinEnter,WinLeave

  如果您想忽略所有事件,可以使用以下命令:

  :设置eventignore=all

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: