vim snipmate技巧-定制自己的snippet

GVIM技巧系列-安装snipmate插件,使用自动补全功能,提高输入效率 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import pandas as pd import matplotli.. 阅读详情
snipMate.vim 为 Vim 实现了一些 TextMate 的片段(补全)特性,片段就是使用一个
关键字后加 <tab> 键来插入一些常用的文本。

例如,在 C 文件中使用默认安装的 snipMate.vim,如果在插入模式下输入 `for<tab>`,
它将展开为典型的 C 循环: >

for (i = 0; i < count; i++) {

}


要转到下一个循环项,只需要简单的按 <tab> 键;如果是重复的代码,例如示例中的
变量 `i`,只需要在高亮处输入文本,所有指定匹配的项都将被更新。要返回到上一项,
使用 <shift-tab> 就可以了。

==============================================================================
SYNTAX *snippet-syntax*
(语法)

有两种方式定义片段,一种是定义在 'snippets/<filetype>/<trigger>.snippet'文件
中,另一种则定义在 'snippets/<filetype>.snippets'文件中。
(译注:<filetype> 是文件类型,如 html,<trigger> 是关键字。)
注意,文件类型(filetype)支持点号(.) -- 例如,可以使用 >

:set ft=html.eruby

为当前文件同时激活 HTML 和 eRuby 两种片段。

*.snippets 文件的片段语法如下: >

snippet 关键字
将被展开的文本
更多被展开的文本

注意:关键字之后的片段中,最前面的硬 TAB 字符是必须的,并且不会展开到实际展开后
的文本中。*.snippet 文件也一样,除非声明关键字时,以缩进开始。

另外注意:片段必须使用硬 TAB 空白来定义,如果需要的话可以展开为空格
(参考 |snipMate-indenting|)。

