Vim Tips Wiki

Duplicate tip

This tip is very similar to the following:

These tips need to be merged – see the merge guidelines.

Tip 628 Printable Monobook Previous Next

created 2004 · complexity basic · author Suresh Govindachar · version 6.0

The following mappings help to execute "things" in win98.

1) If you are editing a file (eg, html file) file and want to view it, the mapping \xf will do it.

2) If you want to execute the string under the cursor (<cWORD>): The mapping \x executes the <cWORD> "as is", whereas the mapping \xl executes it after pre-pending it with the full path to the current file.

Example for \xf -- viewing an html file while editing it.

Example for \x -- the string under the cursor can be a google search for the word mail on this web-site:

(It can also be things such as the name of a file (foo.pdf, foo.bat) or directory etc.)

"The mappings:

" eXecute File being edited
nmap \xf :silent !start rundll32 url.dll,FileProtocolHandler %:p <CR>

"eXecute string below cursor
nmap \x :silent !start rundll32 url.dll,FileProtocolHandler <cWORD> <CR>

" eXecute string below cursor after prepending it with path to file
nmap \xl :silent !start rundll32 url.dll,FileProtocolHandler %:p:h/<cWORD> <CR>



Executing a directory works, but this is not a good usage of the mapping -- since it is better to edit a directory. See :help netrw-explore

Although the example given above about searching this web-site for "mail" does work with \x, there is a bug in rundll32 that prevents \x from working on url's that end with an actual file -- see VimTip394:

nmap \e :silent !start "c:\program files\internet explorer\iexplore.exe" -nohome <cWORD> <CR>

Because sometimes URLs can be within a pair of brackets or <>, I'm using the following mappings:

nnoremap <silent> <C-L>e
 \ :exe ':!start cygstart '.
 \ matchstr(expand('<cWORD>'),
 \ '\%(.\{-}\zs\%(news:\\|mailto:\\|ftp://\\|https\=://\)\)\=[^:;,<>]\+'
 \ )<CR>

vnoremap <silent> <C-L>e
 \ <C-\><C-N>:let w:a_save=@a<CR>gv"ay
 \ :exe ':!start cygstart '.@a<CR>:let @a=w:a_save<CR>:unlet w:a_save<CR>

Note as filenames may contains spaces, I haven't tried to support file:///

See also script#293, which does similar things (not only for Windows).