折りたたみとテキストフィールド

折りたたみとテキストフィールド

foldバイトではなく文字を認識するように設定できますか?繁体字中国語はそれぞれ3バイト(最小UTF-8)でエンコードされているようです。つまり、foldsが-w3の倍数でない場合、次のようなことが発生します。

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

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

foldデフォルトの出力幅は80列なので、26 * 3 + 21行に26 2/3文字(または80バイト)が印刷されます。したがって、-w文字の破損を防ぐために3の倍数に設定する必要があります。それでは、少なくともfoldcolumns=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正しい文字エンコーディングを指定する必要があります。たとえば、Unicodeを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_chars79または80文字に改行します。これはgq通常モードコマンドのデフォルトです。

関連情報