Reputation: 1150
I am programming go and I want to run gofmt
with a shortcut and replace the content of the current source file with the output of gofmt
.
I have the following mapping defined in my vimrc:
map <C-r> :r ! gofmt %<CR>
but this does simply append the output to the current file. Is there a way to override it?
Upvotes: 7
Views: 1656
Reputation: 172510
You're using the wrong command: :read
appends lines to the buffer (with ! {cmd}
: from an external command). Instead, you want to filter the current buffer contents through an external command. This is done via :help :range!
. The gofmt
command reads from stdin when no file is passed (some other commands take a special -
argument for that. Ergo:
:nnoremap <C-r> :%! gofmt<CR>
:noremap
; it makes the mapping immune to remapping and recursion.Upvotes: 8