在文件保存时终止进程

Kill a process on file save

我试图告诉 neovim 在关闭其配置文件 (sxhkdrc) 后终止 sxhkd 和 运行 sxhkd。这就是我 init.vim

中的内容
autocmd BufWritePost *sxhkdrc pkill sxhkd; setsid sxhkd

我收到以下错误

"sxhkdrc" 9L, 136C written
Error detected while processing BufWritePost Autocommands for "*sxhkdrc":
E492: Not an editor command: pkill sxhkd; setsid sxhkd
Press ENTER or type command to continue

我可以在终端中 运行 pkill sxhkd; setsid sxhkd 而不会出错,但由于某种原因,我的 init.vim 文件不知道如何执行此命令。

当我保存它的配置文件时,如何杀死一个进程,例如 sxhkd?

从 Vim 内部执行外部命令时,我们使用 运行 非交互式 shell 中命令的 ! 前缀。您可以通过执行 :!ls 进行快速演示来对此进行测试。

在你的例子中,Vim 是在通知你它不理解你给它的命令。这很公平:它不是编辑器命令,而是设计用于从终端执行的命令。你可能想要:

autocmd BufWritePost *sxhkdrc !pkill sxhkd; setsid sxhkd

编辑:Alex 在评论中指出 sxhkd 是一个守护进程,因此使用 & 作为背景会更有意义:

autocmd BufWritePost *sxhkdrc !pkill sxhkd && setsid sxhkd &