Questions tagged «autocmd»

autocmd是在某些事件上自动执行的命令。关于创建或修改“ autocmd”定义的问题适用于此标记。

5
如何将文件保存在尚不存在的目录中?
假设我启动Vim编辑尚未创建的目录中的新文件: vim nonExisitingDirectory/newFile.txt Vim会很高兴地向我显示一个空缓冲区,我可以开始编写新文件了。但是,当我想将文件写入磁盘时,出现此错误: E212: Can't Open file for writing. 我认为这是因为该目录尚不存在。有没有办法强迫Vim为我创建目录?
35 save  autocmd 

3
为什么要使用augroup?
我了解自动命令的工作原理以及如何使用它们,但是我有点确定augroup的用途。我读了:help augroup *:aug* *:augroup* :aug[roup] {name} Define the autocmd group name for the following ":autocmd" commands. The name "end" or "END" selects the default group. To avoid confusion, the name should be different from existing {event} names, as this most likely will not do what you intended. 这并不能真正解释它们为什么有用,或者为什么我只想在彼此之间定义一堆自动命令,而不是一个自动命令组名。 例如,如果foo与和自动命令bar相关,我为什么要这样做 augroup …
31 autocmd 

2
在autocmd中是否可以进行AND事件?
我想autocmd 在两个事件上触发,但通常不会以某种方式触发它,即,如果其中一个事件发生,则触发autocmd。如果两个事件都发生,我想触发它​​。 例如: 常用的方法 autocmd BufWrite,BufRead *.c *.py *.h :call StripTrailingWhitespaces() 此代码将在BufWrite或BufRead上调用StripTrailingWhiteSpaces() 我想做类似的事情: autocmd Filetype c,cpp,python AND BufWrite :call StripTrailingWhiteSpaces() 换句话说,autcmd当文件类型为c,cpp,python中的一种时触发,并在此缓冲区上进行写操作。 任何帮助表示赞赏。
21 autocmd 

