已经有一段时间了,因为我必须在Vim
中执行任何类似HTML的代码,但最近我又遇到了这个问题。说我正在写一些简单的HTML
:
<html><head><title>This is a title</title></head></html>
如何快速写下title,head和html的结束标记?我觉得我错过了一些非常简单的方法,不会让我一个接一个地写下来。
当然我可以使用 Ctrl P 来自动填充单个标签名称,但是我的笔记本电脑键盘上的内容实际上是正确的括号和斜线。
答案 0 :(得分:73)
我发现使用xmledit插件非常有用。它增加了两个功能:
答案 1 :(得分:55)
我喜欢最小的东西,
imap ,/ </<C-X><C-O>
答案 2 :(得分:45)
我发现让vim为我编写开始和结束标记更方便,而不仅仅是结束标记。 Tim Pope可以使用出色的ragtag plugin。用法看起来像这样(让|标记光标位置) 你输入:
span|
按 CTRL + x SPACE
你得到了
<span>|</span>
您还可以使用 CTRL + x ENTER 而不是 CTRL + x SPACE ,你得到了
<span> | </span>
Ragtag可以做的不仅仅是它(例如插入&lt;%=围绕此%&gt;或DOCTYPE的东西)。您可能希望通过author of ragtag查看其他插件,尤其是surround。
答案 3 :(得分:38)
检查出来..
closetag.vim
Functions and mappings to close open HTML/XML tags
https://www.vim.org/scripts/script.php?script_id=13
我使用类似的东西。
答案 4 :(得分:23)
如果您正在做一些精心设计,sparkup非常好。
他们网站上的一个例子:
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>
答案 5 :(得分:17)
还有一个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>
---------------------
答案 6 :(得分:10)
我喜欢让我的块标签(与内联相对)立即关闭并尽可能简单地使用快捷方式(我希望尽可能避免像 CTRL 这样的特殊键,尽管我使用{ {1}}关闭我的内联标签。)我喜欢在启动标签块时使用此快捷方式(感谢@kimilhee;这是他的答案的起飞):
closetag.vim
类型 -
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>
表示在光标上方以插入模式开始新行并插入空格答案 7 :(得分:6)
allml(现在是Ragtag)和Omni-completion(&lt; C-X&gt;&lt; C-O&gt;) 在.py或.java等文件中不起作用。
如果要在这些文件中自动关闭标记, 你可以这样映射。
imap <C-j> <ESC>F<lyt>$a</^R">
(^ R是Contrl + R:您可以输入类似此Control + v然后按Control + r)
(|是光标位置) 现在,如果你输入..
&LT; p为H. ABCDE |
并输入^ j
然后关闭这个标签..
&LT; p为H. ABCDE&LT; / p为H. |
答案 8 :(得分:5)
这是另一个基于易于发现的Web写作的简单解决方案:
:iabbrev </ </<C-X><C-O>
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
答案 9 :(得分:5)
vim-closetag
这是一个非常简单的脚本(也可用作vundle
插件),可以为您关闭(X)HTML标记。从README
开始:
如果这是当前内容:
<table|
现在按&gt; ,内容将是:
<table>|</table>
现在如果再次按&gt; ,内容将是:
<table> | </table>
注意:|
是此处的光标
答案 10 :(得分:3)
建立@KeithPinson的优秀答案(对不起,还没有足够的声誉点评论你的答案),这个替代方案将阻止自动完成复制可能在html标签内的任何额外内容(例如,类,ID, etc ...)但不应该复制到结束标记。
更新我已更新我对使用filename.html.erb
文件的回复
我注意到我的原始响应在Rails视图中常用的文件中没有用,例如some_file.html.erb
当我使用嵌入式ruby时(例如<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]
的块样式和>>
的内联样式。