Можно ли заставить Vim игнорировать лицензионный блок в верхней части файла? - PullRequest
9 голосов
/ 12 февраля 2010

Есть ли способ использовать складки или другую чёрную магию Vim-скрипта, чтобы скрыть лицензионные блоки в верхней части файлов? Мне не нравится, что они занимают такой большой раздел моей панели редактирования; Мне нравится понимать, что делает файл, когда я впервые его открываю, а не разбираться в шаблонах.

Ответы [ 4 ]

4 голосов
/ 12 февраля 2010

Попробуйте это в автокоманде.

function! FoldCopyright
  if !exists( "b:foldedCopyright" )
    let b:foldedCopyright = 1
    1,15fold
  endif
endfunction

Отрегулируйте диапазон в строке 4 соответствующим образом. В худшем случае, когда авторское право начинается в разных местах и ​​имеет переменную длину, этот шаблон должен делать:

1,/Beginning of copyright/;/End of copyright/
2 голосов
/ 06 февраля 2011

Я создал для этого небольшой плагин vim. Это предугадывает, когда первый комментарий страницы должен быть свернут. Это сработало на моих тестовых примерах, но, конечно, любое улучшение приветствуется. Должно быть легко добавить другие идентификаторы одной или нескольких строк.

Получите здесь . Чтобы установить, как и любой другой плагин, просто поместите его в ~ / .vim / плагин.

Редактировать: изменил ссылку на vim.org и убрал ответ

2 голосов
/ 12 февраля 2010

Это зависит от того, существует ли согласованная форма в блоке лицензий и на каком языке вы программируете. Например, python имеет тенденцию использовать «foldexpr» для определения свертывания, поэтому для добавления этого вам придется заменить существующая функция с новой (или избавиться от существующего сворачивания). Я полагаю, что по умолчанию в C используется ручное сворачивание (хотя возможно, что я сам его так настроил: не помню), поэтому добавить дополнительное сворачивание намного проще.

С помощью простого сообщения об авторских правах GPL, подобного приведенному в конце этого поста, вы можете установить метод сгибания на ручной и иметь простую функцию, которая создает сгиб. Все зависит от формы авторского права и от того, насколько важно для вас сохранить существующее сворачивание. Боюсь, мне нужно немного подробнее, чтобы дать более полезный ответ. В любом случае, вот пример сценария, который можно использовать для сворачивания уведомления об авторских правах в конце этого поста:

function! CreateCopyrightFold()
    let InCopyright = 0
    set foldmethod=manual
    for Line in range(1,line('$'))
        let LineContents = getline(Line)
        if LineContents !~ "^#"
            if InCopyright
                let CopyrightEnd = Line - 1
                exe CopyrightStart . ',' . CopyrightEnd . 'fold'
            endif
            break
        elseif LineContents =~ "Copyright"
            let InCopyright = 1
            let CopyrightStart = Line
        endif
    endfor
endfunction
au BufRead *.py call CreateCopyrightFold()

Предполагается, что уведомление об авторском праве выглядит следующим образом:

# Copyright (C) 2009 Some Company or Something
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

import sys
# Code continues...
0 голосов
/ 12 февраля 2010

Как насчет их удаления? Серьезно.

Исходный код защищен правами собственности и лицензирования, а не образцом. Это не должно быть там - по крайней мере, в большинстве случаев.

В случае GPL и других аналогичных схем, которые фактически требуют наличия текста, его можно переместить в конец файла или что-то еще.

...