Как удалить строки (строки) ниже текущей строки в vim?

Есть ли команда для удаления строки (или нескольких строк), которая находится ниже текущей строки? В настоящее время я делаю это как: j dd, а затем . повторить по мере необходимости. Есть ли команда, которая объединила бы все это?

UPDATE: Причина, по которой я хотел бы иметь такую ​​команду, заключается в том, что мне не нравится удаляться от текущей позиции, но удаляю строки ниже.

Ответ 1

Команда delete ex будет работать красиво.

:+,$d

Это приведет к удалению всех строк с текущего +1 до конца ($)

Чтобы удалить следующие две строки, следующий диапазон будет работать, +1,+2 или сокращенное +,+2

:+,+2d

В качестве @ib упомянутая команда :delete или :d переместит курсор к началу строки рядом с удаленным текстом. (Даже с установкой nostartofline). Чтобы преодолеть это, мы можем выполнить команду нормального режима ``. `` вернется в точное положение перед последним прыжком, в этом случае команда :d. Теперь наша команда

: + , + 2 d enter ` `

Или как одна команда ex

:+,+2d|norm! ``

Чтобы сделать это проще, мы завершаем все это командой:

command! -count=1 -register D :+,+<count>d <reg><bar>norm! ``

Теперь, чтобы удалить следующие следующие 3 строки:

:3D

Эта команда также может принимать {reg} как :delete и :yank. Таким образом, удаление следующих 4 строк в регистр a будет:

:4D a

Для получения дополнительной информации

:h :d
:h :command
:h :command-register
:h :command-count
:h ``

Ответ 2

"dG" должен работать. Это означает удаление всех строк до конца файла из текущего курсора.

Ответ 3

Это приведет к удалению всех строк ниже текущего:

jdG

К сожалению, это приведет к перемещению курсора к началу текущей строки после удаления.

Ответ 4

Хорошо, для этого просто вы можете использовать команду xxdd. Большую часть времени я знаю (по крайней мере, имею идею) размер script, который я редактирую. Итак, команды, как показано ниже, обычно более чем достаточно:

  • 99dd
  • 999dd, чтобы удалить 999 строк, начиная с позиции курсора.
  • 9999dd
  • 99999dd очень долго script;)

Ответ 5

Другие решения являются информативными, но я считаю, что для этого было бы проще использовать макрос:

qq (начинает запись)

jddk (спуститесь, удалите строку и вернитесь вверх - то есть вещь, которую вы хотите сделать)

q (запись на конец)

Теперь вы можете сделать @q для выполнения этого действия, поддерживая курсор в текущей позиции. Вы также можете сделать что-то вроде [email protected], чтобы удалить 5 строк под курсором.

И, наконец, если вы повторяете действие более одного раза, вы можете просто набрать @@ после первого запуска @q (это повторяет последний использованный макрос - в этом случае q)

Ответ 6

Это задание для отметок!

Попробуйте maj20dd`a

ma устанавливает метку файла 'a', j20dd делает удаление, которое вы хотите (20 строк в этом случае), и `a восстанавливает вас в положение метки (строка и столбец).

Очевидно, что этот шаблон можно расширить, чтобы сделать все, что вам нужно, прежде чем возвращаться к знаку. Если вы используете ma (или любую другую заглавную букву), метка будет действительно уникальной для разных файлов, поэтому вы можете даже редактировать ее в другом месте перед возвратом. Если у вас очень частое использование, вы можете сделать его макросом, как было предложено выше.

Ответ 7

Вы можете ввести количество удаляемых строк: j 2 0 d d k.

Ответ 8

Вы можете определить небольшую функцию, которая делает именно то, что вы описали: удалите следующие строки n под текущей строкой и восстановите исходные положение курсора.

function! DeleteNextLines(n, reg)
    let l = line('.')
    let m = min([a:n, line('$')-l])
    if m > 0
        let c = col('.')
        exe '+,+'.m 'd' a:reg
        call cursor(l, c)
    endif
endfunction

Кроме того, вы можете определить команду, которая принимает количество строк ниже delete (один, по умолчанию) и имя регистра для использования в качестве необязательного (как команда :delete).

:command! -range=1 -register -bar D call DeleteNextLines(<count>, <q-reg>)

Кроме того, вы можете определить отображение для запуска :D, если оно необходимо.