문제

이 데이터 세트가 csv 파일에 있습니다.

1.33570301776, 3.61194e-06, 7.24503e-06, -9.91572e-06, 1.25098e-05, 0.0102828, 0.010352, 0.0102677, 0.0103789, 0.00161604, 0.00167978, 0.00159998, 0.00182596, 0.0019804, 0.0133687, 0.010329, 0.00163437, 0.00191202, 0.0134425 
1.34538754675, 3.3689e-06, 9.86066e-06, -9.12075e-06, 1.18058e-05, 0.00334344, 0.00342207, 0.00332897, 0.00345504, 0.00165532, 0.00170412, 0.00164234, 0.00441903, 0.00459294, 0.00449357, 0.00339737, 0.00166596, 0.00451926, 0.00455153
1.34808186291, -1.99011e-06, 6.53026e-06, -1.18909e-05, 9.52337e-06, 0.00158065, 0.00166529, 0.0015657, 0.0017022, 0.000740644, 0.00078635, 0.000730052, 0.00219736, 0.00238191, 0.00212762, 0.00163783, 0.000750669, 0.00230171, 0.00217917

보시다시피 숫자의 형식이 다르고 잘못 정렬되어 있습니다.Vim에서 열을 적절하게 신속하게 정렬하여 결과가 다음과 같은 방법이 있습니까?

1.33570301776,  3.61194e-06, 7.24503e-06, -9.91572e-06, 1.25098e-05, 0.0102828,  0.010352,   0.0102677,  0.0103789, 0.00161604, 0.00167978, 0.00159998, 0.00182596, 0.0019804,  0.0133687,  0.010329,   0.00163437, 0.00191202, 0.0134425 
1.34538754675,  3.3689e-06,  9.86066e-06, -9.12075e-06, 1.18058e-05, 0.00334344, 0.00342207, 0.00332897, 0.00345504,0.00165532, 0.00170412, 0.00164234, 0.00441903, 0.00459294, 0.00449357, 0.00339737, 0.00166596, 0.00451926, 0.00455153
1.34808186291, -1.99011e-06, 6.53026e-06, -1.18909e-05, 9.52337e-06, 0.00158065, 0.00166529, 0.0015657,  0.0017022, 0.000740644,0.00078635, 0.000730052,0.00219736, 0.00238191, 0.00212762, 0.00163783, 0.000750669,0.00230171, 0.00217917

Ctrl-V를 사용하여 섹션을 복사하여 붙여넣는 것이 좋습니다.힌트가 있나요?

도움이 되었습니까?

해결책

유닉스 (Linux 등)에있는 경우 열 (1) 명령을 통해 속임수를 쓰고 필터링 할 수 있습니다.

:%!column -t

위의 내용은 잘못된 문자 리터럴 내부의 구분 구문 분석이므로 사전 처리 단계가 필요 하고이 파일의 구분 기호를 지정해야 할 것입니다.

%!sed 's/","/\&/' | column -t -s '&'

다른 팁

때로는 두 열만 정렬하고 싶습니다. 이 경우 플러그인이 필요하지 않으며 다음과 같은 순수한 VIM 기능을 사용할 수 있습니다.

  1. 분리기를 선택하십시오. OP의 게시물에서 이것은 쉼표입니다. 내 예에서는 이것이 =.
  2. 전/후에 공간을 추가하십시오. 나는 사용한다 s/=/= ...spaces... / 이를 위해 시각적으로 선택합니다.
  3. 가장 긴 단어로 찾아서 커서를 배치합니다.
  4. 추가 whitespace를 사용하여 모든 추가 공백을 제거하십시오 dw 그리고 수직 움직임.

이 기술의 예는 다음과 같습니다.

Example

나는 다른 플러그인을 설치하기에 충분한 것을 자주 정렬 할 필요가 없기 때문에 이것은 내가 그것을 달성하는 것이 선호하는 방법이었습니다. 특히 많은 생각이 필요하지 않습니다.

Sunny256이 제안한 것처럼 column 명령은 UNIX/Linux 시스템 에서이 작업을 수행하는 좋은 방법이지만 Pure VIM (Windows에서도 사용할 수 있도록)에서 수행하려면 가장 쉬운 방법은 설치하는 것입니다. 맞추다 플러그인을 한 다음 수행합니다.

:%Align ,
:%s/\(\s\+\),\s/,\1/g

첫 번째 줄은 쉼표의 항목을 정렬하고 두 번째 라인은 쉼표를 이동하여 이전 값과 플러시되도록합니다. 당신은 사용할 수 있습니다 AlignCtrl 한 번에 전체 로트를 수행하는 사용자 정의 매핑을 정의하려면 사용 방법을 기억할 수 없습니다 ...

편집하다

항목 사이에 두 개의 공간이 마음에 들지 않고 한 명령 으로이 작업을 수행하려면 다음을 수행 할 수도 있습니다.

:%Align ,\zs

또한 Tabularize는 꽤 좋습니다 http://vimcasts.org/episodes/aligning-text-with-tabular-vim/

이것은 VIM 매크로를 사용하는 훌륭한 대답입니다. https://stackoverflow.com/a/8363786/59384 - 기본적으로 매크로 녹음을 시작하고 첫 번째 열을 형식화하고 녹음을 중지 한 다음 남은 모든 라인에 대해 매크로를 반복합니다.

