问题标签 [autocommand]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
61 浏览

vim - 为什么我的 `au bufadd` 会阻止 Vim 打开多个文件?

所以,几年来我的 vimrc 中有以下块:

但是,我刚刚意识到,这会阻止我在一个命令行命令中打开多个文件(我通常vim 中进行浏览,因此我花了这么长时间才注意到!):nvim -o lib/ocameel.ml bin/cli.ml打开两个cli.ml包含,的缓冲区并且没有lib/ocameel.ml根本不开门!

如果我注释掉最后一行,一切正常;我仍然可以手动调用:call ToggleExtraWhitespace(),而且一切都很好。

不过,我真的很想弄清楚为什么添加该自动命令会破坏 vim-entry。我的 BufAdd 搞砸了什么?D:

0 投票
1 回答
72 浏览

linux - 如何在 Vim 中保存时自动格式化 git mailmap 文件?

我将邮件映射文件用于一些 git 存储库。文件中的行可以是以下格式之一:

我想将行格式化为表格,列用 2 个空格分隔,例如

如何让 Vim 在保存时以这种方式重新格式化邮件映射文件(例如,如果新名称对于列大小来说太大)?我想像这样的自动命令是可能的:

但我不确定如何实现实际命令。

0 投票
0 回答
42 浏览

vim - 如何在某些文本标签上开始每次打开文件

我希望我的 vim(实际上是 neovim)总是跳转到我在文本中留下的标签(或者第一个,如果有多个标签)。所以,我已经设置了这个自动命令:

并希望它会奏效。不幸的是,BufRead这似乎还不够,因为当我现在打开文件时,它只是再次在顶部打开它。

所以,我替换BufReadBufEnter(在尝试之后BufReadPost,它也没有工作),现在 vim 真正跳转到标签,不幸的是这是一种渴望这样做的方式。当我使用拼写检查器或基本上任何时候我从任何地方返回该缓冲区时,它会跳转到标签(甚至可能替换文本)。那太多了。

但是,主要的一点是我不明白,为什么这BufRead首先不起作用。

0 投票
1 回答
41 浏览

vim - .vimrc 自动命令如果不是文件类型

我有一个主 .vimrc 来设置我的全局工作环境,包括 C++ 和 Python 文件类型的特殊设置。

在项目文件夹中,我有一个带有 C++ 项目特定设置的 .exrc,但这覆盖了我的 Python 主 .vimrc 设置。

如何创建仅在不是 python 文件时设置这些选项的自动命令?我不想将项目 C++ 设置包装在自动命令中,因为我们有多种源文件类型,这意味着 .vimrc 中有很多重复的代码,并且可能会丢失文件类型。

我真正想要的是这样的构造:

但只需这样做就足够了:

0 投票
1 回答
85 浏览

vim - vimscript - 自动捕捉窗口调整大小(是否使用自动命令)

所以,我试图编写一个自动命令,每次调整窗口大小时都会触发(而不是完全是 Vim 窗口,一个CTRL-W窗口)。

由于没有专门的事件,我尝试使用OptionSet不同的窗口大小选项,但这显然不适用于:resize命令和击键等。

我正在考虑捕获:resize命令本身,但似乎没有事件可以这样做(使用事件输入命令行似乎太昂贵了)。

有没有 vim-fu 大师可以给我指路?如果可以有一种通用的方法来捕捉窗口大小调整本身,那就太好了,但其他选项也可以。提前致谢!

0 投票
2 回答
102 浏览

vim - vimscript - 使用自动命令检查新窗口的 win 和 buf 类型的可靠方法

因此,我需要在进入新窗口时检查窗口类型和缓冲区,以便我可以根据上述内容的类型自动执行一些操作。

例如,当quickfix打开时,我需要知道它是它,与command窗口相同help,等等。换句话说 - 我需要知道打开的新窗口何时是一个常规窗口,其中有一个常规缓冲区。

我受伤的唯一方法是结合win_gettype()&buftype选择。

我尝试的第一件事是一个明显的WinEnter事件,它不能正常工作,因为我无法检查缓冲区的类型。

然后,我尝试BufEnter了 ,但没有参数就无法捕捉:split到,显然与BufWinEnter. 另外,quickfix第一次打开时不会捕捉到command

那么,来到这个问题- 是否有任何可靠的方法可以在打开新窗口时自动验证窗口和缓冲区的类型而不考虑它的打开方式?总而言之 - 有两个问题 - 1)如果窗口在:split没有参数的情况下打开,则根本无法捕获窗口,2)无法可靠地捕获类型(参见编辑 2)。

编辑 4

好吧,考虑到EDIT 3WinEnter ,可以正常工作并按预期工作。但这仍然是一个巨大的解决方法。如果有人有足够的解决方案,将留下问题。

编辑 3

好吧,我看不到如何在窗口或 buf 入口时从下面的EDIT 2中检查内容,但我想可以在之后再次检查它们。我想出了一个想法,要抓住terminal,再次TerminalOpen检查,并通过检查它来解决问题,嗯,。这些都是巨大的解决方法,但我还看不到另一种解决方法。不幸的是,问题仍然存在。commandCmdWinEnterquickfixfiletypeFileType:split

编辑 2

我已经对主要问题进行了详细说明,并对所有这些内容进行了更多尝试。好像command line被抓住了。但是终端行为很奇怪。WinEnter因此,具有和的不同窗口的行为BufEnter如下:

1 - 但仅当另一个终端窗口打开时(第一个没有被捕获);

2 - 但在 Vim 启动后第一次失败。

很抱歉这张桌子,它迫使我出于某种原因缩进它,它破坏了页面上所有漂亮的视觉效果。

编辑 1

添加一段代码。我正在尝试做的整个想法是存储有关当前打开的所有窗口的信息,这些窗口是具有常规缓冲区的常规窗口。每次打开新窗口或关闭旧窗口时,我都需要自动更新此信息。核心代码如下: