접기 및 텍스트 필드

접기 및 텍스트 필드

fold바이트 대신 문자를 인식하도록 설정할 수 있나요 ? 중국어 번체 문자는 각각 3바이트(최소한 UTF-8)로 인코딩된 것으로 보입니다. 즉, folds가 -w3의 배수가 아닌 경우 다음과 같은 일이 발생합니다.

$ cat in.txt
【財經中心、政治中心╱台北報導】看不慣政府施政效率緩慢,鴻海集團董事長郭台銘動念選總統!《壹週刊》報導,在川普勝選當晚,郭召集鴻海高層幹部,進行美國總統大選換人後的應變策略演練,讓人驚訝的是,郭詢問在場幹

$ cat in.txt | fold # -w is 80 by default
【財經中心、政治中心╱台北報導】看不慣政府施政效率緩��
�,鴻海集團董事長郭台銘動念選總統!《壹週刊》報導,在�
��普勝選當晚,郭召集鴻海高層幹部,進行美國總統大選換人
後的應變策略演練,讓人驚訝的是,郭詢問在場幹

fold기본 출력 너비는 80열이므로 26 * 3 + 2한 줄에 26 2/3자(또는 80바이트)가 인쇄됩니다. 따라서 -w문자 손상을 방지하려면 3의 배수로 설정해야 합니다. 그렇다면 적어도 fold, columns=bytes.에 대해서는 다시 한 번 말씀드리지만, fold멀티바이트 문자를 지원하도록 설정할 수 있습니까? 매뉴얼 페이지에는 이에 대해 아무 것도 언급되어 있지 않습니다.

답변1

GNU Fold와 GNU fmt는 문자가 아닌 바이트만 이해합니다. 특정 문자 수로 줄 바꿈하려면 sed를 사용할 수 있습니다.

sed 's/.\{20\}/&\n/g' <in.txt
【財經中心、政治中心╱台北報導】看不慣政
府施政效率緩慢,鴻海集團董事長郭台銘動念
選總統!《壹週刊》報導,在川普勝選當晚,
郭召集鴻海高層幹部,進行美國總統大選換人
後的應變策略演練,讓人驚訝的是,郭詢問在
場幹

공백을 없애고 싶다면(다양한 언어에 유용함) 여기에 빠르고 더러운 awk 스크립트가 있습니다.

awk '
    BEGIN {width = 20}
    NF == 0 {column = 0; print}
    {
        split($0, a);
        for (i in a) {
            w = length(a[i]) + 1;
            column += w;
            if (column > width) {column = w; print ""};
            if (column != w) printf " ";
            printf "%s", a[i];
        }
    }
    END {if (column) print ""}'

어쨌든, 당신의로케일설정이 정확합니다. 특히, LC_CTYPE올바른 문자 인코딩을 지정해야 합니다. 예를 들어 유니코드를 UTF-8로 인코딩 LC_CTYPE=en_US.utf8하거나 LC_CTYPE=zh_CN.utf8(시스템에서 사용 가능한 모든 언어 코드가 작동함)

화면 너비가 아닌 문자 수를 계산합니다. 고정 너비 글꼴에도 이중 너비 문자가 있을 수 있습니다. 이는 일반적으로 중국어 문자의 경우입니다. 예를 들어 위의 문자 너비가 20인 텍스트는 일반적인 터미널에서 40개의 열을 차지합니다.

답변2

시스템에 UTF-8 문자를 처리할 수 있는 vim이 있는 경우 다음을 시도할 수 있습니다.

다음 vim ex 모드 명령을 다음 이름의 파일에 삽입하세요.fold.vim

set formatoptions+=m
" uncomment and update the line below to set line width to e.g. 60 chars
" textwidth=60
normal! gqG<Esc>
wq

글쎄, 당신의 중국어 문자가 then이라는 파일에 있다면 chinese_chars프롬프트에서 실행할 수 있습니다.

vim -e chinese_chars < fold.vim

이는 vim -e"ex" 모드에서 vim을 시작하고 STDIN에서 ex 명령을 읽는 것을 의미합니다.

vim 스크립트 설명

~에서:h fo-table

m은 255자를 초과하는 멀티바이트 문자에서도 중단됩니다. 이는 각 문자가 그 자체로 단어인 아시아 텍스트에 유용합니다.

그렇다면 이것은 무엇을 의미합니까?

기본적으로 이 gq명령은 10진수 255보다 큰 문자에는 작동하지 않습니다. 예를 들어, 이 문자의 10진수 값은 22,577입니다.
실행은 set formatoptions+=m인터럽트가 의 텍스트와 함께 사용됨을 의미합니다 chinese_chars.

인용하다:
http://vim.1045645.n5.nabble.com/textwidth-doesn-t-work-for-China-td1142655.html

나에게 있어서 이것은 파일을 그 자리에서 편집 chinese_chars하고 79 또는 80자로 줄 바꿈합니다. 이는 gq일반 모드 명령의 기본값입니다.

관련 정보