2013-07-25 2 views
5

I 파일을 가정 (줄 바꿈^N으로 표시)vim에서 블록 텍스트의 공백을 정규화하는 방법은 무엇입니까?

aaaa^n 
         bbbb^n 
cccc^n 

블록 (아마도 영상 선택을 사용)의 우측 부분에 공백 백필 간단한 명령이이고; 아래처럼, 나는 종종 선행 공백을 제거하는 방법에 대한 질문을 볼 수 있지만,이 경우에는 내가 블록에서 가장 긴 공백이 아닌 문자로 NORMED 공백을 선도하려는 :

aaaa      ^n 
         bbbb^n 
cccc      ^n 
+1

[Vim은 일치하는 줄의 길이를 얻습니다.] (http://stackoverflow.com/q/13324093) 흥미롭고 다소 관련된 문제와 답변이 있습니다. – glts

+1

내 질문보기 : http://stackoverflow.com/questions/10057562/create-virtualedit-block-around-selection – Reman

+0

[tabular plugin] (https://github.com/godlygeek/tabular)을 다운로드하십시오. –

답변

4

Probaly 가장 쉬운 방법은 어떻게하는 것

set virtualedit=all 

선택할 블록의 왼쪽 상단으로 이동하십시오. Blockwise 시각적 선택 (<C-V>)을 사용하고 원하는 행을 선택하십시오. 그런 다음 $을 눌러 시각적 블록을 줄 끝까지 확장합니다.

그런 다음 그런 다음 다시 자체에 선을 뽑으면 어떤 과거에 gvp을 입력 y

와 선택을 꺼낼. (gv은 마지막 시각적 블록을 다시 선택합니다). 완료되면 모든 라인이 가장 긴 라인 + 1의 길이가되도록 확장합니다.

이것이 작동하는 이유. 가상 편집을 사용할 때 시각적 선택은 각 라인을 레지스터에 넣을 때 가장 긴 길이까지 확장합니다. 조금 참여 않지만

이, :%s/ $//

+1

+1 우수 사용''virtualedit = all ''. 나는 이것이 각 행의 끝 부분에 여분의 공간을 추가한다는 것을 제외하고는 위대한 것을 발견했다. ': % s /.$//'로 쉽게 수정되었습니다. –

+0

@PeterRincker 그래, 나는 그 사실을 알아 차렸고 그것을 없애기위한 환경을 찾고 있었다. – FDinoff

+0

이것이'$'이 어떻게 작동하는지에 대한 이유라고 생각합니다. 항상 행의 마지막 문자를지나 한 자리 이동합니다. 나는 시각적 인 블록 모드를위한'g_'가 있었으면 좋겠다. –

3

당신은 하나의 :substitute에 그것을 할 수와와 쉽게 고칠 마지막에 여분의 공간을 추가합니다 :

:'<,'>s/$/\=repeat(' ', max(map(getline(line("'<"),line("'>")),'strdisplaywidth(v:val)'))-strdisplaywidth(getline('.')))/ 

이 명령을 시각적 선택에 적용됩니다. 범위를 더 많이 제어해야하는 경우 range을 허용하는 함수에서 대체 값을 래핑하는 것이 좋습니다.

어떻게 작동합니까? :h sub-replace-expression를 참조하십시오 대체 문자열에서

  • \=는 식을 계산할 수 있습니다.

  • 대체 할 공백 문자 수는 repeat(' ', ...)입니다. 공백

    문자
  • 정확한 수는

    • 선택, max(map(getline(start,end), 'strdisplaywidth(v:val)')) 최대 라인 길이 및
    • 현재 라인 strdisplaywidth(getline('.'))의 폭의 차이로서 결정된다.

참고 strdisplaywidth() 나이 VIMS에서 사용할 수 없습니다,하지만 정확하게 라인에 모두 탭과 공백을 처리하는 것이 필요하다. 값싼 대체품으로 strlen()을 사용하십시오.)

+0

이것은 제 의견으로는 최선의 해결책은 아니지만, 저는 그 명령에 대해 조금은 두려워합니다. 한 번 일자리에 대한 – ravron

+1

, 이것은 조금 지나치게 많습니다. 그러나이 작업을 매우 자주 수행해야하는 경우이 작업을 쉽게 수행 할 수 있도록 함수 또는 매핑으로 작성할 수 있습니다. 그냥 비주얼을 선택한 다음 'ABC' +1을 누르십시오! – Kent

+0

@Kent glts는 함수와 매핑을 작성했지만 제거했습니다. 보고 싶으면 편집 기록을 확인하십시오. – FDinoff

관련 문제