代码之家  ›  专栏  ›  技术社区  ›  Mark Biek

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

  •  43
  • Mark Biek  · 技术社区  · 17 年前

    我希望能够在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函数吗?有更好的办法吗?

    10 回复  |  直到 17 年前
        1
  •  41
  •   Paolo Tedesco    17 年前

    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>
    
        2
  •  41
  •   Dan Andreatta    15 年前

    迟到,只是为了将来参考,但另一种方法是创建命令,例如。

    :command Inshtml :normal i your text here^V<ESC>
    

    :Inshtml
    

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

    也可以添加参数,例如。

    :command -nargs=1 Inshtml :normal i You entered <args>^V<ESC>
    

    哪里 <args> (按原样输入)将替换为实际参数,您将其称为

    :Inshtml blah
    
        3
  •  15
  •   uromay    10 年前

    生成html.vim ~/.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文件时,它都会将该文本打印到新文件中

        4
  •  8
  •   Brian Agnew    17 年前

    你能定义一个缩写吗。例如

    :ab insh 'your html here'
    

    因为上面的内容似乎没有参数化?

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

    autocmd BufNewFile *.html call GenerateHeader()
    

    GenerateHeader() 插入所需的模板(我对Java/Perl等也这样做)。

    值得一试 Vim Cookbook 为了这类东西。这是一项合理的投资。

        5
  •  8
  •   f3lix    17 年前

    我喜欢使用 snippetsEmu vim插件插入代码片段,如您的。

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


    编辑

    狙击手

    snipMate 插件 . 狙击手 就像TextMate一样,动态更新所有占位符。

        6
  •  4
  •   innaM    17 年前

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

    iab _perls #!/usr/bin/perl<CR><BS><CR>use strict;<CR>use warnings;<CR>
    

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

        7
  •  4
  •   puk    14 年前

    如果你像我一样还没有完全掌握vimScript,你可以使用Python(或任何其他程序)

    This guy 讨论vim表达式寄存器。基本上你把这样的东西放在你的 .vimrc 文件

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

    因此,每次在插入模式下按 Ctrl键 J 它调用脚本 htmlScript.py 里面有这样的东西( 我还没有实际测试过这个)

    #!/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语法的熟悉程度。

        8
  •  1
  •   Mykola Golubyev    17 年前


    在正常模式下从寄存器a粘贴:“ap
    在插入模式下从寄存器a粘贴:a

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

    let @a = @*
    

        9
  •  1
  •   Luc Hermitte    17 年前

    有很多 template expander plugins 为了维姆。

    NB:我在维护 fork of muTemplate . 只需将代码转储到 {rtp}/template/html.template 或进入 $VIMTEMPLATES/html.template . 就这些。如果不希望在打开新的HTML文件时隐式加载代码段,请命名模板文件 html/whatever.template (而不是 html.template :MuTemplate html/whatever 关于 whatever^r<tab> 在插入模式下(在HTML缓冲区中)。

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

        10
  •  0
  •   alhelal    8 年前

    html ). .vimrc .
    command Inshtml r html

    我用 Inshtml inshtml 因为vim不支持以小写字母开头的用户定义命令。

    那么如果你能打字的话 Inshtml 在命令模式下(即。, :Inshtml

    推荐文章