Answers:
看一下这个..
closetag.vim
Functions and mappings to close open HTML/XML tags
https://www.vim.org/scripts/script.php?script_id=13
我用类似的东西。
我发现使用xmledit插件非常有用。它增加了两个功能:
<p>
),它扩展了标签,只要你键入右>
进<p></p>
和插入模式将光标置于标签内。如果您随后立即键入另一个>
(例如,键入<p>>
),它将展开为
<p>
</p>
并在插入模式下将光标放在标签内,缩进一次。
该XML VIM插件添加代码折叠和嵌套代码匹配到这些特征。
当然,如果您在Markdown中编写HTML内容并%!
通过所选的Markdown处理器过滤Vim缓冲区,则完全不必担心关闭标签:)
git clone https://github.com/sukima/xmledit.git ~/.vim/bundle/xmledit
。但是它仅在编辑.xml文件时有效。当文件ext是.html或.htm时,它不起作用。
我喜欢极少的东西
imap ,/ </<C-X><C-O>
<Esc>F<i
到此操作的末尾,以便将光标放回标签内。
,/
以关闭标签
我发现让vim为我写打开和关闭标签,而不只是关闭标签更方便。您可以使用Tim Pope 出色的ragtag插件。您键入的用法如下所示(让|标记光标位置):
跨度|
按CTRL+x SPACE
你得到
<span> | </ span>
您也可以使用CTRL+ x ENTER代替CTRL+ x SPACE,然后得到
<span> | </ span>
Ragtag可以做的不仅是它(例如,在此%>或DOCTYPE中插入<%=内容)。你可能想检查出其他插件乌合之众的作家,尤其是环绕。
ragtag
:vim.org/scripts/script.php?script_id=1896
如果您正在做任何精心制作的东西,那么火花非常好。
他们网站上的一个例子:
ul > li.item-$*3
扩展为:
<ul>
<li class="item-1"></li>
<li class="item-2"></li>
<li class="item-3"></li>
</ul>
与<C-e>
。
做问题中给出的例子,
html > head > title{This is a title}
产量
<html>
<head>
<title>This is a title</title>
</head>
</html>
还有一个zencoding vim插件:https : //github.com/mattn/zencoding-vim
教程:https://github.com/mattn/zencoding-vim/blob/master/TUTORIAL
更新:现在称为Emmet:http : //emmet.io/
教程摘录:
1. Expand Abbreviation
Type abbreviation as 'div>p#foo$*3>a' and type '<c-y>,'.
---------------------
<div>
<p id="foo1">
<a href=""></a>
</p>
<p id="foo2">
<a href=""></a>
</p>
<p id="foo3">
<a href=""></a>
</p>
</div>
---------------------
2. Wrap with Abbreviation
Write as below.
---------------------
test1
test2
test3
---------------------
Then do visual select(line wize) and type '<c-y>,'.
If you request 'Tag:', then type 'ul>li*'.
---------------------
<ul>
<li>test1</li>
<li>test2</li>
<li>test3</li>
</ul>
---------------------
...
12. Make anchor from URL
Move cursor to URL
---------------------
http://www.google.com/
---------------------
Type '<c-y>a'
---------------------
<a href="http://www.google.com/">Google</a>
---------------------
我喜欢立即关闭我的块标签(而不是内联标签),并使用尽可能简单的快捷方式(CTRL尽管我确实习惯于closetag.vim
关闭我的内联标签,但我希望尽可能避免使用特殊键。)启动标签块时的快捷方式(感谢@kimilhee;这是他的回答的摘录):
inoremap ><Tab> ><Esc>F<lyt>o</<C-r>"><Esc>O<Space>
类型-
<p>[Tab]
结果-
<p>
|
</p>
其中|
指示光标位置。
inoremap
表示以插入模式创建映射><Tab>
表示右尖括号和制表符;这是匹配的><Esc>
表示结束第一个标签并从插入状态转入普通模式F<
表示找到最后一个打开的尖括号l
表示将光标向右移动一个(不要复制左尖括号)yt>
表示从光标位置向上拖动直到下一个闭合尖括号之前(即复制标签内容)o</
表示以插入模式开始新行,并添加一个尖括号和斜杠<C-r>"
表示从默认寄存器("
)以插入模式粘贴><Esc>
表示关闭结束标签并退出插入模式O<Space>
表示以插入模式在光标上方开始新行并插入空格l
意思是“正确”而不是“左边” 的事实,哈哈…… 真是一个有趣的错误。您如何看待我的帖子?我注意到您没有投票。
au filetype html inoremap <buffer> ...
inoremap ><Tab> ><Esc>F<lyt>o</<C-r>"><Esc>kJxi
我删除0<Space>
并添加了kJxi
。向上移动1步,连接两行,删除一个字符,然后进入插入模式。
vim-closetag
这是一个非常简单的脚本(也可以作为vundle
插件使用),可以为您关闭(X)HTML标记。从README
:
如果这是当前内容:
<table|
现在,按>,内容将是:
<table>|</table>
现在,如果>再次按下,内容将是:
<table> | </table>
注意:|
这里是光标
allml(现在为Ragtag)和Omni-completion(<CX> <CO>)在.py或.java之类的文件中不起作用。
如果要在这些文件中自动关闭标签,可以这样映射。
imap <Cj> <ESC> F <lyt> $ a </ ^ R“>
(^ R是Contrl + R:您可以像这样输入Control + v,然后输入Control + r)
(如果输入,|(现在是光标位置)。
<p> abcde |
然后输入^ j
然后它像这样关闭标签。
<p> abcde </ p> |
这是基于易于发现的Web编写的另一个简单解决方案:
:iabbrev </ </<C-X><C-O>
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
以@KeithPinson的出色答案为基础(很抱歉,信誉不足,无法对您的答案发表评论),此替代方法将防止自动完成功能复制html标记内的任何多余内容(例如,类,id等)。 。),但不应将其复制到结束标记。
更新我已更新对filename.html.erb
文件的响应。
我注意到我的原始响应在Rails视图中常用的文件中不起作用,例如some_file.html.erb
当我使用嵌入式红宝石时(例如<p>Year: <%= @year %><p>
)。下面的代码将一起工作.html.erb
的文件。
inoremap ><Tab> ><Esc>?<[a-z]<CR>lyiwo</<C-r>"><Esc>O
样品用法
类型:
<div class="foo">[Tab]
结果:
<div class="foo">
|
<div>
其中|
指示光标位置
作为添加内联结束标记而不是块样式的示例:
inoremap ><Tab> ><Esc>?<[a-z]<CR>lyiwh/[^%]><CR>la</<C-r>"><Esc>F<i
样品用法
类型:
<div class="foo">[Tab]
结果:
<div class="foo">|<div>
其中|
指示光标位置
这是真的,上面的两个例子依靠>[Tab]
信号关闭标签(这意味着你将不得不选择要么内嵌或块样式)。就我个人而言,我使用块样式>[Tab]
和内联样式>>
。
Ctrl-_
,但这会使我的终端字体变小。