我在VIM中有一个热键,它将我带入命令模式并调用bash脚本。 bash脚本尝试以下步骤:
如果我手动输入所有内容,该脚本将起作用,但如果我运行该脚本,则在脚本完成之前,文本块不会保存为文件,这会导致IPython稍后尝试在脚本中加载文件时出错。
以下是我尝试过的步骤:
#!/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脚本仍处于执行状态时将文件保存到磁盘的任何想法?
问题很可能(我不确定这一点)vim是阻塞的,并且在脚本完成之前不处理按键。我不知道是否可以让vim在后台运行脚本,但如果你使用run-shell -b绑定tmux中的热键,你可以这样:
bind F1 run -b "bash /path/to/my/script"
事实上,如果在tmux中执行此操作,您可能不需要脚本在后台运行,因为两个受影响的应用程序(vim和ipython)不会阻塞,并且tmux的确无关紧要。所以你可以把-b留下来。
您仍然几乎肯定需要在Enter和选择窗格之间休息一秒或半秒(“睡眠1”或“睡眠0.5”,实验),否则将在vim写入文件和ipython读取之间发生竞争它。
我不确定在shell脚本中调用tmux
的开销,但是建议您在没有它的情况下编写工作流程脚本 - 您可以使用sed
来解析文件中两个标记之间的文本,将其传递给新的.py文件,以及然后将.py文件加载到ipython中。