Vim:选择文件后保持位置列表窗口打开

KFL*_*KFL 2 vim

我需要与这个问题完全相反的行为.我的观察是,当按下enter位置列表窗口中的一行时,窗口将被关闭,主窗口将显示所选文件的内容.相反,quickfix窗口没有这种行为,即它在选择后保持打开状态.

我检查了我的autocmd,没有特殊处理位置列表或quickfix列表.

示例 - :lgrep hi *填充位置列表.lopen打开位置列表窗口.按enter任意一行.

Pet*_*ker 5

Syntastic和位置列表窗口

默认情况下,Syntastic会在没有错误时关闭位置列表窗口.因此,如果您使用的东西:lgrep不会将任何结果标记为错误,那么一旦您离开位置列表窗口,位置列表窗口将关闭,例如像使用<cr>跳转到某个位置.

Syntastic提供了一种通过g:syntastic_auto_loc_list变量调整此方法的方法.将此设置为0将禁用自动关闭功能.

vimrc文件中设置以下内容:

let g:syntastic_auto_loc_list = 0
Run Code Online (Sandbox Code Playgroud)

要了解更多有关这个变量见::h 'syntastic_auto_loc_list'.

通用Vim调试

通常最简单的方法来测试你vimrc或者插件是否会导致问题是它将功能与vanilla vim配置(或者至少更多的vanilla)进行比较.通过在没有vimrc的情况下启动Vim来完成此操作.我使用以下调用:

vim -N -u NONE
Run Code Online (Sandbox Code Playgroud)

一旦你以这种方式启动Vim,你可以测试你的bug并查看它是否存在.

  • 如果错误仍然存​​在,那么这意味着它可能是Vim性质的一部分或Vim本身的错误.在这种情况下,我建议你做更多通过阅读文档:h :help,:h :helpgrep以及:h bug-reports
  • 如果错误不存在,则由于您vimrc或插件中的某些内容而发生错误.这通常意味着您需要禁用部分vimrc /插件来尝试查找罪魁祸首.一种快速的方法是使用二进制搜索.

调试稍微复杂一些 :verbose

通常,通过使用:verbose查看最后设置的内容,可以更容易地直接跟踪错误.(见:h :verbose)

  • 如果它们是最后一组,它们将显示映射.例如:verbose nmap <leader>foo.见:h :map-verbose:h map-listing.
  • 设置也会显示上次设置的位置.例如:verbose set shiftwidth.见:h :set-verbose.
  • Autocomd将显示最后定义的位置.例如:verbose autocmd BufEnter.见:h :autocmd-verbose:h autocmd-list.

高级调试 'verbosefile'

另一种调试方法是使用'verbose'/ :verbose'verbosefile'有效地记录Vim正在做的事情.

使用:verbose'verbosefile'调试bug的示例.

  • :lgrep命令
  • 打开位置列表窗口 :lopen
  • 设置'verbosefile'通过:set verbosefile=~/verbose.txt
  • :15verbose normal <c-v><cr>
  • 现在打开日志文件 :sp ~/verbose.txt
  • 在日志文件中搜索可疑的内容.例如closelclose在你的情况下
  • 一旦找到它,它将显示autocmd导致结束的功能或功能.
  • 如果autocmd想修改它.
  • 如果您需要查看函数:scriptnames以确定与脚本本地函数关联的文件.见:scriptnames:h <SID>.

我发现使用Tim Pope的scriptease.vim可以通过提供为您:Verbose设置的命令'verbosefile'以及之后在预览窗口中打开它来简化此过程.Scriptease还为:scriptnamesvia 提供了一个很好的包装器:Scriptnames.通常,scriptease.vim提供了许多有用的方法来调试和重新加载插件.

更多帮助

:h 'syntastic_auto_loc_list'
:h syntastic
:h -u
:h -N
:h :help
:h :helpgrep
:h bug-reports
:h :map
:h map-listing
:h :set
:h set-option
:h :set-verbose
:h :autocmd-verbose
:h autocmd-list
:h 'verbose'
:h :verbose
:h 'verbosefile'
:h :scriptnames
:h <SID>
:h :normal
:h c_CTRL-V
Run Code Online (Sandbox Code Playgroud)