普段 vim で折り返しは使っていない。適当に改行を入れている。
でもレイアウトをちょっと確認したいときなんかに、折り返しがあるといいかなと思った。
まず、行の連結の仕方はシンプルに
g/^[^( 《「『 \\n]/-join
とやってる。行頭が全角空白かカッコである行(または空行)以外を連結する。
次に折り返しだが、行末禁則を導入した。特に句読点をぶら下げたかったので。
let exceptletter = '、。」 '
function! TextWrap(textwidth) if a:textwidth <= 0 echo 'Error! 引数が 0以下' return endif let i = 0 while i <= line('$') let i += 1 let str = getline(i) let len = strlen(substitute(str, '.', 'x', 'g')) if len <= a:textwidth continue endif let limit = \ (substitute(str, '^.\{' .a:textwidth .'}\(.\).\{-}$', '\1', '') =~ '[' .g:exceptletter .']') ? \ 1 : 0 let limit += a:textwidth exec 'let list = ' .substitute(str, '\(.\{' .limit .'}\)\(.\{-}$\)', '["\1", "\2"]', '') call setline(i, list[0]) if list[1] != '' call append(i, list[1]) endif endwhile endfunction
こんな感じ。グローバル変数 exceptletter に行末禁則にしたい文字をいれる。
TextWrap の引数は折り返したい文字数。TextWrap(50) なら、1行50字ずつに折り返される。
他にも、オプション値 textwidth を使うというてもある。
noremap <silent> gqg :call TextWrap(&textwidth)<CR>