localcfg/quickfix.vim
¶
Don’t limit ourselves to plain ASCII encoding:
scriptencoding utf-8
Enforce vim script implementation to reduce ambiguities and improve robustness:
scriptversion 4
Configure my custom maps for quickfix:
call keymaps#mnemonic_map('quickfix', #{key: 'f', local: v:true})
See also
… and location lists:
call keymaps#mnemonic_map('location', #{local: v:true})
See also
Find occurrences of current word, last search or lines that are too long:
for [s:key, s:pat] in [
\ ['w', '<C-r>=expand("<cword>")<CR>'],
\ ['s', '<C-r>=getreg("/")<CR>'],
\ ['l', '^.\{<C-r>=&tw<CR>}.\+$'],
\ ]
for s:type in ['q', 'l']
for s:where in ['', '%']
let s:prefix = s:type ==# 'l' ? 'l' : ''
let s:cmd = s:where ==# '' ? 'grep' : 'vimgrep'
call keymaps#quickfix_key(
\ s:type,
\ 's' .. (s:where ==# '' ? toupper(s:key) : s:key),
\ printf(':%s%s /%s/g %s', s:prefix, s:cmd, s:pat, s:where))
endfor
endfor
endfor
See also
Tip
Lowercase keys are file local, and uppercase are global. For example, lsW updates the location list with search results for the current word. The lowercase variant, lsw, performs the same action for the current buffer only.
Note
The current word functionality is already provided in part with [I or
more closely via vim-qlist, but I like the
buffer-only usage and the reflection of my other quickfix
maps.
Configure layered maps for useful quickfix and location functions:
for s:t in ['l', 'c']
for [s:key, s:cmd] in [
\ ['c', 'close'],
"\ 5 lines seems to be the magic number for *me*
\ ['o', 'open 5<CR><C-w>p\'],
\ ['O', 'open 5'],
\ ['b', 'bottom'],
\ ['n', 'next'],
\ ['p', 'previous'],
\ ['r', 'rewind'],
\ ['l', 'last'],
\ ['<Down>', 'below'],
\ ['<End>', 'bottom'],
\ ['<Left>', 'before'],
\ ['<PageDown>', 'newer'],
\ ['<PageUp>', 'older'],
\ ['<Right>', 'after'],
\ ['<S-Down>', 'next'],
\ ['<S-Up>', 'previous'],
\ ['<Up>', 'above'],
\ ]
call keymaps#quickfix_key(s:t, s:key, s:cmd)
endfor
endfor
See also
Configure shortcuts to clear quickfix lists optionally retaining their title for further use:
for s:t in ['qf', 'loc']
call keymaps#quickfix_key(
\ s:t[0], 'x',
\ printf(':call set%slist(%s[], "r", ' ..
\ '#{items: [], title: misc#get_qf_title("%s")})',
\ s:t, (s:t ==# 'loc' ? '0, ' : ''), s:t))
call keymaps#quickfix_key(
\ s:t[0], 'X',
\ printf(':call set%slist(%s[], "f", #{title: ""})',
\ s:t, (s:t ==# 'loc' ? '0, ' : '')))
endfor
See also
Shortcut command to rename current list::
command! -bar -nargs=1 QFRename
\ call setqflist([], 'a', #{title: <q-args>}) | redrawstatus!
command! -bar -count -nargs=1 LocRename
\ call setloclist(v:count, [], 'a', #{title: <q-args>}) | redrawstatus!
Note
The prefixes were chosen to match vim-editqf’s naming.