# C/C++ Search

## Pattern Search

Pattern searching provides a means to widen a search beyond a single element. A pattern search can be executed using the command

:CSearch -p <pattern> [-t <type> -s <scope> -x <context> -i -a <action>]

When there is more than 1 result, those results will be placed into vim’s quickfix list (:help quickfix) so that you can easily navigate them using vim’s quickfix commands.

Vim command completion is supported through out the command with the exception of the pattern to search for.

    :CSearch <Tab>
    :CSearch -p MyClass* <Tab>
    :CSearch -p MyClass* -t <Tab>
    :CSearch -p MyClass* -t class <Tab>
    :CSearch -p MyClass* -t class -s <Tab>
    :CSearch -p MyClass* -t class -s project
    :CSearch -p MyClass* -t class -s project <Tab>
    :CSearch -p MyClass* -t class -s project -x <Tab>
    :CSearch -p MyClass* -t class -s project -x declarations

- -p <pattern>: The pattern to search for.

  Ex.

      MyClass
      myFunction
      my*

- -t <type> (Default: all): The type of element to search for where possible types include

  - class_struct
  - function
  - variable
  - union
  - method
  - field
  - enum
  - enumerator
  - namespace
  - typedef
  - macro

- -s <scope> (Default: all): The scope of the search where possible scope values include

  - all - Search the whole workspace.
  - project - Search the current project, dependent projects, and include paths.

- -x <context> (Default: declarations): The context of the search, where possible context values include

  - all - Search for declarations and references.
  - declarations - Search for declarations only.
  - references - Search for all references.

- -i: Ignore case when searching.

- -a: The vim command to use to open the result (edit, split, vsplit, etc).

## Element Search

Element searching allows you to place the cursor over just about any element in a source file (method call, class name, constant) and perform a search for that element. Performing an element search is the same as performing a pattern search with the exception that you do not specify the -p option since the element under the cursor will be searched for instead.

If only one result is found and that result is in the current source file, the cursor will be moved to the element found. Otherwise, on single result matches, the value of g:EclimCSearchSingleResult will be consulted for the action to take. If there are multiple results, the quickfix list will be opened with the list of results.

As a convenience eclim also provides the command :CSearchContext. This command accepts only the optional `-a` argument described above, and will perform the appropriate search depending on the context of the element under the cursor.

- If the cursor is on an #include name, it will search the configured include path for the file.
- Otherwise, it will search for the definition of the element (if the cursor is on the definition, then it will search for the declaration).

## Configuration

Vim Settings

- g:EclimCSearchSingleResult (Default: ‘split’) - Determines what action to take when a only a single result is found.

  Possible values include:

  - ‘split’ - open the result in a new window via “split”.
  - ‘edit’ - open the result in the current window.
  - ‘tabnew’ - open the result in a new tab.

  This setting overrides the global default for all supported language types which can be set using the g:EclimDefaultFileOpenAction setting which accepts the same possible values.

- g:EclimQuickFixOpen (Default: ‘botright copen’) Specifies the command used to open the quickfix window when multiple results are found.
- g:EclimQuickFixHeight (Default: 10) - Sets the height, in lines, of the quickfix window when eclim opens it to display search results.