What are most useful/used vim commands in C/C++ dev environment


Question

Here is the list of mine

Unlike me -- as I did it for illustrative purposes -- don't paste too many.

And most importantly, provide an explanation

Commands shouldn't be generic but relevant to C++/C environment. ctags & scope are welcome too

gi .....................init insert mode in last insertion position

'0 .....................open last edited file

gf .....................open file under cursor in same window 

Ctrl-w q ...............close current window

:setlocal autoread .....Auto reloads the current buffer..especially useful while viewing log files

for i in range(1,255) | .put='10.0.0.'.i | endfor....   insert range ip's

g; and g, .......................to move (forward, backward) through the changelist

fx Move the cursor forward to the next occurrence of the character x on the current line (obviously, x can be any character you like). This is an extremely useful command. You can type ; to repeat the last f command you gave. 

tx Same as above, but moves the cursor to right before the character, not all the way to it. (It's very useful, really.) 

Fx Move the cursor backward to the next occurrence of the character x on the current line. 
w Move the cursor forward by a word. 
b Move the cursor backward by a word. 
0 Move the cursor to the beginning of the current line. 
^ Move the cursor to the first character on the current line. 
$ Move the cursor to the end of the line 


Visual search ....... you can simply yank the selected text with y and go to search mode 
/, then you can paste the last yanked text with Ctrl+R 0

ci" - cuts the text in current quotes
ciw - cuts the current word. This works just like the previous one except that ( is replaced with w.
C - cut the rest of the line and switch to Insert mode.
zz -- it scrolls the screen to make this line appear in the middle
C - cut the rest of the line and switch to Insert mode.
de - delete from cursor to the end of the word (you can also do dE to delete until the next space)
df[space] -- delete up until and including the next space
bye -- copies current word 
b and e move the cursor word-by-word
capital D (take a deep breath) Deletes the rest of the line to the right 
cd %:h change to current directory
:r! <command> pastes the output of an external command into the buffer.
:%s/foo/bar(&)/g will look for foo, and surround the matched pattern with bar().
:s/.*/PREFIX & SUFFIX/ you want to add a prefix and a suffix simultaneously, you can do something like this:

gd....... keystroke stands for Goto Declaration
gD....... This takes you to the global declaration of the variable under the cursor
------------------
:make error
[make_error]
On pressing RETURN, the cursor moves to line number 6
Now, the command :cn will move the cursor to the line number 4. 
To move back to the previous error, one can use the command :cN and the cursor will move back to the line 6. 
After correcting the error on line 5 and adding "return 1;", one can run :make again and the output will be 


---------
:%!grep sdf | sort -n -k3

1)select the whole content using '%' 
2) pipe it to an external command using '!' 
3) grep onyl the lines containing 'sdf' 
4) sort these lines numerically (-n) on the third field (-k3)


d$ will delete from current position to end of line 
d^ will delete from current backward to first non-white-space character 
d0 will delete from current backward to beginning of line 
dw deletes current to end of current word (including trailing space) 
db deletes current to beginning of current word 

:%s/pattern//gn........... For counting the number of times some pattern occurs, use:

CTRL-O   Go to [count] Older cursor position in jump list  
CTRL-I   Go to [count] newer cursor position in jump list


zz - line that has a cursor is in the middle of the screen
zt - line that has a cursor is in the top of the screen
zb - line that has a cursor is in the buttom of the screen

set printoptions=number:y  ...set numbers in a hardcopy 
:hardcopy.... to print the file :w

shift d ...... Deleting from current position to end of line
vim -o ....... allows you to open two windows, split vertically horizontally
vim -O ....... allows you to open two windows, split vertically
CTRL+W CTRL-Q ......to close the current windows
qall.........How do I quit all windows

0 ...First position on line
Ctrl g ...where am I
:set wrapmargin=70
printexpr=system('lpr' . (&printdevice == '' ? '' : ' -P' . &printdevice) . ' ' . v:fname_in) . delete(v:fname_in) + v:shell_error

Tab block of code ....select your block of code (with [V]isual line mode normally), then press > or <.
If you want to tab more than once, 2> or 3> to repeat it.

News:

 Guys, let's REOPEN THIS QUESTION, and go WIKI-CRAZY!
1
7
9/24/2009 7:25:33 PM

The ones I overuse are the following :

  • :AV to vertically split the current window and open the header/source file associated to the respective source/header file (if not yet opened, otherwise we jump to its window instead)
  • :GSp and :GVSp to split the current window and open the requested file (which is somewhere in &path), or jump to the file if it is already opened
  • <m-x> to toggle comment on the current line
  • :Make to compile the current project in the background -- NB: a flag needs to be set in order to do so
  • <c-x>be to add .begin(), /container_name/.end() in whatever(container_name<curoser_here>)
  • #i which will expand into #include
  • :DOX which will add a doxygen comment to the current function prototype -- parameters const-/ref-ness, throw spec, return type are taken into account
  • :GOTOIMPL which will create a default body from the current function declaration (or jump to the already existing body when possible)
  • <c-w><m-down> : another way to navigate the tags base
  • for/if/... : expand into the relevant code snippet in insert mode (outside of string/comment context)
  • ,for/,if/.. and ,,for/,,if/... to surround the current selection with the relevant code snippet, the selection will go into the control-statement body (one ,), or its condition (two ,)
  • tpl expands into template <<cursor>><+placeholder+>
  • all the text-object motions with =, d, c, ... + di,/vi,/... that acts on the current parameter
  • <c-x>v, <c-x>t to extract the selected variable/type (refactoring)
  • All the bracket opening characters + <m-del> to maintain balanced brackets

There are many other commands I use when I develop in C++, but less often -- just explore the links I've given.

4
9/24/2009 4:09:30 PM

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon