题
从强大的 PEP 8 一个>:
[P]租用期限所有线路为最多79个字符。用于使文本(文档字符串或注释)的长块,限制了长度72个字符,建议。
当在Vim中编辑Python代码,将我的textwidth
设置为79,并且当我打字符限制的Vim自动换Python代码长行我。但在意见和文档字符串,我需要在72个字符换文字。
有什么办法使Vim自动设置textwidth
至72时,我在注释或文档字符串是,并设置它回来时,我做了什么?
解决方案
所以,我从来没有做过任何之前Vim的脚本,但基于这样做用C类似的东西这个问题和这个技巧,因为如果你在一个目前正在检查评论时,我已经入侵在一起的溶液中。
默认情况下,该使用的79个字符用于正常线和72个字符征求意见PEP8提示的宽度,但可以通过let
ting g: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
其他提示
接受的答案是伟大的!这不,但是,支持的习惯我有格式化/编辑点评:我做我的编辑,然后使用gqj命令,基本上是,“重新格式化当前行合并下一步”。然后我打了“”重复,对于每行(命令本身光标前进到下一行)。我不知道vim的脚本语言非常好,所以有人也许能为这个支持添加到接受的答案。在此期间,我所做是映射的功能键(F6)到文本宽度改变到72,格式化线路,然后更改文本宽度回79。
nmap <F6> :set textwidth=72<CR>gqj:set textwidth=79<CR>
现在,当我在一个文档字符串的时候,我只是做了编辑,(ESC),然后按下F6,直到所有行的格式正确。
我加入我的地图命令和接受的答案脚本到我的.vim /后/文件类型插件/ python.vim。