gpt4 book ai didi

python - Vim 无法保存到由 python 创建的临时文件

转载 作者:太空狗 更新时间:2023-10-30 01:15:16 25 4
gpt4 key购买 nike

目标

我正在尝试在 vim 中创建和编辑一个临时文件(与 git/hg/svn 中的提交脚本的行为完全相同)。

当前代码

我在这个答案中找到了这样做的方法: call up an EDITOR (vim) from a python script

import sys, tempfile, os
from subprocess import call
EDITOR = os.environ.get('EDITOR','vim')
initial_message = "write message here:"
with tempfile.NamedTemporaryFile(suffix=".tmp") as tmp:
tmp.write(initial_message)
tmp.flush()
call([EDITOR, tmp.name])
tmp.seek(0)
print tmp.read()

问题

当我运行上面的代码时,临时文件不会读取 vim 中所做的更改。这是我在 vim 中添加了几行之后的输出:

fgimenez@dn0a22805f> ./note.py
Please edit the file:

fgimenez@dn0a22805f>

现在是有趣(奇怪)的部分。如果我将我的编辑器更改为 nano 或 emacs,脚本就可以正常工作!到目前为止,这似乎只有在我使用 vim 或 textedit 时才会中断。

作为另一个实验,我试着连续给几个编辑打电话,看看会发生什么。修改后的代码为:

with tempfile.NamedTemporaryFile(suffix=".tmp") as tmp:
tmp.write(initial_message)
tmp.flush()
# CALLING TWO EDITORS HERE, VIM THEN NANO
call(['vim', tmp.name])
raw_input("pausing between editors, just press enter")
call(['nano', tmp.name])
tmp.seek(0)
print tmp.read()

即我用 vim 然后用 nano 编辑。发生的事情是 nano 确实注册了 vim 所做的更改,但 python 没有注册任何内容(与以前相同的结果):

fgimenez@dn0a22805f> ./note.py
Please edit the file:

fgimenez@dn0a22805f>

但是,如果我先用 nano 编辑,然后用 vim,python 仍然会注册 nano 编辑,但不会注册 vim 的!

with tempfile.NamedTemporaryFile(suffix=".tmp") as tmp:
tmp.write(initial_message)
tmp.flush()
# CALLING TWO EDITORS HERE, NANO THEN VIM
call(['nano', tmp.name])
raw_input("pausing between editors, just press enter")
call(['vim', tmp.name])
tmp.seek(0)
print tmp.read()

运行程序并在 nano 中添加 a\nb\nc 并在 vim 中添加 d\ne\nf 的输出:

fgimenez@dn0a22805f> ./note.py
Please edit the file:
a
b
c

fgimenez@dn0a22805f>

似乎使用 vim 或 textedit 消除了附加到文件的能力。我在这里完全糊涂了,我只想在 vim 中编辑我的笔记...

编辑 1:澄清

  • 我在 osx Mavericks 上

  • 我从 shell(不是 MacVim)调用 vim 并用 ZZ 结束 session (也试过 :w :q)

最佳答案

我不是 Python 专家,但看起来您在 Vim 编辑文件时保持临时文件的句柄打开,然后尝试从句柄中读入编辑的内容。默认情况下,Vim 创建原始文件的副本,将新内容写入另一个文件,然后将其重命名为原始文件(有关详细信息,请参见 :help 'backupcopy';其他编辑器显然像 nano不要这样做)。这意味着 Python 句柄仍然指向原始文件(即使它可能已经从文件系统中删除,这取决于 Vim 设置),并且您得到原始内容。

您需要重新配置 Vim(参见 :help 'writebackup'),或者(更好)更改 Python 实现以在 Vim 退出后重新打开相同的临时文件名,以便获取新写入文件内容的句柄。

关于python - Vim 无法保存到由 python 创建的临时文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22976454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com