UFO ET IT

vim에서 현재 줄 아래의 줄을 삭제하는 방법은 무엇입니까?

ufoet 2020. 11. 15. 12:09
반응형

vim에서 현재 줄 아래의 줄을 삭제하는 방법은 무엇입니까?


현재 줄 바로 아래에있는 한 줄 (또는 여러 줄)을 삭제하는 명령이 있습니까? 현재 저는 jdd다음과 같이하고 있습니다. 그리고 .필요에 따라 반복합니다. 이 모든 것을 결합하는 명령이 있습니까?

업데이트 : 내가 그러한 명령을 갖고 싶은 이유는 현재 위치에서 멀어지고 싶지 않지만 아래 줄을 삭제할 수 있기 때문입니다.


delete ex 명령은 잘 작동합니다.

:+,$d

현재 +1에서 끝 ($)까지 모든 줄이 삭제됩니다.

다음이 추적 범위가 작동 할 선, 삭제 +1,+2또는 속기+,+2

:+,+2d

@ib가 언급했듯이 :delete또는 :d명령은 커서를 삭제 된 텍스트 옆의 줄 시작 부분으로 이동합니다. ( nostartofline세트로도). 이를 극복하기 위해 ``정상 모드 명령을 실행할 수 있습니다 . ``마지막 점프 이전의 정확한 위치로 다시 점프합니다 :d. 이 경우에는 명령입니다. 우리의 명령은 지금

:+,+2denter``

또는 하나의 전 명령으로

:+,+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 ``

dG작동해야합니다.
즉, 현재 커서에서 파일 끝까지 모든 행을 삭제합니다.


현재 행 아래의 모든 행이 삭제됩니다.

jdG

불행히도 삭제가 완료된 후 커서가 현재 줄의 시작 부분으로 이동합니다.


음, 간단하게 xxdd 명령을 사용할 수 있습니다. 대부분의 경우 편집중인 스크립트의 크기를 알고 있습니다 (적어도 아이디어는 있음). 따라서 아래와 같은 명령은 일반적으로 충분합니다.

  • 99dd
  • 999dd는 커서 위치에서 시작하는 999 줄을 제거합니다.
  • 9999dd
  • 매우 긴 스크립트의 경우 99999dd;)

다른 솔루션은 유익하지만 매크로를 사용하는 것이 더 간단하다고 생각합니다.

qq (녹음 시작)

jddk (아래로 내려 가서 줄을 삭제하고 위로 돌아가십시오. 즉, 원하는 작업)

q (녹음 종료)

이제 @q커서를 현재 위치에 유지하면서이 작업을 수행 할 수 있습니다 . 5@q커서 아래 5 줄을 삭제 하는 것과 같은 작업을 수행 할 수도 있습니다 .

마지막으로 작업을 두 번 이상 반복하는 @@경우 처음 실행 한 후에 입력 할 수 있습니다 @q(이 경우 마지막으로 사용 된 매크로가 반복됨 q).


이것은 마크를위한 일입니다!

시험 maj20dd`a

ma파일 별 마크 'a' j20dd를 설정하고 원하는 삭제 (이 경우 20 줄) `a를 수행하고 마크의 위치 (줄 및 열)로 복원합니다.

분명히이 패턴은 마크로 돌아 가기 전에 원하는 모든 작업을 수행하도록 확장 할 수 있습니다. 당신이 사용하는 경우 mA(또는 다른 대문자) 마크는 실제로 당신도 편집 다른 곳에서 반환하기 전에, 그래서 파일에서 고유해야합니다. 자주 사용하는 경우 위에서 제안한대로 매크로로 만들 수 있습니다.


삭제할 줄 수를 입력 할 수 j 20 dd k있습니다..


You can define a little function that does exactly what you described: delete the next n lines below the current line and restore initial cursor position.

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

Also, you can define a command that accepts the count of lines below to delete (one, by default) and the register name to use as an optional argument (just as :delete command).

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

Additionally you could define a mapping for running :D, if it's necessary.

참고URL : https://stackoverflow.com/questions/3624345/how-to-delete-lines-below-current-line-in-vim

반응형