O Vim não possui uma função interna que faz isso. Provavelmente, a maneira mais "vim-like" de fazer isso é definir um objeto-texto .
Objetos de texto são um recurso vim extremamente útil que permite fazer algo assim:
dip "(d)elete (i)nside (p)aragraph
ou
yaW "(y)ank (a)round this (W)ORD
Podemos definir um objeto de texto para "linhas vazias". Vamos usar 'e' como nosso mnemônico. Isso significa que os recursos que estamos procurando são
die "delete inside this empty block (leaving one blank line)
e
dae "Delete around this empty block (Leaving no blank lines)
O melhor dos objetos de texto é que adicionar isso fará com que todos os outros operadores também trabalhem. Então você pode fazer cie
, ou yie
também. Aqui estão as linhas relevantes para adicionar ao seu .vimrc
vnoremap ie :<C-u>silent! normal! ?^.?+1<C-v><cr>V/^./-1<C-v><cr>k<cr>
onoremap ie :<C-u>silent! normal! ?^.?+1<C-v><cr>V/^./-1<C-v><cr>k<cr>
vnoremap ae :<C-u>silent! normal! ?^.?+1<C-v><cr>V/^./-1<C-v><cr><cr>
onoremap ae :<C-u>silent! normal! ?^.?+1<C-v><cr>V/^./-1<C-v><cr><cr>
Eu não me preocuparei em explicar cada uma delas (já que a maioria delas é muito parecida), mas a idéia básica é que mapeamos ie
para este conjunto de pressionamentos de tecla no modo normal:
?^.?+1<C-v><cr>V/^./-1<C-v><cr>k
Vamos dividir isso:
? " Search backwards
^. " For a non-blank line
?+1 " And offset to one line forward. (So that we find the first blank after a non-blank)
<C-v><cr> " Enter. (The <C-v> is necessary because we enter it from :normal
"Start a visual selection
V
/ " Search forwards
^. " For a non-blank line
/-1 " And offset to one line backwards.
<C-v><cr> " Enter. (The <C-v> is necessary because we enter it from "normal"
k " (optional) if this is an 'i' mapping, not an 'a' mapping, move up one line so that we leave a line
Isso não é exatamente o mesmo que o emacs faz. Mas, novamente, você está usando o vim afinal. Você não deve tentar copiar exatamente a mesma funcionalidade. Isso lhe dará uma funcionalidade semelhante, mantendo a mesma sensação "vim-esque".