Могу ли я заставить Vim игнорировать лицензионный блок в верхней части файла?
-
20-09-2019 - |
Вопрос
Есть ли способ использовать foldes или какую-то другую черную магию Vim-скрипта, чтобы скрыть лицензионные блоки в верхней части файлов?Мне не нравится, что они занимают такую большую часть моей панели редактирования;Мне нравится получать представление о том, что делает файл, когда я его впервые открываю, а не о полной шаблонности.
Решение
Попробуйте сделать это в автоматической команде.
function! FoldCopyright
if !exists( "b:foldedCopyright" )
let b:foldedCopyright = 1
1,15fold
endif
endfunction
Соответствующим образом отрегулируйте диапазон в строке 4.В худшем случае, когда авторское право начинается в разных местах и имеет переменную длину, этот шаблон должен работать:
1,/Beginning of copyright/;/End of copyright/
Другие советы
Это зависит от того, существует ли согласованная форма лицензионного блока и на каком языке вы программируете.Например, python, как правило, использует 'foldexpr' для определения сворачивания, поэтому, чтобы добавить это, вам придется заменить существующую функцию новой (или избавиться от существующего сворачивания).Я считаю, что по умолчанию в C используется ручное сворачивание (хотя возможно, что я сам настроил его таким образом:Я не могу вспомнить), так что гораздо проще добавить дополнительное сгибание.
С помощью простого сообщения об авторских правах GPL, подобного тому, что приведено в конце этого поста, вы могли бы установить для foldmethod значение manual и иметь простую функцию, создающую fold.Все зависит от формы авторского права и от того, насколько важно для вас сохранить существующий формат.Боюсь, мне понадобилось бы немного больше деталей, чтобы дать более полезный ответ.В любом случае, вот пример скрипта, который можно использовать для удаления уведомления об авторских правах в конце этого поста:
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...
Для этого я создал небольшой vim-плагин.Он определяет, когда следует свернуть первый комментарий на странице.Это сработало в моих тестовых примерах, но, конечно, любое улучшение приветствуется.Должно быть легко добавить другие однострочные или многострочные идентификаторы.
Получи это здесь.Чтобы установить, как и любой другой плагин, просто поместите его в свой ~/.vim/plugin.
Редактировать:Изменил ссылку на vim.org и почистил ответ
Как насчет того, чтобы удалить их?Серьезно.
Исходный код защищен правами собственности и лицензированием, а не шаблоном.Этого не обязательно там должно быть - по крайней мере, в большинстве случаев.
В случае GPL и других подобных схем, которые действительно требуют присутствия текста, его можно переместить в нижнюю часть файла или что-то еще.