단일 명령을 사용하여 vi 편집기에서 100 줄 삭제


33

우분투를 사용하고 vi편집기 에서 100 줄을 모두 삭제하려고하는데 한 명령 으로이 작업에 대한 인터뷰 질문이 있습니다.


VI 솔루션이 아니라 명령 행에서 : echo -n > <file>파일에서 모든 행을 제거합니다 (실제로 ""로 파일을 덮어 씁니다).
azz

3
@Der 전혀 사용할 필요가 없습니다 echo. > $file잘 작동합니다.
CVn

4
vi인터뷰에서 어떤 질문을 합니까?
CVn

2
이 질문은 vi에 대한 기초 지식으로 쉽게 대답 할 수 있습니다. vim이 설치된 컴퓨터 (우분투에서는 vim-gtkvim 내의 xclipboard에 액세스 할 수 있기 때문에 패키지를 권장합니다 ) vimtutor에서 vim이 아닌 명령 줄에 입력 하여 기본 사항에 대한 대화 형 자습서를 받으십시오 . 30 분 이상 걸리지 않아야하며 vi / vim을 사용하는 가장 좋은 초보자 안내서입니다.
evilsoup

1
@ MichaelKjörling 나는 신청자가 vi( 사전 또는 이력서)에 대한 사전 경험을 언급 했거나 질문에 "프리미엄 관리자로서 명령 행 편집자에 대해 알아야 함 ? 사용한 적이 vi있습니까? "
와일드 카드

답변:


61

일반 모드에서는

100dd

dd현재 줄을 삭제합니다. 해당 명령 앞에 붙으면 100100 번 반복됩니다.

현재 행에서 시작하여 파일에 100 개 미만의 행이있는 경우 vi구현 에 따라 임의의 행을 삭제하거나 삭제하지 않습니다. 의 경우 aka 옵션의 vim설정 여부에 따라 다릅니다 .cpcompatible


잘못된 anwser 만 현재 행을 삭제한다
마유 르 메타

한 번에 하나의 명령으로 100 줄을 삭제하고 싶습니다
mayur Mehta

13
100dd정답입니다. 네가 뭘하는지 궁금해
ott--

1
@mayurMehta는 어떤 회사가 이와 같은 질문을하고 있는지, 그들이 어떤 답변을 기대하는지 모릅니다. 그러나 초보자 VI 사용자는 100dd가 정답이라는 것을 알고 있습니다.
Munim

1
@vgoff 모르겠다 .. 기본 vim 기술을 테스트하기위한 일반적인 솔루션을 찾고 있지 않다면 인터뷰 대상자들을 속이는 까다로운 질문 일 뿐이다. 100dd가 답이라고 말하고 싶습니다. 면접관이 "현재 커서에서 파일이 100 줄 미만이면 어떻게됩니까?"라고 물으면 "명령은 현재 커서에서 가능한 것을 삭제합니다"라고 대답합니다. 그것은 완벽하게 합리적입니다. 면접관이 명확하지 않으면 왜 커서가 첫 줄에 있지 않습니까? 나는 이런 트릭 질문이 싫어.
Munim

44
  1. 현재 행에서 100 행 앞으로 삭제

    • dd (현재 줄 삭제)를 100 번 반복하십시오.

      100dd
      
    • 현재 행에서 99 행 앞으로 삭제

      d99j
      
  2. 현재 줄을 포함하여 100 줄 뒤로 삭제

    d99k
    
  3. 라인 번호로 특정 범위의 라인을 삭제

    :1,100d
    
  4. 현재 줄로 시작하는 범위에서 줄을 삭제

    :.,.+99d
    


2
번호 4는 101 번째 줄 (0 + 100)까지 현재 줄 (0)을 삭제하므로 요청 된 100 줄 대신 101 줄을 시도합니다. 시도:.,+99d
Olivier Dulac

드랏, 그리고 나는 운동을 올바르게했다! 감사.
쓸모없는

100dd는 나에게도 효과가 없었지만 위의 # 4는 Solaris 10의 VI에서 제대로 작동했습니다.
DemiSheep

8

경우 모든 파일의 행을 삭제할 수 있으며,이 VI 명령은 삭제의 범위를 지정합니다 :

:1,$d

1첫 번째 줄을 $나타내고 마지막 줄을 나타냅니다


또는 :%d ( ":"컨텍스트에서 ": % ..."는 ": 1, $ ..."의 바로 가기입니다.)
Olivier Dulac

또한 좋은 : d G키 & rarr; 실제 [예 : 맨 위 줄]에서 맨 아래 줄까지의 모든 컨텐츠 삭제
erch

3

파일의 모든 줄을 삭제 하시겠습니까? 로 파일을 엽니 다 vi. 파일을 열 때 커서의 기본 위치 인 첫 번째 줄의 시작 부분에을 누른 Esc다음을 누릅니다 dG.

참고로 작업 d은 삭제를 G나타내며 파일의 마지막 줄을 나타냅니다. 따라서 어떤 행에서든을 누르면 dG현재 행에서 시작하여 마지막 행까지 모든 행이 삭제됩니다.

삭제할 연속 행 (예 : 101 ~ 200 행)을 알고있는 경우 다음 키 시퀀스를 입력하십시오 Esc:101,200d.


파일을 방금 연 상태에서 파일의 시작 부분에있는 경우에는 Esc 키를 누를 필요가 없습니다. 표준 모드에서는 자동으로 (기본적으로) 있습니다.
vgoff

3

파일의 어디에 있든지 상관없이 할 수 있습니다 ggdG

:%d적은 키를 누르면 더 잘 작동합니다. 음, 계산 shiftenter실제로, 위의 것보다 두 개 더 키 입력을 키를.

같은 수행 100dd에만 삭제할 것 까지 당신이 곳에서 100 선을, 그리고 현재 라인의 위치에 따라, 파일에서 모든 행을 삭제하지 않을 수 있습니다.


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