Visual Studio跳转到函数开头

62

我知道在Visual Studio中,Ctrl+} 可以带你到相应的括号处,但是假设我正在一个巨大的函数中间,不知道顶部或底部在哪里,有没有快捷键可以直接跳转到函数声明?

void function()
{
//so many lines of code
//can't see the top or the bottom curly brace
//can i get to the top of the function with a shortcut?
}

1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - John_West
快捷键 Edit.PreviousMethod 可以实现此功能。在 Viasfora 扩展中,快捷键 Edit.RainbowPrevious 也可以实现。 - ingredient_15939
9个回答

44

我已经安装了全新的VS2017。在版本15.9.1中,我的默认快捷键是Alt+Shift+[

这是用于EditorContextMenus.Navigate.GoToContainingBlock的快捷键。如果你需要跳转到几个块层级深处,可能需要多次执行此快捷键,但它可以帮助你到达你想去的地方。


这应该是被接受的答案。 - Krausladen

24

对于VSCode的爱好者,这个键组合将带您到函数的顶部:

Ctrl-Shift-. 接着按 ENTER

而对于MAC用户:

Cmd-Shift-. 接着按 ENTER


2
你改变了我的生活。我以为面包屑导航栏很傻。 - Nick Farina
按下 Ctrl-Shift-\\ 可直接跳转到匹配的括号(通过按下 Ctrl-Shift-p 并搜索 'go to' 找到)。 - undefined

22

Alt+Ctrl+UP,Tab,Tab,Enter
这个序列将帮助你在Project选择器、Scope选择器、Function选择器和当前函数之间切换。

Ctrl+M,Ctrl+M
这个序列将折叠/展开当前块。
将光标放在任何被该函数直接包含的行上,然后折叠它。将光标放在折叠后的函数结束后即{ ... }的位置,展开函数以到达最后一个大括号。

注意:
如果你找不到被函数直接包含的行(例如函数有很多嵌套块),你可以始终回到开头折叠函数。


那么你的意思是说,你应该“回到函数的开头来折叠函数”,以便能够……回到函数的开头吗?虽然我更喜欢第一个解决方案。 - Andrew
@Andrew,我回答中的“Note”部分是指如何轻松地找到大函数的底部。 - Chief A
1
哦,你的意思是“在函数之后立即”,而不是“在函数内立即”。 :) - Andrew

21

更新

在最新的Visual Studio更新中,现在EditorContextMenus.Navigate.GoToContainingBlock的默认键盘快捷键为Shift+Alt+[


旧答案:

Visual Studio 2017版本15.8.0增加了一个新的快捷键Ctrl + Alt + UpArrow - 转到包含块。

转到包含块 (Ctrl + Alt + UpArrow) 允许您快速导航到封闭代码块的开头。

来源

如果你在函数内部,这个命令还可以移动到函数声明处。 enter image description here

如果快捷键对你不起作用


在VS 15.9.4中,按下Ctr+Alt+Up可以高亮显示项目选择器。 - Chief A

8

我通常双击代码左侧的白色线条,这会关闭函数并且带您前往该函数的声明。


10
在这种情况下,您也可以使用键盘快捷方式 Ctrl+M, Ctrl+M。或者(如果您使用不同的键盘方案),查找命令 Edit.ToggleOutliningExpansion 的正确快捷方式。 - Max
4
双击该行会关闭代码块,而不是整个函数。 - Chief A

5
你可以使用 Visual Studio宏 扩展来完成。
以下是宏的代码:
// BeginningOfFunction moves the caret to the beginning of the containing definition.

var textSelection = dte.ActiveDocument.Selection;

// Define Visual Studio constants
var vsCMElementFunction = 2;

var codeElement = textSelection.ActivePoint.CodeElement(vsCMElementFunction);


if (codeElement != null)
{
    textSelection.MoveToPoint(codeElement.GetStartPoint());
    dte.ActiveDocument.Activate();
}

这是扩展的示例宏之一。我进行了一些修改,因为样本在某种原因下无法工作。通过将 codeElement.GetStartPoint() 更改为 codeElement.GetEndPoint(),您可以到达函数的末尾。


4

我使用Ctrl+Shift+OEnter

Ctrl+Shift+O打开顶部的“转到符号...”下拉菜单,其中包含它打开时选择的当前函数,而Enter则将我带到当前函数的开头。

有关完整和最新的快捷键,请参阅此处的官方Visual Studio Code键盘快捷键:https://code.visualstudio.com/shortcuts/keyboard-shortcuts-windows.pdf

提示:Ctrl+k Ctrl+r会在浏览器窗口中打开键盘快捷键页面。


在Mac上使用ctrl + cmd + o - Artur Carvalho

1

另一个选择是使用Edit.PreviousMethod。我更喜欢这个选项,因为即使您的光标位于多个嵌套块中,您也可以用单个按键跳转到方法定义!我已将Edit.PreviousMethod映射到ctrl + alt + ,,将Edit.NextMethod映射到ctrl + alt + .但您可以将其设置为任何您喜欢的方式。

要设置快捷键绑定,请转到工具.选项.环境.键盘,然后在显示包含命令文本框中键入edit.previousmethod,将焦点设置在按键组合文本框上,并按下您想要的键组合,然后点击分配。对于edit.nextmethod,重复此操作,然后点击确定


0
我在 Visual Studio 中发现了一个小技巧:
将光标放在空白处以获取上下文(函数名称),复制函数名称,然后单击下拉箭头,在其中列出所有函数的地方粘贴函数名称,按 Enter 键。这样你就可以跳转到该函数的开头了!

1
只需添加。点击任何位置->在右上方的下拉列表中查看方法名称->按下下拉列表并再次选择方法,就是这样。 - Yinon Dotan
只需点击下拉菜单并按下 ENTER 键即可,无需复制和粘贴任何内容。或者您可以将该 ENTER 替换为将鼠标移动到下方几个像素以选择第一个元素(当前方法)并单击。 - Andrew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接