Merge commit '9a2a3070868d46dc15eaaa3084fec20ad28e80ed' as 'vim/bundle/vue'
commit
1868e48aee
@ -0,0 +1,2 @@
|
|||||||
|
FROM alpine:3.7
|
||||||
|
RUN apk add --no-cache make vim git
|
@ -0,0 +1,24 @@
|
|||||||
|
# posva/vim-make
|
||||||
|
|
||||||
|
Small docker image with vim, make and git
|
||||||
|
|
||||||
|
## Building
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd .circleci
|
||||||
|
docker rmi vim-make # remove old image
|
||||||
|
docker build -t vim-make .
|
||||||
|
docker run -it vim-make /bin/date
|
||||||
|
docker commit $(docker ps -lq) vim-make
|
||||||
|
docker push posva/vim-make:0.3 # replace the tag with a new one
|
||||||
|
docker container rm $(docker ps -lq) # remove container
|
||||||
|
```
|
||||||
|
|
||||||
|
## Cleaning
|
||||||
|
|
||||||
|
To remove old images and containers, use `docker images` and `docker ps -a`.
|
||||||
|
Then remove them with `docker rmi <image>` and `docker container rm <container>`
|
||||||
|
|
||||||
|
## Update `config.yml`
|
||||||
|
|
||||||
|
Make sure to update the tag in the `image` section of `.config.yml`
|
@ -0,0 +1,15 @@
|
|||||||
|
version: 2
|
||||||
|
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
docker:
|
||||||
|
- image: posva/vim-make:0.2
|
||||||
|
|
||||||
|
working_directory: ~/repo
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
|
||||||
|
- run: make dependencies
|
||||||
|
- run: make test
|
@ -0,0 +1 @@
|
|||||||
|
/pack
|
@ -0,0 +1,22 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2015 Evan Sheehan, Eduardo San Martin Morote
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
@ -0,0 +1,28 @@
|
|||||||
|
test: dependencies
|
||||||
|
vim -u test/vimrc -c 'Vader! test/*.vader'
|
||||||
|
|
||||||
|
test-nvim: dependencies
|
||||||
|
VADER_OUTPUT_FILE=/dev/stderr nvim -u test/vimrc -c 'Vader! test/*.vader' --headless
|
||||||
|
|
||||||
|
dependencies = \
|
||||||
|
'junegunn/vader.vim' \
|
||||||
|
'cakebaker/scss-syntax.vim' \
|
||||||
|
'digitaltoad/vim-pug' \
|
||||||
|
'groenewege/vim-less' \
|
||||||
|
'kchmck/vim-coffee-script' \
|
||||||
|
'leafgarland/typescript-vim' \
|
||||||
|
'slm-lang/vim-slm' \
|
||||||
|
'wavded/vim-stylus' \
|
||||||
|
'scrooloose/nerdcommenter'
|
||||||
|
|
||||||
|
dependencies:
|
||||||
|
test -L pack/testing/start/vim-vue && exit 0; \
|
||||||
|
mkdir -p pack/testing/start; \
|
||||||
|
cd pack/testing/start; \
|
||||||
|
for repo in $(dependencies); do git clone https://github.com/$$repo.git; done; \
|
||||||
|
ln -s ../../.. vim-vue
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf pack
|
||||||
|
|
||||||
|
.PHONY: test test-nvim dependencies clean
|
@ -0,0 +1 @@
|
|||||||
|
au BufNewFile,BufRead *.vue,*.wpy setf vue
|
@ -0,0 +1,19 @@
|
|||||||
|
" Vim filetype plugin
|
||||||
|
" Language: Vue.js
|
||||||
|
" Maintainer: Eduardo San Martin Morote
|
||||||
|
" Author: Adriaan Zonnenberg
|
||||||
|
|
||||||
|
if exists('b:did_ftplugin')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
runtime! ftplugin/html.vim
|
||||||
|
|
||||||
|
setlocal suffixesadd+=.vue
|
||||||
|
|
||||||
|
if !exists('g:no_plugin_maps') && !exists('g:no_vue_maps')
|
||||||
|
nnoremap <silent> <buffer> [[ :call search('^<\(template\<Bar>script\<Bar>style\)', 'bW')<CR>
|
||||||
|
nnoremap <silent> <buffer> ]] :call search('^<\(template\<Bar>script\<Bar>style\)', 'W')<CR>
|
||||||
|
nnoremap <silent> <buffer> [] :call search('^</\(template\<Bar>script\<Bar>style\)', 'bW')<CR>
|
||||||
|
nnoremap <silent> <buffer> ][ :call search('^</\(template\<Bar>script\<Bar>style\)', 'W')<CR>
|
||||||
|
endif
|
@ -0,0 +1,64 @@
|
|||||||
|
" Vim indent file
|
||||||
|
" Language: Vue.js
|
||||||
|
" Maintainer: Eduardo San Martin Morote
|
||||||
|
" Author: Adriaan Zonnenberg
|
||||||
|
|
||||||
|
if exists('b:did_indent')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
function! s:get_indentexpr(language)
|
||||||
|
unlet! b:did_indent
|
||||||
|
execute 'runtime! indent/' . a:language . '.vim'
|
||||||
|
return &indentexpr
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" The order is important here, tags without attributes go last.
|
||||||
|
" HTML is left out, it will be used when there is no match.
|
||||||
|
let s:languages = [
|
||||||
|
\ { 'name': 'pug', 'pairs': ['<template lang="pug"', '</template>'] },
|
||||||
|
\ { 'name': 'stylus', 'pairs': ['<style lang="stylus"', '</style>'] },
|
||||||
|
\ { 'name': 'css', 'pairs': ['<style', '</style>'] },
|
||||||
|
\ { 'name': 'coffee', 'pairs': ['<script lang="coffee"', '</script>'] },
|
||||||
|
\ { 'name': 'javascript', 'pairs': ['<script', '</script>'] },
|
||||||
|
\ ]
|
||||||
|
|
||||||
|
for s:language in s:languages
|
||||||
|
" Set 'indentexpr' if the user has an indent file installed for the language
|
||||||
|
if strlen(globpath(&rtp, 'indent/'. s:language.name .'.vim'))
|
||||||
|
let s:language.indentexpr = s:get_indentexpr(s:language.name)
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
let s:html_indent = s:get_indentexpr('html')
|
||||||
|
|
||||||
|
let b:did_indent = 1
|
||||||
|
|
||||||
|
setlocal indentexpr=GetVueIndent()
|
||||||
|
|
||||||
|
if exists('*GetVueIndent')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
function! GetVueIndent()
|
||||||
|
for language in s:languages
|
||||||
|
let opening_tag_line = searchpair(language.pairs[0], '', language.pairs[1], 'bWr')
|
||||||
|
|
||||||
|
if opening_tag_line
|
||||||
|
execute 'let indent = ' . get(language, 'indentexpr', -1)
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
if exists('l:indent')
|
||||||
|
if (opening_tag_line == prevnonblank(v:lnum - 1) || opening_tag_line == v:lnum)
|
||||||
|
\ || getline(v:lnum) =~ '\v^\s*\</(script|style|template)'
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
" Couldn't find language, fall back to html
|
||||||
|
execute 'let indent = ' . s:html_indent
|
||||||
|
endif
|
||||||
|
|
||||||
|
return indent
|
||||||
|
endfunction
|
@ -0,0 +1,132 @@
|
|||||||
|
# vim-vue [![CircleCI](https://img.shields.io/circleci/project/github/posva/vim-vue.svg)](https://circleci.com/gh/posva/vim-vue)
|
||||||
|
|
||||||
|
Vim syntax highlighting for [Vue
|
||||||
|
components](https://vuejs.org/v2/guide/single-file-components.html).
|
||||||
|
|
||||||
|
This was initially forked from
|
||||||
|
[darthmall/vim-vue](https://github.com/darthmall/vim-vue). I already have an
|
||||||
|
implementation for this but found his code much cleaner. That's why I created a
|
||||||
|
new version instead of a PR.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
### Install with [Vundle](https://github.com/VundleVim/Vundle.vim)
|
||||||
|
|
||||||
|
```viml
|
||||||
|
Plugin 'posva/vim-vue'
|
||||||
|
```
|
||||||
|
|
||||||
|
### Install with [Pathogen](https://github.com/tpope/vim-pathogen)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ~/.vim/bundle && \
|
||||||
|
git clone https://github.com/posva/vim-vue.git
|
||||||
|
```
|
||||||
|
|
||||||
|
### Install without a plugin manager (Vim 8)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/posva/vim-vue.git ~/.vim/pack/plugins/start/vim-vue
|
||||||
|
```
|
||||||
|
|
||||||
|
### Integration with [Syntastic](https://github.com/scrooloose/syntastic) or [ALE](https://github.com/w0rp/ale)
|
||||||
|
|
||||||
|
Currently only `eslint` is available. Please make sure
|
||||||
|
[eslint](http://eslint.org/) and
|
||||||
|
[eslint-plugin-vue](https://github.com/vuejs/eslint-plugin-vue) are installed
|
||||||
|
and properly [configured](https://github.com/vuejs/eslint-plugin-vue#rocket-usage):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm i -g eslint eslint-plugin-vue
|
||||||
|
```
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
If your language is not getting highlighted open an issue or a PR with the fix.
|
||||||
|
You only need to add a line to the `syntax/vue.vim` file.
|
||||||
|
|
||||||
|
Don't forget to write [Vader](https://github.com/junegunn/vader.vim) tests for
|
||||||
|
the code you write. You can run the tests by executing `make test` in the
|
||||||
|
terminal.
|
||||||
|
|
||||||
|
## FAQ
|
||||||
|
|
||||||
|
### Where is Jade?
|
||||||
|
|
||||||
|
[Jade has been renamed to pug](https://github.com/pugjs/jade/issues/2184).
|
||||||
|
Therefore you have to replace all your `jade` occurrences with `pug`. The new
|
||||||
|
plugin for `pug` can be found on [the same repository](https://github.com/digitaltoad/vim-pug)
|
||||||
|
(the name has already been updated).
|
||||||
|
|
||||||
|
### My syntax highlighting stops working randomly
|
||||||
|
|
||||||
|
This is because Vim tries to highlight text in an efficient way. Especially in
|
||||||
|
files that include multiple languages, it can get confused. To work around
|
||||||
|
this, you can run `:syntax sync fromstart` when it happens.
|
||||||
|
|
||||||
|
You can also setup an autocmd for this, so that every time a Vue file is
|
||||||
|
opened, `:syntax sync fromstart` will be executed pre-emptively:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
autocmd FileType vue syntax sync fromstart
|
||||||
|
```
|
||||||
|
|
||||||
|
See `:h :syn-sync-first` and [this article](http://vim.wikia.com/wiki/Fix_syntax_highlighting)
|
||||||
|
for more details.
|
||||||
|
|
||||||
|
### How can I use existing configuration/plugins in Vue files?
|
||||||
|
|
||||||
|
If you already have some configuration for filetypes like html, css and
|
||||||
|
javascript (e.g. linters, completion), an easy way to use them in Vue files is
|
||||||
|
by setting compound filetypes like this:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
autocmd BufRead,BufNewFile *.vue setlocal filetype=vue.html.javascript.css
|
||||||
|
```
|
||||||
|
|
||||||
|
:warning: This may cause problems, because some plugins will then treat the
|
||||||
|
whole buffer as html/javascript/css instead of only the part inside the tags.
|
||||||
|
Ideally, you should configure everything that you want to use in Vue files
|
||||||
|
individually.
|
||||||
|
|
||||||
|
### How to use commenting functionality with multiple languages in Vue files?
|
||||||
|
|
||||||
|
#### [caw.vim](https://github.com/tyru/caw.vim)
|
||||||
|
|
||||||
|
caw.vim features built-in support for file context through [context_filetype.vim](https://github.com/Shougo/context_filetype.vim). Just install both plugins and context-aware commenting will work in most files. The fenced code is detected by predefined regular expressions.
|
||||||
|
|
||||||
|
#### [NERDCommenter](https://github.com/scrooloose/nerdcommenter)
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>
|
||||||
|
To use NERDCommenter with Vue files, you can use its "hooks" feature to
|
||||||
|
temporarily change the filetype. <em>Click for an example.</em>
|
||||||
|
</summary>
|
||||||
|
|
||||||
|
```vim
|
||||||
|
let g:ft = ''
|
||||||
|
function! NERDCommenter_before()
|
||||||
|
if &ft == 'vue'
|
||||||
|
let g:ft = 'vue'
|
||||||
|
let stack = synstack(line('.'), col('.'))
|
||||||
|
if len(stack) > 0
|
||||||
|
let syn = synIDattr((stack)[0], 'name')
|
||||||
|
if len(syn) > 0
|
||||||
|
exe 'setf ' . substitute(tolower(syn), '^vue_', '', '')
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
function! NERDCommenter_after()
|
||||||
|
if g:ft == 'vue'
|
||||||
|
setf vue
|
||||||
|
let g:ft = ''
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
```
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
### _Vim slows down when using this plugin_ How can I fix that?
|
||||||
|
|
||||||
|
Add `let g:vue_disable_pre_processors=1` in your .vimrc to disable checking for prepocessors. When checking for preprocessor languages, multiple syntax highlighting checks are done, which can slow down vim. This variable prevents vim-vue from supporting **every** pre-processor language highlighting.
|
@ -0,0 +1,63 @@
|
|||||||
|
" Vim syntax file
|
||||||
|
" Language: Vue.js
|
||||||
|
" Maintainer: Eduardo San Martin Morote
|
||||||
|
|
||||||
|
if exists("b:current_syntax")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
runtime! syntax/html.vim
|
||||||
|
syntax clear htmlTagName
|
||||||
|
syntax match htmlTagName contained "\<[a-zA-Z0-9:-]*\>"
|
||||||
|
unlet! b:current_syntax
|
||||||
|
|
||||||
|
""
|
||||||
|
" Get the pattern for a HTML {name} attribute with {value}.
|
||||||
|
function! s:attr(name, value)
|
||||||
|
return a:name . '=\("\|''\)[^\1]*' . a:value . '[^\1]*\1'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
""
|
||||||
|
" Check whether a syntax file for a given {language} exists.
|
||||||
|
function! s:syntax_available(language)
|
||||||
|
return !empty(globpath(&runtimepath, 'syntax/' . a:language . '.vim'))
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
""
|
||||||
|
" Register {language} for a given {tag}. If [attr_override] is given and not
|
||||||
|
" empty, it will be used for the attribute pattern.
|
||||||
|
function! s:register_language(language, tag, ...)
|
||||||
|
let attr_override = a:0 ? a:1 : ''
|
||||||
|
let attr = !empty(attr_override) ? attr_override : s:attr('lang', a:language)
|
||||||
|
|
||||||
|
if s:syntax_available(a:language)
|
||||||
|
execute 'syntax include @' . a:language . ' syntax/' . a:language . '.vim'
|
||||||
|
unlet! b:current_syntax
|
||||||
|
execute 'syntax region vue_' . a:language
|
||||||
|
\ 'keepend'
|
||||||
|
\ 'start=/<' . a:tag . '\>\_[^>]*' . attr . '\_[^>]*>/'
|
||||||
|
\ 'end="</' . a:tag . '>"me=s-1'
|
||||||
|
\ 'contains=@' . a:language . ',vueSurroundingTag'
|
||||||
|
\ 'fold'
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
if !exists("g:vue_disable_pre_processors") || !g:vue_disable_pre_processors
|
||||||
|
call s:register_language('less', 'style')
|
||||||
|
call s:register_language('pug', 'template', s:attr('lang', '\%(pug\|jade\)'))
|
||||||
|
call s:register_language('slm', 'template')
|
||||||
|
call s:register_language('handlebars', 'template')
|
||||||
|
call s:register_language('haml', 'template')
|
||||||
|
call s:register_language('typescript', 'script', '\%(lang=\("\|''\)[^\1]*\(ts\|typescript\)[^\1]*\1\|ts\)')
|
||||||
|
call s:register_language('coffee', 'script')
|
||||||
|
call s:register_language('stylus', 'style')
|
||||||
|
call s:register_language('sass', 'style')
|
||||||
|
call s:register_language('scss', 'style')
|
||||||
|
endif
|
||||||
|
|
||||||
|
syn region vueSurroundingTag contained start=+<\(script\|style\|template\)+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent
|
||||||
|
syn keyword htmlSpecialTagName contained template
|
||||||
|
syn keyword htmlArg contained scoped ts
|
||||||
|
syn match htmlArg "[@v:][-:.0-9_a-z]*\>" contained
|
||||||
|
|
||||||
|
let b:current_syntax = "vue"
|
@ -0,0 +1,15 @@
|
|||||||
|
" Vue configuration for Syntastic
|
||||||
|
|
||||||
|
if exists('g:loaded_syntastic_vue_eslint_checker')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
let g:loaded_syntastic_vue_eslint_checker = 1
|
||||||
|
|
||||||
|
runtime! syntax_checkers/javascript/eslint.vim
|
||||||
|
|
||||||
|
call g:SyntasticRegistry.CreateAndRegisterChecker({
|
||||||
|
\ 'filetype': 'vue',
|
||||||
|
\ 'name': 'eslint',
|
||||||
|
\ 'redirect': 'javascript/eslint'
|
||||||
|
\ })
|
@ -0,0 +1,13 @@
|
|||||||
|
Given vue (Arbitrary HTML tag names):
|
||||||
|
<list></list>
|
||||||
|
<FormItem></FormItem>
|
||||||
|
<form-item><form-item>
|
||||||
|
<h1></h1>
|
||||||
|
<foo:bar></foo:bar>
|
||||||
|
|
||||||
|
Execute (The valid combinations get highlighted, since Vue does not enforce the W3C rules for custom tag names):
|
||||||
|
AssertEqual 'htmlTagName', SyntaxOf('list')
|
||||||
|
AssertEqual 'htmlTagName', SyntaxOf('FormItem')
|
||||||
|
AssertEqual 'htmlTagName', SyntaxOf('form-item')
|
||||||
|
AssertEqual 'htmlTagName', SyntaxOf('h1')
|
||||||
|
AssertEqual 'htmlTagName', SyntaxOf('foo:bar')
|
@ -0,0 +1,135 @@
|
|||||||
|
#
|
||||||
|
# HTML
|
||||||
|
#
|
||||||
|
Given vue (An unindented html template):
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
Hello
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
Do (Indent the whole buffer):
|
||||||
|
gg=G
|
||||||
|
|
||||||
|
Expect (The html template got indented):
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
Hello
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
|
||||||
|
Given vue (Template tag inside a template):
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<template v-if="loading">
|
||||||
|
Loading...
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
Do (Indent the whole buffer):
|
||||||
|
gg=G
|
||||||
|
|
||||||
|
Expect (It didn't get unindented):
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<template v-if="loading">
|
||||||
|
Loading...
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
#
|
||||||
|
# JavaScript
|
||||||
|
#
|
||||||
|
Given vue (An unindented JavaScript region):
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
methods: {
|
||||||
|
foo() {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
Do (Indent the whole buffer):
|
||||||
|
gg=G
|
||||||
|
|
||||||
|
Expect vue (The JavaScript region got indented):
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
methods: {
|
||||||
|
foo() {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
#
|
||||||
|
# CSS
|
||||||
|
#
|
||||||
|
Given vue (An unindented css region):
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
background: tomato;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
Do (Indent the whole buffer):
|
||||||
|
gg=G
|
||||||
|
|
||||||
|
Expect vue (The css region got indented):
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
background: tomato;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
#
|
||||||
|
# Pug
|
||||||
|
#
|
||||||
|
Given vue (Empty Pug region):
|
||||||
|
<template lang="pug">
|
||||||
|
</template>
|
||||||
|
|
||||||
|
Do (Insert list items):
|
||||||
|
o
|
||||||
|
ul\<CR>
|
||||||
|
li Item A\<CR>
|
||||||
|
li Item B
|
||||||
|
|
||||||
|
Expect:
|
||||||
|
<template lang="pug">
|
||||||
|
ul
|
||||||
|
li Item A
|
||||||
|
li Item B
|
||||||
|
</template>
|
||||||
|
|
||||||
|
#
|
||||||
|
# Stylus
|
||||||
|
#
|
||||||
|
Given vue (Empty Stylus region):
|
||||||
|
<style lang="stylus">
|
||||||
|
</style>
|
||||||
|
|
||||||
|
Do (Insert some styles):
|
||||||
|
o
|
||||||
|
body\<CR>
|
||||||
|
font-size: 14px\<CR>
|
||||||
|
\<CR>\<C-d>
|
||||||
|
h1\<CR>
|
||||||
|
font-size: 30px\<CR>
|
||||||
|
display: block
|
||||||
|
|
||||||
|
Expect:
|
||||||
|
<style lang="stylus">
|
||||||
|
body
|
||||||
|
font-size: 14px
|
||||||
|
|
||||||
|
h1
|
||||||
|
font-size: 30px
|
||||||
|
display: block
|
||||||
|
</style>
|
@ -0,0 +1,40 @@
|
|||||||
|
Execute (Configure NERDCommenter to support Vue files):
|
||||||
|
let g:ft = ''
|
||||||
|
function! NERDCommenter_before()
|
||||||
|
if &ft == 'vue'
|
||||||
|
let g:ft = 'vue'
|
||||||
|
let stack = synstack(line('.'), col('.'))
|
||||||
|
if len(stack) > 0
|
||||||
|
let syn = synIDattr((stack)[0], 'name')
|
||||||
|
if len(syn) > 0
|
||||||
|
exe 'setf ' . substitute(tolower(syn), '^vue_', '', '')
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
function! NERDCommenter_after()
|
||||||
|
if g:ft == 'vue'
|
||||||
|
setf vue
|
||||||
|
let g:ft = ''
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
Given vue:
|
||||||
|
<template>
|
||||||
|
<div></div>
|
||||||
|
</template>
|
||||||
|
<style>
|
||||||
|
.glitters { color: gold }
|
||||||
|
<style>
|
||||||
|
|
||||||
|
Do:
|
||||||
|
j\cc
|
||||||
|
3j\cc
|
||||||
|
|
||||||
|
Expect:
|
||||||
|
<template>
|
||||||
|
<!--<div></div>-->
|
||||||
|
</template>
|
||||||
|
<style>
|
||||||
|
/*.glitters { color: gold }*/
|
||||||
|
<style>
|
@ -0,0 +1,183 @@
|
|||||||
|
#
|
||||||
|
# HTML
|
||||||
|
#
|
||||||
|
Given vue (HTML template without lang attribute):
|
||||||
|
<template>
|
||||||
|
<div></div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
Execute:
|
||||||
|
AssertEqual 'htmlTag', SyntaxAt(2, 3)
|
||||||
|
AssertEqual 'htmlTag', SyntaxAt(1, 1)
|
||||||
|
AssertEqual 'htmlSpecialTagName', SyntaxAt(1, 2)
|
||||||
|
|
||||||
|
|
||||||
|
Given vue (Template tag inside a template):
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<template v-if="loading">
|
||||||
|
Loading...
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
Execute (Syntax doesn't stop at the first closing template tag):
|
||||||
|
AssertEqual 'htmlEndTag', SyntaxAt(6, 3)
|
||||||
|
|
||||||
|
#
|
||||||
|
# JavaScript
|
||||||
|
#
|
||||||
|
Given vue:
|
||||||
|
<script>
|
||||||
|
//
|
||||||
|
</script>
|
||||||
|
|
||||||
|
Execute:
|
||||||
|
AssertEqual 'javaScriptLineComment', SyntaxAt(2, 1)
|
||||||
|
AssertEqual 'htmlScriptTag', SyntaxAt(1, 1)
|
||||||
|
|
||||||
|
|
||||||
|
Given vue (Script tag with misc. attributes and newline):
|
||||||
|
<script type="text/babel"
|
||||||
|
lang="babel"
|
||||||
|
>
|
||||||
|
//
|
||||||
|
</script>
|
||||||
|
|
||||||
|
Execute:
|
||||||
|
AssertEqual 'javaScriptLineComment', SyntaxAt(4, 1)
|
||||||
|
AssertEqual 'htmlArg', SyntaxAt(2, 9)
|
||||||
|
AssertEqual 'htmlScriptTag', SyntaxAt(1, 1)
|
||||||
|
|
||||||
|
#
|
||||||
|
# CSS
|
||||||
|
#
|
||||||
|
Given vue (CSS region without lang attribute):
|
||||||
|
<style>
|
||||||
|
/**/
|
||||||
|
</style>
|
||||||
|
|
||||||
|
Execute:
|
||||||
|
AssertEqual 'cssComment', SyntaxAt(2, 1)
|
||||||
|
AssertEqual 'htmlTag', SyntaxAt(1, 1)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Pug
|
||||||
|
#
|
||||||
|
Given vue (Pug template):
|
||||||
|
<template lang="pug">
|
||||||
|
p #{name}'s Pug source code!
|
||||||
|
</template>
|
||||||
|
|
||||||
|
Execute:
|
||||||
|
AssertEqual 'htmlTagName', SyntaxAt(2, 1)
|
||||||
|
AssertEqual 'pugInterpolationDelimiter', SyntaxAt(2, 3)
|
||||||
|
AssertEqual 'vueSurroundingTag', SyntaxAt(1, 1)
|
||||||
|
|
||||||
|
|
||||||
|
Given vue (Pug template using their former name):
|
||||||
|
<template lang="jade">
|
||||||
|
p #{name}'s Pug source code!
|
||||||
|
</template>
|
||||||
|
|
||||||
|
Execute:
|
||||||
|
AssertEqual 'htmlTagName', SyntaxAt(2, 1)
|
||||||
|
AssertEqual 'pugInterpolationDelimiter', SyntaxAt(2, 3)
|
||||||
|
|
||||||
|
#
|
||||||
|
# SCSS
|
||||||
|
#
|
||||||
|
Given vue (SCSS region):
|
||||||
|
<style lang="scss">
|
||||||
|
$green: #42b983;
|
||||||
|
|
||||||
|
button {
|
||||||
|
background-color: $green;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
Execute:
|
||||||
|
AssertEqual 'scssVariable', SyntaxOf('$green', 1)
|
||||||
|
AssertEqual 'scssVariable', SyntaxOf('$green', 2)
|
||||||
|
AssertEqual 'vueSurroundingTag', SyntaxAt(1, 1)
|
||||||
|
|
||||||
|
|
||||||
|
Given vue (SCSS region with newline after tag name):
|
||||||
|
<style
|
||||||
|
lang="scss"
|
||||||
|
>
|
||||||
|
$green: #42b983
|
||||||
|
</style>
|
||||||
|
|
||||||
|
Execute:
|
||||||
|
AssertEqual 'scssVariable', SyntaxOf('$green')
|
||||||
|
AssertEqual 'vueSurroundingTag', SyntaxAt(1, 1)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Sass
|
||||||
|
#
|
||||||
|
Given vue (Sass region):
|
||||||
|
<style lang="sass">
|
||||||
|
$green: #42b983
|
||||||
|
</style>
|
||||||
|
|
||||||
|
Execute:
|
||||||
|
AssertEqual 'sassVariable', SyntaxAt(2, 1)
|
||||||
|
AssertEqual 'vueSurroundingTag', SyntaxAt(1, 1)
|
||||||
|
|
||||||
|
|
||||||
|
Given vue (Sass region with modifier):
|
||||||
|
<style lang="sass?indentedSyntax">
|
||||||
|
$green: #42b983
|
||||||
|
</style>
|
||||||
|
|
||||||
|
Execute:
|
||||||
|
AssertEqual 'sassVariable', SyntaxAt(2, 1)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Stylus
|
||||||
|
#
|
||||||
|
Given vue (Sass region):
|
||||||
|
<style lang="stylus">
|
||||||
|
@import 'variables'
|
||||||
|
|
||||||
|
body
|
||||||
|
font: 12px Helvetica, Arial, sans-serif
|
||||||
|
</style>
|
||||||
|
|
||||||
|
Execute:
|
||||||
|
AssertEqual 'stylusImport', SyntaxAt(2, 1)
|
||||||
|
AssertEqual 'cssTagName', SyntaxAt(4, 1)
|
||||||
|
AssertEqual 'vueSurroundingTag', SyntaxAt(1, 1)
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# TypeScript
|
||||||
|
#
|
||||||
|
Given vue (Typescript region using "ts" as name):
|
||||||
|
<script lang="ts">
|
||||||
|
@Component({})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
Execute:
|
||||||
|
AssertEqual 'typescriptDecorators', SyntaxAt(2, 1)
|
||||||
|
AssertEqual 'vueSurroundingTag', SyntaxAt(1, 1)
|
||||||
|
|
||||||
|
|
||||||
|
Given vue (Typescript region using "typescript" as name):
|
||||||
|
<script lang="typescript">
|
||||||
|
@Component({})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
Execute:
|
||||||
|
AssertEqual 'typescriptDecorators', SyntaxAt(2, 1)
|
||||||
|
|
||||||
|
|
||||||
|
Given vue (Typescript region using "ts" attribute):
|
||||||
|
<script ts>
|
||||||
|
@Component({})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
Execute:
|
||||||
|
AssertEqual 'typescriptDecorators', SyntaxAt(2, 1)
|
||||||
|
AssertEqual 'htmlArg', SyntaxAt(1, 9)
|
@ -0,0 +1,13 @@
|
|||||||
|
set nocompatible
|
||||||
|
|
||||||
|
let &packpath = expand('<sfile>:p:h:h')
|
||||||
|
|
||||||
|
" Remove first and last entry from runtimepath, to prevent loading plugins from ~/.vim
|
||||||
|
let &runtimepath = substitute(&runtimepath, '\v^.{-},(.*),.*$', '\1', '')
|
||||||
|
|
||||||
|
filetype plugin indent on
|
||||||
|
syntax on
|
||||||
|
|
||||||
|
set expandtab
|
||||||
|
set shiftwidth=2
|
||||||
|
set softtabstop=2
|
Loading…
Reference in New Issue