줄 바꿈을 제외한 전체 줄을 삭제할 수 있습니까?


33

vim에서 매우 일반적인 작업은 강박 적이며 파일에 공백을 남기지 않기 때문에 전체 줄 의 내용 을 삭제 하지만 줄 자체가 아닌 줄 바꿈은하지 않는 것입니다.

이 작업을 수행하는 내장 vim 방법이 있습니까? 아마도 d<movement command>수술?

지금까지 내가 가진 최선은 (문제의 줄에 있음) 0d$입니다. 더 빠른 방법이 있습니까?


2
공백을 수동으로 트리밍하는 대신 vim-better-whitespace 와 같은 플러그인을 사용하면 후행 공백을 강조 표시하고 한 번에 모두 제거하는 명령을 제공하며 저장시 자동으로 수행 할 수도 있습니다.
deltab


3
플러그인이 없어도 검색 및 바꾸기를 사용하여 후행 공백을 전체적으로 삭제할 수 있습니다.:%s/\s*$//
Kyle Strand

답변:


34

0D이것을 사용 하면 줄의 첫 번째 문자로 이동하여 줄 끝까지 삭제할 수 있습니다. ^D선행 공백을 그대로 두려면 사용할 수 있습니다 . 또한을 사용하여 이러한 작업을 반복 할 수 없습니다 .. .명령 으로 반복 할 수있는 수술을 원하면 David Lord의 답변을 참조하십시오.

도움말 주제 :

  • :help 0
  • :help D
  • :help ^

4
이것은 직접적이고, 요점에, 그리고 아마도 가장 적은 키 입력이지만 .명령을 사용하여 반복 할 수는 없습니다 . 이러한 이유로, 내 생각 cc<Esc>이나 S<Esc>당신이 반복 걱정하면 더 매력적이다.
tommcdo

사실입니다. 그러나 매크로로 기록하고을 사용하여 반복 할 수 .있습니다.
EvergreenTree

일반적으로 매크로는로 반복 될 수 없습니다 .. 키 입력이 대화식으로 입력 된 것처럼 작동하므로 개별 명령이 개별적으로 처리됩니다. 를 사용 .하면 매크로의 마지막 명령 만 반복됩니다.
tommcdo

나는 그것을 테스트했지만 그것이 나를 위해 작동하는 방식이 아닙니다. 매크로를 기록한 다음을 사용하여 매크로를 사용하면 나중에 @{reg}반복 할 수 있습니다 ..
EvergreenTree

1
매크로의 마지막 명령 인을 반복합니다 D. 0D작업 후 커서는 열 0에 남습니다. 커서가 이미 줄의 시작 부분에 있으면 (다른 줄로 이동 한 후) 매크로가 올바르게 반복 된 것처럼 보입니다. 줄에서 커서를 앞으로 이동하고 입력 해보십시오 . .반복되는 것만 볼 수 있습니다 D.
tommcdo

20

cc <Esc>당신이 묻는대로 할 것 0D입니다. 나중에 그 줄에 무언가를 넣고 싶다면 cc가장 좋습니다.


2
Shift를 포함 시키면 동일하고 쉬울 수 있습니다.
Holloway

4
이것이 "가장 깨끗한"솔루션은 아니지만 한 가지 장점이 있습니다. 정확히 하나의 동작이므로 .명령을 사용하여 반복 할 수 있습니다. 반대로, 0D(선택된 답변에서 제안 된) 0동작과 D명령 의 두 가지 동작 입니다.
tommcdo

@Trengot 내 vimrc에 매핑 했기 때문에 아마 0D나 보다 쉽습니다 . 그래서 내 손은 집으로 나갈 필요조차 없습니다. jk<Esc>
EvergreenTree

1
@Nobilis 답변보기 : S"Synonym for cc"
Volker Siegel

14

S그런 다음 Ctrl+C또는 Esc정확히 동일한 기능을 수행하는 것 같습니다.

그런 다음 .단일 조치를 구성 하므로 반복 할 수 있습니다 .


2
나는 이것을 답변으로 추가하려고 생각한 다음 당신의 것을 보았습니다
sbell

7

0D아마 당신이 원하는 것입니다. 행 (및 커서 앞의 모든 문자)은 그대로두고 커서에서 행 끝까지 삭제합니다.


Altho이 답변은 1 살짜리 almos 입니다. 커서 위치가 아니라 줄의 시작 부분에서0D 삭제 될 것 입니다.
FliiFe

4

나는 일반적으로 사용 ddO합니다. dd현재 줄을 삭제하고 O(즉, 대문자 o) ​​새 줄을 추가하십시오.

이것은 3 dd번의 키 입력이지만 1과 반으로 만 계산되므로 O입력하기가 쉽습니다 $.

0D예를 들어이 코드 ( !···탭이 있고 커서 █)를 사용하여 자동 들여 쓰기를 수행한다는 점 에서 솔루션과 다릅니다 .

def asd():
!···if foo:
!···!···foo()█
!···!···foobar()

0D 당신을 떠날 것입니다 :

def asd():
!···if foo:
█
!···!···foobar()

그리고 ddO당신을 떠날 것입니다 :

def asd():
!···if foo:
!···!···█
!···!···foobar()

그리고이 <Esc>직후에을 누르면 Vim은 자동 들여 쓰기를 제거해야합니다 0D.

'올바른'방법은 없습니다. 정확하게 원하는 것을 선택합니다. 나는 ddO그것이 더 유연하고 "내 손가락에"있기 때문에 선호합니다 :-)


2
^D공백은 그대로 둡니다.
EvergreenTree

O삽입 모드를 유지 하므로 cc자동 들여 쓰기가없는 경우를 제외하고는와 같습니다.
Kyle Strand

파일의 마지막 줄에서 다르게 동작합니다.
tommcdo

0

그리고 하나의 소중한 키 스트로크를 저장 0C하려면 현재 줄의 모든 문자를 삭제하고 삽입 모드로 전환하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.