Vim: execute command with range silently

3

2

According to the vim documentation, the :silent command can be used to avoid the hit-enter prompt.

The problem is that I want to silent a command that accepts a range as input, and this does not work because the range is passed to :silent instead of to the command itself.


Example

To open the urls in the current file or selection, I use the following mapping in my .vimrc:

noremap <leader>u :w !urlview<cr>

where :w !urlview pipes the current file or selection to urlview standard input.

Now, trying to avoid the hit-enter prompt, I added:

noremap <leader>u :silent w !urlview<cr>

that, when invoked with a selection, rightfully responds with:

E481: No range allowed

Any clues on how to circumvent this issue?

mrucci

Posted 2013-04-21T09:05:30.120

Reputation: 8 398

Answers

8

You can modify the mapping to insert the :silent after the initial typing of the :w command, just like you would probably do when typing this interactively:

:noremap <leader>u :w<Home>silent <End> !urlview<CR>

Ingo Karkat

Posted 2013-04-21T09:05:30.120

Reputation: 19 513

Thanks! Since I never saw a range used "in the middle" of a command, I assumed it was not possible :|. – mrucci – 2013-04-21T16:28:23.527