diff options
author | Christian Segundo | 2024-02-18 08:19:51 +0100 |
---|---|---|
committer | Christian Segundo | 2024-02-18 08:19:51 +0100 |
commit | 85d7d7c082bd84d3c701ceec3d477ee37db5c827 (patch) | |
tree | b78f09285c5120783f94cf9c2465a46439af2b71 /plugin/qf-dd.vim | |
parent | 7869bf2c310fbed680abd01d45a17057f857bf30 (diff) | |
download | config-85d7d7c082bd84d3c701ceec3d477ee37db5c827.tar.gz |
bootstrap
Diffstat (limited to 'plugin/qf-dd.vim')
-rw-r--r-- | plugin/qf-dd.vim | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/plugin/qf-dd.vim b/plugin/qf-dd.vim new file mode 100644 index 0000000..385c0c7 --- /dev/null +++ b/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> |