이것은 내 vim 간단한 스크립트입니다.
#!/usr/bin/vim
%norm f^ID
%norm $i,
%!awk '{ for (i=1;i<=NF;i++ ) printf $i " " }'
첫 번째 줄은 탭 문자(^I) 뒤의 모든 내용을 제거하고, 두 번째 줄은 각 줄 뒤에 ","를 추가하고, 세 번째 줄은 행을 열로 변환합니다. 세 가지 별도의 명령을 사용하면 완벽하지만 그렇게 하면
:source myscript.vim
두 번째와 세 번째 명령만 적용되며 첫 번째 명령에는 탭 번호가 매겨져 있습니다. 왜?
답변1
^I
두 문자인 ^
경우 첫 I
번째 명령은 해당 문자를 찾아 해당 줄의 시작 부분에 ^
( )를 삽입합니다 .I
D
다음을 삽입해야 합니다.단어Ctrl+V Tab^
이제 탭 문자(with)와 가 있습니다 I
.
또는 (같은 것)을 사용하십시오.
%!cut -f 1 | awk -v ORS=', ' '{ print }'
그러면 탭으로 구분된 첫 번째 열이 선택되고 cut
결과 행이 쉼표로 구분된 열로 다시 포맷됩니다.
더 짧지만 결과 열 사이에 쉼표(쉼표 공백 아님)만 있습니다.
%!cut -f 1 | tr '\n' ','
답변2
대체 솔루션을 찾았습니다. 를 입력하는 대신 ^I
f(f+TAB D) 다음에 탭을 누른 후 ..a를 입력했으므로 이제 스크립트는 다음과 같습니다.
#!/usr/bin/vim
#the space after f is not a space,is a tab so press tab
%norm f D
%norm $i,
%!awk '{ for (i=1;i<=NF;i++ ) printf $i " " }'
테스트를 거쳐 완벽하게 작동합니다.