diff options
Diffstat (limited to 'public/nvim/.nvim/plugin')
-rw-r--r-- | public/nvim/.nvim/plugin/qf-dd.vim | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/public/nvim/.nvim/plugin/qf-dd.vim b/public/nvim/.nvim/plugin/qf-dd.vim new file mode 100644 index 0000000..385c0c7 --- /dev/null +++ b/public/nvim/.nvim/plugin/qf-dd.vim @@ -0,0 +1,30 @@ +" https://stackoverflow.com/questions/42905008/quickfix-list-how-to-add-and-remove-entries +" When using `dd` in the quickfix list, remove the item from the quickfix list. +function! RemoveQFItem(mode) range abort + let l:qf_list = getqflist() + + " distinguish mode for getting delete index and delete count + if a:mode == 'v' + let l:del_qf_idx = getpos("'<")[1] - 1 + let l:del_ct = getpos("'>")[1] - l:del_qf_idx + else + let l:del_qf_idx = line('.') - 1 + let l:del_ct = v:count > 1 ? v:count : 1 + endif + + " delete lines and update quickfix + for item in range(l:del_ct) + call remove(l:qf_list, l:del_qf_idx) + endfor + call setqflist(l:qf_list, 'r') + + if len(l:qf_list) > 0 + execute l:del_qf_idx + 1 . 'cfirst' + copen + else + cclose + endif +endfunction + +autocmd FileType qf nmap <buffer> dd :call RemoveQFItem('n')<cr> +autocmd FileType qf vmap <buffer> dd :call RemoveQFItem('v')<cr> |