2011-07-29 6 views
1

나는이 문제를 여러 번 경험했다 : 나는 소스 코드를 가지고있다. 그러나 이것을 Wordpress에 복사/붙여 넣기하고 <code></code>로 둘러 싸서 시작 공백을 "압축"한 것이다.Vim regex help : 공백을 " "로 변경하십시오.

따라서 모든 공간 &nbsp;로 줄 시작 부분에 만 어떻게 바꿀 수 있었는지 알고 싶습니다.

즉,

 extend: 'Ext.panel.Panel', 

&nbsp;&nbsp;&nbsp;&nbsp;extend: 'Ext.panel.Panel', 
가됩니다.
+0

사용

...
대신 – emnoor

답변

2

내가 이 순서대로 아래에 나와있는 문제를 해결하는 다음과 같은 세 가지 솔루션을 제안 할 것입니다 내 개인의 취향.

  1. 앞의 원자 일치 구문 (:help \@<= 참조)을 사용한 대체.

    :%s/\%(^ *\)\@<= /\&nbsp;/g 
    

    명령의 간결성이 중요한 경우

    , 하나는 "매우 마법"모드 (:help \v 참조)를 사용하여 비 - 포착하는 포착 기 (:help \%()을 변경을 줄일 수있다. 다만 선행 공백 후 라인을 분할

    :%s/\v(^ *)@<= /\&nbsp;/g 
    
  2. 두 개최 대체, 그 공백을 대체하고, 그 선을 재결합한다.

    :g/^/s/^ \+/&\r/|-s/ /\&nbsp;/g|j! 
    
  3. 텍스트에서 발생하지 않는 특정 심볼에 의해 선행 공백 각각을 대체하며, &nbsp; 해당 심볼을 변경하는 또 다른 두 단계 교체.

    :exe"g/^ \\+/norm!v//e\rr\r"|%s/\r/\&nbsp;/g 
    
+0

답변 해 주셔서 대단히 감사합니다. 이것은 매우 유용합니다. 나는 vim 도움을 읽는 데 약간의 시간을 할애 할 것이다. 시간, 시간, ime !! –

4
:%s/^ \+/\=repeat("&nbsp;",strlen(submatch(0))) 

하게 그러나 짧은 대체 명령이 있다면 그것은 나를별로 놀랍지는 않습니다. Vimgolfers 어서! 행의 시작 부분에서만 공백으로 precedeed 공백을 대체 할 모양 숨김 주장을 사용

+0

...의이 솔루션은 더! –

+0

이것은 (나에게) 가장 포괄적 인 해결책이며, 유용한 도움말 정보로 인해 ib의 대답을 확인했습니다. 너무 빨리 대답 해 주셔서 다시 한번 감사드립니다. –

2

:

%s/\(^ *\)\@<= /\&nbsp;/g 
+0

허, 그것은 생각 과정의 우스운 우연의 일치입니다! 귀하의 답변을 알지 못했으며 거의 ​​동일한 해결책을 제안했습니다. 그런데, 캡쳐 그룹'\ ('. –

+0

)을 사용하면 문자를 더 짧게 만들 수 있습니다. :) –

+0

좋아, 패턴을 더 짧게 만들 수 있습니다 :': % s/\ v^*) @<=/\  /g' :-) –