Что такое Vim-эквивалент функции Cma Co (delete-blank-lines
) в Emacs?
1 ответ
Vim не имеет встроенной функции, которая делает это. Вероятно, самый «похожий на vim» способ сделать это - определить текстовый объект.
Текстовые объекты - чрезвычайно полезная функция vim, которая позволяет вам делать что-то вроде этого:
dip "(d)elete (i)nside (p)aragraph
или же
yaW "(y)ank (a)round this (W)ORD
Мы можем определить текстовый объект для "пустых строк". Давайте использовать "е" в качестве нашей мнемоники. Это означает, что функции, которые мы ищем,
die "delete inside this empty block (leaving one blank line)
а также
dae "Delete around this empty block (Leaving no blank lines)
Самое замечательное в текстовых объектах заключается в том, что добавление этого заставит работать любой другой оператор. Таким образом , вы можете сделать cie
или yie
также. Вот соответствующие строки, чтобы добавить к вашему .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>
Я не буду объяснять каждый из них (так как большинство из них очень похожи), но основная идея заключается в том, что мы сопоставляем, ie
с этим набором нажатий клавиш в нормальном режиме:
?^.?+1<C-v><cr>V/^./-1<C-v><cr>k
Давайте разберемся с этим:
? " 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
Это не совсем то же самое, что и Emacs. Но опять же, вы используете Vim в конце концов. Вы не должны пытаться скопировать точно такую же функциональность. Это даст вам аналогичную функциональность, сохраняя при этом ощущение «vim-esque».