내 간단한 vim 스크립트가 탭 문자와 작동하지 않는 이유는 무엇입니까?

내 간단한 vim 스크립트가 탭 문자와 작동하지 않는 이유는 무엇입니까?

이것은 내 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번째 명령은 해당 문자를 찾아 해당 줄의 시작 부분에 ^( )를 삽입합니다 .ID

다음을 삽입해야 합니다.단어Ctrl+V Tab^이제 탭 문자(with)와 가 있습니다 I.

또는 (같은 것)을 사용하십시오.

%!cut -f 1 | awk -v ORS=', ' '{ print }'

그러면 탭으로 구분된 첫 번째 열이 선택되고 cut결과 행이 쉼표로 구분된 열로 다시 포맷됩니다.

더 짧지만 결과 열 사이에 쉼표(쉼표 공백 아님)만 있습니다.

%!cut -f 1 | tr '\n' ','

답변2

대체 솔루션을 찾았습니다. 를 입력하는 대신 ^If(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 " " }'

테스트를 거쳐 완벽하게 작동합니다.

관련 정보