My workday generally revolves around .Net and the Microsoft stack, so for a change I thought it would be interesting to do some development under Linux. Finding a suitable text editor was the first task, but it didn’t take me long to settle on Vim, an incredibly flexible and popular text editor, available for most platforms. This post looks at working with Vim for C++ development under Linux.
Vim is very customisable, and a lot of tweaks can be made in the per user Vim.rc file, usually found in your home directory, so let’s start there.
We can makes some tweaks to Vim.rc to make working with C++ a little more pleasant by dealing with indentation and tabs in a more sensible way.
Firstly, let’s set up the auto-indentation:
I prefer Visual Studio style tab settings of a 4 stop width and converting to spaces:
Coming from a Visual Studio background, I’m used to working with a full IDE and all it brings, including file navigation through a tree menu as part of the editor.
Vim is a world apart from Visual Studio, so despite the Project type plugins available for Vim, I’m trying to stay away from GUI like treeviews. CTags builds a list of all symbols in your project to enable quick navigation to function definitions, calls, methods etc. Ubuntu 10.10 doesn’t seem to include it as part of a standard install, so start with:
Then run it against your code directory; using -R will run it recursively:
Now you can use the following commands to leap around your source with glee:
|Ctrl + ]||Jump to selected symbol|
|Ctrl + O||Move back in history|
|Ctrl + I||Move forward in history|
Note: in order for vim to find the tags file, it needs to be launched from the directory in which the file was generated.
Learning Vim is almost like learning an instrument, commands can be combined in a way that makes text editing almost fun. There are a number of good introductions to Vim’s commands, but here are a few that I find to be particularly useful:
|gg=G||Reindent entire file|
|w / b||Next Word / Prev Word|
|^ / $||Start / End of line|
|viwc||Select inner word, change|
|😡||Save changes and quit|
|bn / bp||Next buffer / Prev buffer|
Down The Rabbit Hole
So go get stuck in and see what works for you.