Using / or ? enables to find a match for a word in vim. But how can I find an exact match?
For example, my text contains the following words: a a
You enclose the string you are looking for by \< and \> like in /\<aa\> to match exactly that string.
Bring your cursor to exact word which you want to search.
Press * (Either Shitf+8 or from numpad of keybord).
You can search for aa[^a], which will find your two as and nothing else.
EDIT: oh boy, y'all are after an exact match :-) So, to match exactly two aas and nothing else:
[^a]\zsaa\ze[^a]\|^\zsaa\ze$\|^\zsaa\ze[^a]\|[^a]\zsaa\ze$
And the branches expanded out:
[^a]\zsaa\ze[^a]
\|^\zsaa\ze$
\|^\zsaa\ze[^a]
\|[^a]\zsaa\ze$
These cover all contingencies--the aas can be at the beginning, the middle, or the end of any line. And there can't be more than two as together.
\zs means the actual match starts here\ze means the actual match ends hereaa in a line surrounded by other charactersaa when it makes up the whole lineaa at the beginning of a lineaa at the end of a line.My mind boggles at fancy things like look-behind assertions, so I tried to stick to reasonably simple regex concepts.
EDIT 2: see @benjifisher's simplified, more elegant version below for your intellectual pleasure.
To find a single, standalone aa (not a, aaa, ...), you need to assert no match of that character both before and afterwards. This is done with negative lookbehind (\@<! in Vim's regular expression syntax) and lookahead (\@!) enclosing the match itself (a\{2}):
/\%(a\)\@<!a\{2}\%(a\)\@!/
Those assertions are hard to type, if the border around the match is also a non-keyword / keyword border, you can use the shorter \<\a\{2}\> assertions (as in MosteM's answer), but this doesn't work in the general case, e.g. with xaax.