Vim中路径的最大长度

时间:2014-03-12 16:06:35

标签: vim windows-7-x64

我在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

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

根据函数SetEnvironmentVariable的文档:

  

用户定义的环境变量的最大大小为32,767个字符。有关详细信息,请参阅Environment Variables

似乎对于 Windows XP Windows Server 2003 ,环境变量不是直接限制的,而是Process Environment Block(PEB)是:

  

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

但请注意,大多数程序在读取时会截断变量环境。因此,我建议您使用此处为Avoid over populate PATH Environment Variable in Windows提供的方法之一。

答案 2 :(得分:0)

  

多少取决于系统,大多数它是256或1024个字符。

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

实际上,最大长度似乎比文档提供的估计值大得多,以至于人们不需要过多担心这个限制。

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

  

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

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

答案 3 :(得分:0)

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

  • 实际上,您可以根据需要执行任意数量的set path+=...(最多只能尝试2万个字符),并且可以使用! Vim可以按照您的期望去做。但是:
  • 如果您将上述set path+=...命令存储在手动编辑的 Session.vim 文件中,则很可能会发现:mks(ession)!命令仅覆盖了其中一行包含一个set path=...命令,并且仅(!)4k字符长;唯一的解决方法是保留所述 Session.vim 文件的备份副本,并在发生:mks(hit)!时手动与之合并。
  • 此外,只要您在Vim自己的提示符下以:set path的形式调用它,那么只会显示上述〜4k字符。

HTH