summaryrefslogtreecommitdiff
path: root/public/nvim/.nvim/plugin/qf-dd.vim
diff options
context:
space:
mode:
authorChristian Segundo2023-10-12 15:29:11 +0200
committerChristian Segundo2023-10-12 15:29:11 +0200
commit542613a0f58ccb3722c93b4b68677d7b5053fd57 (patch)
tree04a940df3e75a4b4cbe53cc3392c4e1c63fc8c6f /public/nvim/.nvim/plugin/qf-dd.vim
parent449a6f57a36862a8ff27b2a3cee0922f4e4d949e (diff)
downloaddotfiles-542613a0f58ccb3722c93b4b68677d7b5053fd57.tar.gz
Add nvim
Diffstat (limited to 'public/nvim/.nvim/plugin/qf-dd.vim')
-rw-r--r--public/nvim/.nvim/plugin/qf-dd.vim30
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>