Что такое горячие клавиши VS2010 для перехода к следующему / предыдущему объявлению функции? - PullRequest
4 голосов
/ 30 марта 2012

В редакторе кода Access VB6 Ctrl-Up и Ctrl-Down будут переходить к следующему / предыдущему объявлению функции.

Это довольно удобный инструмент навигации, и я не могу найти его в VS2010.

Я провел какой-то поиск в google и stackoverflow и, похоже, не могу найти на него никаких ссылок.

Кто-нибудь знает, существуют ли эти горячие клавиши в VS2010 вообще?

Если они этого не делают, как, черт возьми, они могут не существовать в контекстно-зависимой IDE, такой как VS2010?

Ответы [ 3 ]

1 голос
/ 30 марта 2012

Да, существуют горячие клавиши: http://www.dofactory.com/ShortCutKeys/ShortCutKeys.aspx

И перейти к отдельным объявлениям: shift + ctrl + 1 / shift + ctrl + 2

0 голосов
/ 07 февраля 2013

В наши дни я ОКР с автоматизацией, сделал много макросов, чтобы помочь мне сориентироваться.Ниже приведен код макроса VB, который будет делать то, что вы хотите в C (и, вероятно, C ++ тоже).Вы можете создать макрос в Visual Studio и добавить в него эти строки.Регулярное выражение для обнаружения объявлений функций, вероятно, не идеально, но я использую их уже неделю, и они отлично сработали для меня.Вы можете сопоставить эти 2 макроса с привязками клавиш, которые вы хотите, Ctrl + Up или Ctrl + Down, если хотите.Если кто-нибудь улучшит регулярное выражение, я бы хотел увидеть обновленную версию.

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports System.Diagnostics
Imports System.Text.RegularExpressions

Public Module NavigationMacros
    Private Function IsFunctionDeclaration(ByRef LineText As String) As Boolean
        If Regex.IsMatch(LineText, "^[^\s\d\W\(\)]+[^\(\)]+\s+[^\s\d\W\(\)]+\s*\([^\(\)]*\)\s*$") Then
            IsFunctionDeclaration = True
        Else
            IsFunctionDeclaration = False
        End If
    End Function

    Private Function GetLineText(ByRef EditPoint As EnvDTE.EditPoint) As String
        EditPoint.StartOfLine()
        GetLineText = EditPoint.GetText(EditPoint.LineLength)
    End Function

    Sub GoToPreviousFunctionDeclaration()
        Dim Selection As EnvDTE.TextSelection
        Dim EditPoint As EnvDTE.EditPoint
        Dim LineText As String

        Selection = DTE.ActiveDocument.Selection
        EditPoint = Selection.TopPoint.CreateEditPoint

        EditPoint.LineUp()

        While IsFunctionDeclaration(GetLineText(EditPoint)) = False And Not EditPoint.AtStartOfDocument
            EditPoint.LineUp()
        End While

        If Not EditPoint.AtEndOfDocument Then
            Selection.MoveToLineAndOffset(EditPoint.Line, 1)
        End If
    End Sub

    Sub GoToNextFunctionDeclaration()
        Dim Selection As EnvDTE.TextSelection
        Dim EditPoint As EnvDTE.EditPoint
        Dim LineText As String

        Selection = DTE.ActiveDocument.Selection
        EditPoint = Selection.TopPoint.CreateEditPoint

        EditPoint.LineDown()

        While IsFunctionDeclaration(GetLineText(EditPoint)) = False And Not EditPoint.AtEndOfDocument
            EditPoint.LineDown()
        End While

        If Not EditPoint.AtEndOfDocument Then
            Selection.MoveToLineAndOffset(EditPoint.Line, 1)
        End If
    End Sub
End Module
0 голосов
/ 23 июля 2012

Я не думаю, что они существуют в VS2010, мы работаем как в VS6, так и в 2010 году, и это бесит, что у меня нет этих команд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...