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