如何在新的vim文件中添加框架文本?


9

我使用Vim编写C ++,并且有很多#include<>语句,注释等,我必须在创建的每个新文件中包含这些语句,注释等。我已经添加

autocmd BufNewFile *.cpp r C:\(full file path of skeleton text file) 

到我的vimrc,因为我听说这会创建一个缓冲区,其中包含我需要的文本。如何将该文本添加到新文件?有没有一种简单的方法可以从缓冲区执行此操作,或者有另一种简单的方法可以执行此操作?我也听说过一些有关模板插件的信息。有没有一种非常简单的方法可以为我做到这一点?


1
添加autocmd并创建框架文件之后,您是否尝试过编辑新的C ++ 文件?
muru 2016年

1
我尝试创建一个扩展名为.cpp的新文件,并使用Vim对其进行编辑。打开它进行编辑后,它仍然是空白的,我还需要执行另一步骤吗?
electriccello

2
不,您应该已经看到骨架文件的内容。如果您手动运行该:r C:\(full file path of skeleton text file)怎么办?你有什么错误吗?
muru

3
@electriccello啊,:enew行不通,但:e newfile.cpp如果newfile.cpp尚不存在(即使为空)也应该行得通。
muru

5
:enew无法正常工作的原因是因为您正在编辑一个新的未命名的缓冲区,然后将其另存为.cpp文件。BufNewFile仅在您使用目标文件名编辑新文件时触发。
fruglemonkey '16

Answers:


6

可以通过插入以下行将现有文件中的骨架文本添加到新文件中

autocmd BufNewFile *.cpp r C:\(full file path of skeleton text file)

进入vimrc。BufNewFile如果使用:enewthen 在两个步骤中创建新文件,则该事件不起作用:sav filename。相反,使用创建新文件:e filename会触发BufNewFilevimrc中事件的自动命令,将框架文本文件的内容添加到新创建的文件中。


1
另请参阅 :help template
马丁·图尔诺伊

为了防止我.vimrc感到拥挤,~/.vim/我可以在层次结构中放置其他任何位置吗?
Santosh Kumar

这还将在新文件的顶部添加一个额外的空白行。
Santosh Kumar

5

确实,模板扩展器插件将帮助您完成此任务。:read是模板扩展器插件的步骤0。

例如,如果检测到foo.h ,则mu-template将尝试从foo.cpp中包含foo.h。它还将允许使用动态数据扩展标头(日期,作者,许可证/版权等)。


1

要为所有文件类型设置默认框架并为特定项目自定义它:

function! s:load_skeleton(type)
  " do nothing if no filetype
  if empty(a:type) | return | endif

  " glob every directory of rtp to search for skeleton/filetype
  let skeletons = globpath(&rtp, 'skeleton/' . a:type, 0, 1)
  if empty(skeletons) | return | endif

  " read last skeleton into 1st line.
  exe '0read ' . skeletons[-1]
endfunction

augroup aug_skeleton
  au!

  " BufNewFile event is trigged when you edit a new file.
  autocmd BufNewFile * call s:load_skeleton(&filetype)
augroup end

将默认骨架放在~/.vim/skeleton例如下~/.vim/skeleton/vim~/.vim/skeleton/sh

将项目特定的骨架放在下balabala/project/.vim/skeleton。只要~/.vim出现在 balabala/project/.vim:h rtpbalabala/project/skeleton/就将用作框架目录。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.