zencoding.vim 教程

如果你经常手写 HTML 或 CSS,则一定会察觉到输入英文标签非常耗时,而且容易犯错,这就是为什么会有 zencoding 存在,禅之编程:你只需关注应该关注的内容,语法、拼写或重复输入的内容都交给 zencoding 完成。

但是 zencoding 官方并不支持 Vim,于是就有了一个日本网友 Yasuhiro Matsumoto 开发的第三方 Vim 插件 zencoding.vim。如果你恰好使用 Vim,又恰好做网页前端开发,则一定要尝试下这个 Vim 插件,可以减少你非常多的工作量。

下载 zencoding.vim

你可以从两个地址下载,一个是 Vim 插件站点,一个是 Github 上,Vim 站点上目前版本为 0.72,2012-05-28 发布。

安装 zencoding.vim

一般建议使用 pathogen.vim 来管理 Vim 插件,你如果刚好也使用它,就可以直接将下载的压缩包解压到 bundle 文件夹下,pathogen.vim 会自动管理。否则请根据你的操作系统参考 Vim 第三方插件安装方法进行安装。

使用 zencoding.vim

使用 Vim 新建 HTML 文件,注意用命令 :set ft? 检查文件类型,如果不是 HTML 则 zencoding.vim 可能不正常工作。

以下内容翻译自 zencoding.vim tutorial,虚线框内为扩展后的内容,感谢作者允许翻译并发布,版权归原作者所有。

1. 展开缩略词

键入缩略词组 ‘div>p#foo$*3>a’ 然后再按入 ‘<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. 用缩略词包入

写出如下内容:

test1
test2
test3

然后进入 Vim 的可视模式进行“行选取”上面三行内容,然后再按入 ‘<c-y>,‘,这时 Vim 的命令行会提示 Tags:,然后键入’ul>li*’。

<ul>
    <li>test1</li>
    <li>test2</li>
    <li>test3</li>
</ul>

而假如你输入的 tag 是 ‘blockquote’,则结果会变成下面这样。

<blockquote>
    test1
    test2
    test3
</blockquote>

3.插入模式下根据光标位置选中整个标签

按 ‘<c-y>d

4.插入模式下根据光标位置选中整个标签内容

按 ‘<c-y>D

:3、4内容原教程中并没有例子,我在这儿举一个,假设_ 指示插入模式下的光标位置。

<div>
    <ol>
        <li>_zencoding.vim 中文教程</li>
        <li></li>
        <li></li>
        <li></li>
    </ol>
        _<p>同上</p>
</div>

如上所示,如果光标在第1个位置,则3命令会选中 <li>_zencoding.vim 中文教程</li>,4命令会选中 zencoding.vim 中文教程,可以看到,它并不选中包围内容的标签对。

而当光标在第2个位置时,命令3选中整个 div 块,命令4则只选择除去 div 标签对的 div 内容,即一个有序列表与段落。

5.跳转到下一个编辑点

插入模式下按入 ‘<c-y>n

6.跳转到上一个编辑点

插入模式下按入 ‘<c-y>N

7.更新图片大小

移动光标到 img 标签。

<img src="foo.png" />

然后按入 ‘<c-y>i

<img src="foo.png" width="32" height="48" />

注(译者言):这个据个人使用经历,仅适用本地图片,互联网上的图片并无法取得其大小。

8.合并行

选择包含 ‘<li>’ 的行

<ul>
    <li class="list1"></li>
    <li class="list2"></li>
    <li class="list3"></li>
</ul>

然后按入 ‘<c-y>m

<ul>
    <li class="list1"></li><li class="list2"></li><li class="list3"></li>
</ul>

9.移除标签对

移动光标到块中

<div class="foo">
    <a>cursor is here</a>
</div>

在插入模式下按入 ‘<c-y>k‘。

<div class="foo">

</div> 

再次按入 ‘<c-y>k‘ 则上述连 div 标签块都没了。

10.分割/合并标签

移动光标到块中

<div class="foo">
    cursor is here
</div>

在插入模式下按入 ‘<c-y>j‘。

<div class="foo"/>

再次按 ‘<c-y>j‘。

<div class="foo">

</div>

11.切换注释

移动光标到块中

<div>
    hello world
</div>

插入模式中按入 ‘<c-y>/‘。

<!-- <div>
    hello world
</div> -->

再按 ‘<c-y>/‘。

<div>
    hello world
</div>

12.从 URL 地址生成锚

将光标移至 URL

http://www.google.com/

按 ‘<c-y>a

<a href="http://www.google.com"></a>

13.从 URL 地址生成引用文本

移动光标到 URL

http://github.com/

键入 ‘<c-y>A

<blockquote class="quote">
    <a href="http://github.com/"></a><br />
    <p>...</p>
    <cite>http://github.com/</cite>
</blockquote>

14.安装 zencoding.vim

见文章头部。

15.为你所用的语言启用 zencoding.vim

你可以为你所用的编程语言自定义行为。

# cat >> ~/.vimrc
let g:user_zen_settings = {
\ 'php' : {
\ 'extends' : 'html',
\ 'filters' : 'c',
\ },
\ 'xml' : {
\ 'extends' : 'html',
\ },
\ 'haml' : {
\ 'extends' : 'html',
\ },
\}

: 1. zencoding cheatsheet 2. CSS 部分写法注意事项

by 发布至今已356天

CC BY-NC

  • http://mattn.kaoriya.net/ mattn

    Thanks!

    • chenxsan

      XD.

  • p

    这个插件最傻的是ctrl+y 过后再按其它键。其次傻的是ctrl+y+。我改成了ctrl+alt+ 和Notepad中的一样

  • Pingback: Bootstrap scrollspy 用法 – 陈三·4月亮

  • Pingback: WordPress 使用 Markdown 语法 – 陈三⋅4月亮

  • http://yansong.me/ yansong

    其实还应该加上一种写法input[type=text size=30] ctrl+y+,后就生成:

  • hafeyang

    很不错,但是我发现有几个功能用vim自带的命令会更快些,例如:

    3.3.3 选择标签 可以使用vit 选中标签内内容,vat可以直接选中包括整个标签内容 3.8.8 合并行,可以直接用行选中模块下按下J就行 3.9.9 移除标签对 ,可以同理使用 dit (delete inner tag) dat (delete around tag) ,cat cit 即可。

    我认为zencoding的杀手功能:

    css表达式展开,上一个/下一个编辑点 切换注释