Maybe adding something like that to your `.vimrc` could be what you want: function! DeleteOver() let save_cursor = getpos(".") normal k normal dd call setpos(".", save_cursor) normal k endfunction function! DeleteUnder() let save_cursor = getpos(".") normal j normal dd call setpos(".", save_cursor) endfunction These functions delete the line under or the line over the current one and go back to the position before the deletion. For the function `DeleteOver()` we need to go up one line with `normal k` after the deletion because the deletion change the number of the original line which doesn't happend with `DeleteUnder()` You can also add this to your `.vimrc` nnoremap <Leader>d :call DeleteOver()<CR> nnoremap <Leader>D :call DeleteUnder()<CR> To create the mappings calling the functions.