fold
바이트 대신 문자를 인식하도록 설정할 수 있나요 ? 중국어 번체 문자는 각각 3바이트(최소한 UTF-8)로 인코딩된 것으로 보입니다. 즉, fold
s가 -w
3의 배수가 아닌 경우 다음과 같은 일이 발생합니다.
$ 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
일반 모드 명령의 기본값입니다.