summaryrefslogtreecommitdiff
path: root/plugin
diff options
context:
space:
mode:
authorChristian Segundo2024-02-18 08:19:51 +0100
committerChristian Segundo2024-02-18 08:19:51 +0100
commit85d7d7c082bd84d3c701ceec3d477ee37db5c827 (patch)
treeb78f09285c5120783f94cf9c2465a46439af2b71 /plugin
parent7869bf2c310fbed680abd01d45a17057f857bf30 (diff)
downloadconfig-85d7d7c082bd84d3c701ceec3d477ee37db5c827.tar.gz
bootstrap
Diffstat (limited to 'plugin')
-rw-r--r--plugin/qf-dd.vim30
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>