Por lo tanto, nunca he hecho ningún script Vim antes, pero basado en this question about doing something similar in C y this tip for checking if you're currently in a comment, he pirateado una solución.
Por defecto, este utiliza el ancho de PEP8-sugerido de 79 caracteres para las líneas normales y 72 caracteres para los comentarios, pero se los puede sustituir por let
ting g:python_normal_text_width
o g:python_comment_text_width
las variables, respectivamente. (Personalmente, envuelvo las líneas normales a 78 caracteres.)
Deje caer a este bebé en su .vimrc y ya estará listo para empezar. Puedo empaquetar esto como un complemento más adelante.
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
Pregunta muy similar: http://stackoverflow.com/questions/3475072/vim-different-textwidth-for-multiline-c-comments – adw