6

当我使用 vim 时,我偶尔会遇到这样的拆分菜单设置:

###############################################
#          |                         |        #
#          |                         |        #
# NERDTree |       main window       | tagbar #
#          |                         |        #
#          |                         |        #
###############################################

即使标签栏关闭,我也可能会得到类似的设置,例如当我比较不同的文件时。

但是,当我执行 vimgrep 命令时,结果(显示在快速修复列表中)仅在标签栏(或右侧的其他拆分)关闭时显示在主窗口下方。

因此,此设置每次都能正常工作:

###############################################
#          |                                  #
#          |                                  #
# NERDTree |          main window             #
#          |                                  # 
#          |                                  #
#          |__________________________________#
#          |                                  #
#          |  quickfix list: vimgrep results  #
#          |                                  #
###############################################

...虽然这不是:

###############################################
#          |                         |        #
#          |                         |        #
# NERDTree |       main window       | tagbar #
#          |                         |        #
#          |                         |________#
#          |                         | quick- #
#          |                         | fix    #
#          |                         | list:  #
#          |                         | vimgrep#
#          |                         | results#
###############################################

如何强制快速修复列表始终在主窗口下方打开(包含 vimgrep 结果)

目前,当且仅当 - 主窗口右侧没有其他拆分窗口时,它才会正确打开(在主窗口下方)。如果主窗口存在任何拆分,vimgrep 命令总是在那里打开 quickfix :/

我已经使用 vimgrep 命令绑定搜索当前光标下的单词(在整个文件中搜索这个单词):

nnoremap some-key :execute "vimgrep /\\<" . expand("<cword>") . "\\>/j ".expand("%") <Bar> cw<CR>

...只是为了展示我在用 vimgrep 做什么。

4

3 回答 3

2

您可以使用以下代码强制quickfix全角打开.vimrc

augroup DragQuickfixWindowDown
    autocmd!
    autocmd FileType qf wincmd J
augroup end

这是现在所要求的,但它已尽可能接近它。

于 2017-12-25T11:19:17.287 回答
2

可悲的是,Vim 没有项目抽屉的概念,只有窗口(拆分)。在使用命令打开 Quickfix 列表(例如:copen:cwindow)后,最好先关闭然后再打开 NerdTree 和 Tagbar。像这样的东西:

command! Copen copen|NERDTreeToggle|TagbarClose|TagbarOpen

注意:我没有测试过这个命令,因为我没有 NERDTree 或 Tagbar 插件。这也使标签栏窗口聚焦,这可能是不希望的。

或者,您可能希望通过保持 tagbar 和 nerdtree 都关闭来简化您的工作流程,除非您正在使用它们。这对于某些工作流来说是有意义的,因为需要查看标签或文件结构可能相对不常见(可能是 10% 的时间)。对于标签,您可以完全避免使用标签栏并:tag直接使用命令,或者<c-]>如果您在符号上则使用。可以以与 netrw 相同的方式使用 Nerdtree 来避免此问题(请参阅油和醋 - 拆分窗口和项目抽屉)。我在帖子中讨论了这些问题:Files, Buffers, and Splits Oh My!

就我个人而言,我不使用 NerdTree、Tagbar 或任何类似的东西。我更喜欢一次打开 1-2 个拆分。我使用projectionist.vim,一个像CtrlP这样的模糊查找器,:find或者如果我真的必须 netrw。

于 2016-05-18T20:45:24.093 回答
0

我在这里找到了一个很好的解决方案,只需将下面的文本放在你的 vimrc 中。它总是会将快速修复窗口以全宽移动到屏幕底部,而不会影响其他快速修复内容。

" Position the (global) quickfix window at the very bottom of the window
" (useful for making sure that it appears underneath splits)
"
" NOTE: Using a check here to make sure that window-specific location-lists
" aren't effected, as they use the same `FileType` as quickfix-lists.
autocmd FileType qf if (getwininfo(win_getid())[0].loclist != 1) | wincmd J | endif
于 2020-01-20T12:17:27.590 回答