问题 运行 Yarn In Vim Autocommand

Problems Running Yarn In Vim Autocommand

我正在使用 vim 作为我的 IDE 并且我已经开始处理我的第一个 Vue 项目,所以我将以下内容添加到我的 .vimrc:

" Automagically run yarn compiler when saving vue files
augroup vimrc
      autocmd!
      au BufWritePost *.vue term ++close ++rows=12 yarn run build
augroup END

到目前为止它运行良好,我在 ++close 上安装了它,因为 99% 的时间一切都编译得很好,我看到它在终端 window 中显示“完成”,然后一秒钟后它关闭了。

出现错误时就会出现问题,在这种情况下,如果 yarn 报告错误,终端 window 会立即关闭 ,因为它是一个终端 window,缓冲区不会留在内存中。因此,我无法返回查看错误是什么。

好吧,没什么大不了的...我尝试通过在 tmux 中打开另一个终端并 运行 只在出现错误的情况下在那里使用 yarn 命令来绕过它,但我发现了一个我的系统中有一个有趣的“错误”...

如果我创建了一个变量但不使用它,一些 linting 会导致 yarn 失败,但是 ONLY 当 运行 从自动命令。

我可以在命令模式下运行以下操作:

:term ++close ++rows=12 yarn run build

:term ++rows=12 yarn run build

或者我可以运行

$ yarn run build

在一个单独的终端中,在所有这些情况下,yarn 命令都会成功,因为它不关心我未使用的变量。

但是如果我 运行 它作为 vim 中的自动命令,因为我已经保存 App.vue,那么命令失败,我必须取消我的 ++close autocmd 因为这是 window 保持打开足够长的时间让我看到错误是什么的唯一方法,它是“变量 x 已声明但从未使用过”。

如果我 运行 将文件名或任何额外的 linting 信息作为自动命令传递给纱线? 如果不是,how/why yarn 是否只在我 运行 作为 autocmd 时才关心我未使用的变量?

另外,为了加分:我可以做以下一项或多项吗?

  1. 仅当编译成功时才自动关闭终端window(如果有错误则保持打开状态)
  2. 始终打开屏幕底部的 window 保留用于编译,并让 autocmd 成为创建 window 的函数(如果它尚不存在),并且然后 运行 是 window 中的终端(最好在不需要时隐藏 window)
  3. 即使在 window 关闭后,也要将 yarn 的输出保存在缓冲区中,因此如果需要,我可以返回并查看出了什么问题

这根本不是一个有效的方法

Front-end 项目通常包含某种观察器,它会在您更改监视文件时增量地 重建您的项目。让你的文本编辑器,尤其是 Vim 参与到这个过程的那一部分是没有任何意义的……或者在每次写入时重建整个东西。

如果您的项目是通过 $ vue create foobar 创建的纯 Vue.js 项目,那么它会附带一个 built-in 开发服务器,您应该在单独的终端 window,或 tmux 窗格,或 Vim 中的 :terminal window,或任何你想要的地方:

$ yarn serve

它将监视您的更改并自行处理所有事情。我更喜欢在单独的终端选项卡中执行此操作,但是,如果您真的喜欢 Vim 的 built-in 终端模拟器,它只是一个:

:vert term yarn serve

离开:

如果它是一个 Nuxt.js 项目,那么您的 package.json 中应该有一个 dev 脚本,其使用方式完全相同:

:term yarn dev

如果您使用其他“框架”,请阅读其文档。

基本上就是它的要点。


另一方面,yarn 在这里仅用作哑脚本运行程序。它不编译,它不知道错误等等。它是由 build 脚本在你的 package.json 中执行的任何东西,所以我建议你研究每一部分的职责你正在使用的系统以及这些部分之间的界限,如果你真的想理解它的话。