首页 > 解决方案 > 如何编写文本文件,然后在同一个 Bash 脚本中读取它?

问题描述

我在 Vim 中有一个热键,可以让我进入命令模式并调用 Bash 脚本。Bash 脚本尝试执行以下步骤:

  1. 选择两个标记之间的文本
  2. 将选定的文本块发送到 .py 文件
  3. 将 .py 文件加载到IPython

如果我手动输入所有内容,该脚本就可以工作,但如果我运行该脚本,则文本块在脚本完成之前不会保存为文件,当 IPython 稍后尝试在脚本中加载文件时会导致错误。

以下是我尝试过的步骤:

  1. 如果我的文件被保存在缓冲区中,我尝试同步和刷新
  2. 如果文件需要更多时间来写入,我尝试睡眠并等待
  3. 我还尝试了异步 shell 命令来查看 Bash 脚本是否优先于 Vim 写入文件。
#!/bin/bash

# Text to be written has been selected in Vim
tmux send-keys ':w jtemp.py'
tmux send-keys 'Enter'

# Load code selection in IPython
tmux select-pane -t 1
tmux send-keys '%load jtemp.py'
tmux send-keys 'Enter'
tmux send-keys 'Enter'

如何在 Bash 脚本仍在运行时将文件保存到磁盘?

标签: bashvimtmux

解决方案


问题很可能(但我不确定)Vim 正在阻塞并且在脚本完成之前不处理按键。我不知道是否可以让 Vim 在后台运行脚本,但如果你在 tmux 中绑定热键而不是使用run-shell -b,则可以,例如:

bind F1 run -b "bash /path/to/my/script"

事实上,如果在 tmux 中执行此操作,您可能不需要脚本在后台运行,因为两个受影响的应用程序(Vim 和 IPython)不会阻塞,而 tmux 是否阻塞也没关系。所以你可以离开-b

您仍然几乎肯定需要在和选择窗格之间休眠一秒或半秒(“休眠 1”或“休眠 0.5”,实验),Enter否则在 Vim 写入文件和 IPython 读取文件之间会出现竞争.


推荐阅读