

Finding your way in vim: tags, cscope, grep and more - paweln
http://stolowski.blogspot.com/2011/07/finding-your-way-in-vim.html

======
thristian
> A word of caution first: there is no perfect symbol-based navigation for
> programming languages such as C++ or Java in vim, as vim doesn't perform any
> syntax analysis of the code.

At least for Python, Vim's OmniCompletion does a reasonable job of figuring
out function names:

[http://vimdoc.sourceforge.net/htmldoc/version7.html#new-
omni...](http://vimdoc.sourceforge.net/htmldoc/version7.html#new-omni-
completion)

~~~
__rkaup__
For C and C++, clang_complete gives pretty good completion.

<https://github.com/Rip-Rip/clang_complete>

~~~
obiterdictum
I like where this is going, but it was a bit unstable for my taste last I
tried it. I think it still relies on the file being syntactically correct,
which may break your parsing sometimes and is still quite slow with template-
heavy code (Boost mostly). Is it still the case?

I'd also like some more build system integration hooks (e.g. provide project-
specific include dirs and CXXFLAGS on a per-file basis).

~~~
__rkaup__
You can provide your own flags to the compiler, in the g:clang_user_options
variable. It does still break in uncompilable code but I don't quite see how
that's a problem. It forces you to be more disciplined. If you're finding it a
bit slow, the help files do explain you how to set up precompiled headers with
it. I haven't tried that though, so I can't comment on how much it helps.
Personally, the only times a get annoyed with it are when I type 'catch (...',
and it thinks I want it's help.

------
viandante
Maybe somebody could help me to figure out how to save files properly with
vim.

I made a script that opens all the files I need. I call the script with:
:source scriptname.

Only problem is that the script works only if I open vim with 'vim' and not
with 'sudo vim' (by the way, why is that?).

But if I open with 'vim', then it give me problem when I try to save...

~~~
drtse4
Hmm, if the script is just a series of open commands it's weird that you are
having issues as root (no errors displayed?). With problems when you save you
mean that you don't have the required permissions(e.g. files owned by root or
other users)?

A useful alias if you need root permissions to save:

cmap w!! w !sudo tee % >/dev/null

~~~
_phred
That is a very, very clever little cmap. Added to my .vimrc, thanks!

------
losvedir
tags and cscope look excellent.

However, for the grepping and general file searching stuff, wouldn't that be
better done from the shell? I generally have both vim (either MacVim, or
shell-vim) running, as well as a the command line sitting in a window right
next to it.

What's the advantage of doing the searching inside vs. outside vim?

~~~
gilgad13
If you search from inside vim, it will load the results into the quickfix
list. This means that it jumps you to the first result, and `:cn` and `:cp`
will take you to the next and previous results, respectively.

This is much easier than searching in a terminal, noting the first filename
(which may be buried in some directory), opening it in vim, then
jumping/scrolling down to the relevant line.

------
exDM69
Using cscope, ctags and grep with Vim's location list and quickfix list has
been a huge productivity booster for me. I highly recommend experimenting with
different key bindings to ease navigating with tags other search results
(:cnext :cprev :lnext :lprev, etc).

------
lwhi
I find VIM so difficult to get my head around. Emacs seems to make more
sense.. is there any point in trying to grok VIM?

~~~
donaq
Speaking as a longtime vim user, not if you already grok Emacs. The one really
good reason I can think of is that vi is pretty much ubiquitous on *nix and
might be better suited if you need a powerful editor which you can almost
always expect to be there for you even over ssh.

~~~
ez77
I know this point has been beaten to death, but in that case you only need to
know/grok vi, a significantly smaller subset of vim.

~~~
seewhat
Granted.

Under vi(1), the ctags example in the article is a constructive activity.

In the case of cscope, one needs to drive a development session from cscope
then drop into vi to make edits.

