我想定义一个快捷方式来输入 XML 标签对。按下组合键key1
-key2
应该提示输入标签名称,例如“foo”,并自动插入“ <foo></foo>
”。怎么做?
理想情况下,我希望光标自动移动到第一个之后>
。
答案1
如果你使用YASnippet在 xml 模式下,它已经包含您所要求的功能的片段。
输入以下内容
tag
按下Tab并选择<tag>...</tag>
内联 XML 标签或<tag>\n...\n</tag>
单独一行的标签,您输入的内容将变成
<tag></tag>
或者
<tag>
</tag>
分别。当您输入的内容变成时,开始标签的名称将被标记,您可以输入任何您想要的标签名称,它也将被复制到结束标签。输入完标签名称后,按下 ,Tab光标将位于标签之间,以便您可以向标签输入内容。输入完标签中的内容后,Tab再次按下 ,将光标置于结束标签之后。
请注意,如果您想自定义这些代码片段的行为,这很容易。使用 YASnippet 菜单查找相关代码片段,然后编辑它们以满足您的需求。
要在任何其他模式下获取所述片段,您可以按照以下步骤为该模式创建它们:
将以下内容添加到您的 .emacs:
(setq yas/root-directory "~/.emacs.d/mysnippets"); Develop and keep personal snippets under ~/emacs.d/mysnippets (yas/load-directory yas/root-directory); Load the snippets
如果您希望将代码片段保存在另一个目录中,请继续并选择另一个目录。
输入您想要的片段模式。
- 做M-x
yas/new-snippet
。 - 输入名称
tag.1l
- 现在您将有机会编辑代码片段。通过 标记所有内容C-x h,然后通过 终止它C-w。
现在您将有一个空的代码片段。将以下内容粘贴到其中并确保代码片段在
$0
并且不在新行上:#name: <tag>...</tag> #key: tag # -- <${1:tag}>$2</$1>$0
执行C-c C-c保存并加载代码片段。
执行步骤 3 至 7,但使用名称
tag.2l
并粘贴以下内容:#name: <tag> \n...\n</tag> #key: tag # -- <${1:tag}> $2 </$1>$0
请注意,yasnippet 用于扩展的键Tab,默认情况下,在 markdown 模式下已绑定到另一个函数。因此,您要么必须使用修复程序,例如http://calas.github.com/2009/11/20/using-yasnippets-in-markdown-mode.html或绑定yas/expand
到您喜欢的键。
以下动画展示了第一个代码片段的工作原理:
答案2
这是可能的,而且应该很容易写。
但我认为你想要的是片段/骨架。请查看yasnippet. 它基本上是一个可以轻松扩展以满足您的需求的模板系统