Function 编写vim函数以插入静态文本块

Function 编写vim函数以插入静态文本块,function,vim,Function,Vim,我希望能够在vim中执行类似的操作(如果有帮助,可以假设v7+) 键入这样的命令(或类似命令) 并让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

我希望能够在vim中执行类似的操作(如果有帮助,可以假设v7+)

键入这样的命令(或类似命令)

并让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函数吗?有更好的方法吗?

你能定义一个缩写吗。e、 g

:ab insh 'your html here'
因为上面的内容似乎没有参数化

事实上,查看我的VIM配置,我检测到一个新的.html文件正在加载,因此:

autocmd BufNewFile *.html call GenerateHeader()
并定义一个函数
GenerateHeader()
,以插入所需的模板(我对Java/Perl等也这样做)


这类东西的价格是值得的。这是一项合理的投资。

这应该是可能的。我使用自动更换。在我的.vimrc中,我有一行:

iab _perls #!/usr/bin/perl<CR><BS><CR>use strict;<CR>use warnings;<CR>
iab#perls!/usr/bin/perluse严格要求;使用警告;

每当我启动Perl脚本时,我只需键入_perls并点击Enter。

您可以将此文本复制到一些(例如“a”)寄存器中。并在每次需要时粘贴它,除非覆盖寄存器“a”

要在视觉模式下复制以注册,请执行以下操作:“ay
在正常模式下从寄存器a粘贴:“ap
在插入模式下从寄存器a粘贴:a

或者,如果已复制此模板,则可以使用

let @a = @*

要将此模板用于注册a.

我将一组文件保存在我的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>
在我看来,当您想要插入多行文本时,这是非常实用的。然后,您可以映射一个键盘快捷键来调用您的函数:

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>
nmap^N:调用类()
snippetsEmu 我喜欢使用vim插件插入代码片段,比如您的

snippetsEmu的优点是,您可以指定占位符并直接跳转到占位符以插入值。例如,在您的示例中,您可以在标题标记之间添加一个占位符,以便在插入此代码段时可以轻松地向文档添加标题

snippetsEmu附带了各种代码段(也用于HTML),可以轻松添加新的代码段


编辑

狙击手 今天我再次访问了我安装的VIM Configuration+插件,找到了比snippetsEmu更好的插件。snipMate更新就像TextMate所有占位符都在运行中一样。

vim有很多

NB:我在维护这个系统。只需将代码转储到
{rtp}/template/html.template
或导入
$VIMTEMPLATES/html.template
。就这些。如果不希望在打开新HTML文件时隐式加载代码段,请将模板文件命名为
HTML/whatever.template
(而不是
HTML.template
),并在插入模式下(在HTML缓冲区中)使用
:MuTemplate HTML/whatever
of with
whatever^r
加载它


所有路径问题、可移植性问题等都已得到解决。与snippetEmu在同一个代码段定义文件中支持(并以某种方式期望)多个(,IMO)代码段不同,Mu template要求每个代码段都有一个模板文件。

迟到,仅供将来参考,但另一种方法是创建命令,例如

:command Inshtml :normal i your text here^V<ESC>
说明:该命令在命令模式下运行,您可以使用:normal切换到正常模式,然后使用“i”插入模式,在“i”之后是文本,然后使用escape结束,escape通过输入^V作为字符输入

也可以添加参数,例如

:command -nargs=1 Inshtml :normal i You entered <args>^V<ESC>
如果你像我一样还没有完全掌握vimScript,你可以使用Python(或任何其他程序)

讨论vim表达式寄存器。实际上,您在
.vimrc
文件中放入了类似的内容

:imap <C-j> <C-r>=system('/home/BennyHill/htmlScript.py')<CR>

然后只需记住使文件可执行(
chmod 0755/home/BennyHill/htmlScript.py
)。这可能有些过分,但我对Python的熟悉程度远远超过了对vim语法的熟悉程度。

我在~/.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
”
" 
"
autocmd BufNewFile*.html调用Generate_html()
函数!生成_html()
调用append(0,“”)
调用append(1,“”)
调用append(2,“”)
调用附加(3,,)
调用附加(4,,)
调用附加(5,,)
调用附加(6,,)
调用附加(7,,)
调用附加(8,,)
调用append(9',)
端功能
这样,每次我在vim中打开一个新的.html文件时,它都会将该文本打印到新文件中

将文本放入一个文件中(例如,
html
)。 然后将以下内容放入
.vimrc

命令Inshtml r html

我使用
Inshtml
而不是
Inshtml
,因为vim不支持以小写字母开头的用户定义命令


然后,如果可以在命令模式下键入
Inshtml
(即
:Inshtml
).

我喜欢这个插件的声音,但我从来没有真正让它工作过。看起来你指向snipMate的链接已经过时了?或者是输入错误?这看起来是对的:你能想出一个好的跨平台方法来处理模板文件的查找吗?我喜欢这个主意,但我很乐意在Windows、Linux和OSXOK上使用它,这是我最喜欢的所有这些都是.iab很好,但很难为复杂的文件模板进行设置。不过,跨平台处理路径的方法仍然很好。对于像我这样的新手:请注意,文件路径不是字符串;要在文件路径中使用类函数参数,并使用
exe'r'随你want@MarkBiek我很确定这是跨平台的。我在Windows上使用Vim,它可以正确解释
~
/
。使用
~
而不是
/home/me
#!/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)
"
" <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