Vim快速修复列表:如何操作位置?

6

当我使用vim工作时,偶尔会出现像这样的分割菜单设置:

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

即使 tagbar 已关闭,我也可能会得到一个相似的设置,例如当我比较不同的文件时。
然而,当我执行 vimgrep 命令时,结果(在快速修复列表中显示)只会在主窗口下方显示,当 tagbar (或其他右侧的分割)已关闭时。
因此,这个设置每次都可以正确地工作:
###############################################
#          |                                  #
#          |                                  #
# NERDTree |          main window             #
#          |                                  # 
#          |                                  #
#          |__________________________________#
#          |                                  #
#          |  quickfix list: vimgrep results  #
#          |                                  #
###############################################

...而这则不会:

###############################################
#          |                         |        #
#          |                         |        #
# NERDTree |       main window       | tagbar #
#          |                         |        #
#          |                         |________#
#          |                         | quick- #
#          |                         | fix    #
#          |                         | list:  #
#          |                         | vimgrep#
#          |                         | results#
###############################################
如何让快速修复列表(包含vimgrep结果)始终在主窗口下方打开? 目前,只有当主窗口右侧没有其他拆分窗口时,它才会正确地打开(在主窗口下方)。如果主窗口右侧存在任何拆分,则vimgrep命令总是在那里打开快速修复:/。
我已将搜索光标下的单词与vimgrep命令绑定(以在整个文件中搜索此单词)。
nnoremap some-key :execute "vimgrep /\\<" . expand("<cword>") . "\\>/j ".expand("%") <Bar> cw<CR>

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


不确定这是否可执行,但我认为它可能会选择处于焦点的任何缓冲区。因此,如果您在主窗口中按下键映射时,它应该可以工作。 - Two-Bit Alchemist
不好意思,当主窗口/缓冲区聚焦时也会发生这种情况 :/ - daniel451
你尝试过 :belo cw 吗? - RBF06
3个回答

2

很遗憾,Vim没有项目抽屉的概念,只有窗口(拆分)。在使用命令打开Quickfix列表后,例如:copen:cwindow,最好关闭并重新打开NerdTree和Tagbar。类似这样:

command! Copen copen|NERDTreeToggle|TagbarClose|TagbarOpen

注意:由于我没有安装NERDTree或Tagbar插件,因此我没有测试此命令。这也会导致焦点集中在Tagbar窗口上,这可能并不是我们想要的。
另外,你可以尝试简化你的工作流程,在不需要使用它们时关闭tagbar和nerdtree。对于某些工作流而言,这样做是有道理的,因为需要查看标签或文件结构的情况相对较少(也许只有10%的时间)。对于标签,你可以完全避免使用tagbar,直接使用:tag命令或者如果你正在使用一个符号,则使用<c-]>。Nerdtree可以像netrw一样使用,以避免这个问题(参见Oil and vinegar - split windows and the project drawer)。我在这篇文章中讨论了这些问题:Files, Buffers, and Splits Oh My! 个人而言,我不使用NerdTree、Tagbar或类似的东西。我更喜欢同时打开1-2个分屏。我使用projectionist.vim、类似于CtrlP的模糊查找、:find或者必须使用netrw。

2

您可以在您的.vimrc文件中使用以下代码,强制将quickfix完全展开:

augroup DragQuickfixWindowDown
    autocmd!
    autocmd FileType qf wincmd J
augroup end

虽然不完全符合要求,但我尽可能接近了它。


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

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