当超出屏幕时显示范围的开始


12

我想在退出屏幕时显示示波器的开始部分。

例:

namespace a  
{  
...  
--------------------- <- display frame 
...                 |  
}*                  | * when cursor is here display "namespace a" in the minibuffer
---------------------   or on screen

这可能适用于许多编程语言,但我主要考虑的是C ++。

为了让更多的人了解VS,我想要一个类似于Visual Studio的功能。也就是说,将光标定位在范围的末尾会在编辑缓冲区的顶部显示范围的开始。

此功能已经存在吗?


我很好奇,我的回答有帮助吗?
Tu Do

@TuDo是的!我只是有时间看看。我已经有了语义,只是打开global-semantic-stickyfunc-mode效果很好。谢谢。我现在的问题是颜色不使标题行可读
。–

Answers:


14

如果您正在编写C / C ++ / Java / Emacs Lisp / Python,那么语义粘滞功能模式将满足您的需求。

注意:这似乎与Git的CEDET一起使用,而不是Emacs 24.4中当前​​没有的CEDET。要从Git获取Emacs:

git clone http://git.code.sf.net/p/cedet/git cedet

并将CEDET首先加载到init文件中的所有其他文件之上:

(load-file (concat user-emacs-directory "/cedet/cedet-devel-load.el"))
(add-to-list 'load-path (concat user-emacs-directory "cedet/contrib"))
(load-file (concat user-emacs-directory "cedet/contrib/cedet-contrib-load.el"))

启用时,此模式显示功能点当前在当前缓冲区的第一行。当您拥有一个非常长的功能而不是一个屏幕时,这很有用,并且您无需向上滚动以读取功能名称,然后向下滚动至原始位置。

它显示完整的功能界面(返回类型,功能名称和参数),而不仅仅是功能名称。

要启用它,请将以下代码放在您的init文件中:

(require 'semantic)
(semantic-mode 1)
(global-semantic-stickyfunc-mode 1)

更新:当前的问题之一semantic-stickyfunc-mode是它不能显示分散在多行上的所有参数。为了解决这个问题,我创建了package stickyfunc-enhance包。

演示

这是C语言的演示:

语义粘性功能模式C

这是Emacs Lisp中的一个演示:

语义粘性功能模式省略

更新:或者,您可以使用helm-semantic-or-imenu。当您在函数内部并运行命令时,光标将位于列表中该函数的右边,因此您始终可以看到完整的函数界面。演示:

  • 首先,我使用helm-semantic-or-imenu移至该函数helm-define-key-with-subkeys并在该处移动点。

  • 然后,我helm-semantic-or-imenu再次开始并被helm-define-key-with-subkeys预选。

  • 然后,将光标移到变量helm-map并helm-semantic-or-imenu再次执行两个函数:helm-next-source和helm-previous-source。这次,它没有显示我正在使用的当前语义标记(即helm-map),而是显示了Helm Semantic缓冲区中的其他两个标记。这是因为我在运行命令之前提供了一个前缀参数。

这个演示同样在Emacs Lisp中,它也适用于C / C ++,如果您有一个很长的函数接口,它会更加灵活。

掌舵语义或记忆


您是如何使它适用于Lisp(尤其是Elisp)的?我在中评估了您的代码,emacs -Q但是在浏览时没有得到您描述的行为,例如org.el
itsjeyd 2014年

我更新了答案。您应该尝试使用bzr的语义。
Tu Do

1
完全没有话题。感谢您向我介绍Nyan模式。我的编码将不再相同。
purple_arrows 2014年

6

您可以打开which-function-mode通过做

M-x which-function-mode RET

要使设置永久,请添加

(which-function-mode 1)

到您的init文件。

从文档中:

切换当前功能的模式行显示(哪个功能模式)。[...]

哪个功能模式是全局次要模式。 启用后,在某些主要模式下,当前功能名称将连续显示在模式行中。

注意:该名称并没有真正暗示它,但这不仅适用于“函数”,还适用于其他类型的作用域。例如,在中org-modewhich-function-mode显示当前子树的标题。


谢谢!我喜欢在模式行中显示的函数名称beeing。某些情况下效果不是很好。类似于名称空间中结构中的方法,仅显示名称空间名称
log0 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.