Vim Tips Wiki

Execute commands from buffer text under Windows

Redirected from VimTip628

1,623pages on
this wiki
Add New Page
Add New Page Talk0

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).

Also on Fandom

Random Wiki