2

を実行するvi --versionと表示VIM - Vi IMproved 7.3されますが、次のスクリプトを実行すると、バージョン 7.2 であることが出力されます。なんで?

pathnameですvi。_ which vi印刷/usr/local/bin/vimされ、それ--version7.3です。 をwhich gvim出力し、新しいバージョンの vim も出力します。/usr/bin/gvim--version

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']
4

1 に答える 1

1

に代入されている値を調べて、コマンド プロンプトで入力した値pathnameと一致するwhich vimかどうかを確認します。which gvimスクリプトは環境変数を参照していますが、コマンド ラインから$EDITOR実行すると、最初のヒットを検索します。たとえば、CLI から実行していても、スクリプトから実行している場合があります。(g)vim$PATH/opt/local/bin/vim/usr/bin/vim

于 2013-03-12T15:19:36.297 に答える