
논리적 열로 구성된 공백으로 구분된 데이터가 있습니다.
예를 들어:
-71.12 0.150667281077312 0.002211111620961
-71.12 0.118496551977185 0.001861996157838
-71.12 0.060235544965347 0.002297217048708
-71.12 0.153327288481261 0.006010183052808
-71.12 0.124123948663225 0.002061072004207
-71.12 0.207259139445973 0.006717235817697
-60.96 0.157543582366536 0.002296431543423
-60.96 0.235150926363369 0.003101414303501
-60.96 0.259568965388604 0.00509310173342
-60.96 0.249144803559256 0.005918713226128
-60.96 0.293059928383778 0.004162901523096
-60.96 0.450566914005046 0.007136854816405
-50.8 0.750617196149124 0.009051035617119
-50.8 0.353984107758976 0.004572175646195
-50.8 0.528151230868303 0.007799510359974
-50.8 0.183651354357074 0.005641329790889
-50.8 0.41466714360944 0.005488604915895
-50.8 0.59927731014109 0.008919537503349
-40.64 0.535018719259586 0.006512021643672
-40.64 0.796646452506777 0.011224718752927
-40.64 0.484977557781429 0.006918056698062
-40.64 0.823404773156849 0.011420881130741
-40.64 0.723696626287657 0.008809901349382
세 번째 열을 나머지 데이터와 분리하고 싶습니다. 매크로를 사용하여 이를 수행할 수 있다는 것을 알고 있습니다. 실제 예는 다음과 같습니다.
mbWWDGo<Esc>p'bj
그러나 이를 단일 논리 단위로 잘라내서 붙여넣는 기본 방법이 있는지 알고 싶었습니다. 선이 규칙적이지 않기 때문에 블록 단위 선택이 수행되지 않습니다. 공백을 탭으로 바꾸는 것이 좋은 생각인 것 같지만 다음과 같은 매우 짧은 줄도 있습니다.
0 1 0.012098302364638
따라서 그것이 반드시 작동하지는 않습니다(탭스톱을 뭔가 이상한 것으로 설정하지 않는 한).
어떤 아이디어가 있습니까? 아니면 매크로가 제가 할 수 있는 최선입니까?
답변1
많은 대체 방법이 있지만 타이핑 노력 측면에서 매크로를 능가하는 것은 없습니다. 그러나 이것이 자주 필요한 경우 사용자 정의 매핑이나 명령(매우 빠르게 불러올 수 있음)을 만들 수 있으며 견고성과 이해 가능성 측면에서 다른 구현의 이점을 누릴 수 있습니다.
- 임시로 다른 열을 제거하고 잡아당깁니다.
mb:%substitute/.*\s// | %yank | undo | 'bput
- 버퍼를 문자열로 필터링합니다.
:put =map(getline(1, '$'), 'substitute(v:val, ".*\\s", "", "")')
플러그인을 고려하고 싶다면,csv.vim 플러그인명령이 있습니다 :CSVColumn
.