باستخدام عرض نص أقصر في التعليقات والمراسلة
سؤال
من الأقوياء بيب 8:
P] الإيجار الحد من جميع الخطوط بحد أقصى 79 حرفًا. لتدفق الكتل الطويلة من النص (docstrings أو التعليقات) ، يوصى بحد الطول إلى 72 حرفًا.
عند تحرير رمز Python في VIM ، قمت بتعيين بلدي textwidth
إلى 79 ، وينفخ VIM تلقائيًا خطوطًا طويلة من كود بيثون بالنسبة لي عندما أصبت بحد الأحرف. ولكن في التعليقات والموظفات ، أحتاج إلى لف النص على 72 حرفًا بدلاً من ذلك.
هل هناك أي طريقة لجعل VIM تعيين تلقائيًا textwidth
إلى 72 عندما أكون في تعليق أو docstring ، وأعيده عندما انتهيت؟
المحلول
لذلك ، لم أفعل أي برنامج برمجة نصية من قبل ، ولكن بناءً على هذا السؤال حول القيام بشيء مماثل في ج و هذه النصيحة للتحقق مما إذا كنت حاليًا في تعليق, ، لقد اخترقت حلًا معًا.
بشكل افتراضي ، يستخدم هذا العروض التي تتمتع بها PEP8 من 79 حرفًا للخطوط العادية و 72 حرفًا للتعليقات ، ولكن يمكنك تجاوزها let
تينغ 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/بعد/ftplugin/python.vim.