我可以让Vim忽略文件顶部的许可证块吗?

我可以让Vim忽略文件顶部的许可证块吗?,vim,plugins,licensing,folding,boilerplate,Vim,Plugins,Licensing,Folding,Boilerplate,有没有办法使用折叠或其他Vim脚本黑魔法在文件顶部隐藏许可证块?我不喜欢它们占据我编辑窗格中如此大的一部分;我喜欢在第一次打开文件时了解它在做什么,而不是满脸的样板文件。删除它们怎么样?真的 源代码受权利所有权和许可的保护,而不是受样板文件的保护。至少在大多数情况下,它不需要在那里 如果GPL和其他类似方案确实要求文本存在,则可以将其移动到文件底部或其他任何位置。这取决于许可证块是否有一致的格式以及您使用的编程语言。例如,python倾向于使用“foldexpr”来定义折叠,因此要添加它,您必须

有没有办法使用折叠或其他Vim脚本黑魔法在文件顶部隐藏许可证块?我不喜欢它们占据我编辑窗格中如此大的一部分;我喜欢在第一次打开文件时了解它在做什么,而不是满脸的样板文件。

删除它们怎么样?真的

源代码受权利所有权和许可的保护,而不是受样板文件的保护。至少在大多数情况下,它不需要在那里


如果GPL和其他类似方案确实要求文本存在,则可以将其移动到文件底部或其他任何位置。

这取决于许可证块是否有一致的格式以及您使用的编程语言。例如,python倾向于使用“foldexpr”来定义折叠,因此要添加它,您必须用新函数替换现有函数(或者去掉现有的折叠)。我相信C中的默认设置是使用手动折叠(尽管我自己也可能这样配置:我不记得了),所以添加额外的折叠要容易得多

通过一个简单的GPL版权信息,如本文末尾的信息,您可以将foldmethod设置为manual,并具有创建折叠的简单功能。这完全取决于版权的形式,以及维护现有的折页对您的重要性。恐怕我需要更多的细节来给出更有用的答案。无论如何,这里有一个示例脚本,可以用来折叠本文末尾的版权声明:

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...

在自动命令中尝试此操作

function! FoldCopyright
  if !exists( "b:foldedCopyright" )
    let b:foldedCopyright = 1
    1,15fold
  endif
endfunction
适当调整第4行上的范围。在最坏的情况下,如果版权从不同的地方开始,并且长度可变,则此模式应执行以下操作:

1,/Beginning of copyright/;/End of copyright/

我为此创建了一个小型vim插件。它预测页面的第一条评论何时应该折叠。它在我的测试用例中起作用,但是,当然,任何改进都是受欢迎的。添加其他单行或多行标识符应该很容易

明白了。要安装,就像其他插件一样,只需将其放入~/.vim/插件中即可


编辑:将链接更改为vim.org并清理了答案

您希望忽略的文本格式是什么?如果希望人们先阅读相关的许可证信息怎么办?Vim功能强大,可以自动轻松折叠,所以不管怎样都没什么大不了的…我建议使用
静默在fold命令前面,这样如果许可证块不存在,Vim就不会抱怨。为什么不将这个Vim.org作为脚本提交?