Vim: execute command with range silently

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?


Solution 1:

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>