현재 줄 바로 아래에있는 한 줄 (또는 여러 줄)을 삭제하는 명령이 있습니까? 현재 저는 jdd다음과 같이하고 있습니다. 그리고 .필요에 따라 반복합니다. 이 모든 것을 결합하는 명령이 있습니까?
업데이트 : 내가 그러한 명령을 갖고 싶은 이유는 현재 위치에서 멀어지고 싶지 않지만 아래 줄을 삭제할 수 있기 때문입니다.
현재 줄 바로 아래에있는 한 줄 (또는 여러 줄)을 삭제하는 명령이 있습니까? 현재 저는 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 ``
:+1,+5s!a!b!g커서 뒤의 4 줄에서 a를 b로 대체합니다). 더 많은 예제는 : help 명령 범위를 참조하십시오.
:+,$d|norm!``합니다. 그건 그렇고, 질문에서 언급했듯이 질문의 작성자는 현재 파일 아래의 여러 줄을 삭제하려고하지만 반드시 파일 끝까지 내려갈 필요는 없습니다.
set sol? `마크 는 어떻게 사용 하나요?
sol것만으로는 문제가 해결되지 않습니다. 예를 들어를 사용하여 세 줄을 삭제 :+,+3d하면 커서가 삭제 된 줄 다음 줄로 이동합니다.
현재 행 아래의 모든 행이 삭제됩니다.
jdG
불행히도 삭제 후 커서가 현재 줄의 시작 부분으로 이동합니다.
삭제할 줄 수를 입력 할 수 j 20 dd k있습니다..
k은 커서를 초기 줄 위로 이동합니다. 또한 때문에 커서 열 위치가 손실됩니다 dd.
dd(삭제 된 줄 옆에있는 줄의 공백이 아닌 첫 번째 문자로) 변경됩니다.
재미를 위해 설명했던대로 정확히 수행하는 작은 함수를 정의 할 수 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명령 과 마찬가지로 )을 정의 할 수 있습니다.
:command! -range=1 -register -bar D call DeleteNextLines(<count>, <q-reg>)
또한 :D 필요한 경우 위 명령 을 트리거하기위한 매핑을 정의 할 수 있습니다
.
let mapleader = ","2 :nmap <leader>d :D<CR>