当我运行时vi --version
,我看到VIM - Vi IMproved 7.3
了,但是当我运行以下脚本时,它打印出我有 7.2 版。为什么?
pathname
是vi
。_ which vi
打印/usr/local/bin/vim
,那--version
就是7.3
。
which gvim
prints /usr/bin/gvim
,并且也--version
打印较新版本的 vim 。
echo $EDITOR
打印vi
。
#!/usr/bin/python
import os
import sys
import os.path
import subprocess
import tempfile
def exec_vimcmd(commands, pathname='', error_stream=None):
"""Run a list of Vim 'commands' and return the commands output."""
try:
perror = error_stream.write
except AttributeError:
perror = sys.stderr.write
if not pathname:
pathname = os.environ.get('EDITOR', 'gvim')
args = [pathname, '-u', 'NONE', '-esX', '-c', 'set cpo&vim']
fd, tmpname = tempfile.mkstemp(prefix='runvimcmd', suffix='.clewn')
commands.insert(0, 'redir! >%s' % tmpname)
commands.append('quit')
for cmd in commands:
args.extend(['-c', cmd])
output = f = None
try:
try:
print "args are"
print args
subprocess.Popen(args).wait()
f = os.fdopen(fd)
output = f.read()
print "output is"
print output
print "that's the end of the output"
except (OSError, IOError), err:
if isinstance(err, OSError) and err.errno == errno.ENOENT:
perror("Failed to run '%s' as Vim.\n" % args[0])
perror("Please set the EDITOR environment variable or run "
"'pyclewn --editor=/path/to/(g)vim'.\n\n")
else:
perror("Failed to run Vim as:\n'%s'\n\n" % str(args))
perror("Error; %s\n", err)
raise
finally:
if f is not None:
f.close()
exec_vimcmd(['version'])
打印的参数是
['vi', '-u', 'NONE', '-esX', '-c', 'set cpo&vim', '-c', 'redir! >/var/folders/86/062qtcyx2rxbnmn8mtpkyghs0r0r_z/T/runvimcmducLQCe.clewn', '-c', 'version', '-c', 'quit']