Emacs 在所有文件的顶部隐藏长版权信息
我们在所有源代码文件的顶部有15行的版权信息 当我在emacs中打开它们时,会浪费大量宝贵的空间。Emacs 在所有文件的顶部隐藏长版权信息,emacs,hide,copyright-display,Emacs,Hide,Copyright Display,我们在所有源代码文件的顶部有15行的版权信息 当我在emacs中打开它们时,会浪费大量宝贵的空间。 有没有办法让emacs始终隐藏某条消息,但仍将其保留在文件中?看一看。基本上,您只需要找到一种方法来识别要折叠的零件,然后使用折叠车顶标记和折叠底部标记来标记它们。顺便说一句,EMACS elisp代码也有这样做的方法,因此您应该很容易找到可以修改的代码。您可以编写一个函数,将缓冲区缩小到除前15行以外的所有行 (defun hide-copyright-note () "Narrows th
有没有办法让emacs始终隐藏某条消息,但仍将其保留在文件中?看一看。基本上,您只需要找到一种方法来识别要折叠的零件,然后使用
折叠车顶标记
和折叠底部标记
来标记它们。顺便说一句,EMACS elisp代码也有这样做的方法,因此您应该很容易找到可以修改的代码。您可以编写一个函数,将缓冲区缩小到除前15行以外的所有行
(defun hide-copyright-note ()
"Narrows the current buffer so that the first 15 lines are
hidden."
(interactive)
(save-excursion
(goto-char (point-min))
(forward-line 15)
(narrow-to-region (point) (point-max))))
然后,您需要做的就是确保为包含版权说明的每个文件调用此函数。这可以通过添加一个钩子来实现,最好是添加到文件的主模式。例如,您可以将上述函数定义和以下行添加到.emacs文件中:
(add-hook 'c-mode-hook 'hide-copyright-note)
每当你打开一个C文件时,这将调用函数“隐藏版权注释”
实际上,您可能希望使钩子函数更加智能,方法是检查要隐藏的版权说明是否确实存在,或者仅当文件位于某个目录中时运行隐藏版权说明等
例如,为了坚持使用C示例,您可以在上述函数中插入以下测试:
(defun hide-copyright-note ()
"Narrows the current buffer so that the first 15 lines are
hidden."
(interactive)
(when (copyright-message-p)
(save-excursion
(goto-char (point-min))
(forward-line 15)
(narrow-to-region (point) (point-max)))))
(defun copyright-message-p ()
"Returns t when the current buffer starts with a Copyright
note inside a C-style comment"
(save-excursion
(goto-char (point-min))
(looking-at "\\s */\\*\\(:?\\s \\|\\*\\)*Copyright\\b")))
至于你关心的其他问题:
当我在emacs中打开它们时,会浪费很多宝贵的空间
…或者你可以向下滚动。为了自动实现这一点,我们可以使用以下功能,而不是使用隐藏版权说明
:
(defun scroll-on-copyright ()
"Scrolls down to the 16th line when the current buffer starts
with a copyright note."
(interactive)
(when (copyright-message-p)
(goto-char (point-min))
(beginning-of-line 16)
(recenter 0)))
然而,我推荐第一种变体的原因是,如果您只是自动向下滚动,那么无论何时跳转到缓冲区的开头(M-您可以使用它,这是一个标准的内置包,它有一个名为hs hide initial comment block
的通用命令,可以执行您想要的操作,而无需知道顶部注释部分的长度。您可以将其添加到任何语言的模式挂钩中,但下面是一个使用C的示例:
(add-hook 'c-mode-common-hook 'hs-minor-mode t)
(add-hook 'c-mode-common-hook 'hs-hide-initial-comment-block t)
请注意,它不仅仅隐藏版权,还隐藏了完整的初始注释块,这可能会隐藏有用的文档。很抱歉延迟@Thomas,该功能非常有效!您对如何使该功能仅适用于以版权声明开头的文件有何建议?例如,我很高兴将其应用于y表示以“/*\n*版权”开头的任何内容
。至于你的其他评论,有没有办法让emacs在打开时自动向前滚动15行?为了简单起见,这可能是一个更好的解决方案。再次感谢。@sligocki:使用正则表达式搜索可以很容易地测试一个文件是否包含版权声明。我编辑了我的答案,以便为“/*\n*版权”
根据您的要求-但是,您确定这不会使通知长达16行吗?在任何情况下,您都可以只搜索初始注释的结尾,而不使用固定的行数(“*/”
)然后跳转到之后的第一个非空行。这样做将使不同长度的版权声明的方法更加灵活。请注意,此解决方案与行号冲突(行号偏移不正确)。@ideasman42请查看此解决方法:使用内置包,而不是折叠模式。