ds0678 2017-07-30 22:50
浏览 36
已采纳

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

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?

  • 写回答

2条回答 默认 最新

  • douhuantui6259 2017-07-31 09:31
    关注

    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>
    

    Notes

    • You should use :noremap; it makes the mapping immune to remapping and recursion.
    • I've limited the mapping to normal mode; I don't think is necessary to directly launch this from visual mode or operator-pending mode.
    • As mentioned in the comments, there's probably a plugin that already provides this out of the box.
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 merge函数占用内存过大
  • ¥15 Revit2020下载问题
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 单片机无法进入HAL_TIM_PWM_PulseFinishedCallback回调函数
  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.