SelectedVimTips

some collected vim tips and settings for manipulating files

Created by: Anonymous, Last modification: 28 Mar 2006 (13:39 UTC) by xing

useful .(g)vimrc mappings

here you can get a copy of my ~/.vimrc, ~/.gvimrc and ~/.vim dir.

vim to the rescue!

what do you do when you have a php function in front of you and you don't know what it does or you can't remember in what order the parameters are passed in?

i'm not sure what you do, but i move my cursor onto that function and hit <ctrl-shift-p>. that's it!

just recently i stumbled accross this useful vim tip:
it allows you to position your cursor on any php function and using your mapping it will open the appropriate page on www.php.net

i use this in my .vimrc

" open window in browser with php function under cursor
if has("gui_running")
    nmap <c-s-p> :!opera -newpage http://us2.php.net/^R^W\#function.^R^W<CR>
elseif
    nmap <c-s-p> :!lynx -accept_all_cookies http://us2.php.net/^R^W\#function.^R^W<CR>
endif


obviously you can replace opera with your favourite browser and replace the mapping with your preferred mapping. unfortunately lynx doesn't work in gvim and thus you need to open the page in an external browser.

Note: don't forget to use <ctrl-v><ctrl-r> and <ctrl-v><ctrl-w> to get ^R and ^W


some useful .vimrc settings

hide buffers

when you add the following to you .vimrc file:

set hid

buffers will be hidden instead of closed when you edit a new file in the same window. this means that the undo history of the file is still in tact and when you call the file again using minibufexporer or :<buffer number="">b , you can hit u to undo previous additions.

when you do this though, you can have unsaved buffers in the background...

auto source .vimrc on save


if has("autocmd")
  " source the .vimrc file on save to apply all changes immediately
  autocmd! bufwritepost .vimrc source ~/.vimrc
endif


setting up vim for bitweaver


if has("autocmd")
  autocmd bufnewfile,bufenter * set noet ts=4 sw=4
endif


php specific stuff

If you like SQL syntax highlighting inside Strings:
let php_sql_query = 1

Enable HTML syntax highlighting inside strings:
let php_htmlInStrings = 1

For highlighting parent error ] or ):
let php_parent_error_close = 1

For skipping a php end tag, if there exists an open ( or [ without a closing one:
let php_parent_error_open = 1

Enable folding for classes and functions:
let php_folding = 1

using Ctrl-A and Ctrl-X

you can increase number using <ctrl-a> and decrease them using <ctrl-x>. if you do this with padding zeros, it might cause problems as 0777 is an octal value and increasing this will give you some strange results. to avoid this, add the following to your .vimrc:

set nrformats-=octal


generic vim tips and tricks

:reg

registers are an awesome feature of vim. they are places where you can yank text and call it later on. the text you store in the registers is persistent and will remain in there until you remove it or you replace it with different content. i have entire templates stored in the registers which allows me to quickly create new templates with all indenting, free of typos...

to store some text in a register execute the following from within normal mode:

<s-v>4j"gy


explanation:
<s-v>
<shift-v> -- enter visual mode linewise
4j
mark the next 4 lines
"g
access the g register
y
yank the contents of the marked text to the accessed register and the normal register, accessible through p

call that same text stored in the g register:

"gp


explanation:
"g
access the g register
p
put

to append all text from the cursor to the next > character to the contents of "g register, execute the following command:

"Gyf>


explanation:
"G
append the following stuff to the "g register
y
yank
f>
find the next occurance of > in the current line (including the > character). if you want to exclude the character use t>, which will find to the character.

to view the contents of all your registers, type

:reg


background reading

:he reg
:he y

:grep

grep can be used from within vim. it's basically as if you're using it in a console, but it has some great bonuses when using it from within vim.

say you are in the root directory of /bitweaver/, try tiping the following:

:grep -rni --include="*.tpl" 'html_checkboxes' *


this will generate some lines of where grep finds the occurances of 'html_checkboxes'. once done, hit enter and it will open a page with the first occurance.

once you are done editing this code, you can type:

:copen


this will open a new window in the bottom right corner with all the results grep found earlier. all you do now is move the cursor onto the file of interest and hit <enter> or double click on the file of interest (if you have mouse support enabled).

if you should do a new search on top of the initial search, you can follow the same procedure and return back to the 'html_checkboxes' results by typing:

:colder


returning back to the more recent results, you just need to type:

:cnewer


background reading


:he :grep
:he :copen


tags

this allows you to navigate bitweaver like a speeding bullet.

you will need to install ctags if you haven't got it installed yet.
in your bitweaver root directory type: ctags -R
this will create a file called tags which will contain a reference of every function in bitweaver.
in your .vimrc file you need to set the path to this file, that vim always knows where to look for the functions:

set tags=tags,./tags,../tags,../../tags

now start up vim and move your cursor on top of any function and hit CTRL+]
to return back to where you were, just hit CTRL+T

gf

to get gf (goto file) working with bitweaver insert the fllowing in your .vimrc file

set path=,,.,./../*
set includeexpr=substitute(v:fname,'\\([^/]*/\\)','\\1templates/','g')

now, all you need to do is hover over a file name with your cursor and hit gf. that will automatically take you to the flle and you can start editing it.

</enter></shift-v></s-v></ctrl-x></ctrl-a></buffer></ctrl-w></ctrl-v></ctrl-r></ctrl-v></ctrl-shift-p>