├── README.md └── vimrc-mode.el /README.md: -------------------------------------------------------------------------------- 1 | # vimrc-mode - Major mode for vimrc files 2 | 3 | # INSTALL 4 | 5 | M-x package-install vimrc-mode 6 | 7 | Then add to `~/.emacs`: 8 | 9 | (require 'vimrc-mode) 10 | (add-to-list 'auto-mode-alist '("\\.vim\\(rc\\)?\\'" . vimrc-mode)) 11 | -------------------------------------------------------------------------------- /vimrc-mode.el: -------------------------------------------------------------------------------- 1 | ;;; vimrc-mode.el --- Major mode for vimrc files -*- lexical-binding: t; -*- 2 | 3 | ;; Copyright (C) 2013 Andrew Pennebaker 4 | ;; Copyright (C) 2011 Alpha Tan 5 | 6 | ;; Authors: Mark Oteiza 7 | ;; Andrew Pennebaker 8 | ;; Alpha Tan 9 | ;; URL: https://github.com/mcandre/vimrc-mode 10 | ;; Version: 0.3.1 11 | ;; Keywords: languages, vim 12 | ;; Package-Requires: ((emacs "24.3")) 13 | 14 | ;; This file is free software; you can redistribute it and/or modify 15 | ;; it under the terms of the GNU General Public License as published by 16 | ;; the Free Software Foundation; either version 2, or (at your option) 17 | ;; any later version. 18 | 19 | ;; This file is distributed in the hope that it will be useful, 20 | ;; but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | ;; GNU General Public License for more details. 23 | 24 | ;; You should have received a copy of the GNU General Public License 25 | ;; along with GNU Emacs; see the file COPYING. If not, write to 26 | ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 27 | ;; Boston, MA 02111-1307, USA. 28 | 29 | ;;; Commentary: 30 | 31 | ;; The homepage for Alpha Tan's original vimrc mode is 32 | ;; 33 | 34 | ;;; Code: 35 | 36 | (require 'font-lock) 37 | 38 | (defgroup vimrc nil 39 | "Major mode for editing Vim script." 40 | :link '(url-link "https://github.com/mcandre/vimrc-mode") 41 | :group 'languages) 42 | 43 | (defcustom vimrc-mode-hook nil 44 | "Normal hook run when entering `vimrc-mode'." 45 | :type 'hook 46 | :group 'vimrc-mode) 47 | 48 | (defgroup vimrc-faces nil 49 | "Faces used for Vim script." 50 | :group 'faces) 51 | 52 | (defface vimrc-option 53 | '((default :inherit font-lock-variable-name-face)) 54 | "Face used for Vim's configuration options.") 55 | 56 | (defface vimrc-function-builtin 57 | '((default :inherit font-lock-builtin-face)) 58 | "Face used for Vim's built-in functions.") 59 | 60 | (defface vimrc-command 61 | '((default :inherit font-lock-keyword-face)) 62 | "Face used for Vim Ex commands.") 63 | 64 | (defface vimrc-number 65 | '((((class color) (background light)) (:foreground "steel blue")) 66 | (((class color) (background dark)) (:foreground "sky blue")) 67 | (t nil)) 68 | "Face used for Vim's numbers.") 69 | 70 | 71 | ;; Font lock linking 72 | 73 | (defvar vimrc-font-lock-keywords 74 | `( 75 | ;; Line comment 76 | ("^[\t ]*\\(\"\\)\\(.*\\)$" 77 | (1 font-lock-comment-delimiter-face) 78 | (2 font-lock-comment-face)) 79 | 80 | ;; Trailing comment 81 | ("[\t ]+\\(\"\\)\\([^\"\r\n]*\\)$" 82 | (1 font-lock-comment-delimiter-face) 83 | (2 font-lock-comment-face)) 84 | 85 | ;; String start: 86 | ("\\(\"[^\n\r\"]*\"\\)\\|\\('[^\n\r]*'\\)" 87 | (0 font-lock-string-face)) ;; String end; 88 | 89 | ;; Function-name start: 90 | ("^[ \t]*\\(fun\\(?:ction\\)?\\)!?[ \t]+\\([a-zA-Z0-9_:#]+\\)?" 91 | (2 font-lock-function-name-face nil t)) ;; Function-name end; 92 | ("\\(\\([a-zA-Z]*:\\)?[a-zA-Z]*\\)(" 93 | (1 font-lock-function-name-face nil t)) ;; Function-name end; 94 | 95 | ;; Variables 96 | ("\\<[bwglsav]:[a-zA-Z_][a-zA-Z0-9#_]*\\>" 97 | (0 font-lock-variable-name-face)) 98 | ("\\(let[ \t]+\\)\\<\\([a-zA-Z_][a-zA-Z0-9#_]*\\)\\>" 99 | (2 font-lock-variable-name-face)) 100 | 101 | ;; Options which can be prefixed with `no' 102 | (,(concat "[^_]\\<\\(\\(?:no\\)?" 103 | (regexp-opt '("autochdir" "acd" 104 | "allowrevins" "ari" 105 | "altkeymap" "akm" 106 | "antialias" "anti" 107 | "arabic" "arab" 108 | "arabicshape" "arshape" 109 | "autoindent" "ai" 110 | "autoread" "ar" 111 | "autowrite" "aw" 112 | "autowriteall" "awa" 113 | "backup" "bk" 114 | "ballooneval" "beval" 115 | "binary" "bin" 116 | "bioskey" "biosk" 117 | "bomb" 118 | "buflisted" "bl" 119 | "cindent" "cin" 120 | "compatible" "cp" 121 | "confirm" "cf" 122 | "conskey" "consk" 123 | "copyindent" "ci" 124 | "cscopetag" "cst" 125 | "cscopeverbose" "csverb" 126 | "cursorbind" "crb" 127 | "cursorcolumn" "cuc" 128 | "cursorline" "cul" 129 | "delcombine" "deco" 130 | "diff" 131 | "digraph" "dg" 132 | "edcompatible" "ed" 133 | "endofline" "eol" 134 | "equalalways" "ea" 135 | "errorbells" "eb" 136 | "esckeys" "ek" 137 | "expandtab" "et" 138 | "exrc" "ex" 139 | "fkmap" "fk" 140 | "foldenable" "fen" 141 | "gdefault" "gd" 142 | "guipty" 143 | "hidden" "hid" 144 | "hkmap" "hk" 145 | "hkmapp" "hkp" 146 | "hlsearch" "hls" 147 | "icon" 148 | "ignorecase" "ic" 149 | "imcmdline" "imc" 150 | "imdisable" "imd" 151 | "incsearch" "is" 152 | "infercase" "inf" 153 | "insertmode" "im" 154 | "joinspaces" "js" 155 | "lazyredraw" "lz" 156 | "linebreak" "lbr" 157 | "lisp" 158 | "list" 159 | "loadplugins" "lpl" 160 | "macatsui" 161 | "magic" 162 | "modeline" "ml" 163 | "modifiable" "ma" 164 | "modified" "mod" 165 | "more" 166 | "mousefocus" "mousef" 167 | "mousehide" "mh" 168 | "number" "nu" 169 | "opendevice" "odev" 170 | "paste" 171 | "preserveindent" "pi" 172 | "previewwindow" "pvw" 173 | "prompt" 174 | "readonly" "ro" 175 | "relativenumber" "rnu" 176 | "remap" 177 | "restorescreen" "rs" 178 | "revins" "ri" 179 | "rightleft" "rl" 180 | "ruler" "ru" 181 | "scrollbind" "scb" 182 | "secure" 183 | "shellslash" "ssl" 184 | "shelltemp" "stmp" 185 | "shiftround" "sr" 186 | "shortname" "sn" 187 | "showcmd" "sc" 188 | "showfulltag" "sft" 189 | "showmatch" "sm" 190 | "showmode" "smd" 191 | "smartcase" "scs" 192 | "smartindent" "si" 193 | "smarttab" "sta" 194 | "spell" 195 | "splitbelow" "sb" 196 | "splitright" "spr" 197 | "startofline" "sol" 198 | "swapfile" "swf" 199 | "tagbsearch" "tbs" 200 | "tagrelative" "tr" 201 | "tagstack" "tgst" 202 | "termbidi" "tbidi" 203 | "terse" 204 | "textauto" "ta" 205 | "textmode" "tx" 206 | "tildeop" "top" 207 | "timeout" "to" 208 | "title" 209 | "ttimeout" 210 | "ttybuiltin" "tbi" 211 | "ttyfast" "tf" 212 | "visualbell" "vb" 213 | "warn" 214 | "weirdinvert" "wiv" 215 | "wildmenu" "wmnu" 216 | "winfixheight" "wfh" 217 | "winfixwidth" "wfw" 218 | "wrap" 219 | "wrapscan" "ws" 220 | "write" 221 | "writeany" "wa" 222 | "writebackup" "wb") t) 223 | "\\)\\>[^_]" ) 224 | 1 '(face vimrc-option)) 225 | 226 | ;; The rest of the options 227 | (,(concat "[^_]" 228 | (regexp-opt '("aleph" "al" 229 | "ambiwidth" "ambw" 230 | "arabicshape" "arshape" 231 | "background" "bg" 232 | "backspace" "bs" 233 | "backupcopy" "bkc" 234 | "backupdir" "bdir" 235 | "backupext" "bex" 236 | "backupskip" "bsk" 237 | "balloondelay" "bdlay" 238 | "balloonexpr" "bexpr" 239 | "breakat" "brk" 240 | "breakindent" "bri" 241 | "breakindentopt" "briopt" 242 | "browsedir" "bsdir" 243 | "bufhidden" "bh" 244 | "buftype" "bt" 245 | "casemap" "cmp" 246 | "cdpath" "cd" 247 | "cedit" 248 | "charconvert" "ccv" 249 | "cinkeys" "cink" 250 | "cinoptions" "cino" 251 | "cinwords" "cinw" 252 | "clipboard" "cb" 253 | "cmdheight" "ch" 254 | "cmdwinheight" "cwh" 255 | "colorcolumn" "cc" 256 | "columns" "co" 257 | "comments" "com" 258 | "commentstring" "cms" 259 | "complete" 260 | "completefunc" "cfu" 261 | "completeopt" "cot" 262 | "concealcursor" "cocu" 263 | "conceallevel" "cole" 264 | "cpoptions" "cpo" 265 | "cryptmethod" "cm" 266 | "cscopepathcomp" "cspc" 267 | "cscopeprg" "csprg" 268 | "cscopequickfix" "csqf" 269 | "cscopetagorder" "csto" 270 | "cscopeverbose" "csverb" 271 | "debug" 272 | "define" "def" 273 | "dictionary" "dict" 274 | "dex" "diffexpr" 275 | "dip" "diffopt" 276 | "directory" "dir" 277 | "display" "dy" 278 | "eadirection" "ead" 279 | "encoding" "enc" 280 | "equalprg" "ep" 281 | "errorfile" "ef" 282 | "errorformat" "efm" 283 | "eventignore" "ei" 284 | "fileencoding" "fenc" 285 | "fe" 286 | "fileencodings" "fencs" 287 | "fileformat" "ff" 288 | "fileformats" "ffs" 289 | "filetype" "ft" 290 | "fillchars" "fcs" 291 | "fkmap" "fk" 292 | "foldclose" "fcl" 293 | "foldcolumn" "fdc" 294 | "foldexpr" "fde" 295 | "foldignore" "fdi" 296 | "foldlevel" "fdl" 297 | "foldlevelstart" "fdls" 298 | "foldmarker" "fmr" 299 | "foldmethod" "fdm" 300 | "foldminlines" "fml" 301 | "foldnestmax" "fdn" 302 | "foldopen" "fdo" 303 | "foldtext" "fdt" 304 | "formatoptions" "fo" 305 | "formatlistpat" "flp" 306 | "formatprg" "fp" 307 | "formatexpr" "fex" 308 | "fsync" "fs" 309 | "grepformat" "gfm" 310 | "grepprg" "gp" 311 | "guicursor" "gcr" 312 | "guifont" "gfn" 313 | "guifontset" "gfs" 314 | "guifontwide" "gfw" 315 | "guiheadroom" "ghr" 316 | "guioptions" "go" 317 | "guitablabel" "gtl" 318 | "guitabtooltip" "gtt" 319 | "helpfile" "hf" 320 | "helpheight" "hh" 321 | "helplang" "hlg" 322 | "highlight" "hl" 323 | "history" "hi" 324 | "iconstring" 325 | "imactivatefunc" "imaf" 326 | "imactivatekey" "imak" 327 | "iminsert" "imi" 328 | "imsearch" "ims" 329 | "imstatusfunc" "imsf" 330 | "include" "inc" 331 | "includeexpr" "inex" 332 | "indentexpr" "inde" 333 | "indentkeys" "indk" 334 | "isfname" "isf" 335 | "isident" "isi" 336 | "iskeyword" "isk" 337 | "isprint" "isp" 338 | "key" 339 | "keymap" "kmp" 340 | "keymodel" "km" 341 | "keywordprg" "kp" 342 | "langmap" "lmap" 343 | "langmenu" "lm" 344 | "laststatus" "ls" 345 | "lines" 346 | "linespace" "lsp" 347 | "lispwords" "lw" 348 | "listchars" "lcs" 349 | "makeef" "mef" 350 | "makeprg" "mp" 351 | "matchpairs" "mps" 352 | "matchtime" "mat" 353 | "maxcombine" "mco" 354 | "maxfuncdepth" "mfd" 355 | "maxmapdepth" "mmd" 356 | "maxmem" "mm" 357 | "maxmempattern" "mmp" 358 | "maxmemtot" "mmt" 359 | "menuitems" "mis" 360 | "mkspellmem" "msm" 361 | "modelines" "mls" 362 | "mouse" 363 | "mousemodel" "mousem" 364 | "mouseshape" "mouses" 365 | "mousetime" "mouset" 366 | "mzquantum" "mzq" 367 | "nrformats" "nf" 368 | "numberwidth" "nuw" 369 | "omnifunc" "ofu" 370 | "operatorfunc" "opfunc" 371 | "osfiletype" "oft" 372 | "paragraphs" "para" 373 | "pastetoggle" "pt" 374 | "pex" "patchexpr" 375 | "patchmode" "pm" 376 | "path" "pa" 377 | "previewheight" "pvh" 378 | "printdevice" "pdev" 379 | "printencoding" "penc" 380 | "printexpr" "pexpr" 381 | "printfont" "pfn" 382 | "printheader" "pheader" 383 | "printmbcharset" "pmbcs" 384 | "printmbfont" "pmbfn" 385 | "printoptions" "popt" 386 | "pumheight" "ph" 387 | "quoteescape" "qe" 388 | "redrawtime" "rdt" 389 | "regexpengine" "re" 390 | "report" 391 | "rightleftcmd" "rlc" 392 | "rulerformat" "ruf" 393 | "runtimepath" "rtp" 394 | "scroll" "scr" 395 | "scrolljump" "sj" 396 | "scrolloff" "so" 397 | "scrollopt" "sbo" 398 | "sections" "sect" 399 | "selection" "sel" 400 | "selectmode" "slm" 401 | "sessionoptions" "ssop" 402 | "shell" "sh" 403 | "shellcmdflag" "shcf" 404 | "shellpipe" "sp" 405 | "shellquote" "shq" 406 | "shellredir" "srr" 407 | "shelltype" "st" 408 | "shellxescape" "sxe" 409 | "shellxquote" "sxq" 410 | "shiftwidth" "sw" 411 | "shortmess" "shm" 412 | "showbreak" "sbr" 413 | "showtabline" "stal" 414 | "sidescroll" "ss" 415 | "sidescrolloff" "siso" 416 | "softtabstop" "sts" 417 | "spellcapcheck" "spc" 418 | "spellfile" "spf" 419 | "spelllang" "spl" 420 | "spellsuggest" "sps" 421 | "statusline" "stl" 422 | "suffixes" "su" 423 | "suffixesadd" "sua" 424 | "swapsync" "sws" 425 | "switchbuf" "swb" 426 | "synmaxcol" "smc" 427 | "syntax" "syn" 428 | "tabline" "tal" 429 | "tabpagemax" "tpm" 430 | "tabstop" "ts" 431 | "taglength" "tl" 432 | "tags" "tag" 433 | "term" 434 | "termbidi" "tbidi" 435 | "termencoding" "tenc" 436 | "textwidth" "tw" 437 | "thesaurus" "tsr" 438 | "timeoutlen" "tm" 439 | "ttimeoutlen" "ttm" 440 | "titlelen" 441 | "titleold" 442 | "titlestring" 443 | "toolbar" "tb" 444 | "toolbariconsize" "tbis" 445 | "ttymouse" "ttym" 446 | "ttyscroll" "tsl" 447 | "ttytype" "tty" 448 | "undodir" "udir" 449 | "undolevels" "ul" 450 | "undoreload" "ur" 451 | "updatecount" "uc" 452 | "updatetime" "ut" 453 | "verbose" "vbs" 454 | "verbosefile" "vfile" 455 | "viewdir" "vdir" 456 | "viewoptions" "vop" 457 | "viminfo" "vi" 458 | "virtualedit" "ve" 459 | "whichwrap" "ww" 460 | "wildchar" "wc" 461 | "wildcharm" "wcm" 462 | "wildignore" "wig" 463 | "wildmode" "wim" 464 | "wildoptions" "wop" 465 | "winaltkeys" "wak" 466 | "window" "wi" 467 | "winheight" "wh" 468 | "winminheight" "wmh" 469 | "winminwidth" "wmw" 470 | "winwidth" "wiw" 471 | "wrapmargin" "wm" 472 | "wrapscan" "ws" 473 | "writedelay" "wd") 'words) 474 | "[^_]") 475 | 1 '(face vimrc-option)) 476 | 477 | ;; Ex commands 478 | (,(concat "\\(^\\|[^_]\\)" 479 | (regexp-opt '("Next" "N" 480 | "Print" "P" 481 | "X" 482 | "abclear" "abc" 483 | "aboveleft" "abo" 484 | "all" "al" 485 | "am" "amenu" "an" "anoremenu" 486 | "argadd" "arga" 487 | "argdelete" "argd" 488 | "argdo" 489 | "argedit" "arge" 490 | "argglobal" "argg" 491 | "arglocal" "argl" 492 | "args" "ar" 493 | "argument" "argu" 494 | "ascii" "as" 495 | "augroup" "aug" 496 | "autocmd" "au" 497 | "bNext" "bN" 498 | "badd" "bad" 499 | "ball" "ba" 500 | "bdelete" "bd" 501 | "belowright" "bel" 502 | "bfirst" "bf" 503 | "blast" "bl" 504 | "bmodified" "bm" 505 | "bnext" "bn" 506 | "botright" "bo" 507 | "bprevious" "bp" 508 | "break" "brea" 509 | "breakadd" "breaka" 510 | "breakdel" "breakd" 511 | "breaklist" "breakl" 512 | "brewind" "br" 513 | "browse" "bro" 514 | "bufdo" 515 | "buffer" "b" 516 | "bunload" "bun" 517 | "bwipeout" "bw" 518 | "cNext" "cN" 519 | "cNfile" "cNf" 520 | "cabclear" "cabc" 521 | "caddbuffer" "caddb" 522 | "caddexpr" "cad" 523 | "caddfile" "caddf" 524 | "call" "cal" 525 | "catch" "cat" 526 | "cbuffer" "cb" 527 | "cc" 528 | "cclose" "ccl" 529 | "cd" 530 | "center" "ce" 531 | "cexpr" "cex" 532 | "cfile" "cf" 533 | "cfirst" "cfir" 534 | "cgetbuffer" "cgetb" 535 | "cgetexpr" "cgete" 536 | "cgetfile" "cg" 537 | "change" "c" 538 | "changes" 539 | "chdir" "chd" 540 | "checkpath" "ckpath" 541 | "checktime" "checkt" 542 | "clast" "cla" 543 | "clist" "cl" 544 | "close" "clo" 545 | "cm" "cmap" 546 | "cmapc" "cmapclear" 547 | "cme" "cmenu" "cnoreme" "cnoremenu" 548 | "cnewer" "cnew" 549 | "cnext" "cn" 550 | "cnfile" "cnf" 551 | "cno" "cnoremap" 552 | "colder" "col" 553 | "colo" "colorscheme" 554 | "comclear" "comc" 555 | "command" "com" 556 | "compiler" "comp" 557 | "confirm" "conf" 558 | "continue" "con" 559 | "copen" "cope" 560 | "copy" "co" 561 | "cpfile" "cpf" 562 | "cprevious" "cp" 563 | "cquit" "cq" 564 | "crewind" "cr" 565 | "cu" "cunmap" 566 | "cunabbrev" "cuna" 567 | "cwindow" "cw" 568 | "debuggreedy" "debugg" 569 | "delcommand" "delc" 570 | "delete" "d" 571 | "delfunction" "delf" 572 | "delmarks" "delm" 573 | "diffget" "diffg" 574 | "diffoff" 575 | "diffpatch" 576 | "diffput" "diffpu" 577 | "diffsplit" 578 | "diffthis" 579 | "diffupdate" "diffu" 580 | "digraphs" "dig" 581 | "display" "di" 582 | "djump" "dj" 583 | "dlist" "dl" 584 | "drop" "dr" 585 | "dsearch" "ds" 586 | "dsplit" "dsp" 587 | "earlier" 588 | "echoerr" "echoe" 589 | "echomsg" "echom" 590 | "echon" 591 | "edit" "e" 592 | "else" "el" 593 | "elseif" "elsei" 594 | "em" "emenu" 595 | "endf" "endfunction" 596 | "enew" "ene" 597 | "ex" 598 | "execute" "exe" 599 | "exit" "exi" 600 | "file" "fi" "f" 601 | "files" "buffers" "ls" 602 | "filetype" "filet" 603 | "finally" "fina" 604 | "find" "fin" 605 | "finish" "fini" 606 | "first" "fir" 607 | "fixdel" "fix" 608 | "fold" "fo" 609 | "foldclose" "foldc" 610 | "folddoclosed" "folddoc" 611 | "folddoopen" "foldd" 612 | "foldopen" "foldo" 613 | "for" "endfo" "endfor" 614 | "fu" "fun" "function" 615 | "goto" "go" 616 | "grep" "gr" 617 | "grepadd" "grepa" 618 | "hardcopy" "ha" 619 | "hide" "hid" 620 | "history" "his" 621 | "iabclear" "iabc" 622 | "if" "endif" "en" 623 | "ijump" "ij" 624 | "ilist" "il" 625 | "im" "imap" 626 | "imapc" "imapclear" 627 | "ime" "imenu" "inoreme" "inoremenu" 628 | "ino" "inoremap" 629 | "isearch" "is" 630 | "isplit" "isp" 631 | "iu" "iunmap" 632 | "iunabbrev" "iuna" 633 | "join" "j" 634 | "jumps" "ju" 635 | "k" 636 | "keepalt" 637 | "keepjumps" "keepj" 638 | "keepmarks" "kee" 639 | "lNext" "lN" 640 | "lNfile" "lNf" 641 | "laddbuffer" "laddb" 642 | "laddexpr" "lad" 643 | "laddfile" "laddf" 644 | "language" "lan" 645 | "last" "la" 646 | "later" 647 | "lbuffer" "lb" 648 | "lcd" "lc" 649 | "lchdir" "lch" 650 | "lclose" "lcl" 651 | "le" "left" 652 | "leftabove" "lefta" 653 | "let" 654 | "lexpr" "lex" 655 | "lfile" "lf" 656 | "lfirst" "lfir" 657 | "lgetbuffer" "lgetb" 658 | "lgetexpr" "lgete" 659 | "lgetfile" "lg" 660 | "lgrep" "lgr" 661 | "lgrepadd" "lgrepa" 662 | "list" "l" 663 | "ll" 664 | "llast" "lla" 665 | "llist" "lli" 666 | "lm" "lmap" 667 | "lmake" "lmak" 668 | "lmapc" "lmapclear" 669 | "ln" "lnoremap" 670 | "lnewer" "lnew" 671 | "lnext" "lne" 672 | "lnfile" "lnf" 673 | "loadview" "lo" 674 | "lockmarks" "loc" 675 | "lockvar" "lockv" "lockv" 676 | "lolder" "lol" 677 | "lopen" "lop" 678 | "lpfile" "lpf" 679 | "lprevious" "lp" 680 | "lrewind" "lr" 681 | "ltag" "lt" 682 | "lu" "lunmap" 683 | "lua" "lua" 684 | "luado" "luado" 685 | "luafile" "luafile" 686 | "lvimgrep" "lv" 687 | "lvimgrepadd" "lvimgrepa" 688 | "lwindow" "lw" 689 | "make" "mak" 690 | "map" 691 | "mapc" "mapclear" 692 | "mark" "ma" 693 | "marks" 694 | "match" "mat" 695 | "me" "menu" "noreme" "noremenu" 696 | "menutranslate" "menut" 697 | "mkexrc" "mk" 698 | "mksession" "mks" 699 | "mkspell" "mksp" 700 | "mkview" "mkvie" 701 | "mkvimrc" "mkv" 702 | "mode" "mod" 703 | "move" "m" 704 | "mzfile" "mzf" 705 | "mzscheme" "mz" 706 | "nbclose" "nbc" 707 | "nbkey" "nb" 708 | "nbstart" "nbs" 709 | "new" 710 | "next" "n" 711 | "nm" "nmap" 712 | "nmapc" "nmapclear" 713 | "nme" "nmenu" "nnoreme" "nnoremenu" 714 | "nn" "nnoremap" 715 | "no" "noremap" "nor" 716 | "nohlsearch" "noh" 717 | "nore" "norem" 718 | "number" "nu" 719 | "nun" "nunmap" 720 | "oldfiles" "ol" 721 | "om" "omap" 722 | "omapc" "omapclear" 723 | "ome" "omenu" "onoreme" "onoremenu" 724 | "only" "on" 725 | "ono" "onoremap" 726 | "open" "o" 727 | "options" "opt" 728 | "ou" "ounmap" 729 | "pclose" "pc" 730 | "pedit" "ped" 731 | "perl" "pe" 732 | "perldo" "perld" 733 | "pop" "po" 734 | "popu" 735 | "popup" "popu" 736 | "ppop" "pp" 737 | "preserve" "pre" 738 | "previous" "prev" 739 | "print" "p" 740 | "profdel" "profd" 741 | "profile" "prof" 742 | "promptfind" "promptf" 743 | "promptrepl" "promptr" 744 | "psearch" "ps" 745 | "ptNext" "ptN" 746 | "ptag" "pta" 747 | "ptfirst" "ptf" 748 | "ptjump" "ptj" 749 | "ptlast" "ptl" 750 | "ptnext" "ptn" 751 | "ptprevious" "ptp" 752 | "ptrewind" "ptr" 753 | "ptselect" "pts" 754 | "put" "pu" 755 | "pwd" "pw" 756 | "pyfile" "pyf" 757 | "python" "py" 758 | "qall" "qa" 759 | "quit" "q" 760 | "quitall" "quita" 761 | "read" "r" 762 | "recover" "rec" 763 | "redir" "redi" 764 | "redo" "red" 765 | "redraw" "redr" 766 | "redrawstatus" "redraws" 767 | "registers" "reg" 768 | "resize" "res" 769 | "retab" "ret" 770 | "return" "rn" 771 | "rewind" "rew" 772 | "right" "ri" 773 | "rightbelow" "rightb" 774 | "ruby" "rub" 775 | "rubydo" "rubyd" 776 | "rubyfile" "rubyf" 777 | "rundo" 778 | "runtime" "ru" 779 | "rviminfo" "sa" 780 | "sNext" "sN" 781 | "sall" "sal" 782 | "sandbox" "san" 783 | "sargument" "sa" 784 | "saveas" "sav" 785 | "sbNext" "sbN" 786 | "sball" "sba" 787 | "sbfirst" "sbf" 788 | "sblast" "sbl" 789 | "sbmodified" "sbm" 790 | "sbnext" "sbn" 791 | "sbprevious" "sbp" 792 | "sbrewind" "sbr" 793 | "sbuffer" "sb" 794 | "scriptencoding" "scripte" 795 | "scriptnames" "scrip" 796 | "set" "se" 797 | "setfiletype" "setf" 798 | "setglobal" "setg" 799 | "setlocal" "setl" 800 | "sfind" "sf" 801 | "sfirst" "sfir" 802 | "shell" "sh" 803 | "sign" 804 | "silent" "sil" 805 | "simalt" "sim" 806 | "slast" "sla" 807 | "sleep" "sl" 808 | "smagic" "sm" 809 | "smap" "smap" 810 | "smapc" "smapclear" 811 | "sme" "smenu" "snoreme" "snoremenu" 812 | "snext" "sn" 813 | "sniff" "sni" 814 | "snomagic" "sno" 815 | "snor" "snoremap" 816 | "sort" "sor" 817 | "source" "so" 818 | "spelldump" "spelld" 819 | "spellgood" "spe" 820 | "spellinfo" "spelli" 821 | "spellrepall" "spellr" 822 | "spellundo" "spellu" 823 | "spellwrong" "spellw" 824 | "split" "sp" 825 | "sprevious" "spr" 826 | "srewind" "sre" 827 | "stag" "sta" 828 | "startgreplace" "startg" 829 | "startinsert" "star" 830 | "startreplace" "startr" 831 | "stjump" "stj" 832 | "stop" "st" 833 | "stopinsert" "stopi" 834 | "stselect" "sts" 835 | "sunhide" "sun" 836 | "sunm" "sunmap" 837 | "suspend" "sus" 838 | "sview" "sv" 839 | "syncbind" 840 | "t" 841 | "tNext" "tN" 842 | "tab" 843 | "tabNext" "tabN" 844 | "tabclose" "tabc" 845 | "tabdo" "tabd" 846 | "tabedit" "tabe" 847 | "tabfind" "tabf" 848 | "tabfirst" "tabfir" 849 | "tablast" "tabl" 850 | "tabmove" "tabm" 851 | "tabnew" 852 | "tabnext" "tabn" 853 | "tabonly" "tabo" 854 | "tabprevious" "tabp" 855 | "tabrewind" "tabr" 856 | "tabs" 857 | "tag" "ta" 858 | "tags" 859 | "tcl" "tc" 860 | "tcldo" "tcld" 861 | "tclfile" "tclf" 862 | "tearoff" "te" 863 | "tfirst" "tf" 864 | "throw" "th" 865 | "tjump" "tj" 866 | "tlast" "tl" 867 | "tmenu" "tm" 868 | "tnext" "tn" 869 | "topleft" "to" 870 | "tprevious" "tp" 871 | "trewind" "tr" 872 | "try" "endt" "endtry" 873 | "tselect" "ts" 874 | "tunmenu" "tu" 875 | "unabbreviate" "una" 876 | "undo" "una" 877 | "undojoin" "undoj" 878 | "undolist" "undol" 879 | "unhide" "unh" 880 | "unlockvar" "unlo" 881 | "unm" "unmap" 882 | "unsilent" "uns" 883 | "update" "up" 884 | "verbose" "verb" 885 | "version" "ve" 886 | "vertical" "vert" 887 | "view" "vie" 888 | "vimgrep" "vim" 889 | "vimgrepadd" "vimgrepa" 890 | "visual" "vi" 891 | "vm" "vmap" 892 | "vmapc" "vmapclear" 893 | "vme" "vmenu" "vnoreme" "vnoremenu" 894 | "vn" "vnoremap" 895 | "vnew" "vne" 896 | "vsplit" "vs" 897 | "vu" "vunmap" 898 | "wNext" "wN" 899 | "wall" "wa" 900 | "while" "endwhile" "wh" "endw" 901 | "wincmd" "winc" 902 | "windo" 903 | "winpos" "winp" 904 | "winsize" "win" 905 | "wnext" "wn" 906 | "wprevious" "wp" 907 | "wq" 908 | "wqa" "wqall" "xa" "xall" 909 | "write" "w" 910 | "wsverb" "ws" 911 | "wundo" 912 | "wviminfo" "wv" 913 | "x" "xit" 914 | "xm" "xmap" 915 | "xmapc" "xmapclear" 916 | "xme" "xmenu" "xnoreme" "xnoremenu" 917 | "xn" "xnoremap" 918 | "xu" "xunmap" 919 | "yank" "y") 'words) 920 | "\\([^_]\\|$\\)") 921 | 2 '(face vimrc-command)) 922 | 923 | ;; Built-in functions 924 | (,(concat "\\(^\\|[ \t]*\\)" 925 | (regexp-opt '("writefile" 926 | "winwidth" 927 | "winsaveview" 928 | "winrestview" 929 | "winrestcmd" 930 | "winnr" 931 | "winline" 932 | "winheight" 933 | "wincol" 934 | "winbufnr" 935 | "visualmode" 936 | "virtcol" 937 | "values" 938 | "undotree" 939 | "undofile" 940 | "type" 941 | "trunc" 942 | "tr" 943 | "toupper" 944 | "tolower" 945 | "tempname" 946 | "tanh" 947 | "tan" 948 | "taglist" 949 | "tagfiles" 950 | "tabpagewinnr" 951 | "tabpagenr" 952 | "tabpagebuflist" 953 | "system" 954 | "synstack" 955 | "synIDtrans" 956 | "synIDattr" 957 | "synID" 958 | "synconcealed" 959 | "substitute" 960 | "submatch" 961 | "strwidth" 962 | "strtrans" 963 | "strridx" 964 | "strpart" 965 | "strlen" 966 | "string" 967 | "stridx" 968 | "strftime" 969 | "strdisplaywidth" 970 | "strchars" 971 | "str2nr" 972 | "str2float" 973 | "sqrt" 974 | "split" 975 | "spellsuggest" 976 | "spellbadword" 977 | "soundfold" 978 | "sort" 979 | "sinh" 980 | "sin" 981 | "simplify" 982 | "shellescape" 983 | "setwinvar" 984 | "settabwinvar" 985 | "settabvar" 986 | "setreg" 987 | "setqflist" 988 | "setpos" 989 | "setmatches" 990 | "setloclist" 991 | "setline" 992 | "setcmdpos" 993 | "setbufvar" 994 | "serverlist" 995 | "server2client" 996 | "searchpos" 997 | "searchpairpos" 998 | "searchpair" 999 | "searchdecl" 1000 | "search" 1001 | "round" 1002 | "reverse" 1003 | "resolve" 1004 | "repeat" 1005 | "rename" 1006 | "remove" 1007 | "remote_send" 1008 | "remote_read" 1009 | "remote_peek" 1010 | "remote_foreground" 1011 | "remote_expr" 1012 | "reltimestr" 1013 | "reltime" 1014 | "readfile" 1015 | "range" 1016 | "pumvisible" 1017 | "printf" 1018 | "prevnonblank" 1019 | "pow" 1020 | "pathshorten" 1021 | "nr2char" 1022 | "nextnonblank" 1023 | "mzeval" 1024 | "mode" 1025 | "mkdir" 1026 | "min" 1027 | "max" 1028 | "matchstr" 1029 | "matchlist" 1030 | "matchend" 1031 | "matchdelete" 1032 | "matcharg" 1033 | "matchadd" 1034 | "match" 1035 | "mapcheck" 1036 | "maparg" 1037 | "map" 1038 | "log10" 1039 | "log" 1040 | "localtime" 1041 | "lispindent" 1042 | "line2byte" 1043 | "line" 1044 | "libcallnr" 1045 | "libcall" 1046 | "len" 1047 | "keys" 1048 | "join" 1049 | "items" 1050 | "islocked" 1051 | "isdirectory" 1052 | "insert" 1053 | "inputsecret" 1054 | "inputsave" 1055 | "inputrestore" 1056 | "inputlist" 1057 | "inputdialog" 1058 | "input" 1059 | "index" 1060 | "indent" 1061 | "iconv" 1062 | "hostname" 1063 | "hlID" 1064 | "hlexists" 1065 | "histnr" 1066 | "histget" 1067 | "histdel" 1068 | "histadd" 1069 | "hasmapto" 1070 | "haslocaldir" 1071 | "has_key" 1072 | "has" 1073 | "globpath" 1074 | "glob" 1075 | "getwinvar" 1076 | "getwinposy" 1077 | "getwinposx" 1078 | "gettabwinvar" 1079 | "gettabvar" 1080 | "getregtype" 1081 | "getreg" 1082 | "getqflist" 1083 | "getpos" 1084 | "getpid" 1085 | "getmatches" 1086 | "getloclist" 1087 | "getline" 1088 | "getftype" 1089 | "getftime" 1090 | "getfsize" 1091 | "getfperm" 1092 | "getfontname" 1093 | "getcwd" 1094 | "getcmdtype" 1095 | "getcmdpos" 1096 | "getcmdline" 1097 | "getcharmod" 1098 | "getchar" 1099 | "getbufvar" 1100 | "getbufline" 1101 | "get" 1102 | "garbagecollect" 1103 | "function" 1104 | "foreground" 1105 | "foldtextresult" 1106 | "foldtext" 1107 | "foldlevel" 1108 | "foldclosedend" 1109 | "foldclosed" 1110 | "fnamemodify" 1111 | "fnameescape" 1112 | "fmod" 1113 | "floor" 1114 | "float2nr" 1115 | "findfile" 1116 | "finddir" 1117 | "filter" 1118 | "filewritable" 1119 | "filereadable" 1120 | "feedkeys" 1121 | "extend" 1122 | "expr8" 1123 | "expand" 1124 | "exp" 1125 | "exists" 1126 | "eventhandler" 1127 | "eval" 1128 | "escape" 1129 | "empty" 1130 | "diff_hlID" 1131 | "diff_filler" 1132 | "did_filetype" 1133 | "delete" 1134 | "deepcopy" 1135 | "cursor" 1136 | "cscope_connection" 1137 | "count" 1138 | "cosh" 1139 | "cos" 1140 | "copy" 1141 | "contained" 1142 | "confirm" 1143 | "complete_check" 1144 | "complete_add" 1145 | "complete" 1146 | "col" 1147 | "clearmatches" 1148 | "cindent" 1149 | "char2nr" 1150 | "changenr" 1151 | "ceil" 1152 | "call" 1153 | "byteidx" 1154 | "byte2line" 1155 | "bufwinnr" 1156 | "bufnr" 1157 | "bufname" 1158 | "bufloaded" 1159 | "buflisted" 1160 | "bufexists" 1161 | "browsedir" 1162 | "browse" 1163 | "atan2" 1164 | "atan" 1165 | "asin" 1166 | "argv" 1167 | "argidx" 1168 | "argc" 1169 | "append" 1170 | "add" 1171 | "acos" 1172 | "abs") 'words) 1173 | "\\([ \t]*(\\)") 1174 | 2 '(face vimrc-function-builtin)) 1175 | 1176 | ;; Numbers 1177 | ("\\<0[xX][[:xdigit:]]+" 1178 | (0 '(face vimrc-number))) 1179 | ("#[[:xdigit:]]\\{6\\}" 1180 | (0 '(face vimrc-number))) 1181 | (,(concat 1182 | "\\(\\<\\|-\\)[[:digit:]]+" 1183 | "\\(\\.[[:digit:]]+\\([eE][+-]?[[:digit:]]+\\)?\\)?") 1184 | 0 '(face vimrc-number)) 1185 | 1186 | ;; 1187 | ;; Operators start: 1188 | (,(concat "\\(" 1189 | ;; word char 1190 | "\\(\\\\)" 1191 | "\\|" "\\(\\\\)" 1192 | 1193 | "\\|" "\\(![=~]?[#?]?\\)" 1194 | "\\|" "\\(>[#\\\\?=]?[#?]?\\)" 1195 | "\\|" "\\(<[#\\\\?=]?[#?]?\\)" 1196 | "\\|" "\\(\\+=?\\)" 1197 | "\\|" "\\(-=?\\)" 1198 | "\\|" "\\(=[=~]?[#?]?\\)" 1199 | "\\|" "\\(||\\)" 1200 | "\\|" "\\(&&\\)" 1201 | 1202 | "\\|" "\\(\\.\\)" 1203 | "\\)") 1204 | 1 font-lock-constant-face) ;; Operators end; 1205 | ) 1206 | "Default expressions to highlight in Vimrc mode.") 1207 | 1208 | 1209 | ;; Support for Vim script 1210 | 1211 | (defvar vimrc-imenu-generic-expression 1212 | '((nil "^\\(fun\\(?:ction\\)?\\)!?[[:blank:]]+\\([[:alnum:]_:#]+\\)?" 2) 1213 | (nil "^let[[:blank:]]+\\<\\([bwglsav]:[a-zA-Z_][[:alnum:]#_]*\\)\\>" 1) 1214 | (nil "^let[[:blank:]]+\\<\\([a-zA-Z_][[:alnum:]#_]*\\)\\>[^:]" 1)) 1215 | "Value for `imenu-generic-expression' in Vimrc mode. 1216 | 1217 | Create an index of the function and variable definitions in a 1218 | Vim file.") 1219 | 1220 | (defun vimrc-beginning-of-defun (&optional arg) 1221 | "Move backward to the beginning of the current function. 1222 | 1223 | With argument, repeat ARG times." 1224 | (interactive "p") 1225 | (re-search-backward (concat "^[ \t]*\\(fun\\(?:ction\\)?\\)\\b") 1226 | nil 'move (or arg 1))) 1227 | 1228 | (defun vimrc-end-of-defun (&optional arg) 1229 | "Move forward to the next end of a function. 1230 | 1231 | With argument, repeat ARG times." 1232 | (interactive "p") 1233 | (re-search-forward (concat "^[ \t]*\\(endf\\(?:unction\\)?\\)\\b") 1234 | nil 'move (or arg 1))) 1235 | 1236 | (defvar vimrc-mode-syntax-table 1237 | (let ((table (make-syntax-table))) 1238 | (modify-syntax-entry ?' "\"" table) 1239 | (modify-syntax-entry ?\" "<" table) 1240 | (modify-syntax-entry ?\n ">" table) 1241 | (modify-syntax-entry ?# "_" table) 1242 | table)) 1243 | 1244 | ;;;###autoload (add-to-list 'auto-mode-alist '("\\.vim\\'" . vimrc-mode)) 1245 | ;;;###autoload (add-to-list 'auto-mode-alist '("[._]?g?vimrc\\'" . vimrc-mode)) 1246 | ;;;###autoload (add-to-list 'auto-mode-alist '("\\.exrc\\'" . vimrc-mode)) 1247 | 1248 | (defalias 'vimrc--parent-mode 1249 | (if (fboundp 'prog-mode) #'prog-mode #'fundamental-mode)) 1250 | 1251 | ;;;###autoload 1252 | (define-derived-mode vimrc-mode vimrc--parent-mode "Vimrc" 1253 | "Major mode for editing `vimrc', `xxx.vim' and `.exrc' configuration files." 1254 | :group 'vimrc-mode 1255 | :syntax-table vimrc-mode-syntax-table 1256 | (setq-local font-lock-defaults '(vimrc-font-lock-keywords)) 1257 | (setq-local comment-start "\"") 1258 | (setq-local comment-end "") 1259 | ;(set (make-local-variable 'comment-start-skip) "\"\\* +") 1260 | (setq-local imenu-generic-expression vimrc-imenu-generic-expression) 1261 | (setq-local beginning-of-defun-function 'vimrc-beginning-of-defun) 1262 | (setq-local end-of-defun-function 'vimrc-end-of-defun) 1263 | (run-hooks 'vimrc-mode-hook)) 1264 | 1265 | (provide 'vimrc-mode) 1266 | 1267 | ;;; vimrc-mode.el ends here 1268 | --------------------------------------------------------------------------------