【问题标题】:Maximum length of path in VimVim 中的最大路径长度
【发布时间】:2014-04-16 22:15:26
【问题描述】:

我在 Windows 7 上使用 Vim 7.3。

path 上的文档说

最大长度是有限的。多少取决于系统,主要是 256 或 1024 个字符。

但是,当我执行:echo strlen($path) 时,我得到了 2533。我很高兴它超过了 1024。这让我想知道最大长度是否由文档中未反映的其他设置控制。

这是我的 _vimrc 文件中的内容。

set path =.
set path+=../include
set path+=$WORK_DIR/include
set path+=$WORK_DIR
set path+=$WORK_DIR/source/library/cmtabstractmodel
set path+=$WORK_DIR/source/library/cmtacisgeometry
set path+=$WORK_DIR/source/library/cmtapi
set path+=$WORK_DIR/source/library/cmtcad
set path+=$WORK_DIR/source/library/cmtdesignspaceexploration
set path+=$WORK_DIR/source/library/cmtenvironment
set path+=$WORK_DIR/source/library/cmtevent
set path+=$WORK_DIR/source/library/cmtexternaltask
set path+=$WORK_DIR/source/library/cmtfield
set path+=$WORK_DIR/source/library/cmtgeometricutility
set path+=$WORK_DIR/source/library/cmtgeometry
set path+=$WORK_DIR/source/library/cmtgraphics
set path+=$WORK_DIR/source/library/cmtgraphicsutility
set path+=$WORK_DIR/source/library/cmtinertiaspecification
set path+=$WORK_DIR/source/library/cmtkernel
set path+=$WORK_DIR/source/library/cmtlibrary
set path+=$WORK_DIR/source/library/cmtmesh
set path+=$WORK_DIR/source/library/cmtmultibodydynamics
set path+=$WORK_DIR/source/library/cmtnastranutility
set path+=$WORK_DIR/source/library/cmtoptical
set path+=$WORK_DIR/source/library/cmtplugin
set path+=$WORK_DIR/source/library/cmtprocess
set path+=$WORK_DIR/source/library/cmtproject
set path+=$WORK_DIR/source/library/cmtscheme
set path+=$WORK_DIR/source/library/cmtsettings
set path+=$WORK_DIR/source/library/cmtsimulationtask
set path+=$WORK_DIR/source/library/cmtsystemconsole
set path+=$WORK_DIR/source/library/cmtthermal
set path+=$WORK_DIR/source/library/cmttranslator
set path+=$WORK_DIR/source/library/cmtutility
set path+=$WORK_DIR/source/library/cmtvgi
set path+=$WORK_DIR/source/library/cmtxml
set path+=$QT_ROOT/include/QtCore
set path+=$QT_ROOT/include/QtGui
set path+=$QT_ROOT/include/QtXml
set path+=$ACIS_ROOT/include
set path+=$ACIS_ROOT/scm/scm/include
set path+=$ACIS_ROOT/scm/scmext/include
if s:MSWIN
   set path+=C:/Program\ Files/Microsoft\ Visual\ Studio\ .NET\ 2003/Vc7/include
else
   set path+=/usr/include/g++-3
   set path+=/usr/X11R6/include
endif
set path+=$EXTERNAL_ROOT/PTC/proeWildfire-2.0/protoolkit/includes

【问题讨论】:

  • 你有一个很长的$PATH,但你提到的path 不是 $PATH。使用&path 检查path 选项的值。
  • 参考::help expr-option:help expr-env
  • @romainl, :echo strlen(&path) 打印 2178。这仍然大于文档所说的最大值。
  • @benjifisher,感谢您的提示。
  • 嗯,Windows 上path 的默认值是.,,,所以我想知道你做了什么让它变得这么大。我可以理解 10、20 甚至 100 个字符,但 2178?

标签: vim windows-7-x64


【解决方案1】:

请注意,扩展选项的最大长度是有限的。多少取决于 系统,主要是 256 或 1024 个字符。

【讨论】:

    【解决方案2】:

    根据函数SetEnvironmentVariable的文档:

    用户定义的环境变量的最大大小为 32,767 个字符。如需更多信息,请参阅Environment Variables

    而且似乎对于 Windows XPWindows Server 2003 环境变量没有直接限制,相反,Process Environment Block(PEB) 是:

    Windows Server 2003 和 Windows XP:进程的环境块总大小不得超过 32,767 个字符。

    但请注意,大多数程序在读取变量环境时会截断它。所以我建议你使用这里为Avoid over populate PATH Environment Variable in Windows 提出的方法之一。

    【讨论】:

    • 我说的不是windows环境变量。我说的是 vim 设置/变量。
    【解决方案3】:

    多少取决于系统,大部分大概是 256 或 1024 个字符。

    这似乎表明最大长度因您的计算机而异。

    实际上,最大长度似乎比文档给出的估计大得多,以至于人们不必太担心这个限制。

    理论上,我推测路径的最大长度取决于 Vim 可用的内存量,可以编辑:

    选项'maxmem'('mm')用于设置最大内存使用 一个缓冲区(以千字节为单位)。 'maxmemtot' 用于设置最大值 用于所有缓冲区的内存(以千字节为单位)。默认值取决于 使用的系统。对于 Amiga 和 MS-DOS,设置了 'maxmemtot' 取决于可用的内存量。

    编辑:重新阅读您的帖子和 cmets,并意识到您在询问理论最大值。

    【讨论】:

      【解决方案4】:

      我自己发现了以下内容,可能对您/其他人有所帮助:

      • 确实,您可以根据需要执行任意数量的set path+=...(只尝试了最多~20k 个字符)并且它有效! Vim 会按照你的预期去做。但是:
      • 如果您将上述set path+=... 命令存储在手动编辑的Session.vim 文件中,您可能会发现它被:mks(ession)! 命令覆盖,只有一行包含@ 987654324@ 命令,它只有 (!) 4k 个字符长;解决这个问题的唯一方法是保留上述 Session.vim 文件的备份副本,并在上述 :mks(hit)! 发生时手动与其合并。
      • 此外,每当您从 Vim 自己的提示符中将其调用为 :set path 时,只会显示所述 ~4k 字符。

      HTH

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-21
        • 1970-01-01
        • 2010-11-14
        • 2023-01-23
        • 1970-01-01
        • 2015-04-08
        • 2020-08-23
        • 2019-08-07
        相关资源
        最近更新 更多