井号(#) 用来作为 *.snippets 文件的单行注释,当然,它们只能用在片段定义之外,
例如: >

# 这是一个正确的注释
snippet trigger
expanded text
snippet another_trigger
# 这不是一个注释!
expanded text
<
这从语法着色上可以明显看出来。

*snipMate-${#}*
制表符(Tab stops) ~

默认情况下,光标被放置在片段的最后。可使用 "${#}"来指定下一个光标出现在哪里。
井号(#)即制表符的数字。例如:将光标放置在 <div> 标签的 id 属性值上,并允许用户
使用 <tab> 键跳转到 <div> 的中间:
>
snippet div
<div id="${1}">
${2}
</div>
<
*snipMate-placeholders* *snipMate-${#:}* *snipMate-$#*
占位符 ~

占位符文本可以由 "${#:text}" 提供,其中 # 是制表符的数值。而其中的 "text" 可以
使用 "$#" 来引用前面的副本,例如 C 循环: >

snippet for
for (${2:i}; $2 < ${1:count}; $1++) {
${4}
}

首先将选中 "count",用户也可以输入来改变被选中内容。当按下 <tab> 键, ${2} 中
的 "i" 将被定位并被选中,所有的 $2 变量默认值是 "i",它也会受用户输入影响同步
更新。
注意:TextMate 的 "$#" 语法仅用于变量,不可以是制表符。

变量中引用变量也是可以的,例如: >

snippet opt
<option value="${1:option}">${2:$1}</option>

同样,首先 "option" 将被选中,如果用户开始输入,$1 变量会同步更新。由于其中一个
$1 变量在 ${2} 中,它在下一个制表位(tab stop)中将被作为占位符,并允许用户修改。

要复制一个没有默认值的文本,使用 "${#:}" 就可以了,例如: >

snippet foo
${1:}bar$1
< *snipMate-commands*
插入 Vim 脚本 ~

片段定义中也可以使用 Vim 脚本命令,当片段被插入,这些命令通过 eval() 会被执行。
命令通过反引号(`...`)来定义;对于 TextMates 的功能,使用 |system()|函数,
例如: >

snippet date
`system("date +%Y-%m-%d")`

假如在 Unix 系统上,将被插入当前时间。注意:这个实例你可以(也应该)使用
|strftime()| 函数。

Filename([{expr}] [, {defaultText}]) *snipMate-filename* *Filename()*

由于当前文件名会被经常使用,所以默认定义了一个函数在 snipMate.vim 中,函数名是
Filename()。


如果不带参数,将返回不带后缀的文件名;第一个参数指定附加到文件名之前(或之后)
的文本,第二个参数则指定实际文件名不存在(文件未命名)的情况下返回的值, "$1"
在第一个参数中将被替换为文件名本身,如果希望仅仅返回文件名本身,第一个参数为
空白即可。例如: >

snippet filename
`Filename()`
snippet filename_with_default
`Filename('', 'name')`
snippet filename_foo
`filename('$1_foo')`

如果文件已被命名的话,第一个示例返回文件名本身,否则返回空字符串;
如果文件已被命名,第二个示例返回文件名本身,否则返回 "name";
如果文件被命名,第三个示例返回 文件名 + "_foo",否则返回空字符串。

*multi_snip*
在一个 *.snippets 文件中,可以指定多项匹配的片段,语法定义如下: >

snippet trigger 片段的描述信息 #1
被展开的文本
snippet trigger 另一个片段的描述信息 #2
另一个被展开的文本!

这个示例中,当输入 "trigger<tab>",将出现包含所有关于 "trigger" 描述的
编号菜单,用户输入相应的编号后,对应的片段将被展开。

要在 *.snippet 文件中创建多项匹配的片段,将所有的片段放在一个子目录中,目录
名称是触发字(trigger)即可:
'snippets/<filetype>/<trigger>/<name>.snippet'。

==============================================================================
USAGE *snipMate-usage*
(用法)
*'snippets'* *g:snippets_dir*
片段定义默认装在 'runtimepath' 下的 'snippets' 目录中,在 *nix 系统中是
'~/.vim/snippets/',Windows 下则是 '$HOME\vimfiles\snippets\'。要改变这个路径,
在 .vimrc 中设置 g:snippets_dir 变量为指定目录即可,想要添加另一个路径,就使用
|ExtractSnips()| 函数。它将调用 |globpath()| 函数,它使用统一的语法(例如:
以逗号(,)为分隔符的路径)。

ExtractSnipsFile({directory}, {filetype}) *ExtractSnipsFile()* *.snippets*

ExtractSnipsFile() 为特定的文件类型提取指定的 *.snippets 文件。.snippets 文件
包含针对特定的文件类型定义的多个片段。详细请参考 |snippet-syntax|。

ExtractSnips({directory}, {filetype}) *ExtractSnips()* *.snippet*

ExtractSnips() 针对特定的文件类型,从指定的目录中提取 *.snippet 文件,目录树
看起来应该是这样:'snippets/<filetype>/<trigger>.snippet'。如果片段有多项匹配,
'snippets/<filetype>/<trigger>/<name>.snippet' (参考 |multi_snip|)。

*ResetSnippets()*
ResetSnippets() 函数从内存中删除所有的片段,如果希望通过多次导入(|:source|)
来将片段置于顶部,这将非常有用。


*list-snippets* *i_CTRL-R_<Tab>*
想知道那些片段是可用的,在当前缓冲区按 <c-r><tab>,会根据|popupmenu-completion|
来显示可用的片段列表。

==============================================================================
SETTINGS *snipMate-settings* *g:snips_author*
(设置)

字符串 g:snips_author (等同于 TextMate 中的 $TM_FULLNAME) 用来设置你的姓名,
他可以用在片段定义中,来自动补全。例如: >

let g:snips_author = '闲耘?'
snippet name
`g:snips_author`
<
*snipMate-expandtab* *snipMate-indenting*
如果想在片段展开的文本中使用空白来替代制表符(tabs),设置 'expandtab' 和
'softtabstop' 为合适的数值即可,如果 'softtabstop' 未设置,则使用 'shiftwidth'
的设置。

*snipMate-remap*
snipMate 没有自定义触发键的自定义选项,但是可以在 'after' 目录下的
'plugin/snipMate.vim' 文件中修改两行代码来重映射。例如,要改变触发键为 CTRL-J:
把下面两行 >

ino <tab> <c-r>=TriggerSnippet()<cr>
snor <tab> <esc>i<right><c-r>=TriggerSnippet()<cr>

改为: >
ino <c-j> <c-r>=TriggerSnippet()<cr>
snor <c-j> <esc>i<right><c-r>=TriggerSnippet()<cr>

==============================================================================
FEATURES *snipMate-features*
(特性)

snipMate.vim 还有一些其他的特性:
- 片段语法与 TextMate 的非常类似,可以很方便的转换。
- 片段保持透明(它不在缓冲区中写标记位或占位符),不需要转义不完整的片段
有时候这非常有用。
- 在输入过程中自动更新片段。
- 片段支持多项匹配。
- 片段补全可以是无序的。例如,在 do...while 循环中,条件表达式可以被添加到
代码之前。
- [新] 支持基于文件的片段定义。
- [新] 可以展开触发器后非单词分隔符,例如 "bar.foo" 中的 "foo"。
- [新] <shift-tab> 可以反序跳转到上一个制表位。

==============================================================================
DISADVANTAGES *snipMate-disadvantages*
(缺点)

与 TextMate 的片段相比,snipMate 还有以下缺点:
- 没有 $0;制表位必须有明确的开始(必须从$1开始)。
- 不支持嵌套的占位符,例如: >

'<div${1: id="${2:some_id}}">${3}</div>'
<
在 TextMate 中,这个片段定义将首先高亮 ' id="some_id"',如果删掉它,
将自动忽略 ${2},下一个 <tab> 将跳转到 ${3};如果不删掉,会先高亮
"some_id"。在 snipMate.vim 中不可以这样。
- "${1/.*/\U&}" 这样的正则表达式变量不被执行。
- 占位符不可以跨多行。
- 不能激活同一文件中,不同作用域的片段。

也许其中的某些功能会被添加到以后的版本中。

==============================================================================
CONTACT *snipMate-contact* *snipMate-author*
(联系方式)

要联系插件作者(Michael Sanders),请发邮件至:
msanders42+snipmate <at> gmail <dot> com

我非常欢迎任何关于改善脚本的建议。

中文文档翻译问题请联系译者(闲耘?),邮件至:
hotoo.cn[AT]gmail.com

==============================================================================

vim:tw=78:ts=8:ft=help:norl:
【Vim入门】新手的几个实用命令及Vim初步个性化定制 【Vim入门】新手的几个实用命令及Vim初步个性化定制 几个实用命令 宏录制 map命令 书签 Vim初步个性化定制 Snipmate SingleComplie 配色方案 阅读详情

相关推荐

S4-FPGA-K7板级原理图硬件实战

xilinx K7板级硬件实战

weixin_66510961的博客 6148

安装VIM编辑器的snipmate(代码补全)插件

安装VIM编辑器的snipmate插件snipmate是什么?pathogen是什么?安装pathogen安装snipmate snipmate是什么? snipmate 是一个类似代码补全的插件,更好的地方在于自定义补全的内容。 snipmate 的安装方式官方推荐的是Pathogen安装方式,注意,你得首先安装 https://github.com/tpope/vim-pathogen。 最新的 snipmate 是在 https://github.com/garbas/vim-snipmate 而不是

迷茫的IT老腊肉 1443

079、LVGL基础控件:消息框(Msgbox)

《LVGL消息框控件深度解析与避坑指南》 文章深入剖析了LVGL消息框控件的核心特性和使用技巧。消息框本质是带按钮的模态容器,而非独立窗口。作者分享了创建消息框的正确姿势、标题/内容设置方法、安全的按钮事件处理方式(避免直接调用close函数导致栈溢出),并详细介绍了模态/非模态实现、样式自定义、动态更新等实用技巧。针对常见问题如内存管理、按钮数量限制、动画效果等给出了专业建议,特别强调了消息框作为用户交互关键环节的优化重要性,建议通过异步删除、合理父对象选择等方式提升稳定性。文章包含大量实际项目经验总结,

m0_50546716的博客 152

vim snipmate技巧-定制自己的snippet

转自:[url]http://code.google.com/p/vim-script-cn/source/browse/trunk/doc/snipMate.cnx[/url] 还有另外两篇也不错:[url]http://www.exzdev.com/2011/04/vim-tips-snipmate%E6%8A%80%E5%B7%A7-%E5%AE%9A%E5%88%B6%E8%87%AA%...

zzhttzzh的专栏 810

ZYNQ BRAM实现PS与PL数据交互

有时CPU需要与PL进行小批量的数据交换,可以通过BRAM模块,也就是Block RAM实现此要求。本章通过Zynq的GP Master接口读写PL端的BRAM,实现与PL的交互。在本实验中加入了自定义的FPGA程序,并利用AXI4总线进行配置,通知其何时读写BRAM。以下为本实验原理图,CPU通过AXI BRAM Controller读取BRAM数据,CPU仅配置自定义的PL BRAM Controller 的寄存器,不通过它读写数据。

baidu_34971492的博客 2274

Qt实现窗口等比例缩放

在Qt中,实现窗口的等比例缩放是一个常见的需求。通过对窗口的尺寸进行调整,使得窗口的内容在缩放过程中保持相同的比例,可以提供更好的用户体验。通过以上的代码,我们实现了一个可以等比例缩放的Qt窗口。在调整窗口大小时,窗口中的标签和按钮将按比例缩放,保持内容的比例不变。首先,我们需要在Qt中创建一个窗口,并设置其内容。在该事件中,我们将根据窗口的新尺寸计算出合适的比例因子,并将其应用到窗口的内容上。现在,我们将添加功能,使得窗口可以等比例缩放。最后,我们将缩放因子应用到窗口中的标签和按钮上,调整它们的尺寸。

2301_79330511的博客 3958

vim-snippets实现自定义todo待完成列表片段补全

vim-snippets

赵凯月的博客 772

4.3 Langfuse 集成实战:追踪 OpenAI、LangChain 和 LangGraph 应用

本文介绍了如何将Langfuse集成到不同类型的AI应用中,包括原生OpenAI、LangChain和LangGraph应用。主要内容包括: 两种集成模式:手动追踪(精确控制)和自动追踪(通过回调机制) 三种应用场景的集成方案: 原生OpenAI应用:使用langfuse.trace()手动记录对话流程、LLM调用和工具执行 LangChain应用:通过LangfuseCallbackHandler自动追踪Agent执行过程 LangGraph应用:与LangChain相同的自动追踪方式,可可视化节点和状态

yonggeit的博客 3300

【亲测免费】 Vim Snippets 使用教程

Vim Snippets 是一个为 Vim 编辑器提供代码片段(snippets)的项目。这些代码片段可以极大地提高编码效率,通过预定义的模板快速插入常用的代码块。该项目支持多种 snippet 引擎,如 UltiSnips 和 snipMate。 ## 项目快速启动 ### 安装 首先,确保你已经安装了 Vim 和 Vundle(或其他插件管理器)。然后在你的 `.vimrc` 文件中添加

gitblog_00353的博客 698

Playwright实战:打造绕过全维度前端反爬的无头浏览器爬虫(2026实战版)

Playwright绕过前端反爬的核心是模拟真实:真实的设备指纹、真实的行为轨迹、真实的网络请求;2025年前端反爬的核心检测维度是设备指纹+行为轨迹+网络请求,三者缺一不可;实战中需重点关注WebGL/Canvas指纹模拟、行为随机性、请求头完整性,这是绕过反爬的关键;性能优化需以“不触发反爬”为前提,优先选择浏览器复用、资源拦截,而非无限制并发。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2094

【ARM CoreLink 系列 4.2 -- NI-700 Function units 详细介绍】

CoreLink NI-700的ASNI(AXI系统网络接口)完成者单元负责接收并处理来自AXI请求者设备的请求。这些单元将事务打包成根据NI-700通用传输(GT)协议的Flits,并将GT响应Flits解包成AXI响应。AXI与GT协议之间的请求、数据和响应事务的转换:确保AXI事务可以被NI-700网络正确处理,并将GT协议的响应正确转换回AXI响应。入站事务的突发拆分。

CodingCos的博客 1322

python-vimrc代码片段管理:SnipMate个性化配置指南

对于用 Vim 写 Python 的开发者来说,**python-vimrc** 是一个专注于 Python / Cython / C 开发的 Vim 配置项目,开箱即用。而其中最值得深挖的功能,就是它的**代码片段管理**能力。本文将以 **SnipMate个性化配置** 为主线,从插件体系、安装步骤到自定义片段文件,带你一步步打造专属的 Vim 代码片段库,从此告别重复敲样板代码。🚀 ##

gitblog_00805的博客 812

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Vim提示:解决snipMate的旧解析器警告

Vim 提示:解决 snipMate 的旧解析器警告

bf's blog 417

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

关于Vim 的插件snipmate 以及它的安装方式

在网上看了http://study.163.com/course/courseMain.htm?courseId=269016#/courseMain   里关于snipmate 的视频   snipmate 是一个类似代码补全的东西,更好的地方在于自定义这个补全的内容。 由于视频比较老了,所以很多地方跟现有的都有点小变化    这里主要说下安装问题   1、最新的snipmate 是

wince--linux的专栏 7431

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

vim-snipmate编写snippet的语法

vim-snipmate真的很好用,以前好多编写代码的问题得到完美的解决。还附带提升我对vim的理解和信心,在这里感谢一下作者。thank you。 1、现说一下我浓缩的重要语法。   1、定义是下面这样,注意中间必须是一个制表符&lt;TAB&gt;不能用空格代替。      snippet&lt;TAB&gt;关键字 代码片段   2、变量。${#},#代表变...

weixin_33754913的博客 418

Vim Snipmate 自动补全插件

在~/.vimrc的Vundle插件管理函数中添加以下内容(插件本身和所依赖的插件): Plugin 'MarcWeber/vim-addon-mw-utils' Plugin 'tomtom/tlib_vim' Plugin 'garbas/vim-snipmate' Plugin 'honza/vim-...

weixin_33725272的博客 448

探索代码片段的力量:snipMate & UltiSnip 的无限可能

在编程的世界里,时间就是效率。无论是新手还是老手,我们都在寻找能让我们更快、更高效地编写代码的方法。这就是为什么我要向大家强烈推荐一个开源项目——snipMate & UltiSnip 的代码片段库。 ## 项目介绍 这个项目是一个强大的社区维护的代码片段仓库,它为多种编程语言提供了丰富的代码模板和结构。它的核心目标是简化你的编码过程,减少重复工作,帮助你在各种场景下快速构建出高质量的代码框架

gitblog_00173的博客 899

Vim的snipMate插件

Vim的snipMate插件 介绍 终于发现了一个插件,对于Vim下代码块的自动补全支持的很好。给大家推荐snipMate。 snipMate可以帮助您在vim上实现类似Textmate的功能,自动代码块的能力非常强大,而且代码块是可定制的。我们只需编辑~/.vim/snippets/目录下的*.snippets文件就可以根据自己的要求自动产生代码。 使用 下载[url=ht...

stefan321的专栏 229

vim使用插件snipMate遇到的问题

前段时间发现snipMate这个东西挺好用,而且能自定义一些快捷键 比如在在haml.snippets文件中定义了 [code="java"]snippet ffcb =f.check_box :${1:attribute}[/code] 在haml文件中输入ffcb就可以弹出check_box了 最近对haml的代码做了一些快捷键的设置,但是设置之后发现每次打开一个文件的时...

东升红日辉万里,明泽润物彻古今 308

vim-snippets vs 其他代码片段引擎:终极对比指南

在Vim编辑器中提高编码效率,代码片段工具是必不可少的利器。今天我们将深入对比最流行的vim-snippets代码片段集合与其他主流代码片段引擎,帮助你找到最适合自己工作流的解决方案。 ## 什么是vim-snippets? **vim-snippets**是一个社区维护的开源代码片段集合,包含超过220个文件,支持80多种编程语言和框架。这个项目最初为snipMate设计,现在也支持Ulti

gitblog_00045的博客 871

rails snippet on vim

rails snippet on vim 1. install snipMate http://www.vim.org/scripts/script.php?script_id=2540 2. install rails.snippet http://github.com/scrooloose/snipmate-snippets/tree/master 感谢,几位辛苦...

Alvin 's Blog 247

snipMate安装后报错

自己安装了 snipMate,启动vim后出现以下错误: Warning in snipMate.vim: Snippet c) is already defined. See :h multi_snip for help on snippets with multiple matches.Warning in snipMate.vim: Snippet date is already defi...

编程资料大全 132

Vim补全的一些事

转自|http://oldj.net/article/vim-parenthesis/

shadow0zero的博客 444
上一篇: gvim菜单栏不显示了
下一篇: 编译原理 语法树 句柄 简单短语 短语
心若天府
博客等级 码龄15年 37粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值