Vim 在垂直拆分中从quickfix窗口打开的项目?

Vim 在垂直拆分中从quickfix窗口打开的项目?,vim,Vim,我知道您可以使用ctrl-w+enter在新的水平窗口中打开快速修复项目 有没有办法从“快速修复”窗口以垂直拆分方式打开项目?下面是一个快速但肯定不完美的尝试: autocmd! FileType qf nnoremap <buffer> <leader><Enter> <C-w><Enter><C-w>L autocmd!文件类型qf nnoremap L 映射仅在“快速修复”和“位置”窗口中处于活动状态。它在水平窗口

我知道您可以使用ctrl-w+enter在新的水平窗口中打开快速修复项目


有没有办法从“快速修复”窗口以垂直拆分方式打开项目?

下面是一个快速但肯定不完美的尝试:

autocmd! FileType qf nnoremap <buffer> <leader><Enter> <C-w><Enter><C-w>L
autocmd!文件类型qf nnoremap L
映射仅在“快速修复”和“位置”窗口中处于活动状态。它在水平窗口(
)中打开错误/位置,并将其转换为垂直窗口(
L
)。

插件看起来对您很有帮助。 它允许在选定的窗口、新的垂直拆分窗口、新的拆分窗口或新的选项卡中打开快速修复项目。

Qfiner插件()非常聪明、棒极了,它可以完成所要求的以及更多,并且高度可定制。它也写得很好

接受的解决方案会导致窗口抖动,因为它首先打开,然后旋转窗口

相反,Qfiner插件要优越得多,因为它的功能整洁且完全平滑

如果您需要较少的功能(仅限于在拆分中打开的功能),或者由于某些原因无法或不想安装插件,您可以使用以下
vimrc
代码片段。 它使用了我从QCenter插件中学到的相同技术,尽管是以一种非常简单的方式,并且只使用CtrlP提供的相同快捷方式提供垂直和水平拆分(

“由于文件类型的原因,这仅在quickfix窗口中可用
“对autocmd的限制(见下文)。
功能!OpenQuickfix(新的分割命令)
“1.当前行是结果idx,因为我们处于快速修复中
设l:qf_idx=line('.')
" 2. 跳转到上一个窗口
wincmd p
“3.切换到新的拆分(新的拆分命令将为'vnew'或'split')
执行a:new\u split\u cmd
" 4. 在新创建的缓冲区中打开快速修复列表的“当前”项
“(当前是指在切换到新缓冲区之前聚焦的)
执行l:qf_idx.'cc'
端功能
autocmd文件类型qf nnoremap:调用OpenQuickfix(“vnew”)
autocmd文件类型qf nnoremap:调用OpenQuickfix(“拆分”)

您可以使用
L
H
将打开的窗口转换为垂直窗口。我正在寻找一种直接从quickfix窗口执行此操作的方法。没有内置的方法:您只有
。在这里,您无法真正避免创建自定义映射。误解了这个问题,几乎写不出来关于“如何在垂直分割中打开quickfix窗口”的答案。任何被误导的灵魂如果发现此线程,只需使用
:vert copen
并调整其大小(请参见“如何”部分)。谢谢!我没有意识到quickfix窗口有自己的文件类型。在随机窗口上从quickfix打开条目的默认行为也困扰着我。谢谢你提供了这个很棒的插件!
" This is only availale in the quickfix window, owing to the filetype
" restriction on the autocmd (see below).
function! <SID>OpenQuickfix(new_split_cmd)
  " 1. the current line is the result idx as we are in the quickfix
  let l:qf_idx = line('.')
  " 2. jump to the previous window
  wincmd p
  " 3. switch to a new split (the new_split_cmd will be 'vnew' or 'split')
  execute a:new_split_cmd
  " 4. open the 'current' item of the quickfix list in the newly created buffer
  "    (the current means, the one focused before switching to the new buffer)
  execute l:qf_idx . 'cc'
endfunction

autocmd FileType qf nnoremap <buffer> <C-v> :call <SID>OpenQuickfix("vnew")<CR>
autocmd FileType qf nnoremap <buffer> <C-x> :call <SID>OpenQuickfix("split")<CR>