Syntastic和Vim中的分屏处理

11

最近,我开始使用Syntastic,因为它能够很大程度上简化开发。

唯一让我感到困扰的是它在分隔视图方面的处理方式。

我也使用NERDtree插件。每当我在一个垂直拆分视图中打开另一个文件时,就会出现以下情况:

---------------------------------------------------------
|        |                   |                          |
|NERDTree|    file           |                          |
|        |                   |       file               |
|        |                   |                          |
|        |--------------------                          |
|        |   syntastic       |                          |
---------------------------------------------------------
|                                                       |
|                 syntastic                             |
|                                                       |
---------------------------------------------------------

有没有什么方法可以去掉额外的syntastic小瓷砖?

我宁愿有两个小瓷砖(每个文件一个),或者只显示当前活动文件瓷砖的信息。


2
好的绘图,清晰而令人印象深刻! - Francis Niu
1个回答

3

NerdTree经常妨碍良好的分屏/窗口工作流程。你有没有考虑过不使用NerdTree?

NerdTree存在一些问题:

  • 浪费空间。你有多少时间需要查看文件结构?10%的时间?更少吗?
  • Vim没有"项目抽屉"的概念。这意味着NerdTree要极力模拟"项目抽屉"的行为,最终失败了。
  • 分屏导航-使<c-w>t变得不太有用。与其他工作流程相比,通常需要使用更多的窗口导航命令。
  • 当重新排列分屏时,NerdTree表现不佳。创建一些分屏然后执行<c-w>J<c-w>H。看看它是如何破坏你的布局的。这就是你在syntastic中遇到的情况。

Vim之道

正如Vimcasts中所述的那样,油和醋 - 分割窗口和项目抽屉,Vim更喜欢在你需要时打开文件浏览器,然后在不需要时切换到其他地方。您也可以以这种方式使用NerdTree,只需忘记始终打开文件浏览器即可。还有其他在vim中打开文件的方法:

使用文件补全(通过<tab>)来与像:e:sp这样的命令一起使用。 使用<c-d>而不是<tab>来获取完成列表。 :e:sp命令采用通配符,例如::e *.c:e foo/**/bar.c。 通过设置'path''suffix'选项来使用:find。 Ctags或cscope可跳转到标签。 gf会前往光标下的文件。 探索模糊查找器如CtrlPCommand-TUnite。 通过ProjectionistRails是一个很好的例子)创建项目特定导航。
个人而言,我建议你使用一个好的模糊文件查找器,逐渐淡出 NerdTree 的工作流程。
Vim 支持分割窗口。确保你能够有效地使用窗口分割命令,参见 :h opening-window。更好的做法是阅读整个 :h window 帮助文件,里面有许多珍品。

5
即使不使用NerdTree,我在使用Syntastic时也遇到了相同的问题。一旦我开始分割缓冲区并关闭分割,就会留下孤立的快速修复缓冲区等问题。这与上述问题所示的情况非常相似。有什么可靠的解决方法吗? - mbilyanov
@symbolix,Syntastic 可能正在使用 Location List 而不是 Quickfix List。Location List 与 Quickfix List 非常相似,但它绑定到特定的窗口。如果您关闭该窗口,则可能会使 Location List 窗口变成孤儿窗口。您可以使用缓冲区事件(如 BufHidden)来调用 :lclose,例如 autcmd BufHidden * lclose。个人而言,我很少打开 Location List 窗口。我使用像 :ll:lnext:lprev 这样的命令来查看我的错误。 - Peter Rincker
谢谢您的建议。我正准备编写一个函数来关闭缓冲区,并在此过程中运行某种Syntastic函数以重置Syntastic并启动:lclose. 这是个好主意吗?还有其他建议吗?谢谢。 - mbilyanov
3
几年后,这仍然是一个问题。 - Stephen Blum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接