Visual Studio:有没有办法用一个快捷方式执行“在文件中查找”?

时间:2011-02-12 21:58:45

标签: visual-studio

我想在代码中选择一个表达式并输入Ctrl + Whatever
所以它与[Ctrl + Shift + F和点击“全部查找”]

的结果相同

编辑:[Ctrl + Shift + F并按Enter键]可能比点击更快但我还想要更具体,更快的东西

备注:我对查找所有引用快捷方式不感兴趣。

3 个答案:

答案 0 :(得分:8)

您可以使用宏。我在VS2010中记录并修改了一个:

Sub FindAllFiles()
    DTE.Find.FindWhat = DTE.ActiveDocument.Selection.ToString()
    DTE.Find.Target = vsFindTarget.vsFindTargetFiles
    DTE.Find.MatchCase = False
    DTE.Find.MatchWholeWord = False
    DTE.Find.MatchInHiddenText = True
    DTE.Find.PatternSyntax = vsFindPatternSyntax.vsFindPatternSyntaxLiteral
    DTE.Find.SearchPath = "Entire Solution"
    DTE.Find.SearchSubfolders = True
    DTE.Find.FilesOfType = ""
    DTE.Find.ResultsLocation = vsFindResultsLocation.vsFindResults1
    DTE.Find.Action = vsFindAction.vsFindActionFindAll
    If (DTE.Find.Execute() = vsFindResult.vsFindResultNotFound) Then
        Throw New System.Exception("vsFindResultNotFound")
    End If
End Sub

可以将宏设置为键盘快捷键。请参阅:http://msdn.microsoft.com/en-us/library/a0003t62(v=vs.80).aspx

答案 1 :(得分:3)

不是我会意识到这一点。 Ctrl+Shift+F + ENTER输入而非点击“全部查找”)可能是最接近的。如果你是一个触摸打字员,它就像一条捷径一样快。

<强>更新

现在,问题已经改变,我的回答再也没有意义了。使用像Fosco这样的宏来回答它。

答案 2 :(得分:0)

我有一个像@Fosco一样使用的宏。

' Members for the search methods
Private matchCase As Boolean = True
Private searchWindowOne As Boolean = False

Public Sub SearchFiles(ByVal fileTypes As String, ByVal searchPath As String)
    searchWindowOne = Not searchWindowOne
    DTE.Find.Target = vsFindTarget.vsFindTargetFiles
    DTE.Find.MatchCase = matchCase
    DTE.Find.MatchWholeWord = matchWholeWord
    matchCase = True
    matchWholeWord = True
    DTE.Find.MatchInHiddenText = True
    DTE.Find.Action = vsFindAction.vsFindActionFindAll
    DTE.Find.SearchPath = searchPath
    If (searchWindowOne) Then
        DTE.Find.ResultsLocation = vsFindResultsLocation.vsFindResults1
    Else
        DTE.Find.ResultsLocation = vsFindResultsLocation.vsFindResults2
    End If
    DTE.Find.PatternSyntax = vsFindPatternSyntax.vsFindPatternSyntaxLiteral
    DTE.Find.SearchSubfolders = True
    DTE.Find.FilesOfType = fileTypes
    DTE.Find.FindWhat = GetClipboard()
    If (DTE.Find.Execute() = vsFindResult.vsFindResultNotFound) Then
        Throw New System.Exception("vsFindResultNotFound")
    End If
End Sub

Public Sub ChangeMatchCase()
    matchCase = False
    matchWholeWord = False
End Sub

它为原始方法增加了一点灵活性。 其中一个好处是搜索两个查找窗口交替。 这意味着您始终可以访问最后两次搜索。 当然,这不能用于直接映射到快捷方式,但它允许这样做:

Sub SearchInProject()
    SearchFiles("*.*", "Current Project")
End Sub
Sub SearchInCode()
    SearchFiles("*.h;*.cpp", "Entire Solution")
End Sub

......等等。然后可以将这些映射到快捷方式并允许真正的一键搜索。 您可能已经注意到我为匹配大小写添加了一个开关,可以由宏ChangeMatchCase激活以进行下一次搜索。 在我的设置中,我将不同的搜索映射到双键击。 因此,Ctrl+F,Ctrl+G全局搜索,Ctrl+F,Ctrl+D项目中的搜索,...您明白了。对于以Ctrl+D,开头的所有调试内容,我都有类似的映射。 这可能是我过去几年中最重要的一次性能提升。