Vim으로 표시되는 텍스트를 외부 프로그램으로 편집
Vim은 선택 영역이거나 열려 있는 텍스트 전체에 대해 외부 프로그램에서 편집할 수 있습니다.
여기에서는
:{range}!{filter} [arg]
를 소재로 움직임을 확인합니다.자세한 내용은
:help complex-change
또는 :help filter
에서 찾을 수 있습니다.tate 명령으로 세로 쓰기로 변환
tate 명령은 텍스트를 세로로 변환하는 프로그램입니다.
$ type sample.txt | iconv -f utf-8 -t cp932
Vim で表示している
テキストを
外部プログラムで
編集する
↑ 와 같은 sample.txt 에 대해서, tate 명령을 사용하면 세로 쓰기가 됩니다.
$ type sample.txt | tate
編 外 テ V
集 部 キ i
す プ ス m
る ロ ト
グ を で
ラ 表
ム 示
で し
て
い
る
이 동작을 Vim에서 직접 재현하는 것이 filter 명령입니다.
여기에서는
:%!tate
라는 명령으로 전체 텍스트를 tate 명령으로 처리해 보겠습니다.대체로 상정대로라고 생각합니다만, range 로 지정한 범위의 텍스트를 filter 로 지정한 프로그램의 표준 입력에 건네주어, 프로그램의 표준 출력으로 출력된 텍스트로 옮겨놓을 수가 있습니다.
그건 그렇고, tate 명령은 다음과 같습니다.
테이트
htps : // 기주 b. 코 m / 마 t / 갓
filter로 사용하기 쉬운 프로그램
sed/awk/Perl 당 원 라이너로 쓰기 쉬운 프로그램이 사용하기 쉽습니다.
자신은 Perl을 잘 사용하고 있기 때문에 몇 가지 예를 보여줍니다.
샘플 1 : 모두 대문자
A filter is a program that accepts text at standard input, changes it in some
way, and sends it to standard output. You can use the commands below to send
some text through a filter, so that it is replaced by the filter output.
Examples of filters are "sort", which sorts lines alphabetically, and
"indent", which formats C program files (you need a version of indent that
works like a filter; not all versions do). The 'shell' option specifies the
shell Vim uses to execute the filter command (See also the 'shelltype'
option). You can repeat filter commands with ".". Vim does not recognize a
comment (starting with '"') after the `:!` command.
↓
:%!perl -anE "print uc($_)"
A FILTER IS A PROGRAM THAT ACCEPTS TEXT AT STANDARD INPUT, CHANGES IT IN SOME
WAY, AND SENDS IT TO STANDARD OUTPUT. YOU CAN USE THE COMMANDS BELOW TO SEND
SOME TEXT THROUGH A FILTER, SO THAT IT IS REPLACED BY THE FILTER OUTPUT.
EXAMPLES OF FILTERS ARE "SORT", WHICH SORTS LINES ALPHABETICALLY, AND
"INDENT", WHICH FORMATS C PROGRAM FILES (YOU NEED A VERSION OF INDENT THAT
WORKS LIKE A FILTER; NOT ALL VERSIONS DO). THE 'SHELL' OPTION SPECIFIES THE
SHELL VIM USES TO EXECUTE THE FILTER COMMAND (SEE ALSO THE 'SHELLTYPE'
OPTION). YOU CAN REPEAT FILTER COMMANDS WITH ".". VIM DOES NOT RECOGNIZE A
COMMENT (STARTING WITH '"') AFTER THE `:!` COMMAND.
샘플 2 : SREC의 S0 레코드 디코딩
443A5C446174615C5358313231325F4150495C4150495C4150495F636F64655C
가 ASCII 의 16 진수 표기가 되어 있으므로 변환한다고 하는 예.Vim 명령 줄 모드에서
%
가 파일 이름으로 변환되므로 \%
를 작성해야합니다.S02B0000443A5C446174615C5358313231325F4150495C4150495C4150495F636F64655C7475746F7269616C44
↓
:%!perl -ape "s/^(S0......)((..)+)(..$)/sprintf qq'\%s\%s\%s', $1, pack('H*', $2), $3/e"
S02B0000D:\Data\SX1212_API\API\API_code\tutorial6C
샘플 3 : 이전 행의 타임 스탬프와의 차이를 추가하면서 ID (세 번째 열)마다의 차이도 발행
4.303006 1 1 Rx d 8 00 00 00 00 00 00 00 00
4.413445 1 1 Rx d 8 00 00 00 00 00 00 00 00
4.480696 1 2 Rx d 8 00 57 00 00 00 00 00 00
4.482131 1 4 Rx d 8 00 57 00 00 00 00 00 00
4.523533 1 1 Rx d 8 00 00 00 00 00 00 00 00
4.634201 1 1 Rx d 8 00 00 00 00 00 00 00 00
4.743692 1 1 Rx d 8 00 00 00 00 00 00 00 00
4.780966 1 2 Rx d 8 00 57 00 00 00 00 00 00
4.782392 1 4 Rx d 8 00 57 00 00 00 00 00 00
4.853831 1 1 Rx d 8 00 00 00 00 00 00 00 00
4.963971 1 1 Rx d 8 00 00 00 00 00 00 00 00
↓
:%!perl -ape "s/^/sprintf '\%.6f \%.6f ', $F[0]-$x{$F[2]}, $F[0]-$y/e; $x{$F[2]}=$F[0]; $y=$F[0]"
// 左から `ID 毎差分`、 `差分`、 `元のテキスト` を表示
4.303006 4.303006 4.303006 1 1 Rx d 8 00 00 00 00 00 00 00 00
0.110439 0.110439 4.413445 1 1 Rx d 8 00 00 00 00 00 00 00 00
4.480696 0.067251 4.480696 1 2 Rx d 8 00 57 00 00 00 00 00 00
4.482131 0.001435 4.482131 1 4 Rx d 8 00 57 00 00 00 00 00 00
0.110088 0.041402 4.523533 1 1 Rx d 8 00 00 00 00 00 00 00 00
0.110668 0.110668 4.634201 1 1 Rx d 8 00 00 00 00 00 00 00 00
0.109491 0.109491 4.743692 1 1 Rx d 8 00 00 00 00 00 00 00 00
0.300270 0.037274 4.780966 1 2 Rx d 8 00 57 00 00 00 00 00 00
0.300261 0.001426 4.782392 1 4 Rx d 8 00 57 00 00 00 00 00 00
0.110139 0.071439 4.853831 1 1 Rx d 8 00 00 00 00 00 00 00 00
0.110140 0.110140 4.963971 1 1 Rx d 8 00 00 00 00 00 00 00 00
요약
이상과 같이 외부 프로그램을 사용하여 간단한 텍스트 편집이 가능했습니다.
이번에 소개한 샘플은 Perl 중심이지만 다른 프로그램에서도 마찬가지입니다.
익숙한 프로그램으로 필터링하여 텍스트 편집을 편안하게 해 봅시다.
Reference
이 문제에 관하여(Vim으로 표시되는 텍스트를 외부 프로그램으로 편집), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sago35/items/b9c57d96321a14827ed9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)