├── .gitignore ├── README.md ├── after └── ftplugin │ └── qf.vim ├── autoload └── qfpreview.vim └── doc └── qfpreview.txt /.gitignore: -------------------------------------------------------------------------------- 1 | Session.vim 2 | /doc/tags 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vim-qf-preview 2 | 3 | A plugin for the quickfix and location list window to quickly preview the file 4 | under the cursor at the current quickfix location in a popup window. 5 | 6 |
7 |

8 | 9 | 10 | 11 |

12 |
13 | 14 | 15 | ## Usage 16 | 17 | ### Quickfix window mapping 18 | 19 | To avoid conflicts with other plugins no default key mapping for opening the 20 | popup window is provided. You will first have to bind `(qf-preview-open)` 21 | to a key-sequence of your choice. 22 | 23 | For example, to open the popup window with p, add the following to 24 | `~/.vim/after/ftplugin/qf.vim`: 25 | ```vim 26 | nmap p (qf-preview-open) 27 | ``` 28 | 29 | Or alternatively, if you prefer to keep your plugin settings in your `vimrc`: 30 | ```vim 31 | augroup qfpreview 32 | autocmd! 33 | autocmd FileType qf nmap p (qf-preview-open) 34 | augroup END 35 | ``` 36 | 37 | In the quickfix window navigate the cursor to the desired error and press 38 | p to preview the file at the current quickfix location in a popup 39 | window. The window is scrolled such that the buffer line with the error is at 40 | the top of the popup window. 41 | 42 | ### Popup window mappings 43 | 44 | The following default popup mappings are provided: 45 | 46 | - Scroll up/down one text line: Ctrl-k, Ctrl-j 47 | - Scroll to first/last line of displayed buffer: Shift-Home, 48 | Shift-End 49 | - Scroll back to error line ("reset"): r 50 | - Close the popup window: q, Ctrl-c 51 | 52 | 53 | ## Configuration 54 | 55 | ### b:qfpreview and g:qfpreview 56 | 57 | The default popup key mappings and the appearance of the popup window can be 58 | configured through the variable `b:qfpreview` in `after/ftplugin/qf.vim`, or 59 | alternatively through the global variable `g:qfpreview`. The variable must be a 60 | dictionary containing any of the following entries: 61 | 62 | | Entry | Description | Default | 63 | | -------------- | ---------------------------------------------------------- | ----------------------- | 64 | | `top` | Scroll to the first line of the buffer. | `"\"` | 65 | | `bottom` | Scroll to the bottom of the buffer. | `"\"` | 66 | | `scrollup` | Scroll window up one text line. | `"\"` | 67 | | `scrolldown` | Scroll window down one text line. | `"\"` | 68 | | `halfpageup` | Scroll window up one half page. | none | 69 | | `halfpagedown` | Scroll window down one half page. | none | 70 | | `fullpageup` | Scroll window up one full page. | none | 71 | | `fullpagedown` | Scroll window down one full page. | none | 72 | | `reset` | Scroll window back to error line. | `"r"` | 73 | | `close` | Close the popup window. | `"q"` | 74 | | `next` | Navigate to next quickfix item in current list. | none | 75 | | `previous` | Navigate to previous quickfix item in current list. | none | 76 | | `height` | Number of text lines to display in the popup window. | `15` | 77 | | `offset` | Number of buffer lines to show above the error line. | `3` | 78 | | `number` | Enable the `'number'` column in the popup window. | `false` | 79 | | `sign` | Place a `sign` on the error line in the displayed buffer.¹ | `{linehl: 'CursorLine'}`| 80 | | `matchcolumn` | Highlight column of current quickfix item in popup window. | `true` | 81 | 82 | ¹For valid `sign` attributes see :help qfpreview.sign and the 83 | [examples](#examples) below. 84 | 85 | ### Highlighting 86 | 87 | The highlighting of the popup window can be configured through the highlighting 88 | groups `QfPreview`, `QfPreviewTitle`, `QfPreviewScrollbar`, `QfPreviewThumb` and 89 | `QfPreviewColumn`. See :help qfpreview-highlight for more details. 90 | 91 | ### Examples 92 | 93 | 1. Override the popup scrolling keys: 94 | ```vim 95 | vim9script 96 | g:qfpreview = { 97 | top: 'g', 98 | bottom: 'G', 99 | scrollup: 'k', 100 | scrolldown: 'j', 101 | halfpageup: 'u', 102 | halfpagedown: 'd', 103 | fullpageup: 'b', 104 | fullpagedown: 'f', 105 | next: 'n', 106 | previous: 'p' 107 | } 108 | ``` 109 | 2. Instead of displaying a cursorline, display a sign in the `'signcolumn'`: 110 | ```vim 111 | g:qfpreview = { 112 | sign: { 113 | text: '>>', 114 | texthl: 'Search' 115 | } 116 | } 117 | ``` 118 | 3. Same as 2., but also enable the `'number'` column. In this case the placed 119 | sign is shown in the `'number'` column: 120 | ```vim 121 | g:qfpreview = { 122 | number: true, 123 | sign: { 124 | text: '>>', 125 | texthl: 'Search' 126 | } 127 | } 128 | ``` 129 | 130 | Screenshots of default configuration, 2. and 3.: 131 | ![out](https://user-images.githubusercontent.com/6266600/77472775-b4cdaa00-6e14-11ea-8abd-d55c47fdeda7.png) 132 | 133 | 134 | ## Installation 135 | 136 | Run the following commands in your terminal: 137 | ```bash 138 | $ cd ~/.vim/pack/git-plugins/start 139 | $ git clone https://github.com/bfrg/vim-qf-preview 140 | $ vim -u NONE -c 'helptags vim-qf-preview/doc | quit' 141 | ``` 142 | **Note:** The directory name `git-plugins` is arbitrary, you can pick any other 143 | name. For more details see :help packages. Alternatively, use your 144 | favorite plugin manager. 145 | 146 | 147 | ## License 148 | 149 | Distributed under the same terms as Vim itself. See :help license. 150 | -------------------------------------------------------------------------------- /after/ftplugin/qf.vim: -------------------------------------------------------------------------------- 1 | vim9script 2 | # ============================================================================== 3 | # Preview file with quickfix error in a popup window 4 | # File: after/ftplugin/qf.vim 5 | # Author: bfrg 6 | # Website: https://github.com/bfrg/vim-qf-preview 7 | # Last Change: Nov 25, 2022 8 | # License: Same as Vim itself (see :h license) 9 | # ============================================================================== 10 | 11 | # Stop here if user doesn't want ftplugin mappings 12 | if get(g:, 'no_plugin_maps') 13 | finish 14 | endif 15 | 16 | import autoload '../../autoload/qfpreview.vim' 17 | 18 | nnoremap (qf-preview-open) qfpreview.Open(line('.') - 1) 19 | 20 | b:undo_ftplugin = get(b:, 'undo_ftplugin', 'execute') .. '| execute "nunmap (qf-preview-open)"' 21 | -------------------------------------------------------------------------------- /autoload/qfpreview.vim: -------------------------------------------------------------------------------- 1 | vim9script 2 | # ============================================================================== 3 | # Preview file with quickfix error in a popup window 4 | # File: autoload/qfpreview.vim 5 | # Author: bfrg 6 | # Website: https://github.com/bfrg/vim-qf-preview 7 | # Last Change: Nov 23, 2022 8 | # License: Same as Vim itself (see :h license) 9 | # ============================================================================== 10 | 11 | scriptencoding utf-8 12 | 13 | hlset([ 14 | {name: 'QfPreview', linksto: 'Pmenu', default: true}, 15 | {name: 'QfPreviewTitle', linksto: 'Pmenu', default: true}, 16 | {name: 'QfPreviewScrollbar', linksto: 'PmenuSbar', default: true}, 17 | {name: 'QfPreviewThumb', linksto: 'PmenuThumb', default: true}, 18 | {name: 'QfPreviewColumn', linksto: 'QuickFixLine', default: true}, 19 | ]) 20 | 21 | const defaults: dict = { 22 | height: 15, 23 | number: false, 24 | offset: 3, 25 | sign: {linehl: 'CursorLine'}, 26 | matchcolumn: true, 27 | scrollup: "\", 28 | scrolldown: "\", 29 | halfpageup: '', 30 | halfpagedown: '', 31 | fullpageup: '', 32 | fullpagedown: '', 33 | top: "\", 34 | bottom: "\", 35 | reset: 'r', 36 | close: 'q', 37 | next: '', 38 | previous: '' 39 | } 40 | 41 | def Getopt(key: string): any 42 | return get(b:, 'qfpreview', get(g:, 'qfpreview', {}))->get(key, defaults[key]) 43 | enddef 44 | 45 | # Window ID of preview popup window 46 | var popup_id: number = 0 47 | 48 | # Cache the quickfix list while popup is open and cycling through item 49 | var qf_list: list> = [] 50 | 51 | def Error(msg: string) 52 | echohl ErrorMsg | echomsg msg | echohl None 53 | enddef 54 | 55 | def Display2byte(str: string, virtcol: number): number 56 | const ts_old: number = &tabstop 57 | &tabstop = 8 58 | var col: number 59 | try 60 | col = match(str, $'\%{virtcol}v') + 1 61 | finally 62 | &tabstop = ts_old 63 | endtry 64 | return col 65 | enddef 66 | 67 | def Cycle(winid: number, step: number) 68 | var cur_pos: list = getpos('.') 69 | var new_lnum: number = line('.') + step > line('$') 70 | ? line('$') 71 | : line('.') + step < 1 ? 1 : line('.') + step 72 | 73 | while (!qf_list[new_lnum - 1].valid || qf_list[new_lnum - 1].bufnr < 1) 74 | && new_lnum > 0 75 | && new_lnum < line('$') 76 | new_lnum += step 77 | endwhile 78 | 79 | if new_lnum == cur_pos[1] || !qf_list[new_lnum - 1].valid || qf_list[new_lnum - 1].bufnr < 1 80 | return 81 | endif 82 | 83 | popup_close(winid) 84 | cur_pos[1] = new_lnum 85 | setpos('.', cur_pos) 86 | Open(line('.') - 1) 87 | enddef 88 | 89 | def Popup_filter(line: number, winid: number, key: string): bool 90 | if !empty(Getopt('close')) && key == Getopt('close') 91 | popup_close(winid) 92 | elseif !empty(Getopt('top')) && key == Getopt('top') 93 | win_execute(winid, 'normal! gg') 94 | elseif !empty(Getopt('bottom')) && key == Getopt('bottom') 95 | win_execute(winid, 'normal! G') 96 | elseif !empty(Getopt('scrollup')) && key == Getopt('scrollup') 97 | win_execute(winid, "normal! \") 98 | elseif !empty(Getopt('scrolldown')) && key == Getopt('scrolldown') 99 | win_execute(winid, "normal! \") 100 | elseif !empty(Getopt('halfpageup')) && key == Getopt('halfpageup') 101 | win_execute(winid, "normal! \") 102 | elseif !empty(Getopt('halfpagedown')) && key == Getopt('halfpagedown') 103 | win_execute(winid, "normal! \") 104 | elseif !empty(Getopt('fullpageup')) && key == Getopt('fullpageup') 105 | win_execute(winid, "normal! \") 106 | elseif !empty(Getopt('fullpagedown')) && key == Getopt('fullpagedown') 107 | win_execute(winid, "normal! \") 108 | elseif !empty(Getopt('reset')) && key == Getopt('reset') 109 | popup_setoptions(winid, {firstline: line}) 110 | popup_setoptions(winid, {firstline: 0}) 111 | elseif !empty(Getopt('next')) && key == Getopt('next') 112 | Cycle(winid, 1) 113 | elseif !empty(Getopt('previous')) && key == Getopt('previous') 114 | Cycle(winid, -1) 115 | else 116 | return false 117 | endif 118 | return true 119 | enddef 120 | 121 | def Popup_cb(winid: number, result: number) 122 | qf_list = [] 123 | sign_unplace('PopUpQfPreview') 124 | if !empty(sign_getdefined('QfErrorLine')) 125 | sign_undefine('QfErrorLine') 126 | endif 127 | enddef 128 | 129 | export def Open(idx: number): number 130 | const wininfo: dict = win_getid()->getwininfo()[0] 131 | 132 | if empty(qf_list) 133 | qf_list = wininfo.loclist ? getloclist(0) : getqflist() 134 | if empty(qf_list) 135 | return 0 136 | endif 137 | endif 138 | 139 | const qf_item: dict = qf_list[idx] 140 | if !qf_item.valid || qf_item.bufnr < 1 || !bufexists(qf_item.bufnr) 141 | qf_list = [] 142 | return 0 143 | endif 144 | 145 | const space_above: number = wininfo.winrow - 1 146 | const space_below: number = &lines - (wininfo.winrow + wininfo.height - 1) - &cmdheight 147 | const firstline: number = qf_item.lnum - Getopt('offset') < 1 ? 1 : qf_item.lnum - Getopt('offset') 148 | var height: number = Getopt('height') 149 | var title: string = $'{qf_item.bufnr->bufname()->fnamemodify(':~:.')} ({idx + 1}/{len(qf_list)})' 150 | var line: number 151 | var pos: string 152 | 153 | # Truncate long titles at beginning 154 | if strwidth(title) > wininfo.width 155 | title = '…' .. title[-(wininfo.width - 4) :] 156 | endif 157 | 158 | if space_above > height 159 | if space_above == height + 1 160 | height -= 1 161 | endif 162 | line = wininfo.winrow - 1 163 | pos = 'botleft' 164 | elseif space_below >= height 165 | line = wininfo.winrow + wininfo.height 166 | pos = 'topleft' 167 | elseif space_above > 5 168 | height = space_above - 2 169 | line = wininfo.winrow - 1 170 | pos = 'botleft' 171 | elseif space_below > 5 172 | height = space_below - 2 173 | line = wininfo.winrow + wininfo.height 174 | pos = 'topleft' 175 | elseif space_above <= 5 || space_below <= 5 176 | line = &lines - &cmdheight 177 | pos = 'botleft' 178 | else 179 | Error('Not enough space to display preview popup') 180 | return 0 181 | endif 182 | 183 | popup_close(popup_id) 184 | silent popup_id = popup_create(qf_item.bufnr, { 185 | pos: pos, 186 | line: line, 187 | col: wininfo.wincol, 188 | minheight: height, 189 | maxheight: height, 190 | minwidth: wininfo.width - 2, 191 | maxwidth: wininfo.width - 2, 192 | firstline: firstline, 193 | title: title, 194 | close: 'button', 195 | hidden: true, 196 | padding: [0, 1, 1, 1], 197 | border: [1, 0, 0, 0], 198 | borderchars: [' '], 199 | moved: 'any', 200 | mapping: false, 201 | filter: (winid: number, key: string): bool => Popup_filter(firstline, winid, key), 202 | filtermode: 'n', 203 | highlight: 'QfPreview', 204 | borderhighlight: ['QfPreviewTitle'], 205 | scrollbarhighlight: 'QfPreviewScrollbar', 206 | thumbhighlight: 'QfPreviewThumb', 207 | callback: Popup_cb 208 | }) 209 | 210 | # Set firstline to zero to prevent jumps when calling win_execute() #4876 211 | popup_setoptions(popup_id, {firstline: 0}) 212 | setwinvar(popup_id, '&number', Getopt('number')) 213 | setwinvar(popup_id, '&smoothscroll', true) 214 | setwinvar(popup_id, '&conceallevel', 2) 215 | 216 | if !empty(Getopt('sign')->get('text', '')) 217 | setwinvar(popup_id, '&signcolumn', 'number') 218 | endif 219 | 220 | if &g:breakindent 221 | setwinvar(popup_id, '&breakindent', true) 222 | endif 223 | 224 | if !empty(Getopt('sign')) && qf_item.lnum > 0 225 | sign_define('QfErrorLine', Getopt('sign')) 226 | sign_place(0, 'PopUpQfPreview', 'QfErrorLine', qf_item.bufnr, {lnum: qf_item.lnum}) 227 | endif 228 | 229 | if popup_getpos(popup_id).scrollbar > 0 230 | popup_move(popup_id, { 231 | minwidth: wininfo.width - 3, 232 | maxwidth: wininfo.width - 3 233 | }) 234 | endif 235 | popup_show(popup_id) 236 | 237 | if Getopt('matchcolumn') && qf_item.lnum > 0 && qf_item.col > 0 238 | var lines: list = getbufline(qf_item.bufnr, qf_item.lnum, qf_item.end_lnum > 0 ? qf_item.end_lnum : qf_item.lnum) 239 | var col: number = qf_item.col 240 | const max_col: number = strlen(lines[0]) 241 | var end_col: number = qf_item.end_col 242 | 243 | if qf_item.vcol == 1 244 | col = Display2byte(lines[0], qf_item.col) 245 | if qf_item.end_col > 0 246 | end_col = Display2byte(lines[-1], qf_item.end_col) 247 | endif 248 | endif 249 | 250 | if col > max_col 251 | col = max_col 252 | endif 253 | 254 | if qf_item.end_col > 0 255 | const max_end_col: number = strlen(lines[-1]) + 1 256 | if end_col > max_end_col 257 | end_col = max_end_col 258 | endif 259 | lines[-1] = strpart(lines[-1], 0, end_col - 1) 260 | lines[0] = strpart(lines[0], col - 1) 261 | const charlen: number = lines->join("\n")->strcharlen() 262 | matchadd('QfPreviewColumn', $'\%{qf_item.lnum}l\%{col}c\_.\{{{charlen}}}', 1, -1, {window: popup_id}) 263 | else 264 | matchaddpos('QfPreviewColumn', [[qf_item.lnum, col]], 1, -1, {window: popup_id}) 265 | endif 266 | endif 267 | 268 | return popup_id 269 | enddef 270 | -------------------------------------------------------------------------------- /doc/qfpreview.txt: -------------------------------------------------------------------------------- 1 | *qfpreview.txt* Preview the current quickfix item in a popup window. 2 | 3 | Author: bfrg 4 | Website: https://github.com/bfrg/vim-qf-preview 5 | License: Same terms as Vim itself (see |license|) 6 | 7 | ============================================================================== 8 | INTRODUCTION *vim-qf-preview* *qfpreview* 9 | 10 | vim-qf-preview is a |ftplugin| for the |quickfix-window| and |location-list-window| 11 | to quickly preview the location of the quickfix error under the cursor in a 12 | |popup-window|. 13 | 14 | The popup window is opened directly above the quickfix window, without 15 | rearranging the current window layout. Moving the cursor in any direction 16 | closes the popup window. 17 | 18 | ============================================================================== 19 | MAPPINGS *qfpreview-mappings* 20 | 21 | Quickfix window ~ 22 | 23 | (qf-preview-open) *(qf-preview-open)* 24 | Preview the file under the cursor at the current quickfix location 25 | in a popup window. The window will be scrolled such that the 26 | buffer line with the error is at the top of the popup window. 27 | 28 | Note: To avoid conflicts with other plugins, the key mapping is 29 | not bound to any key-sequence by default. You will first have to 30 | bind (qf-preview-open) to a key of your choice. 31 | 32 | For example, to open the popup window with "p", add the following 33 | to |qf.vim|, for example, in ~/.vim/after/ftplugin/qf.vim: > 34 | nmap p (qf-preview-open) 35 | < 36 | Or alternatively, if you prefer keeping your plugin settings in 37 | your |vimrc|: > 38 | augroup qfpreview 39 | autocmd! 40 | autocmd FileType qf nmap p (qf-preview-open) 41 | augroup END 42 | < 43 | *qfpreview-popup-mappings* 44 | Popup window mappings ~ 45 | 46 | The following default keys can be used while the popup window is open: 47 | 48 | CTRL-J Scroll popup window down one text line. 49 | CTRL-K Scroll popup window up one text line. 50 | SHIFT-HOME Scroll to first line of displayed buffer. 51 | SHIFT-END Scroll to bottom of displayed buffer. 52 | r Scroll back to error line ("reset"). 53 | CTRL-C, q Close the popup window. 54 | 55 | All keys are configurable. See |qfpreview-config| below. 56 | 57 | ============================================================================== 58 | MOUSE EVENTS *qfpreview-mouse* 59 | 60 | While the mouse pointer is on the popup window, mouse scroll events will cause 61 | the text to scroll up or down as one would expect. Clicking on "X" in the top 62 | right corner will close the window. 63 | 64 | ============================================================================== 65 | CONFIGURATION *qfpreview-config* 66 | 67 | b:qfpreview *b:qfpreview* 68 | g:qfpreview *g:qfpreview* 69 | 70 | The default key mappings and the appearance of the popup window can be changed 71 | through the buffer variable b:qfpreview in |qf.vim|, or through global 72 | variabel g:qfpreview. The variable must be a |Dictionary| containing any of 73 | the following entries: 74 | 75 | *qfpreview.close* 76 | close Key to press for closing the popup window. 77 | Note: CTRL-C always closes the popup window. 78 | Default: q 79 | *qfpreview.scrolldown* 80 | scrolldown Key to press for scrolling the text down. 81 | Default: CTRL-J 82 | *qfpreview.scrollup* 83 | scrollup Key to press for scrolling the text up. 84 | Default: CTRL-K 85 | *qfpreview.halfpagedown* 86 | halfpagedown Key to press for scrolling the popup window one half page 87 | down. 88 | Default: none 89 | *qfpreview.halfpageup* 90 | halfpageup Key to press for scrolling the popup window one half page 91 | up. 92 | Default: none 93 | *qfpreview.fullpagedown* 94 | fullpagedown Key to press for scrolling the popup window one full page 95 | down. 96 | Default: none 97 | *qfpreview.fullpageup* 98 | fullpageup Key to press for scrolling the popup window one full page 99 | up. 100 | Default: none 101 | *qfpreview.top* 102 | top Key to press for scrolling the popup window to the top of 103 | the buffer. 104 | Default: SHIFT-HOME 105 | *qfpreview.bottom* 106 | bottom Key to press for scrolling the popup window to the bottom 107 | of the buffer. 108 | Default: SHIFT-END 109 | *qfpreview.reset* 110 | reset Key to press for scrolling the popup window back to the 111 | error line. 112 | Default: r 113 | *qfpreview.next* 114 | next Key to press for jumping to the next quickfix item in the 115 | current list. This is the same as if you closed the popup 116 | window, moved the cursor to the next valid quickfix entry 117 | and opened it again. 118 | Default: none 119 | *qfpreview.previous* 120 | previous Key to press for jumping to the previous quickfix item in 121 | the current list. 122 | Default: none 123 | *qfpreview.height* 124 | height Number of text lines to display in the popup window. 125 | Default: 15 126 | *qfpreview.offset* 127 | offset Number of buffer lines to show above the quickfix location 128 | in the popup window. 129 | Default: 3 130 | *qfpreview.number* 131 | number Enable 'number' in the popup window. 132 | Default: |false| 133 | *qfpreview.sign* 134 | sign Place a |sign| at the quickfix location in the displayed 135 | buffer. This entry must be a dictionary with sign 136 | attributes. See the {dict} argument in |sign_define()| for 137 | valid entries as well as the examples below. 138 | Default: `{linehl: 'CursorLine'}` 139 | *qfpreview.matchcolumn* 140 | matchcolumn Highlight the column of the current quickfix item in the 141 | popup window using the highlight group |QfPreviewColumn|. 142 | Default: |true| 143 | 144 | ============================================================================== 145 | EXAMPLES *qfpreview-examples* 146 | 147 | 1. Override the popup scrolling keys: > 148 | vim9script 149 | # Option 1: in your vimrc 150 | g:qfpreview = { 151 | scrolldown: 'j', 152 | scrollup: 'k', 153 | halfpagedown: 'd', 154 | halfpageup: 'u', 155 | fullpagedown: 'f', 156 | fullpageup: 'b', 157 | number: v:true, 158 | offset: 5, 159 | height: 20 160 | } 161 | 162 | # Option 2: in ~/.vim/after/ftplugin/qf.vim 163 | b:qfpreview = { 164 | scrolldown: "\", 165 | scrollup: "\", 166 | close: "\", 167 | height: 20 168 | } 169 | < 170 | 2. Instead of displaying a cursorline, display a sign in the 'signcolumn': > 171 | g:qfpreview = {sign: {text: '>>', texthl: 'Search'}} 172 | < 173 | 4. Same as 2., but also enable the 'number' column. The placed sign is 174 | displayed in the 'number' column: > 175 | g:qfpreview = { 176 | number: true, 177 | sign: {text: '>>', texthl: 'Search'} 178 | } 179 | < 180 | ============================================================================== 181 | HIGHLIGHTING *qfpreview-highlight* 182 | 183 | The following highlighting groups are used for the popup window: 184 | *hl-QfPreview* 185 | QfPreview Normal text in the popup window. This is the equivalent of 186 | the |hl-Normal| highlight group in regular windows. 187 | By default links to |hl-Pmenu|. 188 | *hl-QfPreviewTitle* 189 | QfPreviewTitle Title (top line) of the popup window. 190 | By default links to |hl-Pmenu|. 191 | *hl-QfPreviewScrollbar* 192 | QfPreviewScrollbar Highlight group name for the |popup-scrollbar|. The 193 | background color is what matters. 194 | By default links to |hl-PmenuSbar|. 195 | *hl-QfPreviewThumb* 196 | QfPreviewThumb Highlight group name for the |popup-scrollbar| thumb. The 197 | background color is what matters. 198 | By default links to |hl-PmenuThumb|. 199 | *hl-QfPreviewColumn* 200 | QfPreviewColumn Highlight group name for highlighting the column of the 201 | current quickfix item in the popup window. 202 | By default links to |hl-QuickFixLine|. 203 | 204 | vim:tw=78:et:ft=help:norl: 205 | --------------------------------------------------------------------------------