牢獄機械文書群 目次 » 計算機 » 現在地
折り返し
2011-09-03 19:13

普段 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>

« もどる
inserted by FC2 system