해당 답변에서 복사/붙여 넣기 :

qa0f:w100i <Esc>19|dwjq4@a

100i 후 단일 공간을 기록하고u003CEsc> "Escape Press"를 의미합니다-입력하지 마십시오 "u003CEsc> " 문자 그대로.

번역:

qa         -- record macro in hotkey a
0          -- go to beginning of line
f:         -- go to first : symbol
w          -- go to next non-space character after the symbol
100i <Esc> -- insert 100 spaces
19|        -- go to 19th column (value 19 figured out manually)
dw         -- delete spaces until : symbol
j          -- go to next line
q          -- stop recording macro
4@a        -- run the macro 4 times (for the remaining 4 lines)

당신은 사용할 수 있습니다 CSV.VIM 플러그인.

:%ArrangeColumn

그러나 이것은 당신이 요청한 것을 정확하게 수행하지 않습니다. 그것은 셀의 내용을 올바르게 조정하는 반면, 소수점 또는 첫 자릿수에 의해 값이 정렬됩니다.

플러그인에는 CSV 파일 작업을위한 다른 유용한 명령이 많이 있습니다.

우리는 이제 멋진 것을 가지고 있습니다 EasyAlign Junegunn이 작성한 플러그인.

ReadMe의 데모 GIF :

또한 매우 긴 열이 있는 경우 기본 줄 바꿈을 비활성화하는 것이 편리할 수 있습니다.

:set nowrap
:%!column -t

(데비안에는 여러 개의 인접한 구분 기호를 분할하려는 경우 -n 열에 대한 추가 옵션도 있습니다)

꽤 오래된 질문이지만 최근에 테이블 형식을 즉시 또는 이후에 (유스 케이스가 요구하는대로)를 가능하게하는 우수한 VIM 플러그인을 이용했습니다.

https://github.com/dhruvasagar/vim-table-mode

방금 썼습니다 Tablign 이 목적을 위해. 설치하십시오

[sudo -H] pip3 install tablign

그런 다음 테이블을 VIM으로 표시하고 수행하십시오

:'<,'>:!tablign

enter image description here

사용자가 VIM 이외의 텍스트 유형을 기본적으로 기본적으로 기본적으로 기본화 할 수있는 Python 스크립트를 작성했습니다. 이것이 Windows 또는 Mac 사용자에게 효과가 있는지 확실하지 않습니다.

Columnice.py gist

VIM에서 사용되는 경우.

:'<,'>!columnice =

이것은 Equals 부호를 구속 분야로 사용합니다. 피의자는 버려지지 않습니다.

다음은 Pure VIM 스크립트 답변, 플러그인 없음, 매크로 없음입니다.

내 문제의 솔루션으로 시작하는 것이 가장 분명 할 수 있습니다. 영향을 미치고 싶은 코드 줄을 선택한 다음 다음 명령을 사용했습니다 (비주얼 모드에서 명령 모드를 입력하는 것을 기억하십시오.“ ''<<, '> "를 자동으로 준비하므로 시각적 범위에서 작동합니다).

:'<,'>g``normal / "value<0d>D70|P`

실제로“<0d>”를 입력하지 않은 경우를 제외하고. Ctrl-V를 눌러 명령 줄에 인쇄 할 수없는 문자를 입력 한 다음 입력하려는 키를 입력 할 수 있습니다. "<0d>"는 'ctrl-v enth'를 입력 한 후 명령 줄에서 렌더링되는 것입니다. 여기에서는 "/"검색 모드에서 종료되면 "일반"명령에 의해 구문 분석됩니다. 그런 다음 커서는 현재 라인에서 "값"으로 이동합니다.

그런 다음 우리는 단순히 나머지 줄을 [D] elete, 70 열 (또는 귀하의 경우 필요한 것은 무엇이든)로 점프하고 방금 삭제 한 것을 [P] UT로 점프합니다. 이것은 우리가 가장 넓은 선의 너비를 검색까지 결정해야한다는 것을 의미합니다. 해당 정보를 상태 라인에 넣지 않은 경우 일반 모드 명령 'G Ctrl-G'를 입력하여 커서의 열을 볼 수 있습니다. 또한 존재하지 않는 열로 점프하려면 'VirtualeDit'설정이 필요합니다!

시각적 블록을 사용하고 모든 라인에 영향을 미치기를 원했지만 시각적 선택 (및 " '<,'>")을 사용하여 떠날 수 있기 때문에 다음과 같은 검색 용어를 비워 두었습니다. 대신 검색 용어. 또는 시각적 선택과 검색 용어를 결합하여 더 세밀하게/쉽게 좁히십시오.

최근에 배운 내용은 다음과 같습니다. 복잡한 명령 모드 명령을 엉망으로 만들면 'u'(버퍼에 영향을 미친 경우)을 취소 한 다음“Q :”를 눌러 기존 버퍼와 매우 유사한 특수 명령 기록 버퍼를 입력하십시오. . 모든 줄을 편집하고 Enter를 누르면 변경된 명령이 새 명령으로 입력됩니다. 처음으로 모든 것을 완벽하게 공식화하는 것에 대해 스트레스를주고 싶지 않다면 필수 불가결합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top