Vim用来自外部命令的输出替换文件中的内容

时间:2017-07-30 22:50:14

标签: go vim

我正在编程,我希望使用快捷方式运行gofmt并使用gofmt的输出替换当前源文件的内容。

我的vimrc中定义了以下映射: map <C-r> :r ! gofmt %<CR>但这只是将输出附加到当前文件。有没有办法覆盖它?

2 个答案:

答案 0 :(得分:4)

gofmt flag -w将覆盖正在修复的文件的内容

答案 1 :(得分:3)

您使用了错误的命令::read 行添加到缓冲区(使用! {cmd}:来自外部命令)。相反,您希望通过外部命令过滤当前缓冲区内容。这是通过:help :range!完成的。没有文件传递时,gofmt命令从stdin读取(其他一些命令为此引用了一个特殊的-参数.Ergo:

:nnoremap <C-r> :%! gofmt<CR>

注释

  • You should use :noremap;它使映射不受重映射和递归的影响。
  • 我将映射限制为普通模式;我不认为有必要从可视模式或操作员待定模式直接启动它。
  • 正如评论中所提到的那样,可能已经提供了一个开箱即用的插件。