在vim中保存文件之后如何执行bash / zsh命令?

ntruter42

我在zshrc中有一个别名,以便我可以编辑它.zshrc,然后在vim中编辑后立即将其来源alias zshrc='vi ~/.zshrc && source ~/.zshrc,但是即使我什么都没做,它也可以加载文件。我希望它仅在使用过后才加载文件,:w或者:wq如果我决定不更改任何内容,则它不会不必要地重新加载文件。

vim ~/.zshrc退出状态为0成功,否则为非零。显然,不同类型的故障会产生不同的非零收益。例如,如果我在vsvi中使用:q!vs :wq,vim等效的退出状态将是什么也许我可以将bashif语句的重点放在返回的退出状态(如)上if [ $? = 113 ]; then source ~/.zshrc; fi我的第一个想法是,它将0在任何成功打开vim时返回,但是终端必须有某种方式来查看在vim中执行了什么vim命令。是否可以使用like的条件语句if [ -exec $(vim ~/.zshrc) = ":wq" ]; then source ~/.zshrc; fi如果条件有效,那显然不是真实的,但是有什么办法可以完成这样的事情吗?

例如,如果我正在处理一个.c文件,并且想查看它是否在保存并退出vim之后立即编译,这也可能很有用if [ -exec $(vim main.c) = ":wq" ]; then gcc main.c -o main && ./main; fi

吉勒斯“别再邪恶了”

Vi(m)会以状态0退出,除非它无法启动或正在运行一个脚本,该脚本以非零状态强制退出(而且我不确定那是否有可能退出),否则它会被信号杀死。你无法区分:q!:wq通过出口状态。

您可以在启动编辑器和退出编辑器之间检查文件是否已更改。您无法确定文件在此编辑器会话中是否已更改,但是我认为这无关紧要。严格来说,如果没有打开文件就无法检查文件是否已更改,但是检查相同文件名的inode更改时间已经足够了。

zmodload -F zsh/stat b:zstat
edit-and-source-if-changed () {
  local filename=$@[$#]
  local original_ctime="$(zstat +ctime -- $filename)" 2>/dev/null
  vim "$@" || return
  [[ -n $original_ctime ]] || return
  if [[ $original_ctime != "$(zstat +ctime -- $filename 2>/dev/null)" ]]; then
    echo source $filename
  fi
}

您可以在Vim退出时运行命令,也可以在保存文件后运行命令因此,从Vim内部,可以在保存文件时设置一个变量,然后在退出代码中(如果设置了该变量)运行一些命令来创建具有固定名称的文件。在调用Vim的代码中,检查该文件是否存在。那会更精确,但是比上面的纯壳端解决方案复杂得多。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Zsh:自动修改执行的命令

来自分类Dev

在zsh vim模式下执行命令

来自分类Dev

如何防止在ZSH中执行命令?

来自分类Dev

命令执行后如何保持zsh运行?

来自分类Dev

如何使用zsh的“命令”选项执行内置的“源”命令?

来自分类Dev

zsh:重复:执行 zsh 脚本时找不到命令

来自分类Dev

在ZSH中随机执行命令

来自分类Dev

Powershell Bash / Zsh命令中的多个参数

来自分类Dev

来自bash的zsh shell fg命令?

来自分类Dev

bash与zsh中的comm命令输出

来自分类Dev

在zsh中读取文件并运行命令

来自分类Dev

如何在Zsh中使用“源”命令

来自分类Dev

如何使Zsh不存储失败的命令

来自分类Dev

Zsh:如何在命令后自动完成?

来自分类Dev

ZSH:如何转义以下命令(变量分配)?

来自分类Dev

如何取消意外创建的zsh命令的定义?

来自分类Dev

Interactive ZSH的命令提示符以执行ZLE命令

来自分类Dev

装入zsh并从bash脚本执行命令

来自分类Dev

如何在zsh中获得命令的执行毫秒时间?

来自分类Dev

如何使用ZSH从命令中排除文件?

来自分类Dev

当命令是vim时,zsh在路径完成时失败

来自分类Dev

在Intellij IDEA中保存文件时执行命令

来自分类Dev

在Intellij IDEA中保存文件时执行命令

来自分类Dev

替换要在zsh中执行的命令中的字符串

来自分类Dev

如何在Swift可执行文件(如“ vi”)中运行和打印zsh命令

来自分类Dev

find命令在zsh和bash中的工作方式不同

来自分类Dev

Fish命令替换在bash或zsh中不起作用

来自分类Dev

命令行中的bash / zsh输出行

来自分类Dev

bash中的scp命令在zsh中不起作用