2
WinEnter,BufEnter,BufRead,语法,FileType事件的顺序是什么?
我已经通过了autocmd.txt帮助,但是关于此的信息是分散的,并不总是存在(例如,带有BufRead)。 懂得这一点的人能否列出这些事件的顺序-也许用括号标出条件,例如 WinEnter BufEnter (if this window is for a different buffer than the current) 等等,以便于参考? 注意(摘自下面我的评论):我不是在谈论对它们的个别解释,这没关系,而是在讨论它们如何相互影响以及发生的顺序。例如,WinEnter说“ Vim在WinEnter自动命令之后执行BufEnter自动命令”,TabEnter说“在触发WinEnter之后并且在触发BufEnter事件之前”,它们像这样分散在许多地方。有时BufRead根本没有提及它(例如,没有提及它是在BufEnter之后还是之前运行-也许专家可以从那里的其他信息中推断出它,但是我不能。 所以,我的意图是为这些事件的顺序创建一个简单的参考,非专家可以快速查找这些事件的顺序,autocmd 事件规范。

2
根据文件大小和类型禁用语法高亮显示
我经常需要用vim编辑各种XML文件,这些文件的大小千差万别-从包含几行斜线的配置文件到最大2GB的生产数据文件。在处理大文件时,启用语法高亮当然是一个非常糟糕的主意,因此,如果文件大于阈值,我想禁用它。 我不能autocommand直接使用它来禁用语法突出显示,因为从外壳启动vim时,显然在启用语法之前执行了该命令: " this autocmd has no effect except for the echo: autocmd Filetype xml if getfsize(@%) > 1000000 | echom '!' | syntax off | endif 我找到了一种解决方法,可以全局禁用语法高亮显示,然后针对除xml以外的所有其他文件类型再次将其打开,如果文件的大小不超过阈值,则针对xml文件类型将其打开: syntax off autocmd Filetype * syntax off autocmd Filetype * if &ft != 'xml' | syntax enable | endif autocmd Filetype xml …

1
对于ftplugin中的autocmd,我应该使用模式匹配还是<buffer>?
我有一个用于TeX和Markdown文件的autocmd以自动保存文件。没什么异常: autocmd CursorHold *.tex,*.md w 但是,随着这些文件的自定义设置的增加,我将它们拆分为ftplugin/tex.vim和ftplugin/markdown.vim: " ftplugin/tex.vim autocmd CursorHold *.tex w " ftplugin/markdown.vim autocmd CursorHold *.md w 现在,这些文件仅作为适当文件的来源,因此模式匹配是多余的。显然,autocmds可以是局部缓冲区的。来自:h autocmd-buffer-local: Buffer-local autocommands are attached to a specific buffer. They are useful if the buffer does not have a name and when the name does not match a specific pattern. But …
14 autocmd  filetype 

1
是否可以在Vim中轻松使用.odt,.doc,.docx,.rtf和其他非纯文本格式?
偶尔有人送我一个.odt,.doc和.docx文件; 在OpenOffice中打开它们总是很痛苦,因为OpenOffice。 现在,我使用各种命令行工具(例如odt2txt)将这些文件转换为纯文本,将纯文本保存到临时文件,然后在Vim中查看(或编辑)它。 可以简化吗?也许与自动组有关?还是有更好的方法?我只想做: $ vim file.odt Vim为我照顾了转换吗? 更好的(加分点)是,如果我还能够保存文件(到file.txt),但是在我执行写操作之前不会创建该文件...

3
如何自动小写单词的第二个字母?
当我不得不输入大量文本shift时,在写句子的第一个字母时,我常常会按住手指,这通常会给出: [...]end of sentence. NEw sentence[...] 这里E的NEw应该是小写。然后,我试图创建一个函数来检测我键入的句子的第一个单词的第二个字母是否为大写字母,而将其为小写字母。重要的部分是,当我键入句子的结尾时,更正应自动完成。 到目前为止,我已经尝试过使用autocommand事件,InsertCharPre然后才意识到该事件触发的功能无法修改文本。 有什么好的解决方案? 请注意,到目前为止,我不需要关注诸如首字母缩略词之类的边缘情况,首字母缩略词应使用大写字母或类似的东西。 编辑我做了这个,这不是一个完美的解决方法: autocmd CursorMovedI * call RemoveUnwantedUpper() function! RemoveUnwantedUpper() " Get the current sentence " Based on http://stackoverflow.com/a/23315227/4194289 let l:save_clipboard = &amp;clipboard set clipboard= " Avoid clobbering the selection and clipboard registers. let l:save_reg = getreg('"') let l:save_regmode = getregtype('"') normal! …

2
禁止vim自动命令的输出
我在vimrc中定义了一个自动命令: au BufWritePost * !./make.sh 该脚本make.sh将.tex文件编译3次,我不希望显示输出。 有没有办法抑制输出? 我试图silent在au命令前添加一行,但是没有用。我也尝试过这种方法,但没有成功。
13 autocmd 

3
如何即时启用/禁用augroup?
我augroup在自己的文件.vimrc夹中创建了一个,autocmd并且需要autocommand即时启用/禁用这些控件。 这个想法是创建一个映射(F4比如说),该映射将在一次按下时启用这些自动命令,而在再次按下时禁用这些自动命令,而无需提供文件或重新加载.vimrc。 我怎样才能做到这一点?


1
在没有文件,不存在的文件或空白文件的情况下启动Vim时如何运行autocmd(但从现有文件开始时则不能)?
当我启动Vim时,我想在以下情况下运行一个autocmd: 没有指定文件名。 文件为新文件时。 文件存在但完全空白时。 在以上三种情况下,我都想运行一个autocmd;具体而言,我想自动启动插入模式为只在上述情况(而不是当我打开一个已经存在和不为空的文件)。 更新: 我试过将以下内容放入我的_vimrc,但是运气不好(另外,我不确定在vim中是否有一个函数在打开文件之前先计算文件中字符的数量(看是否为零): if @% == "" || filereadable(@%) autocmd BufRead,BufNewFile * startinsert endif

1
如何阻止Vim编写文件而不会引发错误?
我正在尝试从此答案中改进代码,以在创建缺少的目录之前要求确认,这就是我写的内容: function! CreateDirectoryAskConfirmation(path) if !isdirectory(a:path) echohl Question echo "Create directory " . a:path . "?" echohl None let response = nr2char(getchar()) if response ==? "y" call mkdir(a:path, "p") endif endif endfunction autocmd BufWritePre * call CreateDirectoryAskConfirmation(expand("&lt;afile&gt;:p:h")) 有一件事我错过了:我不要按y在提示我想让Vim中止写,所以我没有得到错误E212: Can't open file for writing,我也不需要打另一个键,使该错误信息消失。有办法实现吗?
10 save  autocmd  error 

3
如何在新的vim文件中添加框架文本?
我使用Vim编写C ++,并且有很多#include&lt;&gt;语句,注释等,我必须在创建的每个新文件中包含这些语句,注释等。我已经添加 autocmd BufNewFile *.cpp r C:\(full file path of skeleton text file) 到我的vimrc,因为我听说这会创建一个缓冲区,其中包含我需要的文本。如何将该文本添加到新文件?有没有一种简单的方法可以从缓冲区执行此操作,或者有另一种简单的方法可以执行此操作?我也听说过一些有关模板插件的信息。有没有一种非常简单的方法可以为我做到这一点?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.