如何在 VIM 中自动在新建文件的头部添加一些字符串?

如何在 VIM 中自动在新建文件的头部添加一些字符串?

具体来说,我想要做的是:

  • 如果我创建xxx.php#!/usr/bin/env php将是文件的第一行
  • 如果我创建xxx.py#!/usr/bin/env python将会被首先添加。

我该如何解决这个问题?谢谢!

答案1

经过一番搜索,我发现 一个帖子这样就可以使用模板解决我的问题。希望它对你们有帮助。

创建模板pythontmp.txtphptmp.txt放在一些目录中(例如~/.vim/templates/:)如下所示

#!/usr/bin/env python(php)

添加以下设置.vimrc

autocmd bufnewfile *.py :0r ~/.vim/templates/pythontmp.txt
autocmd bufnewfile *.php :0r ~/.vim/templates/phptmp.txt

答案2

不确定您是否可以设置 vim 来独立完成此操作。不过,您可以创建一个辅助脚本来为您完成此操作。

假设一个 linux 环境...该脚本将检查文件扩展名,并在必要时在调用 vim 之前创建带有标题的文件。

#/bin/bash

type=`expr "\$1" : ".*\.\(.*\)"`   # Check the file extension

case "$type" in
    py) 
    interpreter=python;
    ;;
    php)
    interpreter=php;
    ;;
esac

if test ${interpreter+defined}; then echo "#!/usr/bin/env $interpreter" > $1 && /usr/bin/vim $1;
else /usr/bin/vim $1;
fi

然后您可以将此脚本设为别名来代替 vim 运行。

alias vim='/path/to/script.sh'

答案3

存在许多插件提供此功能。有些甚至允许您自动推断各种内容,甚至根据您创建新文件的文件夹参数化您的标题(mu-template)。

答案4

我其实很喜欢定义 vim 函数来完成工作的方法,这样做更复杂的事情就变得容易多了。例如,如果插入的文本取决于文件的名称,就像 C/C++ 中常见的那样。我的 C/C++ 如下所示:

autocmd BufNewFile *.{h,hpp} call <SID>insert_c_gates() 

...

function! s:insert_c_gates()
   let gatename = <SID>get_gate_name()
   execute "normal i#ifndef " . gatename
   execute "normal o#define " . gatename
   execute "normal Go#endif /* " . gatename . " */"
   normal kk
endfunction

get_get_name() 函数根据正在编辑的文件的名称形成门名称,并且实际上根据我正在处理的项目而有所不同,因为某些项目希望它以某种方式格式化。

相关内容