탭으로 텍스트를 열화하는 방법 (vim 또는 셸)


6

데이터 입력 및 기타 목적을 위해 탭으로 구분 된 텍스트를 수동으로 조작해야하는 경우가 자주 있습니다. 이 작업을 수행 할 때 텍스트가 열에 올바르게 정렬되면 도움이됩니다. 예를 들어 (4 개의 공백 탭으로 가정) :

# original format
abcdefghijklmnop    field2
abcdefgh    field2
abcdefghijkl    field2

# ideal format
abcdefghijklmnop    field2
abcdefgh            field2
abcdefghijkl        field2

column유틸리티를 사용 하여이 방법으로 텍스트를 열화 하는 데 익숙 하지만 문제는 공백을 사용하여 열을 정렬하며 탭이 필요하다는 것입니다. 이 요구 사항은 또한 테이블 형식 플러그인을 배제하는 것으로 보입니다.

vim쉘 내부 또는 쉘에서 탭을 사용하여 텍스트를 구체적으로 열화 할 수있는 방법이 있습니까? groff/ 로 할 수있는 것처럼 tbl보이지만 솔직히 나는 그것을 엉망으로 만드는 것보다 손으로 열화하고 싶습니다 ....

답변:


5

csv.vim - CSV 파일에 대한 파일 유형 플러그인은 또한 탭으로 구분 된 파일을 지원하고있다 :ArrangeColumn그리고 :UnArrangeColumn그 명령을.


이것은 실제로 유망한 것으로 들립니다. 한 번 살펴보고 다시 연락 드리겠습니다. 감사!
kine

실제로 이것을 시도하지는 않았지만 플러그인의 문서를 기반으로 허용 된 답변으로 표시하고 어쨌든 다른 유용한 답변 만 작성되었다는 사실을 표시하려고합니다. 건배.
kine

색상을 변경하려면 fg 색상이 macvim으로 하드 코딩됩니다. github.com/b4winckler/macvim/blob/master/src/…
Nick

플러그인의 github 페이지에는 존재하지 않기 때문에 사용할 구문의 문서화 된 예제가 도움이 될 것입니다.
Ryan Tuck

5

탭 표시 크기를 가장 긴 필드보다 크게 설정하십시오.

# original format
abcdefghijklmnop<Tab>field2
abcdefgh<Tab>field2
abcdefghijkl<Tab>field2
I have spaces!<Tab>field2

Vim에서

:echo len("abcdefghijklmnop") " Reports 16
:set noexpandtab tabstop=17

이 명령을 하나의 명령으로 압축 할 수는 있지만 방법을 모르겠습니다. 최신 Vim을 실행하는 경우 :set list멋진 캐릭터로 하드 탭을 표시 할 수도 있습니다 (이 또한 구성 할 수 있음). 그렇지 않으면 그들은 ^I(원하는 것이 아닌) 또는 공백으로 표시됩니다.

# displays like this
abcdefghijklmnop>field2
abcdefgh>        field2
abcdefghijkl>    field2
I have spaces!>  field2

편집 : 실제 실행중인 vim의 예!


1

언급 된 Tabularize 또는 대체 Align 플러그인을 사용 하여 테이블을 올바르게 공간 정렬 한 경우 다음 명령을 사용하여 공백을 탭으로 변환 할 수 있습니다.

:%retab!
:%substitute/ \+/\t/g

첫 번째 명령은 너비를 변경하지 않고 가능한 경우 들여 쓰기를 탭으로 바꾸고 ( :set noexpandtab두 번째로 가정 ) 왼쪽 공간을 (더 큰) 탭 정지 로 변환합니다.


나는 이것이 효과가있을 것이라고 생각하지만, 필드 자체에 공백이 없다는 것을 절대적으로 확신 할 수있는 경우에만 가능합니다. 그렇지 않으면 필드 내의 공백과에 의해 남은 열 공백의 차이를 어떻게 알 수 있는지 잘 모르겠습니다 :retab. 더 이상적인 솔루션을 가진 사람이 없으면이 답변을 수락하겠습니다.
kine

초기 정렬은 필드 내의 공백을 처리하지 않으며 그에 따라 정렬되지도 않습니다. 그러한 데이터가 있다면 아마도 그 내부 공간을 일시적으로 대체해야 할 것입니다.
Ingo Karkat


-1

탭으로 구분 된 열은 표시하는 데 사용 된 프로그램에서 실제 의미를 존중하기 위해 탭 문자를 확장 / 축소 할 수있는 경우에만 작동합니다. Vim은 필자가 대부분의 다른 일반 텍스트 편집기에서 탭의 너비가 고정되어 있기 때문에 탭을 탭으로 사용할 수 없다고 생각합니다. Vim은 탭과 공백을 혼합하여 비슷한 결과를 얻을 수 있지만 더 이상 탭으로 분리되지는 않습니다.

모든 탭 / 공백 믹스를 각 쓰기마다 단일 탭으로 변환해야합니다.

간단히 말해서, 일반 텍스트 편집기는 아마도 작업에 적합한 도구가 아닐 것입니다.


"탭의 너비는 고정되어 있습니다"사실이 아닙니다. 내 대답을 참조하십시오. 다른 많은 편집자들은 탭 크기를 wel로 구성 할 수 있습니다.
Cheezmeister
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.