باستخدام عرض نص أقصر في التعليقات والمراسلة

StackOverflow https://stackoverflow.com/questions/4027222

  •  26-09-2019
  •  | 
  •  

سؤال

من الأقوياء بيب 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top