コメントとドキュメント文字列で短いテキスト幅を使用する 質問する

コメントとドキュメント文字列で短いテキスト幅を使用する 質問する

強大な者たちからペップ8:

[P]すべての行を最大 79 文字に制限してください。長いテキスト ブロック (docstring またはコメント) を流す場合は、長さを 72 文字に制限することをお勧めします。

Vim で Python コードを編集する場合、文字数制限を 79 に設定するとtextwidth、文字数制限に達すると、Vim が自動的に Python コードの長い行を折り返します。ただし、コメントやドキュメント文字列では、代わりに 72 文字でテキストを折り返す必要があります。

textwidthコメントやドキュメント文字列内ではVim を自動的に 72 に設定し、終了したら元に戻す方法はありますか?

ベストアンサー1

私はこれまでVimスクリプトを書いたことはありませんでしたが、C言語で同様のことを行う方法に関する質問そして現在コメント中かどうかを確認するためのヒント、私は解決策をまとめました。

デフォルトでは、PEP8 で推奨されている幅 (通常行の場合は 79 文字、コメントの場合は 72 文字) が使用されますが、それぞれlettingg:python_normal_text_widthまたはg:python_comment_text_width変数で上書きできます。(個人的には、通常行を 78 文字で折り返します。)

この赤ちゃんをあなたの.vimrcこれで準備完了です。後でこれをプラグインとしてパッケージ化するかもしれません。

function! GetPythonTextWidth()
    if !exists('g:python_normal_text_width')
        let normal_text_width = 79
    else
        let normal_text_width = g:python_normal_text_width
    endif

    if !exists('g:python_comment_text_width')
        let comment_text_width = 72
    else
        let comment_text_width = g:python_comment_text_width
    endif

    let cur_syntax = synIDattr(synIDtrans(synID(line("."), col("."), 0)), "name")
    if cur_syntax == "Comment"
        return comment_text_width
    elseif cur_syntax == "String"
        " Check to see if we're in a docstring
        let lnum = line(".")
        while lnum >= 1 && (synIDattr(synIDtrans(synID(lnum, col([lnum, "$"]) - 1, 0)), "name") == "String" || match(getline(lnum), '\v^\s*$') > -1)
            if match(getline(lnum), "\\('''\\|\"\"\"\\)") > -1
                " Assume that any longstring is a docstring
                return comment_text_width
            endif
            let lnum -= 1
        endwhile
    endif

    return normal_text_width
endfunction

augroup pep8
    au!
    autocmd CursorMoved,CursorMovedI * :if &ft == 'python' | :exe 'setlocal textwidth='.GetPythonTextWidth() | :endif
augroup END

おすすめ記事