2010-04-20 4 views
9

안녕하세요 Gvim에서 파일에 모든 주석 앞에 빈 줄 또는 두 개를 삽입해야합니다.VIM의 모든 주석 앞에 공백 행을 삽입하려면 어떻게해야합니까 (예 : "#")?

#comment 1 
#comment 2 
statement 1 
statement 2 
#comment 3 

comamnd를 실행 한 후에는 내가이 작업을 수행하려면 어떻게

#comment 1 

#comment 2 
statement 1 
statement 2 

#comment 3 

해야 하는가?

감사

업데이트 : 답변

그러나 코멘트가 연속 경우, 내가 그들 사이에 추가 할 줄 바꿈하지 않으

주셔서 감사합니다. 이것을 할 수있는 방법이 있습니까?

내가이 명령

#comment 1 

#comment 2 

답변

20

설명입니다 :

,515,

이것이 의미 :global/^#/normal O의 지름길 각 라인

  • 이 '#'으로 시작 (:global/^#/)
  • 는 않음 '일반 모드'(normal O)에서 'O'명령 - 어떤 할 수단 'O'키가 VIM 모드에서 '보통'(삽입이 아니라 명령이 아님) 모드에서 수행하는 작업. 그리고 'O'는 새 줄을 삽입합니다.
+0

(도 1 라인 작동) 가장 직관적이므로 어째서 어떻게 작동하는지 설명해야합니다. – matias

+0

설명 추가 –

+0

': g [lobal]'trumps': [s] [substitute]'+1 당신을 위해서 –

0

사용으로 원하는 해달라고

#comment 1 
#comment 2 

예 : 여기, :g/^#/norm O

확인 : 또한이 명령을 사용할 수 있습니다 :%s/^\ze\s*#/\r/

1

는 파일의 첫 번째 줄 앞에 더 줄 바꿈가 없을 것 같은 예제 출력이 보이는 첫 번째 줄

에 영향을주지 않습니다. lookbehind 체크를 추가하여이를 달성 할 수 있습니다. 첫 번째 줄이 일치하지 않도록, 현재 위치 전에 줄 바꿈있을 경우에만

:%s/^\n\@<=\ze\s*#/\r/

\n\@<= 일치. 자세한 내용은 :h \@<=

라인 체크으로도 수행 할 수 있습니다. 다음 정규 표현식은 첫 번째 행이 아닌 행만 찾습니다. 1 라인 아래

:%s/^\%>1l\ze\s*#/\r/

\%>1 일치한다.:h \%>l


을 참조하십시오 여기에 이전에는 주석 행은 가없는 경우 즉, 만, 현재 줄 앞에 줄 바꿈을 추가, 업데이트 된 질문 작동합니다 뭔가. 파일의 시작 부분이 전의 경우는

:g/^\%^\@<!\(^\s*#.*\n\)\@<!\s*#/norm O

^\%^\@<! 이 라인을 일치하지 않습니다. :h \%^ 및 : h \@<!

\(^\s*#.*\n\)\@<! 이전 줄의 첫 번째 비 공백 문자가 #이 아닌 경우에만이 줄과 일치시킵니다.

:

이 정규식뿐만 아니라 "개량 VI"에서 작동하는 솔루션,있다

 
#comment 1 
#comment 2 
statement 1 
statement 2 
#comment 3 

 
#comment 1 
#comment 2 
statement 1 
statement 2 

#comment 3 
2

에 변경됩니다 2, $의 g/^ [ TAB] */s/^/^ M/

여기서 TAB 및^M은 해당 제어 문자로 입력해야합니다.

희망이 도움이 - 내 덕분에 1 라인 문제에

0

또 다른 방법을 가리키는 위해 헤이 키에 가서 나는 이것이 지금까지 가장 좋은 대답이라고 생각

:s/^[ TAB]*#-1s/^/\r/ 
관련 문제