有帮助吗?

解决方案

所以,我从来没有做过任何之前Vim的脚本,但基于这样做用C类似的东西这个问题这个技巧,因为如果你在一个目前正在检查评论时,我已经入侵在一起的溶液中。

默认情况下,该使用的79个字符用于正常线和72个字符征求意见PEP8提示的宽度,但可以通过letting g:python_normal_text_widthg: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

其他提示

接受的答案是伟大的!这不,但是,支持的习惯我有格式化/编辑点评:我做我的编辑,然后使用gqj命令,基本上是,“重新格式化当前行合并下一步”。然后我打了“”重复,对于每行(命令本身光标前进到下一行)。我不知道vim的脚本语言非常好,所以有人也许能为这个支持添加到接受的答案。在此期间,我所做是映射的功能键(F6)到文本宽度改变到72,格式化线路,然后更改文本宽度回79。

nmap <F6> :set textwidth=72<CR>gqj:set textwidth=79<CR>

现在,当我在一个文档字符串的时候,我只是做了编辑,(ESC),然后按下F6,直到所有行的格式正确。

我加入我的地图命令和接受的答案脚本到我的.vim /后/文件类型插件/ python.vim。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top