我希望能够在vim中做这样的事情(你可以假设v7 +,如果有帮助的话)。
输入这样的命令(或关闭的东西)
:inshtml
并让vim将以下内容转储到当前光标位置的当前文件中
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
</body>
</html>
我可以写一个vim函数吗?还有更好的方法吗?
答案 0 :(得分:39)
我这样做是通过在我的vim文件夹下保存一组文件,然后我使用r
命令插入文件(如果没有传递行号,则在当前位置插入文件的内容)功能:
function! Class()
" ~/vim/cpp/new-class.txt is the path to the template file
r~/vim/cpp/new-class.txt
endfunction
这是非常实用的 - 在我看来 - 当你想插入多行文字时。然后,您可以映射键盘快捷键来调用您的函数:
nmap ^N :call Class()<CR>
答案 1 :(得分:34)
晚会,仅供将来参考,但另一种方法是创建命令,例如
:command Inshtml :normal i your text here^V<ESC>
您可以将其称为
:Inshtml
说明:该命令在命令模式下运行,然后切换到正常模式,使用:normal,然后插入带有'i'的模式,'i'后面是你的文本,你完成了escape,输入为输入^ V
的字符也可以添加参数,例如
:command -nargs=1 Inshtml :normal i You entered <args>^V<ESC>
其中<args>
(按字面意思输入)将替换为实际参数,并用
:Inshtml blah
答案 2 :(得分:14)
我在〜/ .vim / plugins / 中创建了一个新文件 generate_html.vim 使用以下代码
"
" <This plugin generates html tags to new html files>
"
autocmd BufNewFile *.html call Generate_html()
function! Generate_html()
call append(0, "<!DOCTYPE HTML>")
call append(1, "<html><head>")
call append(2, " <title></title>")
call append(3, ' <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />')
call append(4, ' <style type="text/css">')
call append(5, ' </style>')
call append(6, '</head>')
call append(7, '<body>')
call append(8, '</body>')
call append(9, '</html>')
endfunction
这样,每当我在vim中打开一个新的.html文件时,它会将该文本打印到新文件
答案 3 :(得分:8)
我喜欢使用snippetsEmu vim插件来插入像您这样的代码段。
snippetsEmu的优点是你可以指定占位符并直接跳转到它们以插入一个值。在您的情况下,您可以在 title 标记之间添加占位符,以便在插入此代码段时轻松地为文档添加标题。
snippetsEmu附带了各种代码段(也适用于HTML),并且可以添加新的代码段。
修改强>
今天我重新访问了我的VIM配置+已安装的插件,发现了snipMate插件,这是恕我直言,甚至比snippetsEmu 更好。 snipMate 就像TextMate所有占位符一样更新。
答案 4 :(得分:7)
您可以定义缩写吗? e.g。
:ab insh 'your html here'
因为上面的内容似乎没有参数化?
事实上,看着我的VIM配置,我检测到一个新的.html文件被加载:
autocmd BufNewFile *.html call GenerateHeader()
并定义一个函数GenerateHeader()
来插入我需要的模板(我对Java / Perl等做同样的事情。)。
这种东西值得Vim Cookbook。这是一项合理的投资。
答案 5 :(得分:4)
这应该是可能的。我使用自动更换。在我的.vimrc中我有这一行:
iab _perls #!/usr/bin/perl<CR><BS><CR>use strict;<CR>use warnings;<CR>
每当我启动一个Perl脚本时,我只需输入_perls并按Enter键。
答案 6 :(得分:3)
你可以使用Python(或任何其他程序),如果像我一样你还没有完全掌握vimScript
This guy讨论了vim表达式寄存器。基本上你在.vimrc
文件
:imap <C-j> <C-r>=system('/home/BennyHill/htmlScript.py')<CR>
因此,每次在插入模式下按 Ctrl j 它会调用脚本htmlScript.py
,其中包含类似的内容(注< / strong>我实际上没有测试过这个)
#!/usr/bin/env python
import sys
snippet="""<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
</body>
</html>"""
sys.stdout.write(snippet)
然后记住让文件可执行(chmod 0755 /home/BennyHill/htmlScript.py
)。它可能有点矫枉过正,但我对Python的熟悉程度远远超过vim的语法。
答案 7 :(得分:1)
您可以将此文本复制到某些(例如“a”)寄存器。并在每次需要时粘贴它,除非你覆盖注册'a'。
要复制以在视觉模式下注册:“ay
要在正常模式下从寄存器a粘贴:“ap
从寄存器a粘贴到插入模式:a
或者,如果您已复制此模板,则可以使用
let @a = @*
将此模板注册为。
答案 8 :(得分:1)
vim有很多template expander plugins。
注意:我正在维护fork of muTemplate。只需将代码转储到
{rtp}/template/html.template
或$VIMTEMPLATES/html.template
。就这样。如果您不希望在打开新的HTML文件时隐式加载代码段,请将模板文件命名为html/whatever.template
(而不是html.template
),并使用:MuTemplate html/whatever
加载whatever^r<tab>
在INSERT模式下使用{{1}}(在HTML缓冲区中)。
所有路径问题,可移植性问题等都已得到解决。与snippetEmu不同,snippetEmu在同一片段定义文件中支持(并以某种方式预期)多个(hard to maintain,IMO)片段,Mu-template每个片段需要一个模板文件。
答案 9 :(得分:0)
将您的文字放在一个文件中(例如,ref.child().update()
)。
然后将以下内容放入html
.vimrc
我使用command Inshtml r html
而不是Inshtml
,因为vim不支持以小写字母开头的用户定义命令。
然后,如果可以在命令模式下键入inshtml
(即Inshtml
)。