![如何在 VIM 中自动在新建文件的头部添加一些字符串?](https://linux22.com/image/1242687/%E5%A6%82%E4%BD%95%E5%9C%A8%20VIM%20%E4%B8%AD%E8%87%AA%E5%8A%A8%E5%9C%A8%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E7%9A%84%E5%A4%B4%E9%83%A8%E6%B7%BB%E5%8A%A0%E4%B8%80%E4%BA%9B%E5%AD%97%E7%AC%A6%E4%B8%B2%EF%BC%9F.png)
具体来说,我想要做的是:
- 如果我创建
xxx.php
,#!/usr/bin/env php
将是文件的第一行 - 如果我创建
xxx.py
,#!/usr/bin/env python
将会被首先添加。
我该如何解决这个问题?谢谢!
答案1
经过一番搜索,我发现 一个帖子这样就可以使用模板解决我的问题。希望它对你们有帮助。
创建模板pythontmp.txt
并phptmp.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() 函数根据正在编辑的文件的名称形成门名称,并且实际上根据我正在处理的项目而有所不同,因为某些项目希望它以某种方式格式化。