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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。