HBuilder HTML 自定义代码块
1 =begin 2 本文档是HTML代码块的编辑文件。注意不要把其他语言的设置放到html里来。 3 HBuilder可使用ruby脚本来编辑代码块和增强操作命令。 4 1、编辑代码块 5 如果要新增一个代码块,复制如下一段代码到空白行,然后设定参数。 6 'Style'是代码块的显示名字; 7 s.trigger = 'style' 是设定激活字符,比如输入style均会在代码提示时显示该代码块; 8 s.expansion = '' 是设定该代码块的输出字符,其中$0、$1是光标的停留和切换位置。 9 snippet 'Style' do |s| 10 s.trigger = 'style' 11 s.expansion = '<style type="text/css" media="screen"> 12 $0 13 </style>' 14 end 15 以上以HTML代码块做示例,js和css代码块类似,使用时注意避免混淆 16 2、编辑按键命令 17 如果要新增一个按键操作命令,复制如下一段代码到空白行,然后设定参数。 18 'Br'是命令名字; 19 s.key_binding = 'CONTROL+ENTER' 是设定按什么快捷键可以触发这个命令; 20 s.expansion = '<br/>' 是设定输出字符。 21 snippet 'Br' do |s| 22 s.key_binding = 'CONTROL+ENTER' 23 s.expansion = '<br/>' 24 end 25 操作时注意冲突,注意备份,有问题就还原。 26 多看看已经写的ruby命令,会发现更多强大技巧。 27 修改完毕,需要重启才能生效。 28 玩的愉快,别玩坏! 29 脚本开源地址 https://github.com/dcloudio/HBuilderRubyBundle ,可以把你的配置共享到这里,也可以在这里获取其他网友的版本 30 =end 31 32 require 'ruble' 33 34 with_defaults :scope => 'text.html entity.other.attribute-name.html' do |bundle| 35 36 snippet 'data-' do |s| 37 s.trigger = 'data-' 38 s.expansion='data-${1:type/role/transition/icon/iconpos/*} = "$2"' 39 s.locationType='HTML_ATTRIBUTE' 40 end 41 42 end 43 44 with_defaults :scope => 'text.html text' do |bundle| 45 46 snippet t(:html_4_strict) do |s| 47 s.trigger = 'doctype' 48 s.expansion = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 49 "http://www.w3.org/TR/html4/strict.dtd"> 50 ' 51 end 52 53 snippet t(:xhtml_1_frameset) do |s| 54 s.trigger = 'doctype' 55 s.expansion = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" 56 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> 57 ' 58 end 59 60 snippet t(:xhtml_1_strict) do |s| 61 s.trigger = 'doctype' 62 s.expansion = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 63 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 64 ' 65 end 66 67 snippet t(:xhtml_1_transitional) do |s| 68 s.trigger = 'doctype' 69 s.expansion = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 70 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 71 ' 72 end 73 74 snippet t(:xhtml_11) do |s| 75 s.trigger = 'doctype' 76 s.expansion = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 77 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 78 ' 79 end 80 81 snippet t(:movie) do |s| 82 s.trigger = 'movie' 83 s.expansion = '<object width="${2:320}" height="${3:240}" classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab"> 84 <param name="src" value="${1:movie.mov}"/> 85 <param name="controller" value="${4:true}"/> 86 <param name="autoplay" value="${5:true}"/> 87 <embed src="${1:movie.mov}" 88 width="${2:320}" height="${3:240}" 89 controller="${4:true}" autoplay="${5:true}" 90 scale="tofit" cache="true" 91 pluginspage="http://www.apple.com/quicktime/download/" 92 ></embed> 93 </object>' 94 end 95 96 snippet t(:html_4_transitional) do |s| 97 s.trigger = 'doctype' 98 s.expansion = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 99 "http://www.w3.org/TR/html4/loose.dtd"> 100 ' 101 end 102 103 snippet 'input with label' do |s| 104 s.trigger = 'input' 105 s.expansion = '<label for="$2">$1</label><input type="${3:text/submit/hidden/button}" name="$2" value="$5" id="$2"/>' 106 end 107 108 snippet t(:option) do |s| 109 s.trigger = 'opt' 110 s.expansion = '<option value="${1:option}">${1:option}</option>' 111 end 112 113 snippet 'input' do |s| 114 s.trigger = 'input' 115 s.expansion = '<input type="$1" name="$2" id="$2" value="$3" />' 116 s.needApplyReContentAssist = true 117 end 118 119 snippet 'textarea' do |s| 120 s.trigger = 'textarea' 121 s.expansion = '<textarea name="$1" rows="$2" cols="$3">$0</textarea>' 122 end 123 124 snippet 'canvas' do |s| 125 s.trigger = 'canvas' 126 s.expansion = '<canvas id="$1" width="$2" height="$3"></canvas>' 127 end 128 129 snippet 'iframe' do |s| 130 s.trigger = 'iframe' 131 s.expansion = '<iframe src="$1" width="$2" height="$3"></canvas>' 132 s.needApplyReContentAssist = true 133 end 134 135 snippet t(:nbsp) do |s| 136 s.key_binding = 'OPTION+Space' 137 s.expansion = ' ' 138 end 139 140 snippet 'Br' do |s| 141 s.key_binding = 'CONTROL+ENTER' 142 s.expansion = '<br/>' 143 end 144 145 snippet 'link' do |s| 146 s.trigger = 'link' 147 s.expansion = '<link rel="stylesheet" type="text/css" href="$1"/>' 148 s.needApplyReContentAssist = true 149 end 150 151 snippet 'meta' do |s| 152 s.trigger = 'meta' 153 s.needApplyReContentAssist = true 154 s.expansion = '<meta name="$1" content="$2"/>' 155 end 156 157 snippet 'meta_UTF8' do |s| 158 s.trigger = 'metautf' 159 s.expansion = '<meta charset="UTF-8"/>' 160 end 161 162 snippet 'meta_GB2312' do |s| 163 s.trigger = 'metagb' 164 s.expansion = '<meta charset="GB2312"/>' 165 end 166 167 snippet 'meta_nocache' do |s| 168 s.trigger = 'metanocache' 169 s.expansion = '<meta http-equiv="Pragma" content="no-cache" />' 170 end 171 172 snippet 'meta_keywords' do |s| 173 s.trigger = 'metakeywords' 174 s.expansion = '<meta name="Keywords" content="$1"/>' 175 end 176 177 snippet 'meta_description' do |s| 178 s.trigger = 'metadescription' 179 s.expansion = '<meta name="Description" content="$1"/>' 180 end 181 182 snippet 'meta_viewport' do |s| 183 s.trigger = 'metaviewport' 184 s.expansion = '<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />' 185 end 186 187 snippet 'script_google_jquery' do |s| 188 s.trigger = 'scriptjqg' 189 s.expansion = '<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>' 190 end 191 192 snippet 'script_baidu_jquery' do |s| 193 s.trigger = 'scriptjqb' 194 s.expansion = '<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>' 195 end 196 197 snippet '<!--[if IE]>' do |s| 198 s.trigger = 'ifie' 199 s.expansion = '<!--[if IE]> 200 $1 201 <![endif]-->' 202 end 203 204 snippet '<!--[if lte IE 6]>' do |s| 205 s.trigger = 'ifie6' 206 s.expansion = '<!--[if lte IE 6]> 207 $1 208 <![endif]-->' 209 end 210 211 snippet '<select>...</select>' do |s| 212 s.trigger = 'select' 213 s.expansion = '<select name="$1"> 214 <option value="$2">$3</option> 215 </select>' 216 end 217 218 snippet 'dl' do |s| 219 s.trigger = 'dl' 220 s.expansion = '<dl> 221 <dt>$1</dt> 222 <dd>$2</dd> 223 </dl>' 224 end 225 226 snippet 'ul' do |s| 227 s.trigger = 'ul' 228 s.expansion = '<ul> 229 <li>$1</li> 230 </ul>' 231 end 232 233 snippet 'form' do |s| 234 s.trigger = 'form' 235 s.expansion = "<form action=\"$1\" method=\"${2:get}\"> 236 $0 237 <input type=\"submit\" value=\"$3\"/> 238 </form>" 239 s.needApplyReContentAssist = true 240 end 241 242 snippet 'input_text' do |s| 243 s.trigger = 'intext' 244 s.expansion = '<input type="text" id="$1" value="$2" />' 245 s.needApplyReContentAssist = true 246 end 247 248 snippet 'input_button' do |s| 249 s.trigger = 'inbutton' 250 s.expansion = '<input type="button" id="$1" value="$2" />' 251 s.needApplyReContentAssist = true 252 end 253 254 snippet 'input_image' do |s| 255 s.trigger = 'inimage' 256 s.expansion = '<input type="image" src="$1" />' 257 s.needApplyReContentAssist = true 258 end 259 260 snippet 'input_password' do |s| 261 s.trigger = 'inpassword' 262 s.expansion = '<input type="password" name="$1" />' 263 end 264 265 snippet 'input_search' do |s| 266 s.trigger = 'insearch' 267 s.expansion = '<input type="search" name="$1" required="$2" placeholder="Search" x-webkit-speech="$3" x-webkit-grammar="builtin:search" lang="zh-CN">' 268 end 269 270 snippet 'input_submit' do |s| 271 s.trigger = 'insubmit' 272 s.expansion = '<input type="submit" id="$1" name="$2" />' 273 end 274 275 snippet 'input_reset' do |s| 276 s.trigger = 'inreset' 277 s.expansion = '<input type="reset"/>' 278 end 279 280 snippet 'img' do |s| 281 s.trigger = 'img' 282 s.expansion = '<img src="$1"/>' 283 s.needApplyReContentAssist = true 284 end 285 286 snippet 'a_link' do |s| 287 s.trigger = 'al' 288 s.expansion = '<a href="$1"></a>' 289 s.needApplyReContentAssist = true 290 end 291 292 snippet 'a_mailto' do |s| 293 s.trigger = 'am' 294 s.expansion = '<a href="mailto:$1"></a>' 295 end 296 297 snippet 'video' do |s| 298 s.trigger = 'video' 299 s.expansion = '<video width="${1:800}" height="$2"> 300 <source src="${3:myvideo.mp4}" type="video/mp4"></source> 301 <source src="${4:myvideo.ogv}" type="video/ogg"></source> 302 <source src="${5:myvideo.webm}" type="video/webm"></source> 303 <object width="$6" height="$7" type="application/x-shockwave-flash" data="${8:myvideo.swf}"> 304 <param name="movie" value="$8" /> 305 <param name="flashvars" value="autostart=true&file=$8" /> 306 </object> 307 当前浏览器不支持 video直接播放,点击这里下载视频: <a href="${9:myvideo.webm}">下载视频</a> 308 </video>' 309 end 310 311 snippet t(:script_w_external_source) do |s| 312 s.trigger = 'scsrc' 313 s.expansion = '<script src="$1" type="text/javascript" charset="${3:utf-8}"></script>' 314 s.needApplyReContentAssist = true 315 end 316 317 snippet 'Script' do |s| 318 s.trigger = 'script' 319 s.expansion = '<script type="text/javascript" charset="utf-8"> 320 $0 321 </script>' 322 end 323 324 snippet 'style' do |s| 325 s.trigger = 'style' 326 s.expansion = '<style type="text/css"> 327 $0 328 </style>' 329 end 330 331 snippet '<!DOCTYPE html>' do |s| 332 s.trigger = 'doctype' 333 s.expansion = '<!DOCTYPE HTML>' 334 end 335 336 snippet 'html' do |s| 337 s.trigger = 'html' 338 s.expansion = '<html> 339 <head> 340 <title>$0</title> 341 </head> 342 <body> 343 344 </body> 345 </html>' 346 end 347 348 snippet 'h1' do |s| 349 s.trigger = 'h1' 350 s.expansion = '<h1>$0</h1>' 351 end 352 353 snippet 'h2' do |s| 354 s.trigger = 'h2' 355 s.expansion = '<h2>$0</h2>' 356 end 357 358 snippet 'h3' do |s| 359 s.trigger = 'h3' 360 s.expansion = '<h3>$0</h3>' 361 end 362 363 snippet 'h4' do |s| 364 s.trigger = 'h4' 365 s.expansion = '<h4>$0</h4>' 366 end 367 368 snippet 'h5' do |s| 369 s.trigger = 'h5' 370 s.expansion = '<h5>$0</h5>' 371 end 372 373 snippet 'h6' do |s| 374 s.trigger = 'h6' 375 s.expansion = '<h6>$0</h6>' 376 end 377 378 snippet 'table' do |s| 379 s.trigger = 'table' 380 s.expansion = '<table border="$1" cellspacing="$2" cellpadding="$3"> 381 <tr><th>${4:Header}</th></tr> 382 <tr><td>${5:Data}</td></tr> 383 </table>' 384 end 385 386 snippet 'head' do |cmd| 387 cmd.trigger = 'head' 388 cmd.expansion = "<head> 389 <meta charset=\"utf-8\"/> 390 <title>$1</title> 391 392 </head>" 393 end 394 395 snippet 'body' do |cmd| 396 cmd.trigger = 'body' 397 cmd.expansion = "<body> 398 $0 399 </body>" 400 end 401 402 snippet 'div' do |cmd| 403 cmd.trigger = 'div' 404 cmd.needApplyReContentAssist = true 405 cmd.expansion = "<div class=\"$1\"> 406 $0 407 </div>" 408 end 409 410 snippet 'span' do |cmd| 411 cmd.trigger = 'span' 412 cmd.needApplyReContentAssist = true 413 cmd.expansion = "<span id=\"$1\"> 414 $0 415 </span>" 416 end 417 418 snippet 'fieldset' do |cmd| 419 cmd.trigger = 'fieldset' 420 cmd.expansion = "<fieldset id=\"$2\"> 421 <legend>$1</legend> 422 423 $0 424 </fieldset>" 425 end 426 427 end # End Snippets with scope 'text.html text' 428 429 # ----------------------------------------------------------------------------------- 430 # Snippets that used env vars and needed to be converted to commands 431 with_defaults :scope => 'text.html - source', :input => :none, :output => :insert_as_snippet do |bundle| 432 433 command t(:quick_br) do |cmd| 434 cmd.key_binding = 'M2+ENTER' 435 cmd.output = :insert_as_snippet 436 cmd.input = :none 437 cmd.invoke { "<br />" } 438 end 439 440 command t(:quick_html_space) do |cmd| 441 cmd.key_binding = 'M2+SPACE' 442 cmd.output = :insert_as_snippet 443 cmd.input = :none 444 cmd.invoke { " " } 445 end 446 447 command t(:emphasize) do |cmd| 448 cmd.key_binding = 'M1+M2+I' 449 cmd.input = :selection 450 cmd.invoke do |context| 451 selection = ENV['TM_SELECTED_TEXT'] || '' 452 if selection.length > 0 453 "<em>${1:#{selection}}</em>" 454 else 455 "<em>$0</em>" 456 end 457 end 458 end 459 460 command t(:strong) do |cmd| 461 cmd.key_binding = 'M1+M2+B' 462 cmd.input = :selection 463 cmd.invoke do |context| 464 selection = ENV['TM_SELECTED_TEXT'] || '' 465 if selection.length > 0 466 "<strong>${1:#{selection}}</strong>" 467 else 468 "<strong>$0</strong>" 469 end 470 end 471 end 472 473 command t(:wrap_selection_in_tag_pair) do |cmd| 474 cmd.key_binding = "CONTROL+9" 475 cmd.input = :selection 476 cmd.invoke do |context| 477 selection = ENV['TM_SELECTED_TEXT'] || '' 478 if selection.length > 0 479 "<${1:p}>#{selection.gsub('/', '\/')}</${1:p}>" 480 else 481 "<${1:p}>$0</${1:p}>" 482 end 483 end 484 end 485 end #end of 'text.html - source' 486 487 with_defaults :scope => 'text.html text', :input => :none, :output => :insert_as_snippet do |bundle| 488 command t(:ie_6_and_below) do |cmd| 489 cmd.trigger = '!' 490 cmd.invoke do |context| 491 value = (ENV['TM_SELECTED_TEXT'] || '').length > 0 ? ENV['TM_SELECTED_TEXT'] : ' IE Conditional Comment: Internet Explorer 6 and below ' 492 "<!--[if lte IE 6]>${1:#{value}}<![endif]-->$0" 493 end 494 end 495 496 command t(:ie_6) do |cmd| 497 cmd.trigger = '!' 498 cmd.invoke do |context| 499 value = (ENV['TM_SELECTED_TEXT'] || '').length > 0 ? ENV['TM_SELECTED_TEXT'] : ' IE Conditional Comment: Internet Explorer 6 only ' 500 "<!--[if IE 6]>${1:#{value}}<![endif]-->$0" 501 end 502 end 503 504 command t(:ie_7_and_above) do |cmd| 505 cmd.trigger = '!' 506 cmd.invoke do |context| 507 value = (ENV['TM_SELECTED_TEXT'] || '').length > 0 ? ENV['TM_SELECTED_TEXT'] : ' IE Conditional Comment: Internet Explorer 7 and above ' 508 "<!--[if gte IE 7]>${1:#{value}}<![endif]-->$0" 509 end 510 end 511 512 command t(:ie_8_and_above) do |cmd| 513 cmd.trigger = '!' 514 cmd.invoke do |context| 515 value = (ENV['TM_SELECTED_TEXT'] || '').length > 0 ? ENV['TM_SELECTED_TEXT'] : ' IE Conditional Comment: Internet Explorer 8 and above ' 516 "<!--[if gte IE 8]>${1:#{value}}<![endif]-->$0" 517 end 518 end 519 520 command t(:ie_9_and_above) do |cmd| 521 cmd.trigger = '!' 522 cmd.invoke do |context| 523 value = (ENV['TM_SELECTED_TEXT'] || '').length > 0 ? ENV['TM_SELECTED_TEXT'] : ' IE Conditional Comment: Internet Explorer 9 and above ' 524 "<!--[if gte IE 9]>${1:#{value}}<![endif]-->$0" 525 end 526 end 527 528 command t(:ie) do |cmd| 529 cmd.trigger = '!' 530 cmd.invoke do |context| 531 value = (ENV['TM_SELECTED_TEXT'] || '').length > 0 ? ENV['TM_SELECTED_TEXT'] : ' IE Conditional Comment: Internet Explorer ' 532 "<!--[if IE]>${1:#{value}}<![endif]-->$0" 533 end 534 end 535 536 command t(:not_ie) do |cmd| 537 cmd.trigger = '!' 538 cmd.invoke do |context| 539 value = (ENV['TM_SELECTED_TEXT'] || '').length > 0 ? ENV['TM_SELECTED_TEXT'] : ' IE Conditional Comment: NOT Internet Explorer ' 540 "<!--[if !IE]><!-->${1:#{value}}<!-- <![endif]-->$0" 541 end 542 end 543 544 command t(:wrap_in_jsp_tag) do |cmd| 545 cmd.scope = 'text.html string' 546 cmd.invoke {|context| "<?= #{ENV['TM_SELECTED_TEXT']} ?>" } 547 end 548 end