Skip to content Skip to sidebar Skip to footer

Vim Cannot Save To Temporary Files Created By Python

Goal I am trying to create and edit a temporary file in vim (exactly the same behavior as a commit script in git/hg/svn). Current code I found a method to do so in this answer: cal

Solution 1:

I'm no Python expert, but it looks like you're keeping the handle to the temp file open while Vim is editing the file, and then attempt to read in the edited contents from the handle. By default, Vim creates a copy of the original file, writes the new contents to another file, and then renames it to the original (see :help 'backupcopy' for the details; other editors like nano apparently don't do it this way). This means that the Python handle still points to the original file (even though it may have already been deleted from the file system, depending on the Vim settings), and you get the original content.

You either need to reconfigure Vim (see :help 'writebackup'), or (better) change the Python implementation to re-open the same temp file name after Vim has exited, in order to get a handle to the new written file contents.

Solution 2:

I had the same problem on OS X after my code worked fine on Linux. As Ingo suggests, you can get the latest contents by re-opening the file. To do this, you probably want to create a temporary file with delete=False and then explicitly delete the file when you're done:

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

Post a Comment for "Vim Cannot Save To Temporary Files Created By Python"