在Windows共享上编辑文件时,GVim的运行速度非常慢

时间:2010-01-20 18:40:29

标签: performance networking vim

在我的计算机上工作时,无论何时打开位于网络共享上的文件,GVim都会完全无法使用。滚动文档可能需要15秒才能进入一个“页面”。即使使用移动键从一个单词转到另一个单词也需要2到3秒。这似乎是一种新的行为,但对于我的生活,我记不起改变会导致它的任何事情。我的印象是Vim实际上并没有访问文件,除了打开和保存。是吗?

7 个答案:

答案 0 :(得分:10)

有几个因素可能会影响这一点。

首先,确保您已将Vim设置为首选本地存储交换文件。如果您的$HOME位于本地驱动器上,我倾向于将其放在我的vimrc中(可以是$HOME\_vimrc$VIM\_vimrc)。确保创建该目录,否则Vim将继续使用列表中的其他目录之一。

set directory^=$HOME/tmp

这会将$HOME/tmp目录添加到列表的开头,Vim会检查交换文件的放置位置。

其次,对Vim创建的备份文件执行相同操作。与上述情况相同,但您要更改的选项是backupdir,而不是directory

第三,确保禁用matchparen插件。此插件是Vim 7的新增功能,因此您可能习惯使用旧版本的Vim。这导致频繁扫描文件以匹配parens,braces等,当文件在网络共享上时,这可能会大大降低Vim的速度。同样,这应该放在你的vimrc中。

let g:loaded_matchparen = 1

如果您只想暂时禁用该插件,可以使用命令:NoMatchParen然后:DoMatchParen稍后在该Vim会话中重新启用它。

最后,如果这些都没有帮助,您可以随时在本地复制文件并进行编辑。

答案 1 :(得分:5)

交换文件与它无关。我有我的交换文件本地,仍然有问题。我使用来自SysInternals.com的Process Monitor,它在尝试打开“\ server \ TestTool \ foo \ ReadMe.TXT”时显示出不良行为

首先尝试在“\ serve \”上创建一个CreateFile(又名,打开目录)。注意最后一个字符丢失了。这将导致“OBJECT PATH INVALID”超时4秒。

然后它在“\ server \ TestToo \”上尝试CreateFile。通过“TestTool”的最后一个字母剪切服务器名称是正确的。再次,用“BAD NETWORK NAME”时间超过3秒。

最后它正确并在“\ server \ TestTool \”上调用CreateFile,它立即可用。 然后在“\ server \ TestTool \ foo”上的CreateFile立即生效。 然后在“\ server \ TestTool \ foo \ ReadMe.TXT”上创建CreateFile,它立即可用。

为什么要为服务器和根目录尝试坏名称???这有什么疯狂的?

答案 2 :(得分:3)

我在高级系统设置中强制设置HOME路径后修复了此问题。 (您当前的HOME路径将是网络目录。)

  

控制面板&gt; <控制面板的所有项目>系统&gt;高级系统设置&gt;环境变量

     

按“新建...”

     

变量名称: HOME

     

变量值:c:\Home\ **<-- Type your home directory**

答案 3 :(得分:2)

跟进jamessan的回答:当您编辑共享上的文件时自动禁用该插件,将此行添加到您的_vimrc

autocmd BufReadPre //* :NoMatchParen

答案 4 :(得分:1)

您可以考虑安装LargeFile插件。它禁用了一些影响性能的功能。

答案 5 :(得分:1)

遇到与 David Anderson 类似的问题,但还没有解决方案。

加载\\ServerName\A$\B\C\File.txt时Vim会这样做:

  • 打开\ ServerName \ A $ \ B \ C \ File.txt

然后它执行许多循环,如:

  • CreateFile \ ServerName \ A $ &lt; - 每个约需1秒
  • QueryDirectory \ ServerName \ A $ \ B
  • QueryDirectory \ ServerName \ A $
  • QueryDirectory \ ServerName \ A $ \ B \ C
  • QueryDirectory \ ServerName \ A $ \ B

要比较几乎瞬间加载文件的Notepad ++有更多行,而Notepad ++从不查询\\ServerName\A$

此外,在Process Monitor中写入的持续时间(持续时间列)很低,但是对于CreateFile,Vim所花费的时间似乎很高(时间列) {1}}。

据我所知,我没有安装任何插件,并遵循其他提示来加速网络共享加载。

注意:美元在路径中。更奇怪的是, Vim将在更新的 Windows Server (2008而不是2003)上加载非常快的,具有相同的文件夹结构。

答案 6 :(得分:0)

我遇到了同样的问题(通过网络驱动器进行缓慢的gvim编辑)并已解决。是给我的-不是在开玩笑-titlestring

背景:我在Windows 10中使用垂直排列的任务栏。这样做的好处是,打开的窗口的行为就像从上到下的堆栈一样。例如,在这里看到一些how-to-run.txt作为网络文件的当前打开的窗口:

example of my Windows taskbar

从这个意义上说,文件名在gvim的窗口标题中排在 first 之前,路径在此之后。因此,我在titlestring中完全使用了vimrc,但仍在帮助文件vim81/doc/options.txt的第8202行中正式建议使用该变量:

set titlestring=%t%(\ %M%)%(\ (%{expand(\"%:~:.:h\")})%)%(\ %a%)

对于本地文件来说还可以,但是对于网络文件来说太慢了。

现在修复:

set titlestring=

效果相同(文件名优先),但是现在gvim对于远程文件也运行非常快!

顺便说一句,我也尝试了上述所有建议(directorybackupdirmatchparen,禁用了所有插件,尝试了LargeFile插件,尽管我观察到速度很慢gvim也适用于小文件等)。我也将statusline更改为非常简单的内容。

全部对我没有影响。但是有趣的titlestring ...