From 4ff363bd59412534d67e5473e0487d3923433a7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=B3=E6=B3=93=E5=AE=87?= Date: Wed, 24 Jan 2018 18:07:09 +0800 Subject: [PATCH 1/6] First commit --- .gitignore | 2 - README.md | 323 +- my_configs.vim | 40 + my_plugins/ale | 1 + my_plugins/elm-vim | 1 + my_plugins/indentLine | 1 + my_plugins/vim-colors-solarized | 1 + my_plugins/vim-easymotion | 1 + my_plugins/vim-indent-guides | 1 + my_plugins/vim-javascript | 1 + my_plugins/vim-jsx | 1 + my_plugins/vim-vue | 1 + sources_non_forked/syntastic/.gitignore | 4 - sources_non_forked/syntastic/CONTRIBUTING.md | 105 - sources_non_forked/syntastic/LICENCE | 13 - sources_non_forked/syntastic/README.markdown | 545 -- .../syntastic/_assets/screenshot_1.png | Bin 92425 -> 0 bytes .../syntastic/autoload/syntastic/c.vim | 341 - .../syntastic/autoload/syntastic/log.vim | 222 - .../autoload/syntastic/postprocess.vim | 84 - .../autoload/syntastic/preprocess.vim | 718 -- .../syntastic/autoload/syntastic/util.vim | 635 -- .../syntastic/doc/syntastic-checkers.txt | 7812 ----------------- .../syntastic/doc/syntastic.txt | 1214 --- .../syntastic/plugin/syntastic.vim | 795 -- .../plugin/syntastic/autoloclist.vim | 55 - .../syntastic/plugin/syntastic/balloons.vim | 59 - .../syntastic/plugin/syntastic/checker.vim | 282 - .../syntastic/plugin/syntastic/cursor.vim | 138 - .../plugin/syntastic/highlighting.vim | 104 - .../syntastic/plugin/syntastic/loclist.vim | 445 - .../syntastic/plugin/syntastic/modemap.vim | 118 - .../syntastic/plugin/syntastic/notifiers.vim | 86 - .../syntastic/plugin/syntastic/registry.vim | 443 - .../syntastic/plugin/syntastic/signs.vim | 138 - .../syntax_checkers/actionscript/mxmlc.vim | 67 - .../syntastic/syntax_checkers/ada/gcc.vim | 47 - .../syntax_checkers/ansible/ansible_lint.vim | 54 - .../syntax_checkers/apiblueprint/drafter.vim | 66 - .../applescript/osacompile.vim | 49 - .../syntax_checkers/asciidoc/asciidoc.vim | 47 - .../syntax_checkers/asciidoc/proselint.vim | 23 - .../syntastic/syntax_checkers/asl/iasl.vim | 59 - .../syntastic/syntax_checkers/asm/gcc.vim | 62 - .../syntax_checkers/bemhtml/bemhtmllint.vim | 35 - .../syntastic/syntax_checkers/bro/bro.vim | 58 - .../syntastic/syntax_checkers/c/avrgcc.vim | 59 - .../syntax_checkers/c/checkpatch.vim | 60 - .../syntax_checkers/c/clang_check.vim | 64 - .../syntax_checkers/c/clang_tidy.vim | 64 - .../syntastic/syntax_checkers/c/cppcheck.vim | 62 - .../syntastic/syntax_checkers/c/cppclean.vim | 40 - .../syntax_checkers/c/flawfinder.vim | 61 - .../syntastic/syntax_checkers/c/gcc.vim | 59 - .../syntastic/syntax_checkers/c/make.vim | 61 - .../syntastic/syntax_checkers/c/oclint.vim | 65 - .../syntastic/syntax_checkers/c/pc_lint.vim | 67 - .../syntastic/syntax_checkers/c/sparse.vim | 48 - .../syntastic/syntax_checkers/c/splint.vim | 55 - .../syntastic/syntax_checkers/cabal/cabal.vim | 56 - .../syntax_checkers/chef/foodcritic.vim | 39 - .../syntax_checkers/cmake/cmakelint.vim | 40 - .../syntastic/syntax_checkers/co/coco.vim | 47 - .../syntastic/syntax_checkers/cobol/cobc.vim | 47 - .../syntax_checkers/coffee/coffee.vim | 58 - .../syntax_checkers/coffee/coffee_jshint.vim | 44 - .../syntax_checkers/coffee/coffeelint.vim | 44 - .../syntastic/syntax_checkers/coq/coqtop.vim | 40 - .../syntastic/syntax_checkers/cpp/avrgcc.vim | 24 - .../syntax_checkers/cpp/clang_check.vim | 22 - .../syntax_checkers/cpp/clang_tidy.vim | 22 - .../syntax_checkers/cpp/cppcheck.vim | 22 - .../syntax_checkers/cpp/cppclean.vim | 22 - .../syntastic/syntax_checkers/cpp/cpplint.vim | 52 - .../syntax_checkers/cpp/flawfinder.vim | 26 - .../syntastic/syntax_checkers/cpp/gcc.vim | 56 - .../syntastic/syntax_checkers/cpp/oclint.vim | 22 - .../syntastic/syntax_checkers/cpp/pc_lint.vim | 23 - .../syntastic/syntax_checkers/cpp/verapp.vim | 48 - .../syntastic/syntax_checkers/cs/mcs.vim | 39 - .../syntastic/syntax_checkers/css/csslint.vim | 48 - .../syntax_checkers/css/mixedindentlint.vim | 22 - .../syntastic/syntax_checkers/css/phpcs.vim | 23 - .../syntax_checkers/css/prettycss.vim | 61 - .../syntastic/syntax_checkers/css/recess.vim | 24 - .../syntax_checkers/css/stylelint.vim | 49 - .../syntax_checkers/cucumber/cucumber.vim | 42 - .../syntastic/syntax_checkers/cuda/nvcc.vim | 93 - .../syntastic/syntax_checkers/d/dmd.vim | 133 - .../syntastic/syntax_checkers/d/dscanner.vim | 48 - .../syntax_checkers/dart/dartanalyzer.vim | 79 - .../syntastic/syntax_checkers/docbk/igor.vim | 55 - .../syntax_checkers/docbk/xmllint.vim | 23 - .../dockerfile/dockerfile_lint.vim | 53 - .../syntax_checkers/dockerfile/hadolint.vim | 41 - .../syntax_checkers/dustjs/swiffer.vim | 38 - .../syntax_checkers/elixir/elixir.vim | 57 - .../erlang/erlang_check_file.erl | 284 - .../syntax_checkers/erlang/escript.vim | 63 - .../syntax_checkers/erlang/syntaxerl.vim | 42 - .../syntastic/syntax_checkers/eruby/ruby.vim | 83 - .../syntax_checkers/fortran/gfortran.vim | 99 - .../syntastic/syntax_checkers/glsl/cgc.vim | 66 - .../syntastic/syntax_checkers/go/go.vim | 104 - .../syntastic/syntax_checkers/go/gofmt.vim | 45 - .../syntastic/syntax_checkers/go/golint.vim | 42 - .../syntax_checkers/go/gometalinter.vim | 54 - .../syntastic/syntax_checkers/go/gotype.vim | 65 - .../syntastic/syntax_checkers/go/govet.vim | 49 - .../syntastic/syntax_checkers/haml/haml.vim | 46 - .../syntax_checkers/haml/haml_lint.vim | 37 - .../syntax_checkers/handlebars/handlebars.vim | 43 - .../syntax_checkers/haskell/hdevtools.vim | 57 - .../syntax_checkers/haskell/hlint.vim | 42 - .../syntax_checkers/haskell/scan.vim | 43 - .../syntastic/syntax_checkers/haxe/haxe.vim | 64 - .../syntax_checkers/help/proselint.vim | 23 - .../syntastic/syntax_checkers/hss/hss.vim | 38 - .../syntastic/syntax_checkers/html/eslint.vim | 23 - .../syntax_checkers/html/gjslint.vim | 23 - .../syntax_checkers/html/htmlhint.vim | 46 - .../syntastic/syntax_checkers/html/jshint.vim | 50 - .../syntax_checkers/html/proselint.vim | 23 - .../syntax_checkers/html/stylelint.vim | 25 - .../syntax_checkers/html/textlint.vim | 23 - .../syntastic/syntax_checkers/html/tidy.vim | 212 - .../syntax_checkers/html/validator.vim | 70 - .../syntastic/syntax_checkers/html/w3.vim | 63 - .../syntax_checkers/jade/jade_lint.vim | 24 - .../syntax_checkers/java/checkstyle.vim | 87 - .../syntastic/syntax_checkers/java/javac.vim | 427 - .../javascript/closurecompiler.vim | 77 - .../syntax_checkers/javascript/eslint.vim | 78 - .../syntax_checkers/javascript/flow.vim | 68 - .../syntax_checkers/javascript/gjslint.vim | 46 - .../syntax_checkers/javascript/jscs.vim | 53 - .../syntax_checkers/javascript/jshint.vim | 60 - .../syntax_checkers/javascript/jsl.vim | 48 - .../syntax_checkers/javascript/jslint.vim | 51 - .../syntax_checkers/javascript/jsxhint.vim | 56 - .../javascript/mixedindentlint.vim | 40 - .../syntax_checkers/javascript/standard.vim | 55 - .../syntax_checkers/javascript/tern_lint.vim | 53 - .../syntax_checkers/json/jsonlint.vim | 43 - .../syntax_checkers/json/jsonval.vim | 41 - .../syntastic/syntax_checkers/julia/lint.vim | 51 - .../syntax_checkers/less/less-lint.coffee | 41 - .../syntax_checkers/less/less-lint.js | 57 - .../syntastic/syntax_checkers/less/lessc.vim | 59 - .../syntastic/syntax_checkers/less/recess.vim | 44 - .../syntax_checkers/less/stylelint.vim | 23 - .../syntastic/syntax_checkers/lex/flex.vim | 50 - .../syntastic/syntax_checkers/limbo/limbo.vim | 47 - .../syntastic/syntax_checkers/lisp/clisp.vim | 57 - .../syntastic/syntax_checkers/llvm/llvm.vim | 39 - .../syntastic/syntax_checkers/lua/luac.vim | 65 - .../syntax_checkers/lua/luacheck.vim | 67 - .../syntax_checkers/markdown/mdl.vim | 45 - .../syntax_checkers/markdown/proselint.vim | 23 - .../syntax_checkers/markdown/textlint.vim | 23 - .../syntax_checkers/matlab/mlint.vim | 41 - .../syntastic/syntax_checkers/mercury/mmc.vim | 49 - .../syntastic/syntax_checkers/nasm/nasm.vim | 42 - .../syntastic/syntax_checkers/nix/nix.vim | 45 - .../syntastic/syntax_checkers/nroff/igor.vim | 23 - .../syntax_checkers/nroff/mandoc.vim | 41 - .../syntax_checkers/nroff/proselint.vim | 23 - .../syntastic/syntax_checkers/objc/gcc.vim | 59 - .../syntastic/syntax_checkers/objc/oclint.vim | 22 - .../syntastic/syntax_checkers/objcpp/gcc.vim | 59 - .../syntax_checkers/objcpp/oclint.vim | 22 - .../syntax_checkers/ocaml/camlp4o.vim | 132 - .../syntastic/syntax_checkers/perl/perl.vim | 95 - .../syntax_checkers/perl/perlcritic.vim | 52 - .../syntax_checkers/perl/podchecker.vim | 23 - .../syntastic/syntax_checkers/perl6/perl6.vim | 106 - .../syntastic/syntax_checkers/php/php.vim | 52 - .../syntastic/syntax_checkers/php/phpcs.vim | 41 - .../syntastic/syntax_checkers/php/phplint.vim | 91 - .../syntastic/syntax_checkers/php/phpmd.vim | 77 - .../syntastic/syntax_checkers/php/phpstan.vim | 49 - .../syntastic/syntax_checkers/po/dennis.vim | 43 - .../syntastic/syntax_checkers/po/msgfmt.vim | 50 - .../syntax_checkers/pod/podchecker.vim | 51 - .../syntax_checkers/pod/proselint.vim | 23 - .../syntax_checkers/pug/pug_lint.vim | 40 - .../syntax_checkers/puppet/puppet.vim | 47 - .../syntax_checkers/puppet/puppetlint.vim | 52 - .../syntax_checkers/python/bandit.vim | 54 - .../syntastic/syntax_checkers/python/codec.py | 31 - .../syntax_checkers/python/compile.py | 13 - .../syntax_checkers/python/flake8.vim | 75 - .../syntax_checkers/python/frosted.vim | 63 - .../syntastic/syntax_checkers/python/mypy.vim | 36 - .../syntax_checkers/python/pep257.vim | 23 - .../syntastic/syntax_checkers/python/pep8.vim | 23 - .../syntax_checkers/python/prospector.vim | 73 - .../syntax_checkers/python/py3kwarn.vim | 36 - .../syntax_checkers/python/pycodestyle.vim | 48 - .../syntax_checkers/python/pydocstyle.vim | 66 - .../syntax_checkers/python/pyflakes.vim | 74 - .../syntax_checkers/python/pylama.vim | 79 - .../syntax_checkers/python/pylint.vim | 98 - .../syntax_checkers/python/python.vim | 57 - .../syntastic/syntax_checkers/qml/qmllint.vim | 39 - .../syntastic/syntax_checkers/r/lint.vim | 84 - .../syntastic/syntax_checkers/r/lintr.vim | 83 - .../syntastic/syntax_checkers/r/svtools.vim | 76 - .../syntax_checkers/racket/code-ayatollah.vim | 62 - .../syntax_checkers/racket/racket.vim | 51 - .../syntastic/syntax_checkers/rmd/lintr.vim | 23 - .../syntastic/syntax_checkers/rnc/rnv.vim | 38 - .../syntax_checkers/rst/proselint.vim | 23 - .../syntax_checkers/rst/rst2pseudoxml.vim | 65 - .../syntax_checkers/rst/rstcheck.vim | 50 - .../syntastic/syntax_checkers/rst/sphinx.vim | 81 - .../syntastic/syntax_checkers/ruby/flog.vim | 72 - .../syntastic/syntax_checkers/ruby/jruby.vim | 50 - .../syntax_checkers/ruby/macruby.vim | 49 - .../syntastic/syntax_checkers/ruby/mri.vim | 82 - .../syntastic/syntax_checkers/ruby/reek.vim | 56 - .../syntax_checkers/ruby/rubocop.vim | 57 - .../syntax_checkers/ruby/rubylint.vim | 45 - .../syntastic/syntax_checkers/sass/sass.vim | 85 - .../syntax_checkers/sass/sass_lint.vim | 51 - .../syntastic/syntax_checkers/sass/sassc.vim | 38 - .../syntastic/syntax_checkers/scala/fsc.vim | 50 - .../syntax_checkers/scala/scalac.vim | 44 - .../syntax_checkers/scala/scalastyle.vim | 77 - .../syntax_checkers/scss/mixedindentlint.vim | 22 - .../syntastic/syntax_checkers/scss/sass.vim | 23 - .../syntax_checkers/scss/sass_lint.vim | 23 - .../syntastic/syntax_checkers/scss/sassc.vim | 23 - .../syntax_checkers/scss/scss_lint.vim | 64 - .../syntax_checkers/scss/stylelint.vim | 23 - .../syntastic/syntax_checkers/sh/bashate.vim | 49 - .../syntax_checkers/sh/checkbashisms.vim | 42 - .../syntastic/syntax_checkers/sh/sh.vim | 95 - .../syntax_checkers/sh/shellcheck.vim | 67 - .../syntax_checkers/slim/slim_lint.vim | 39 - .../syntastic/syntax_checkers/slim/slimrb.vim | 55 - .../syntastic/syntax_checkers/sml/smlnj.vim | 47 - .../syntax_checkers/solidity/solc.vim | 38 - .../syntax_checkers/solidity/solhint.vim | 43 - .../syntax_checkers/solidity/solium.vim | 43 - .../syntax_checkers/spec/rpmlint.vim | 43 - .../syntastic/syntax_checkers/sql/sqlint.vim | 50 - .../syntax_checkers/sql/tsqllint.vim | 43 - .../syntax_checkers/stylus/stylint.vim | 55 - .../syntax_checkers/tcl/nagelfar.vim | 44 - .../syntastic/syntax_checkers/tex/chktex.vim | 58 - .../syntastic/syntax_checkers/tex/lacheck.vim | 40 - .../syntax_checkers/tex/proselint.vim | 23 - .../syntax_checkers/texinfo/makeinfo.vim | 47 - .../syntax_checkers/texinfo/proselint.vim | 23 - .../syntax_checkers/text/atdtool.vim | 61 - .../syntastic/syntax_checkers/text/igor.vim | 23 - .../syntax_checkers/text/language_check.vim | 37 - .../syntax_checkers/text/proselint.vim | 45 - .../syntax_checkers/text/textlint.vim | 42 - .../syntastic/syntax_checkers/trig/rapper.vim | 23 - .../syntax_checkers/turtle/rapper.vim | 46 - .../syntastic/syntax_checkers/turtle/ttl.vim | 43 - .../syntax_checkers/twig/twiglint.vim | 41 - .../syntax_checkers/typescript/eslint.vim | 23 - .../syntax_checkers/typescript/tslint.vim | 53 - .../syntastic/syntax_checkers/vala/valac.vim | 76 - .../syntax_checkers/verilog/iverilog.vim | 38 - .../syntax_checkers/verilog/verilator.vim | 42 - .../syntastic/syntax_checkers/vhdl/ghdl.vim | 38 - .../syntastic/syntax_checkers/vhdl/vcom.vim | 55 - .../syntastic/syntax_checkers/vim/vimlint.vim | 113 - .../syntastic/syntax_checkers/vim/vint.vim | 55 - .../syntastic/syntax_checkers/vue/eslint.vim | 23 - .../syntax_checkers/vue/pug_lint_vue.vim | 42 - .../syntax_checkers/xhtml/jshint.vim | 23 - .../syntax_checkers/xhtml/proselint.vim | 23 - .../syntastic/syntax_checkers/xhtml/tidy.vim | 92 - .../syntastic/syntax_checkers/xml/plutil.vim | 42 - .../syntastic/syntax_checkers/xml/xmllint.vim | 54 - .../syntax_checkers/xquery/basex.vim | 52 - .../syntax_checkers/xslt/xmllint.vim | 23 - .../syntastic/syntax_checkers/yacc/bison.vim | 55 - .../syntastic/syntax_checkers/yaml/jsyaml.vim | 48 - .../syntax_checkers/yaml/yamllint.vim | 52 - .../syntastic/syntax_checkers/yaml/yamlxs.vim | 74 - .../syntastic/syntax_checkers/yang/pyang.vim | 46 - .../syntax_checkers/z80/z80syntaxchecker.vim | 39 - .../syntastic/syntax_checkers/zpt/zptlint.vim | 42 - .../syntastic/syntax_checkers/zsh/zsh.vim | 38 - 290 files changed, 57 insertions(+), 28106 deletions(-) create mode 100644 my_configs.vim create mode 160000 my_plugins/ale create mode 160000 my_plugins/elm-vim create mode 160000 my_plugins/indentLine create mode 160000 my_plugins/vim-colors-solarized create mode 160000 my_plugins/vim-easymotion create mode 160000 my_plugins/vim-indent-guides create mode 160000 my_plugins/vim-javascript create mode 160000 my_plugins/vim-jsx create mode 160000 my_plugins/vim-vue delete mode 100644 sources_non_forked/syntastic/.gitignore delete mode 100644 sources_non_forked/syntastic/CONTRIBUTING.md delete mode 100644 sources_non_forked/syntastic/LICENCE delete mode 100644 sources_non_forked/syntastic/README.markdown delete mode 100644 sources_non_forked/syntastic/_assets/screenshot_1.png delete mode 100644 sources_non_forked/syntastic/autoload/syntastic/c.vim delete mode 100644 sources_non_forked/syntastic/autoload/syntastic/log.vim delete mode 100644 sources_non_forked/syntastic/autoload/syntastic/postprocess.vim delete mode 100644 sources_non_forked/syntastic/autoload/syntastic/preprocess.vim delete mode 100644 sources_non_forked/syntastic/autoload/syntastic/util.vim delete mode 100644 sources_non_forked/syntastic/doc/syntastic-checkers.txt delete mode 100644 sources_non_forked/syntastic/doc/syntastic.txt delete mode 100644 sources_non_forked/syntastic/plugin/syntastic.vim delete mode 100644 sources_non_forked/syntastic/plugin/syntastic/autoloclist.vim delete mode 100644 sources_non_forked/syntastic/plugin/syntastic/balloons.vim delete mode 100644 sources_non_forked/syntastic/plugin/syntastic/checker.vim delete mode 100644 sources_non_forked/syntastic/plugin/syntastic/cursor.vim delete mode 100644 sources_non_forked/syntastic/plugin/syntastic/highlighting.vim delete mode 100644 sources_non_forked/syntastic/plugin/syntastic/loclist.vim delete mode 100644 sources_non_forked/syntastic/plugin/syntastic/modemap.vim delete mode 100644 sources_non_forked/syntastic/plugin/syntastic/notifiers.vim delete mode 100644 sources_non_forked/syntastic/plugin/syntastic/registry.vim delete mode 100644 sources_non_forked/syntastic/plugin/syntastic/signs.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/actionscript/mxmlc.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/ada/gcc.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/ansible/ansible_lint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/apiblueprint/drafter.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/applescript/osacompile.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/asciidoc/asciidoc.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/asciidoc/proselint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/asl/iasl.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/asm/gcc.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/bemhtml/bemhtmllint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/bro/bro.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/c/avrgcc.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/c/checkpatch.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/c/clang_check.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/c/clang_tidy.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/c/cppcheck.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/c/cppclean.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/c/flawfinder.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/c/gcc.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/c/make.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/c/oclint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/c/pc_lint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/c/sparse.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/c/splint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/cabal/cabal.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/chef/foodcritic.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/cmake/cmakelint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/co/coco.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/cobol/cobc.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/coffee/coffee.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/coffee/coffee_jshint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/coffee/coffeelint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/coq/coqtop.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/cpp/avrgcc.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/cpp/clang_check.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/cpp/clang_tidy.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/cpp/cppcheck.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/cpp/cppclean.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/cpp/cpplint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/cpp/flawfinder.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/cpp/gcc.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/cpp/oclint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/cpp/pc_lint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/cpp/verapp.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/cs/mcs.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/css/csslint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/css/mixedindentlint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/css/phpcs.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/css/prettycss.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/css/recess.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/css/stylelint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/cucumber/cucumber.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/cuda/nvcc.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/d/dmd.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/d/dscanner.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/dart/dartanalyzer.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/docbk/igor.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/docbk/xmllint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/dockerfile/dockerfile_lint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/dockerfile/hadolint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/dustjs/swiffer.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/elixir/elixir.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/erlang/erlang_check_file.erl delete mode 100644 sources_non_forked/syntastic/syntax_checkers/erlang/escript.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/erlang/syntaxerl.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/eruby/ruby.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/fortran/gfortran.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/glsl/cgc.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/go/go.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/go/gofmt.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/go/golint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/go/gometalinter.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/go/gotype.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/go/govet.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/haml/haml.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/haml/haml_lint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/handlebars/handlebars.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/haskell/hdevtools.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/haskell/hlint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/haskell/scan.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/haxe/haxe.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/help/proselint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/hss/hss.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/html/eslint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/html/gjslint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/html/htmlhint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/html/jshint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/html/proselint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/html/stylelint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/html/textlint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/html/tidy.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/html/validator.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/html/w3.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/jade/jade_lint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/java/checkstyle.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/java/javac.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/javascript/closurecompiler.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/javascript/eslint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/javascript/flow.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/javascript/gjslint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/javascript/jscs.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/javascript/jshint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/javascript/jsl.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/javascript/jslint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/javascript/jsxhint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/javascript/mixedindentlint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/javascript/standard.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/javascript/tern_lint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/json/jsonlint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/json/jsonval.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/julia/lint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/less/less-lint.coffee delete mode 100644 sources_non_forked/syntastic/syntax_checkers/less/less-lint.js delete mode 100644 sources_non_forked/syntastic/syntax_checkers/less/lessc.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/less/recess.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/less/stylelint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/lex/flex.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/limbo/limbo.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/lisp/clisp.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/llvm/llvm.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/lua/luac.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/lua/luacheck.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/markdown/mdl.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/markdown/proselint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/markdown/textlint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/matlab/mlint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/mercury/mmc.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/nasm/nasm.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/nix/nix.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/nroff/igor.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/nroff/mandoc.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/nroff/proselint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/objc/gcc.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/objc/oclint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/objcpp/gcc.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/objcpp/oclint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/ocaml/camlp4o.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/perl/perl.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/perl/perlcritic.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/perl/podchecker.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/perl6/perl6.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/php/php.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/php/phpcs.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/php/phplint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/php/phpmd.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/php/phpstan.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/po/dennis.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/po/msgfmt.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/pod/podchecker.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/pod/proselint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/pug/pug_lint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/puppet/puppet.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/puppet/puppetlint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/python/bandit.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/python/codec.py delete mode 100644 sources_non_forked/syntastic/syntax_checkers/python/compile.py delete mode 100644 sources_non_forked/syntastic/syntax_checkers/python/flake8.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/python/frosted.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/python/mypy.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/python/pep257.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/python/pep8.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/python/prospector.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/python/py3kwarn.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/python/pycodestyle.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/python/pydocstyle.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/python/pyflakes.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/python/pylama.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/python/pylint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/python/python.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/qml/qmllint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/r/lint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/r/lintr.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/r/svtools.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/racket/code-ayatollah.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/racket/racket.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/rmd/lintr.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/rnc/rnv.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/rst/proselint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/rst/rst2pseudoxml.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/rst/rstcheck.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/rst/sphinx.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/ruby/flog.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/ruby/jruby.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/ruby/macruby.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/ruby/mri.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/ruby/reek.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/ruby/rubocop.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/ruby/rubylint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/sass/sass.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/sass/sass_lint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/sass/sassc.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/scala/fsc.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/scala/scalac.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/scala/scalastyle.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/scss/mixedindentlint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/scss/sass.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/scss/sass_lint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/scss/sassc.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/scss/scss_lint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/scss/stylelint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/sh/bashate.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/sh/checkbashisms.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/sh/sh.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/sh/shellcheck.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/slim/slim_lint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/slim/slimrb.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/sml/smlnj.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/solidity/solc.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/solidity/solhint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/solidity/solium.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/spec/rpmlint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/sql/sqlint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/sql/tsqllint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/stylus/stylint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/tcl/nagelfar.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/tex/chktex.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/tex/lacheck.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/tex/proselint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/texinfo/makeinfo.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/texinfo/proselint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/text/atdtool.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/text/igor.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/text/language_check.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/text/proselint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/text/textlint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/trig/rapper.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/turtle/rapper.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/turtle/ttl.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/twig/twiglint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/typescript/eslint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/typescript/tslint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/vala/valac.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/verilog/iverilog.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/verilog/verilator.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/vhdl/ghdl.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/vhdl/vcom.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/vim/vimlint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/vim/vint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/vue/eslint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/vue/pug_lint_vue.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/xhtml/jshint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/xhtml/proselint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/xhtml/tidy.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/xml/plutil.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/xml/xmllint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/xquery/basex.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/xslt/xmllint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/yacc/bison.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/yaml/jsyaml.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/yaml/yamllint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/yaml/yamlxs.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/yang/pyang.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/z80/z80syntaxchecker.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/zpt/zptlint.vim delete mode 100644 sources_non_forked/syntastic/syntax_checkers/zsh/zsh.vim diff --git a/.gitignore b/.gitignore index 55273366..c40b6f34 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,5 @@ temp_dirs/yankring_history_v2.txt sources_forked/yankring/doc/tags sources_non_forked/tlib/doc/tags sources_non_forked/ctrlp.vim/doc/tags* -my_plugins/ -my_configs.vim tags .DS_Store diff --git a/README.md b/README.md index ea93e17d..114ed4e6 100644 --- a/README.md +++ b/README.md @@ -1,322 +1,15 @@ -![VIM](https://dnp4pehkvoo6n.cloudfront.net/43c5af597bd5c1a64eb1829f011c208f/as/Ultimate%20Vimrc.svg) +# What is this? -# The Ultimate vimrc +This is the vim configurations based on [amix/vimrc](https://github.com/amix/vimrc). -Over the last 10 years, I have used and tweaked Vim. This configuration is the ultimate vimrc (or at least my version of it). +# What have I changed? -There are two versions: +* Change syntax checker from [syntastic](https://github.com/vim-syntastic/syntastic) to [ale](https://github.com/w0rp/ale) (which is **async** and needs vim 8). -* **The Basic**: If you want something small just copy [basic.vim](https://github.com/amix/vimrc/blob/master/vimrcs/basic.vim) into your ~/.vimrc and you will have a good basic setup -* **The Awesome**: Includes a ton of useful plugins, color schemes, and configurations +* Add [indentLine](https://github.com/Yggdroot/indentLine) support. (This feature needs vim 7.3+ with `conceal` compiled) -I would, of course, recommend using the awesome version. +* Add some javascript related plugins. (mainly for vue development with jsx) +* Add [easymotion](https://github.com/easymotion/vim-easymotion) for (IMHO) better development experience. -## How to install the Awesome version? - -The awesome version includes a lot of great plugins, configurations and color schemes that make Vim a lot better. To install it simply do following from your terminal: - - git clone --depth=1 https://github.com/amix/vimrc.git ~/.vim_runtime - sh ~/.vim_runtime/install_awesome_vimrc.sh - - -## Fonts - -I recommend using [IBM Plex Mono font](https://ibm.github.io/type/) (it's an open-source and awesome font that can make your code beautiful). The Awesome vimrc is already setup to try to use it. - -Some other fonts that Awesome will try to use: - -* [Hack](http://sourcefoundry.org/hack/) -* [Source Code Pro](https://adobe-fonts.github.io/source-code-pro/) - - -## How to install the Basic version? - -The basic version is just one file and no plugins. Just copy [basic.vim](https://github.com/amix/vimrc/blob/master/vimrcs/basic.vim) and paste it into your vimrc. - -The basic version is useful to install on remote servers where you don't need many plugins, and you don't do many edits. - - git clone --depth=1 git://github.com/amix/vimrc.git ~/.vim_runtime - sh ~/.vim_runtime/install_basic_vimrc.sh - - -## How to install on Windows? - -Use [msysgit](http://msysgit.github.com/) to checkout the repository and run the installation instructions above. No special instructions needed ;-) - - -## How to install on Linux - -If you have vim aliased as `vi` instead of `vim`, make sure to either alias it: `alias vi=vim`. Otherwise, `apt-get install vim` - - -## How to update to latest version? - -Just do a git rebase! - - cd ~/.vim_runtime - git pull --rebase - - -## Some screenshots - -Colors when editing a Python file: - -![Screenshot 1](https://dnp4pehkvoo6n.cloudfront.net/07583008e4da885801657e8781777844/as/Python%20editing.png) - -Opening recently opened files with the [mru.vim](https://github.com/vim-scripts/mru.vim) plugin: - -![Screenshot 2](https://dnp4pehkvoo6n.cloudfront.net/1d49a88f9bd5d013c025bb1e1272a7d8/as/MRU%20plugin.png) - -[NERD Tree](https://github.com/scrooloose/nerdtree) plugin in a terminal window: -![Screenshot 3](https://dnp4pehkvoo6n.cloudfront.net/ae719203166585d64728f28398f4b1b7/as/Terminal%20usage.png) - -Distraction free mode using [goyo.vim](https://github.com/junegunn/goyo.vim) and [vim-zenroom2](https://github.com/amix/vim-zenroom2): -![Screenshot 4](https://dnp4pehkvoo6n.cloudfront.net/f0dcc4c9739148c56cbf8285a910ac41/as/Zen%20mode.png) - - -## Included Plugins - -I recommend reading the docs of these plugins to understand them better. Each plugin provides a much better Vim experience! - -* [ack.vim](https://github.com/mileszs/ack.vim): Vim plugin for `the_silver_searcher` (ag) or ack -- a wicked fast grep -* [bufexplorer.zip](https://github.com/vim-scripts/bufexplorer.zip): Quickly and easily switch between buffers. This plugin can be opened with `` -* [ctrlp.vim](https://github.com/ctrlpvim/ctrlp.vim): Fuzzy file, buffer, mru and tag finder. It's mapped to `` -* [goyo.vim](https://github.com/junegunn/goyo.vim) and [vim-zenroom2](https://github.com/amix/vim-zenroom2): -* [lightline.vim](https://github.com/itchyny/lightline.vim): A light and configurable statusline/tabline for Vim -* [NERD Tree](https://github.com/scrooloose/nerdtree): A tree explorer plugin for vim -* [mru.vim](https://github.com/vim-scripts/mru.vim): Plugin to manage Most Recently Used (MRU) files. This plugin can be opened with `` -* [open_file_under_cursor.vim](https://github.com/amix/open_file_under_cursor.vim): Open file under cursor when pressing `gf` -* [pathogen.vim](https://github.com/tpope/vim-pathogen): Manage your vim runtimepath -* [snipmate.vim](https://github.com/garbas/vim-snipmate): snipmate.vim aims to be a concise vim script that implements some of TextMate's snippets features in Vim -* [syntastic](https://github.com/scrooloose/syntastic): Syntax checking hacks for vim -* [vim-commentary](https://github.com/tpope/vim-commentary): Comment stuff out. Use `gcc` to comment out a line (takes a count), `gc` to comment out the target of a motion. `gcu` uncomments a set of adjacent commented lines. -* [vim-expand-region](https://github.com/terryma/vim-expand-region): Allows you to visually select increasingly larger regions of text using the same key combination -* [vim-fugitive](https://github.com/tpope/vim-fugitive): A Git wrapper so awesome, it should be illegal -* [vim-indent-object](https://github.com/michaeljsmith/vim-indent-object): Defines a new text object representing lines of code at the same indent level. Useful for python/vim scripts -* [vim-multiple-cursors](https://github.com/terryma/vim-multiple-cursors): Sublime Text style multiple selections for Vim, CTRL+N is remapped to CTRL+S (due to YankRing) -* [vim-yankstack](https://github.com/maxbrunsfeld/vim-yankstack): Maintains a history of previous yanks, changes and deletes -Remove all clutter and focus only on the essential. Similar to iA Writer or Write Room [Read more here](http://amix.dk/blog/post/19744) - - -## Included color schemes - -* [peaksea](https://github.com/vim-scripts/peaksea): The default -* [vim-colors-solarized](https://github.com/altercation/vim-colors-solarized) -* [vim-irblack](https://github.com/wgibbs/vim-irblack) -* [mayansmoke](https://github.com/vim-scripts/mayansmoke) -* [vim-pyte](https://github.com/therubymug/vim-pyte) - - -## Included modes - -* [vim-coffee-script](https://github.com/kchmck/vim-coffee-script) -* [vim-less](https://github.com/groenewege/vim-less) -* [vim-bundle-mako](https://github.com/sophacles/vim-bundle-mako) -* [vim-markdown](https://github.com/tpope/vim-markdown) -* [nginx.vim](https://github.com/vim-scripts/nginx.vim): Highlights configuration files for nginx -* [vim-go](https://github.com/fatih/vim-go) - - -## How to include your own stuff? - -After you have installed the setup, you can create **~/.vim_runtime/my_configs.vim** to fill in any configurations that are important for you. For instance, my **my_configs.vim** looks like this: - - ~/.vim_runtime (master)> cat my_configs.vim - map ct :cd ~/Desktop/Todoist/todoist - map cw :cd ~/Desktop/Wedoist/wedoist - -You can also install your plugins, for instance, via pathogen you can install [vim-rails](https://github.com/tpope/vim-rails): - - cd ~/.vim_runtime - git clone git://github.com/tpope/vim-rails.git sources_non_forked/vim-rails - - -## Key Mappings - -The [leader](http://learnvimscriptthehardway.stevelosh.com/chapters/06.html#leader) is `,`, so whenever you see `` it means `,`. - - -### Plugin related mappings - -Open [bufexplorer](https://github.com/vim-scripts/bufexplorer.zip) to see and manage the current buffers (`o`): - - map o :BufExplorer - -Open [MRU.vim](https://github.com/vim-scripts/mru.vim) to see the recently open files (`f`): - - map f :MRU - -Open [ctrlp.vim](https://github.com/kien/ctrlp.vim) plugin to quickly find a file or a buffer (`j` or `f`): - - let g:ctrlp_map = '' - -[NERD Tree](https://github.com/scrooloose/nerdtree) mappings: - - map nn :NERDTreeToggle - map nb :NERDTreeFromBookmark - map nf :NERDTreeFind - -[goyo.vim](https://github.com/junegunn/goyo.vim) and [vim-zenroom2](https://github.com/amix/vim-zenroom2) lets you only focus on one thing at a time. It removes all the distractions and centers the content. It has a special look when editing Markdown, reStructuredText and textfiles. It only has one mapping. (`z`) - - map z :Goyo - - -### Normal mode mappings - -Fast saving of a buffer (`w`): - - nmap w :w! - -Map `` to `/` (search) and `+` to `?` (backwards search): - - map / - map ? - map :noh - -Disable highlights when you press ``: - - map :noh - -Smart way to move between windows (`j` etc.): - - map j - map k - map h - map l - -Closing of the current buffer(s) (`bd` and (`ba`)): - - " Close current buffer - map bd :Bclose - - " Close all buffers - map ba :1,1000 bd! - -Useful mappings for managing tabs: - - map tn :tabnew - map to :tabonly - map tc :tabclose - map tm :tabmove - - " Opens a new tab with the current buffer's path - " Super useful when editing files in the same directory - map te :tabedit =expand("%:p:h")/ - -Switch [CWD](http://vim.wikia.com/wiki/Set_working_directory_to_the_current_file) to the directory of the open buffer: - - map cd :cd %:p:h:pwd - -Open `ack.vim` for fast search: - - map g :Ack - -Quickly open a buffer for scripbble: - - map q :e ~/buffer - -Toggle paste mode on and off: - - map pp :setlocal paste! - - -### Visual mode mappings - -Visual mode pressing `*` or `#` searches for the current selection: - - vnoremap * :call VisualSelection('f') - vnoremap # :call VisualSelection('b') - -When you press gv you `Ack.vim` after the selected text: - - vnoremap gv :call VisualSelection('gv', '') - -When you press `r` you can search and replace the selected text: - - vnoremap r :call VisualSelection('replace') - -Surround the visual selection in parenthesis/brackets/etc.: - - vnoremap $1 `>a)` - vnoremap $2 `>a]` - vnoremap $3 `>a}` - vnoremap $$ `>a"` - vnoremap $q `>a'` - vnoremap $e `>a"` - - -### Insert mode mappings - -Quickly insert parenthesis/brackets/etc.: - - inoremap $1 ()i - inoremap $2 []i - inoremap $3 {}i - inoremap $4 {o}O - inoremap $q ''i - inoremap $e ""i - inoremap $t <>i - -Insert the current date and time (useful for timestamps): - - iab xdate =strftime("%d/%m/%y %H:%M:%S") - - -### Command line mappings - -$q is super useful when browsing on the command line. It deletes everything until the last slash: - - cno $q eDeleteTillSlash() - -Bash like keys for the command line: - - cnoremap - cnoremap - cnoremap - - cnoremap - cnoremap - -Write the file as sudo (works only on Unix). Super useful when you open a file and you don't have permissions to save your changes. [Vim tip](http://vim.wikia.com/wiki/Su-write): - - :W - - -### Spell checking -Pressing `ss` will toggle spell checking: - - map ss :setlocal spell! - -Shortcuts using `` instead of special characters: - - map sn ]s - map sp [s - map sa zg - map s? z= - - -### Cope -Query `:help cope` if you are unsure what cope is. It's super useful! - -When you search with `Ack.vim`, display your results in cope by doing: -`cc` - -To go to the next search result do: -`n` - -To go to the previous search results do: -`p` - -Cope mappings: - - map cc :botright cope - map co ggVGy:tabnew:set syntax=qfpgg - map n :cn - map p :cp - - -## How to uninstall -Just do following: -* Remove `~/.vim_runtime` -* Remove any lines that reference `.vim_runtime` in your `~/.vimrc` +Detail changes can be found in [./my_config.vim](./my_config.vim) and [./my_plugins](./my_plugins). diff --git a/my_configs.vim b/my_configs.vim new file mode 100644 index 00000000..b482bab4 --- /dev/null +++ b/my_configs.vim @@ -0,0 +1,40 @@ +" editor configurations +set foldlevel=20 " disable folding +set number relativenumber +set cursorline + +" solorized color scheme +syntax enable +set background=dark +colorscheme solarized + +" set indent preferences based on file type +autocmd Filetype javascript setlocal ts=2 sts=2 sw=2 +autocmd Filetype vue setlocal ts=2 sts=2 sw=2 +autocmd Filetype vue syntax sync fromstart + +" macvim font +if has("gui_macvim") + set guifont=Operator\ Mono\ Light\ Italic:h18 +endif + +" +" plugins +" +" + " nerdtree + let g:NERDTreeWinPos = "left" + + " ctrlp + let g:ctrlp_map = 'p' + let g:ctrlp_max_files = 0 + let g:ctrlp_max_depth = 40 + let g:ctrlp_buffer = 'f' + + " indent line + let g:indentLine_char = '¦' + + " vim-vue + let g:vue_disable_pre_processors = 1 " otherwise input will be slow + + diff --git a/my_plugins/ale b/my_plugins/ale new file mode 160000 index 00000000..038789f0 --- /dev/null +++ b/my_plugins/ale @@ -0,0 +1 @@ +Subproject commit 038789f0ed42cfffbd442a6a399cb2395591821d diff --git a/my_plugins/elm-vim b/my_plugins/elm-vim new file mode 160000 index 00000000..ae531539 --- /dev/null +++ b/my_plugins/elm-vim @@ -0,0 +1 @@ +Subproject commit ae5315396cd0f3958750f10a5f3ad9d34d33f40d diff --git a/my_plugins/indentLine b/my_plugins/indentLine new file mode 160000 index 00000000..43934854 --- /dev/null +++ b/my_plugins/indentLine @@ -0,0 +1 @@ +Subproject commit 439348543c9ffe2c5c4469a6e8f005f67bf73cc1 diff --git a/my_plugins/vim-colors-solarized b/my_plugins/vim-colors-solarized new file mode 160000 index 00000000..528a59f2 --- /dev/null +++ b/my_plugins/vim-colors-solarized @@ -0,0 +1 @@ +Subproject commit 528a59f26d12278698bb946f8fb82a63711eec21 diff --git a/my_plugins/vim-easymotion b/my_plugins/vim-easymotion new file mode 160000 index 00000000..342549e7 --- /dev/null +++ b/my_plugins/vim-easymotion @@ -0,0 +1 @@ +Subproject commit 342549e7a1e5b07a030803e0e4b6f0415aa51275 diff --git a/my_plugins/vim-indent-guides b/my_plugins/vim-indent-guides new file mode 160000 index 00000000..b4068719 --- /dev/null +++ b/my_plugins/vim-indent-guides @@ -0,0 +1 @@ +Subproject commit b40687195c01caf40f62d20093296590b48e3a75 diff --git a/my_plugins/vim-javascript b/my_plugins/vim-javascript new file mode 160000 index 00000000..a0e1442d --- /dev/null +++ b/my_plugins/vim-javascript @@ -0,0 +1 @@ +Subproject commit a0e1442d86a070331c800107fbee6394ee6d3d08 diff --git a/my_plugins/vim-jsx b/my_plugins/vim-jsx new file mode 160000 index 00000000..5b968dfa --- /dev/null +++ b/my_plugins/vim-jsx @@ -0,0 +1 @@ +Subproject commit 5b968dfa512c57c38ad7fe420f3e8ab75a73949a diff --git a/my_plugins/vim-vue b/my_plugins/vim-vue new file mode 160000 index 00000000..6518e738 --- /dev/null +++ b/my_plugins/vim-vue @@ -0,0 +1 @@ +Subproject commit 6518e738863f0acd190c7564a109be021cae1b56 diff --git a/sources_non_forked/syntastic/.gitignore b/sources_non_forked/syntastic/.gitignore deleted file mode 100644 index cc07c931..00000000 --- a/sources_non_forked/syntastic/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -*~ -*.swp -tags -.DS_Store diff --git a/sources_non_forked/syntastic/CONTRIBUTING.md b/sources_non_forked/syntastic/CONTRIBUTING.md deleted file mode 100644 index 44eb13f8..00000000 --- a/sources_non_forked/syntastic/CONTRIBUTING.md +++ /dev/null @@ -1,105 +0,0 @@ -# CONTRIBUTING -- - - -1\. [Bug reports / GitHub issues](#bugreps) -2\. [Submitting a patch](#patches) -3\. [General style notes](#generalstyle) -4\. [Syntax checker notes](#checkerstyle) -- - - - - - -## 1. Bug reports / GitHub issues - -Please note that the preferred channel for posting bug reports is the -[issue tracker at GitHub][bug_tracker]. Reports posted elsewhere are less likely -to be seen by the core team. - -When reporting a bug make sure you search the existing GitHub issues -for the same/similar issues. If you find one, feel free to add a `+1` -comment with any additional information that may help us solve the -issue. - -When creating a new issue be sure to state the following: - -* steps to reproduce the bug; -* the version of Vim you are using (run `:ver` to find out); -* the version of syntastic you are using (see `:SyntasticInfo`). - -For syntax checker bugs also state the version of the checker executable -that you are using. Adding debugging information is typically useful -too: - -* open a file handled by your checker; -* set `g:syntastic_debug` to 1 or 3; -* run the checker; -* copy the output of `:mes`. - - - -## 2. Submitting a patch - -Before you consider adding features to syntastic, _please_ spend a few minutes -(re-)reading the latest version of the [manual][manual]. Syntastic is changing -rapidly at times, and it's possible that some features you want to add exist -already. - -To submit a patch: - -* fork the [repo][github] on GitHub; -* make a [topic branch][branches] and start hacking; -* submit a pull request based off your topic branch. - -Small, focused patches are preferred. - -Large changes to the code should be discussed with the core team first. -Create an issue and explain your plan and see what we say. - -Also, make sure to update the manual whenever applicable. Nobody can use -features that aren't documented. - - - -## 3. General style notes - -Follow the coding conventions/styles used in the syntastic core: - -* use 4 space indents; -* don't use abbreviated keywords - e.g. use `endfunction`, not `endfun` -(there's always room for more fun!); -* don't use `l:` prefixes for variables unless actually required (i.e. -almost never); -* code for maintainability; we would rather a function be a couple of -lines longer and have (for example) some [explaining variables][variables] to -aid readability. - - - -## 4. Syntax checker notes - -Make sure to read the [guide][guide] if you plan to add new syntax checkers. - -Use the existing checkers as templates, rather than writing everything -from scratch. - -The preferred style for error format strings is one "clause" per line. -E.g. (from the `coffee` checker): - -```vim -let errorformat = - \ '%E%f:%l:%c: %trror: %m,' . - \ 'Syntax%trror: In %f\, %m on line %l,' . - \ '%EError: In %f\, Parse error on line %l: %m,' . - \ '%EError: In %f\, %m on line %l,' . - \ '%W%f(%l): lint warning: %m,' . - \ '%W%f(%l): warning: %m,' . - \ '%E%f(%l): SyntaxError: %m,' . - \ '%-Z%p^,' . - \ '%-G%.%#' -``` - -[bug_tracker]: https://github.com/vim-syntastic/syntastic/issues -[manual]: https://github.com/vim-syntastic/syntastic/blob/master/doc/syntastic.txt -[github]: https://github.com/vim-syntastic/syntastic -[branches]: https://github.com/dchelimsky/rspec/wiki/Topic-Branches#using-topic-branches-when-contributing-patches -[variables]: http://www.refactoring.com/catalog/extractVariable.html -[guide]: https://github.com/vim-syntastic/syntastic/wiki/Syntax-Checker-Guide diff --git a/sources_non_forked/syntastic/LICENCE b/sources_non_forked/syntastic/LICENCE deleted file mode 100644 index 8b1a9d81..00000000 --- a/sources_non_forked/syntastic/LICENCE +++ /dev/null @@ -1,13 +0,0 @@ - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - Version 2, December 2004 - -Copyright (C) 2004 Sam Hocevar - -Everyone is permitted to copy and distribute verbatim or modified -copies of this license document, and changing it is allowed as long -as the name is changed. - - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/sources_non_forked/syntastic/README.markdown b/sources_non_forked/syntastic/README.markdown deleted file mode 100644 index 346123ee..00000000 --- a/sources_non_forked/syntastic/README.markdown +++ /dev/null @@ -1,545 +0,0 @@ - , - / \,,_ .'| - ,{{| /}}}}/_.' _____________________________________________ - }}}}` '{{' '. / \ - {{{{{ _ ;, \ / Ladies and Gentlemen, \ - ,}}}}}} /o`\ ` ;) | | - {{{{{{ / ( | this is ... | - }}}}}} | \ | | - {{{{{{{{ \ \ | | - }}}}}}}}} '.__ _ | | _____ __ __ _ | - {{{{{{{{ /`._ (_\ / | / ___/__ ______ / /_____ ______/ /_(_)____ | - }}}}}}' | //___/ --=: \__ \/ / / / __ \/ __/ __ `/ ___/ __/ / ___/ | - jgs `{{{{` | '--' | ___/ / /_/ / / / / /_/ /_/ (__ ) /_/ / /__ | - }}}` | /____/\__, /_/ /_/\__/\__,_/____/\__/_/\___/ | - | /____/ | - | / - \_____________________________________________/ - - -- - - -1. [Introduction](#introduction) -2. [Installation](#installation) -2.1. [Requirements](#requirements) -2.2. [Installing syntastic with Pathogen](#installpathogen) -3. [Recommended settings](#settings) -4. [FAQ](#faq) -4.1. [I installed syntastic but it isn't reporting any errors...](#faqinfo) -4.2. [Syntastic supports several checkers for my filetype, how do I tell it which one(s) to use?](#faqcheckers) -4.3. [How can I run checkers for "foreign" filetypes against the current file?](#faqforeign) -4.4. [I have enabled multiple checkers for the current filetype. How can I display all errors from all checkers together?](#faqaggregate) -4.5. [How can I pass additional arguments to a checker?](#faqargs) -4.6. [I run a checker and the location list is not updated...](#faqloclist) -4.6. [I run`:lopen` or `:lwindow` and the error window is empty...](#faqloclist) -4.7. [How can I jump between the different errors without using the location list at the bottom of the window?](#faqlnext) -4.8. [The error window is closed automatically when I `:quit` the current buffer but not when I `:bdelete` it?](#faqbdelete) -4.9. [My favourite checker needs to load a configuration file from the project's root rather than the current directory...](#faqconfig) -4.10. [What is the difference between syntax checkers and style checkers?](#faqstyle) -4.11. [How can I check scripts written for different versions of Python?](#faqpython) -4.12. [How can I check scripts written for different versions of Ruby?](#faqruby) -4.13. [The `perl` checker has stopped working...](#faqperl) -4.14. [What happened to the `rustc` checker?](#faqrust) -4.15. [What happened to the `tsc` checker?](#faqtsc) -4.16. [What happened to the `xcrun` checker?](#faqxcrun) -5. [Resources](#otherresources) - -- - - - - - -## 1\. Introduction - -Syntastic is a syntax checking plugin for [Vim][vim] created by -[Martin Grenfell][scrooloose]. It runs files through external syntax checkers -and displays any resulting errors to the user. This can be done on demand, or -automatically as files are saved. If syntax errors are detected, the user is -notified and is happy because they didn't have to compile their code or execute -their script to find them. - -At the time of this writing, syntastic has checking plugins for ACPI -Source Language, ActionScript, Ada, Ansible configurations, API Blueprint, -AppleScript, AsciiDoc, Assembly languages, BEMHTML, Bro, Bourne shell, C, C++, -C#, Cabal, Chef, CMake, CoffeeScript, Coco, Coq, CSS, Cucumber, CUDA, D, Dart, -DocBook, Dockerfile, Dust, Elixir, Erlang, eRuby, Fortran, Gentoo metadata, -GLSL, Go, Haml, Haskell, Haxe, Handlebars, HSS, HTML, Java, JavaScript, JSON, -JSX, Julia, LESS, Lex, Limbo, LISP, LLVM intermediate language, Lua, Markdown, -MATLAB, Mercury, NASM, Nix, Objective-C, Objective-C++, OCaml, Perl, Perl -6, Perl POD, PHP, gettext Portable Object, OS X and iOS property lists, Pug -(formerly Jade), Puppet, Python, QML, R, Racket, RDF TriG, RDF Turtle, Relax -NG, reStructuredText, RPM spec, Ruby, SASS/SCSS, Scala, Slim, SML, Solidity, -Sphinx, SQL, Stylus, Tcl, TeX, Texinfo, Twig, TypeScript, Vala, Verilog, VHDL, -Vim help, VimL, Vue.js, xHtml, XML, XSLT, XQuery, YACC, YAML, YANG data models, -z80, Zope page templates, and Zsh. See the [manual][checkers] for details about -the corresponding supported checkers (`:help syntastic-checkers` in Vim). - -A number of third-party Vim plugins also provide checkers for syntastic, for -example: [merlin][merlin], [omnisharp-vim][omnisharp], [rust.vim][rust], -[syntastic-extras][myint], [syntastic-more][roktas], [tsuquyomi][tsuquyomi], -[vim-crystal][crystal], [vim-eastwood][eastwood], and [vim-swift][swift]. - -Below is a screenshot showing the methods that Syntastic uses to display syntax -errors. Note that, in practise, you will only have a subset of these methods -enabled. - -![Screenshot 1][screenshot] - -1. Errors are loaded into the location list for the corresponding window. -2. When the cursor is on a line containing an error, the error message is echoed in the command window. -3. Signs are placed beside lines with errors - note that warnings are displayed in a different color. -4. There is a configurable statusline flag you can include in your statusline config. -5. Hover the mouse over a line containing an error and the error message is displayed as a balloon. -6. (not shown) Highlighting errors with syntax highlighting. Erroneous parts of lines can be highlighted. - - - -## 2\. Installation - - - -### 2.1\. Requirements - -Syntastic itself has rather relaxed requirements: it doesn't have any external -dependencies, and it needs a version of [Vim][vim] compiled with a few common -features: `autocmd`, `eval`, `file_in_path`, `modify_fname`, `quickfix`, -`reltime`, `statusline`, and `user_commands`. Not all possible combinations of -features that include the ones above make equal sense on all operating systems, -but Vim version 7 or later with the "normal", "big", or "huge" feature sets -should be fine. - -Syntastic should work with any modern plugin managers for Vim, such as -[NeoBundle][neobundle], [Pathogen][pathogen], [Vim-Addon-Manager][vam], -[Vim-Plug][plug], or [Vundle][vundle]. Instructions for installing syntastic -with [Pathogen][pathogen] are included below for completeness. - -Starting with Vim version 7.4.1486 you can also load syntastic using the -standard mechanism of packages, without the help of third-party plugin managers -(see `:help packages` in Vim for details). Beware however that, while support -for packages has been added in Vim 7.4.1384, the functionality needed by -syntastic is present only in versions 7.4.1486 and later. - -Last but not least: syntastic doesn't know how to do any syntax checks by -itself. In order to get meaningful results you need to install external -checkers corresponding to the types of files you use. Please consult the -[manual][checkers] (`:help syntastic-checkers` in Vim) for a list of supported -checkers. - - - -### 2.2\. Installing syntastic with Pathogen - -If you already have [Pathogen][pathogen] working then skip [Step 1](#step1) and go to -[Step 2](#step2). - - - -#### 2.2.1\. Step 1: Install pathogen.vim - -First I'll show you how to install Tim Pope's [Pathogen][pathogen] so that it's easy to -install syntastic. Do this in your terminal so that you get the `pathogen.vim` -file and the directories it needs: -```sh -mkdir -p ~/.vim/autoload ~/.vim/bundle && \ -curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim -``` -Next you *need* to add this to your `~/.vimrc`: -```vim -execute pathogen#infect() -``` - - - -#### 2.2.2\. Step 2: Install syntastic as a Pathogen bundle - -You now have pathogen installed and can put syntastic into `~/.vim/bundle` like -this: -```sh -cd ~/.vim/bundle && \ -git clone --depth=1 https://github.com/vim-syntastic/syntastic.git -``` -Quit vim and start it back up to reload it, then type: -```vim -:Helptags -``` -If you get an error when you do this, then you probably didn't install -[Pathogen][pathogen] right. Go back to [Step 1](#step1) and make sure you did the -following: - -1. Created both the `~/.vim/autoload` and `~/.vim/bundle` directories. -2. Added the `execute pathogen#infect()` line to your `~/.vimrc` file -3. Did the `git clone` of syntastic inside `~/.vim/bundle` -4. Have permissions to access all of these directories. - - - -## 3\. Recommended settings - -Syntastic has numerous options that can be configured, and the defaults -are not particularly well suitable for new users. It is recommended -that you start by adding the following lines to your `vimrc` file, and -return to them after reading the manual (see `:help syntastic` in Vim): -```vim -set statusline+=%#warningmsg# -set statusline+=%{SyntasticStatuslineFlag()} -set statusline+=%* - -let g:syntastic_always_populate_loc_list = 1 -let g:syntastic_auto_loc_list = 1 -let g:syntastic_check_on_open = 1 -let g:syntastic_check_on_wq = 0 -``` - - - -## 4\. FAQ - - - -__4.1. Q. I installed syntastic but it isn't reporting any errors...__ - -A. The most likely reason is that none of the syntax checkers that it requires -are installed. For example: by default, python requires either `flake8` or -`pylint` to be installed and in your `$PATH`. Read the [manual][checkers] -(`:help syntastic-checkers` in Vim) to find out what executables are -supported. Note that aliases do not work; the actual executables must be -available in your `$PATH`. Symbolic links are okay though. You can see -syntastic's idea of available checkers by running `:SyntasticInfo`. - -A second probable reason is that none of the available checkers are -enabled. Syntastic comes preconfigured with a default list of enabled checkers -per filetype, but this list is kept short in order to prevent slowing down Vim -or trying to run conflicting checks. The command `:SyntasticInfo` will show you -which checkers are enabled. You can tell syntastic which checkers (among the -available ones) you want to run by setting `g:syntastic__checkers` in -your `vimrc` (see [below](#faqcheckers)). - -A third possible reason is that the `$PATH` seen by syntastic might not be same -as the `$PATH` in your login shell. Syntastic runs checkers using the shell -pointed to by Vim's `shell` (or by `g:syntastic_shell`, if set), and that's the -shell you need to configure to set the proper `$PATH` and environment variables -for your checkers. You can see syntastic's idea of `$PATH` by running -```vim -:echo syntastic#util#system('echo "$PATH"') -``` -on UNIX and Mac OS-X systems, or -```vim -:echo syntastic#util#system('echo %PATH%') -``` -on Windows. - -Finally, another reason it could fail is that either the command line options -or the error output for a syntax checker may have changed. In this case, make -sure you have the latest version of the syntax checker installed. If it still -fails then post an [issue][bug_tracker] - or better yet, create a pull request. - - - -__4.2. Q. Syntastic supports several checkers for my filetype, how do I tell it -which one(s) to use?__ - -A. Add a line like this to your `vimrc`: -```vim -let g:syntastic__checkers = [''] -``` - -To see the list of supported checkers for your filetype read the -[manual][checkers] (`:help syntastic-checkers` in Vim). - -For example, Python has the following checkers, among others: `flake8`, -`pyflakes`, `pylint` and a native `python` checker. To tell syntastic to use -`pylint`, you would use this setting: -```vim -let g:syntastic_python_checkers = ['pylint'] -``` - -Checkers can be chained together like this: -```vim -let g:syntastic_php_checkers = ['php', 'phpcs', 'phpmd'] -``` - -This is telling syntastic to run the `php` checker first, and if no errors are -found, run `phpcs`, and then `phpmd`. - -You can also run checkers explicitly by calling `:SyntasticCheck `. -For example to run `phpcs` and `phpmd`: -```vim -:SyntasticCheck phpcs phpmd -``` - -This works for any checkers available for the current filetype, even if they -aren't listed in `g:syntastic__checkers`. - - - -__4.3. Q. How can I run checkers for "foreign" filetypes against the current -file?__ - -A. You need to qualify the name of the "foreign" checker with the name -of its filetype. For example to check `tex` files with the checker -`language_check` (which normally acts only on files of type `text`), you can -add `text/language_check` to the list fo checkers for `tex`: -```vim -let g:syntastic_tex_checkers = ['lacheck', 'text/language_check'] -``` - -This also works with `:SyntasticCheck`, e.g. the following command runs -`text/language_check` against the current file regardless of the current -filetype: -```vim -:SyntasticCheck text/language_check -``` - -Of course, the checkers specified this way need to be known to syntastic, and -they need to be shown as available when you run `:SyntasticInfo`. You can't -just make up a combination of a filetype and a program name and expect it to -work as a checker. - - - -__4.4. Q. I have enabled multiple checkers for the current filetype. How can I -display all errors from all checkers together?__ - -A. Set `g:syntastic_aggregate_errors` to 1 in your `vimrc`: -```vim -let g:syntastic_aggregate_errors = 1 -``` - -See `:help syntastic-aggregating-errors` for more details. - - - -__4.5. Q. How can I pass additional arguments to a checker?__ - -A. In most cases a command line is constructed using an internal function -named `makeprgBuild()`, which provides a number of options that allow you to -customise every part of the command that gets run. You can set these options -using global variables. - -The general form of the global `args` variable is -`syntastic___args`. Thus if you wanted to pass -`--my --args --here` to the Ruby `mri` checker you would add this line to your -`vimrc`: -```vim -let g:syntastic_ruby_mri_args = "--my --args --here" -``` - -See `:help syntastic-checker-options` for more information. - -A number of checkers don't use the `makeprgBuild()` function mentioned above, -or have additional options that can be configured. For these checkers the exact -list of options should be included in the [manual][checkers] -(`:help syntastic-checkers` in Vim). - - - -__4.6. Q. I run a checker and the location list is not updated...__ -__4.6. Q. I run`:lopen` or `:lwindow` and the error window is empty...__ - -A. By default the location list is changed only when you run the `:Errors` -command, in order to minimise conflicts with other plugins. If you want the -location list to always be updated when you run the checkers, add this line to -your `vimrc`: -```vim -let g:syntastic_always_populate_loc_list = 1 -``` - - - -__4.7. Q. How can I jump between the different errors without using the location -list at the bottom of the window?__ - -A. Vim provides several built-in commands for this. See `:help :lnext` and -`:help :lprevious`. - -If you use these commands a lot then you may want to add shortcut mappings to -your `vimrc`, or install something like [unimpaired][unimpaired], which provides such -mappings (among other things). - - - -__4.8. Q. The error window is closed automatically when I `:quit` the current buffer -but not when I `:bdelete` it?__ - -A. There is no safe way to handle that situation automatically, but you can -work around it: -```vim -nnoremap :lclose:bdelete -cabbrev bd =(getcmdtype()==#':' && getcmdpos()==1 ? 'lclose\|bdelete' : 'bd') -``` - - - -__4.9. My favourite checker needs to load a configuration file from the -project's root rather than the current directory...__ - -A. You can set up an `autocmd` to search for the configuration file in the -current directory and upwards, and add it to the checker's options when found. -For example for `jscs`: - -```vim -function! FindConfig(prefix, what, where) - let cfg = findfile(a:what, escape(a:where, ' ') . ';') - return cfg !=# '' ? ' ' . a:prefix . ' ' . shellescape(cfg) : '' -endfunction - -autocmd FileType javascript let b:syntastic_javascript_jscs_args = - \ get(g:, 'syntastic_javascript_jscs_args', '') . - \ FindConfig('-c', '.jscsrc', expand(':p:h', 1)) -``` - - - -__4.10. Q. What is the difference between syntax checkers and style checkers?__ - -A. The errors and warnings they produce are highlighted differently and can -be filtered by different rules, but otherwise the distinction is pretty much -arbitrary. There is an ongoing effort to keep things consistent, so you can -_generally_ expect messages produced by syntax checkers to be _mostly_ related -to syntax, and messages produced by style checkers to be _mostly_ about style. -But there can be no formal guarantee that, say, a style checker that runs into -a syntax error wouldn't die with a fatal message, nor that a syntax checker -wouldn't give you warnings against using some constructs as being bad practice. -There is also no guarantee that messages marked as `style` are less severe than -the ones marked as `syntax` (whatever that might mean). And there are even a -few Frankenstein checkers (for example `flake8` and `pylama`) that, by their -nature, produce both kinds of messages. Syntastic is not smart enough to be -able to sort out these things by itself. - -Generally it's more useful to look at this from the perspective of filtering -unwanted messages, rather than as an indicator of severity levels. The -distinction between syntax and style is orthogonal to the distinction between -errors and warnings, and thus you can turn off messages based on level, on -type, or both. - -e.g. To disable all style messages: -```vim -let g:syntastic_quiet_messages = { "type": "style" } -``` -See `:help syntastic_quiet_messages` for more information. - - - -__4.11. Q. How can I check scripts written for different versions of Python?__ - -A. Install a Python version manager such as [virtualenv][virtualenv] -or [pyenv][pyenv], activate the environment for the relevant version -of Python, and install in it the checkers you want to use. Set -`g:syntastic_python_checkers` accordingly in your `vimrc`, and run [Vim][vim] -from the virtual environment. - -If you're starting Vim from a desktop manager rather than from a terminal you -might need to write wrapper scripts around your checkers, to activate the -virtual environment before running the actual checks. Then you'll need to -point the relevant `g:syntastic_python__exec` variables to the wrapper -scripts. - - - -__4.12. Q. How can I check scripts written for different versions of Ruby?__ - -A. Install a Ruby version manager such as [rvm][rvm] or [rbenv][rbenv], -activate the relevant version of Ruby, and install in it the checkers you want -to use. Set `g:syntastic_ruby_checkers` accordingly in your `vimrc`, and run -[Vim][vim] under the relevant Ruby version. - -If you're starting Vim from a desktop manager rather than from a terminal -and depending on the version manager you use you might need to write wrapper -scripts around your checkers, to activate the relevant version of Ruby -before running the actual checks. Then you'll need to point the relevant -`g:syntastic_ruby__exec` variables to the wrapper scripts. - - - -__4.13. Q. The `perl` checker has stopped working...__ - -A. The `perl` checker runs `perl -c` against your file, which in turn -__executes__ any `BEGIN`, `UNITCHECK`, and `CHECK` blocks, and any `use` -statements in your file (cf. [perlrun][perlrun]). This is probably fine if you -wrote the file yourself, but it's a security problem if you're checking -third-party files. Since there is currently no way to disable this behaviour -while still producing useful results, the checker is now disabled by default. -To (re-)enable it, make sure the `g:syntastic_perl_checkers` list includes -`perl`, and set `g:syntastic_enable_perl_checker` to 1 in your `vimrc`: -```vim -let g:syntastic_enable_perl_checker = 1 -``` - - - -__4.14. Q. What happened to the `rustc` checker?__ - -A. It is now part of the [rust.vim][rust] plugin. If you install this plugin the -checker should be picked up automatically by syntastic. - - - -__4.15. Q. What happened to the `tsc` checker?__ - -A. It didn't meet people's expectations and it has been removed. The plugin -[tsuquyomi][tsuquyomi] comes packaged with a checker for TypeScript. If you -install this plugin the checker should be picked up automatically by syntastic. - - - -__4.16. Q. What happened to the `xcrun` checker?__ - -A. The `xcrun` checker used to have a security problem and it has been removed. -A better checker for __Swift__ is part of the [vim-swift][swift] plugin. If you -install this plugin the checker should be picked up automatically by syntastic. - - - -## 5\. Resources - -The preferred place for posting suggestions, reporting bugs, and general -discussions related to syntastic is the [issue tracker at GitHub][bug_tracker]. -A guide for writing syntax checkers can be found in the [wiki][guide]. -There are also a dedicated [google group][google_group], and a -[syntastic tag at StackOverflow][stack_overflow]. - -Syntastic aims to provide a common interface to syntax checkers for as many -languages as possible. For particular languages, there are, of course, other -plugins that provide more functionality than syntastic. You might want to take -a look at [ghcmod-vim][ghcmod], [jedi-vim][jedi], [python-mode][python_mode], [vim-go][vimgo], or -[YouCompleteMe][ycm]. - -[scrooloose]: https://github.com/scrooloose -[screenshot]: https://github.com/vim-syntastic/syntastic/raw/master/_assets/screenshot_1.png - -[bug_tracker]: https://github.com/vim-syntastic/syntastic/issues -[checkers]: https://github.com/vim-syntastic/syntastic/blob/master/doc/syntastic-checkers.txt -[crystal]: https://github.com/rhysd/vim-crystal -[eastwood]: https://github.com/venantius/vim-eastwood -[ghcmod]: https://github.com/eagletmt/ghcmod-vim -[google_group]: https://groups.google.com/group/vim-syntastic -[guide]: https://github.com/vim-syntastic/syntastic/wiki/Syntax-Checker-Guide -[jedi]: https://github.com/davidhalter/jedi-vim -[merlin]: https://github.com/the-lambda-church/merlin -[myint]: https://github.com/myint/syntastic-extras -[neobundle]: https://github.com/Shougo/neobundle.vim -[omnisharp]: https://github.com/OmniSharp/omnisharp-vim -[pathogen]: https://github.com/tpope/vim-pathogen -[perlrun]: http://perldoc.perl.org/perlrun.html#*-c* -[plug]: https://github.com/junegunn/vim-plug/ -[pyenv]: https://github.com/yyuu/pyenv -[python_mode]: https://github.com/klen/python-mode -[rbenv]: https://github.com/rbenv/rbenv -[roktas]: https://github.com/roktas/syntastic-more -[rust]: https://github.com/rust-lang/rust.vim -[rvm]: https://rvm.io/ -[stack_overflow]: http://stackoverflow.com/questions/tagged/syntastic -[swift]: https://github.com/kballard/vim-swift -[tsuquyomi]: https://github.com/Quramy/tsuquyomi/ -[unimpaired]: https://github.com/tpope/vim-unimpaired -[vam]: https://github.com/MarcWeber/vim-addon-manager -[vim]: http://www.vim.org/ -[vimgo]: https://github.com/fatih/vim-go -[virtualenv]: https://virtualenv.pypa.io/en/stable/ -[vnu]: http://about.validator.nu/ -[vnu_jar]: https://github.com/validator/validator/releases/latest -[vnu_server]: http://validator.github.io/validator/#standalone -[vundle]: https://github.com/gmarik/Vundle.vim -[ycm]: http://valloric.github.io/YouCompleteMe/ - - diff --git a/sources_non_forked/syntastic/_assets/screenshot_1.png b/sources_non_forked/syntastic/_assets/screenshot_1.png deleted file mode 100644 index c1b69f4ba26a2092aa4e9d42d2fa3ee08c6ab28a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92425 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', 's:_checkPhp', []) - call s:_registerHandler('\m\', 's:_checkPython', []) - call s:_registerHandler('\m\' - echohl ErrorMsg - echomsg 'syntastic: error: ' . a:msg - echohl None -endfunction " }}}2 - -function! syntastic#log#oneTimeWarn(msg) abort " {{{2 - if index(s:one_time_notices_issued, a:msg) >= 0 - return - endif - - call add(s:one_time_notices_issued, a:msg) - call syntastic#log#warn(a:msg) -endfunction " }}}2 - -" @vimlint(EVL102, 1, l:OLD_VAR) -function! syntastic#log#deprecationWarn(old, new, ...) abort " {{{2 - if exists('g:syntastic_' . a:old) && !exists('g:syntastic_' . a:new) - let msg = 'variable g:syntastic_' . a:old . ' is deprecated, please use ' - - if a:0 - let OLD_VAR = g:syntastic_{a:old} - try - let NEW_VAR = eval(a:1) - let msg .= 'in its stead: let g:syntastic_' . a:new . ' = ' . string(NEW_VAR) - let g:syntastic_{a:new} = NEW_VAR - catch - let msg .= 'g:syntastic_' . a:new . ' instead' - endtry - else - let msg .= 'g:syntastic_' . a:new . ' instead' - let g:syntastic_{a:new} = g:syntastic_{a:old} - endif - - call syntastic#log#oneTimeWarn(msg) - endif -endfunction " }}}2 -" @vimlint(EVL102, 0, l:OLD_VAR) - -function! syntastic#log#debug(level, msg, ...) abort " {{{2 - if !s:_isDebugEnabled(a:level) - return - endif - - let leader = s:_log_timestamp() - call s:_logRedirect(1) - - if a:0 - " filter out dictionary functions - echomsg leader . a:msg . ' ' . - \ strtrans(string(type(a:1) == type({}) || type(a:1) == type([]) ? - \ filter(copy(a:1), 'type(v:val) != type(function("tr"))') : a:1)) - else - echomsg leader . a:msg - endif - - call s:_logRedirect(0) -endfunction " }}}2 - -function! syntastic#log#debugShowOptions(level, names) abort " {{{2 - if !s:_isDebugEnabled(a:level) - return - endif - - let leader = s:_log_timestamp() - call s:_logRedirect(1) - - let vlist = copy(type(a:names) == type('') ? [a:names] : a:names) - let add_shell = index(vlist, 'shell') >= 0 && &shell !=# syntastic#util#var('shell') - if !empty(vlist) - call map(vlist, "'&' . v:val . ' = ' . strtrans(string(eval('&' . v:val))) . (s:_is_modified(v:val) ? ' (!)' : '')") - if add_shell - call add(vlist, 'u:shell = ' . strtrans(string(syntastic#util#var('shell'))) . ' (!)') - endif - echomsg leader . join(vlist, ', ') - endif - call s:_logRedirect(0) -endfunction " }}}2 - -function! syntastic#log#debugShowVariables(level, names) abort " {{{2 - if !s:_isDebugEnabled(a:level) - return - endif - - let leader = s:_log_timestamp() - call s:_logRedirect(1) - - let vlist = type(a:names) == type('') ? [a:names] : a:names - for name in vlist - let msg = s:_format_variable(name) - if msg !=# '' - echomsg leader . msg - endif - endfor - - call s:_logRedirect(0) -endfunction " }}}2 - -function! syntastic#log#debugDump(level) abort " {{{2 - if !s:_isDebugEnabled(a:level) - return - endif - - call syntastic#log#debugShowVariables( a:level, sort(keys(g:_SYNTASTIC_DEFAULTS)) ) -endfunction " }}}2 - -function! syntastic#log#ndebug(level, title, messages) abort " {{{2 - if s:_isDebugEnabled(a:level) - return - endif - - call syntastic#log#error(a:title) - if type(a:messages) == type([]) - for msg in a:messages - echomsg msg - endfor - else - echomsg a:messages - endif -endfunction " }}}2 - -" }}}1 - -" Private functions {{{1 - -function! s:_isDebugEnabled_smart(level) abort " {{{2 - return and(g:syntastic_debug, a:level) -endfunction " }}}2 - -function! s:_isDebugEnabled_dumb(level) abort " {{{2 - " poor man's bit test for bit N, assuming a:level == 2**N - return (g:syntastic_debug / a:level) % 2 -endfunction " }}}2 - -let s:_isDebugEnabled = function(exists('*and') ? 's:_isDebugEnabled_smart' : 's:_isDebugEnabled_dumb') -lockvar s:_isDebugEnabled - -function! s:_logRedirect(on) abort " {{{2 - if exists('g:syntastic_debug_file') - if a:on - try - execute 'redir >> ' . fnameescape(expand(g:syntastic_debug_file, 1)) - catch /\m^Vim\%((\a\+)\)\=:/ - silent! redir END - unlet g:syntastic_debug_file - endtry - else - silent! redir END - endif - endif -endfunction " }}}2 - -" }}}1 - -" Utilities {{{1 - -function! s:_log_timestamp_smart() abort " {{{2 - return printf('syntastic: %f: ', reltimefloat(reltime(g:_SYNTASTIC_START))) -endfunction " }}}2 - -function! s:_log_timestamp_dumb() abort " {{{2 - return 'syntastic: ' . split(reltimestr(reltime(g:_SYNTASTIC_START)))[0] . ': ' -endfunction " }}}2 - -let s:_log_timestamp = function(has('float') && exists('*reltimefloat') ? 's:_log_timestamp_smart' : 's:_log_timestamp_dumb') -lockvar s:_log_timestamp - -function! s:_format_variable(name) abort " {{{2 - let vals = [] - if exists('g:syntastic_' . a:name) - call add(vals, 'g:syntastic_' . a:name . ' = ' . strtrans(string(g:syntastic_{a:name}))) - endif - if exists('b:syntastic_' . a:name) - call add(vals, 'b:syntastic_' . a:name . ' = ' . strtrans(string(b:syntastic_{a:name}))) - endif - - return join(vals, ', ') -endfunction " }}}2 - -function! s:_is_modified(name) abort " {{{2 - if !exists('s:option_defaults') - let s:option_defaults = {} - endif - if !has_key(s:option_defaults, a:name) - let opt_save = eval('&' . a:name) - execute 'set ' . a:name . '&' - let s:option_defaults[a:name] = eval('&' . a:name) - execute 'let &' . a:name . ' = ' . string(opt_save) - endif - - return s:option_defaults[a:name] !=# eval('&' . a:name) -endfunction " }}}2 - -" }}}1 - -let &cpo = s:save_cpo -unlet s:save_cpo - -" vim: set sw=4 sts=4 et fdm=marker: diff --git a/sources_non_forked/syntastic/autoload/syntastic/postprocess.vim b/sources_non_forked/syntastic/autoload/syntastic/postprocess.vim deleted file mode 100644 index c69f3978..00000000 --- a/sources_non_forked/syntastic/autoload/syntastic/postprocess.vim +++ /dev/null @@ -1,84 +0,0 @@ -if exists('g:loaded_syntastic_postprocess_autoload') || !exists('g:loaded_syntastic_plugin') - finish -endif -let g:loaded_syntastic_postprocess_autoload = 1 - -let s:save_cpo = &cpo -set cpo&vim - -" Public functions {{{1 - -" merge consecutive blanks -function! syntastic#postprocess#compressWhitespace(errors) abort " {{{2 - for e in a:errors - let e['text'] = substitute(e['text'], "\001", '', 'g') - let e['text'] = substitute(e['text'], '\n', ' ', 'g') - let e['text'] = substitute(e['text'], '\m\s\{2,}', ' ', 'g') - let e['text'] = substitute(e['text'], '\m^\s\+', '', '') - let e['text'] = substitute(e['text'], '\m\s\+$', '', '') - endfor - - return a:errors -endfunction " }}}2 - -" remove spurious CR under Cygwin -function! syntastic#postprocess#cygwinRemoveCR(errors) abort " {{{2 - if has('win32unix') - for e in a:errors - let e['text'] = substitute(e['text'], '\r', '', 'g') - endfor - endif - - return a:errors -endfunction " }}}2 - -" decode XML entities -function! syntastic#postprocess#decodeXMLEntities(errors) abort " {{{2 - for e in a:errors - let e['text'] = syntastic#util#decodeXMLEntities(e['text']) - endfor - - return a:errors -endfunction " }}}2 - -" filter out errors referencing other files -function! syntastic#postprocess#filterForeignErrors(errors) abort " {{{2 - return filter(copy(a:errors), 'get(v:val, "bufnr") == ' . bufnr('')) -endfunction " }}}2 - -" make sure line numbers are not past end of buffers -" XXX: this loads all referenced buffers in memory -function! syntastic#postprocess#guards(errors) abort " {{{2 - let buffers = syntastic#util#unique(map(filter(copy(a:errors), 'v:val["valid"]'), 'str2nr(v:val["bufnr"])')) - - let guards = {} - for b in buffers - let guards[b] = len(getbufline(b, 1, '$')) - endfor - - for e in a:errors - if e['valid'] && e['lnum'] > guards[e['bufnr']] - let e['lnum'] = guards[e['bufnr']] - endif - endfor - - return a:errors -endfunction " }}}2 - -" convert error messages from UTF-8 to the current encoding -function! syntastic#postprocess#iconv(errors) abort " {{{2 - if has('iconv') && &encoding !=# '' && &encoding !=# 'utf-8' - for e in a:errors - let e['text'] = iconv(e['text'], "utf-8", &encoding) - endfor - endif - - return a:errors -endfunction " }}}2 - -" }}}1 - -let &cpo = s:save_cpo -unlet s:save_cpo - -" vim: set sw=4 sts=4 et fdm=marker: diff --git a/sources_non_forked/syntastic/autoload/syntastic/preprocess.vim b/sources_non_forked/syntastic/autoload/syntastic/preprocess.vim deleted file mode 100644 index 79e4face..00000000 --- a/sources_non_forked/syntastic/autoload/syntastic/preprocess.vim +++ /dev/null @@ -1,718 +0,0 @@ -if exists('g:loaded_syntastic_preprocess_autoload') || !exists('g:loaded_syntastic_plugin') - finish -endif -let g:loaded_syntastic_preprocess_autoload = 1 - -let s:save_cpo = &cpo -set cpo&vim - -" Public functions {{{1 - -function! syntastic#preprocess#bandit(errors) abort " {{{2 - let out = [] - let json = s:_decode_JSON(join(a:errors, '')) - - if type(json) == type({}) && has_key(json, 'results') && type(json['results']) == type([]) - for issue in json['results'] - if type(issue) == type({}) - try - call add(out, - \ issue['filename'] . ':' . - \ issue['line_number'] . ':' . - \ { 'LOW': 'I', 'MEDIUM': 'W', 'HIGH': 'E' }[issue['issue_severity']] . ':' . - \ issue['test_id'][1:] . ':' . - \ issue['issue_text'] . - \ ' [' . issue['test_name'] . '] (confidence: ' . issue['issue_confidence'] . ')') - catch /\m^Vim\%((\a\+)\)\=:E716/ - call syntastic#log#warn('checker python/bandit: unrecognized error item ' . string(issue)) - let out = [] - break - endtry - else - call syntastic#log#warn('checker python/bandit: unrecognized error item ' . string(issue)) - endif - endfor - else - call syntastic#log#warn('checker python/bandit: unrecognized error format (crashed checker?)') - endif - - return out -endfunction " }}}2 - -function! syntastic#preprocess#cabal(errors) abort " {{{2 - let out = [] - let star = 0 - for err in a:errors - if star - if err ==# '' - let star = 0 - else - let out[-1] .= ' ' . err - endif - else - call add(out, err) - if err =~# '\m^*\s' - let star = 1 - endif - endif - endfor - return out -endfunction " }}}2 - -function! syntastic#preprocess#checkstyle(errors) abort " {{{2 - let out = [] - let fname = expand('%', 1) - for err in a:errors - if match(err, '\m') > -1 - let line = str2nr(matchstr(err, '\m\ \[[^]]+\])+\ze:'', "", "")') -endfunction " }}}2 - -function! syntastic#preprocess#dockerfile_lint(errors) abort " {{{2 - let out = [] - let json = s:_decode_JSON(join(a:errors, '')) - - if type(json) == type({}) - try - let data = json['error']['data'] + json['warn']['data'] + json['info']['data'] - for e in data - let type = toupper(e['level'][0]) - if type ==# 'I' - let type = 'W' - let style = 1 - else - let style = 0 - endif - - let line = get(e, 'line', 1) - let message = e['message'] - if has_key(e, 'description') && e['description'] !=# 'None' - let message = message . '. ' . e['description'] - endif - - let msg = - \ type . ':' . - \ style . ':' . - \ line . ':' . - \ message - call add(out, msg) - endfor - catch /\m^Vim\%((\a\+)\)\=:E716/ - call syntastic#log#warn('checker dockerfile/dockerfile_lint: unrecognized error format (crashed checker?)') - let out = [] - endtry - else - call syntastic#log#warn('checker dockerfile/dockerfile_lint: unrecognized error format (crashed checker?)') - endif - return out -endfunction " }}}2 - -function! syntastic#preprocess#dscanner(errors) abort " {{{2 - let idx = 0 - while idx < len(a:errors) && a:errors[idx][0] !=# '{' - let idx += 1 - endwhile - let errs = s:_decode_JSON(join(a:errors[idx :], '')) - - let out = [] - if type(errs) == type({}) && has_key(errs, 'issues') && type(errs['issues']) == type([]) - for issue in errs['issues'] - try - call add(out, - \ issue['fileName'] . ':' . - \ issue['line'] . ':' . - \ issue['column'] . ':' . - \ issue['message'] . ' [' . issue['key'] . ']') - catch /\m^Vim\%((\a\+)\)\=:E716/ - call syntastic#log#warn('checker d/dscanner: unrecognized error item ' . string(issue)) - let out = [] - break - endtry - endfor - else - call syntastic#log#warn('checker d/dscanner: unrecognized error format (crashed checker?)') - endif - - return out -endfunction " }}}2 - -function! syntastic#preprocess#flow(errors) abort " {{{2 - let idx = 0 - while idx < len(a:errors) && a:errors[idx][0] !=# '{' - let idx += 1 - endwhile - let errs = s:_decode_JSON(join(a:errors[idx :], '')) - - let out = [] - if type(errs) == type({}) && has_key(errs, 'errors') && type(errs['errors']) == type([]) - for e in errs['errors'] - if type(e) == type({}) && has_key(e, 'message') && type(e['message']) == type([]) && len(e['message']) - let m = e['message'][0] - let t = e['message'][1:] - - try - let msg = - \ m['path'] . ':' . - \ m['line'] . ':' . - \ m['start'] . ':' . - \ (m['line'] ==# m['endline'] && str2nr(m['end']) > 0 ? m['end'] . ':' : '') . - \ ' ' . m['descr'] - - if len(t) - let msg .= ' ' . join(map(t, - \ 'v:val["descr"] . " (" . v:val["path"] . ":" . v:val["line"] . ":" . v:val["start"] . ' . - \ '"," . (v:val["line"] !=# v:val["endline"] ? v:val["endline"] . ":" : "") . ' . - \ 'v:val["end"] . ")"')) - endif - - let msg = substitute(msg, '\r', '', 'g') - let msg = substitute(msg, '\n', ' ', 'g') - - call add(out, msg) - catch /\m^Vim\%((\a\+)\)\=:E716/ - call syntastic#log#warn('checker javascript/flow: unrecognized error format (crashed checker?)') - let out = [] - break - endtry - else - call syntastic#log#warn('checker javascript/flow: unrecognized error format (crashed checker?)') - let out = [] - break - endif - endfor - else - call syntastic#log#warn('checker javascript/flow: unrecognized error format (crashed checker?)') - endif - - return out -endfunction " }}}2 - -function! syntastic#preprocess#iconv(errors) abort " {{{2 - return - \ has('iconv') && &encoding !=# '' && &encoding !=# 'utf-8' ? - \ map(a:errors, 'iconv(v:val, "utf-8", &encoding)') : - \ a:errors -endfunction " }}}2 - -function! syntastic#preprocess#jscs(errors) abort " {{{2 - let errs = join(a:errors, '') - if errs ==# '' - return [] - endif - - let json = s:_decode_JSON(errs) - - let out = [] - if type(json) == type({}) - for fname in keys(json) - if type(json[fname]) == type([]) - for e in json[fname] - try - let e['message'] = substitute(e['message'], "\n", ' ', 'g') - cal add(out, fname . ':' . e['line'] . ':' . e['column'] . ':' . e['message']) - catch /\m^Vim\%((\a\+)\)\=:E716/ - call syntastic#log#warn('checker javascript/jscs: unrecognized error item ' . string(e)) - let out = [] - endtry - endfor - else - call syntastic#log#warn('checker javascript/jscs: unrecognized error format (crashed checker?)') - endif - endfor - else - call syntastic#log#warn('checker javascript/jscs: unrecognized error format (crashed checker?)') - endif - return out -endfunction " }}}2 - -function! syntastic#preprocess#killEmpty(errors) abort " {{{2 - return filter(copy(a:errors), 'v:val !=# ""') -endfunction " }}}2 - -function! syntastic#preprocess#perl(errors) abort " {{{2 - let out = [] - - for e in a:errors - let parts = matchlist(e, '\v^(.*)\sat\s(.{-})\sline\s(\d+)(.*)$') - if !empty(parts) - call add(out, parts[2] . ':' . parts[3] . ':' . parts[1] . parts[4]) - endif - endfor - - return syntastic#util#unique(out) -endfunction " }}}2 - -function! syntastic#preprocess#perl6(errors) abort " {{{2 - if a:errors[0] ==# 'Syntax OK' - return [] - endif - - let errs = s:_decode_JSON(join(a:errors, '')) - - let out = [] - if type(errs) == type({}) - try - for val in values(errs) - let line = get(val, 'line', 0) - let pos = get(val, 'pos', 0) - if pos && has('byte_offset') - let line_pos = byte2line(pos + 1) - let column = line_pos > 0 ? pos - line2byte(line_pos) + 2 : 0 - else - let column = 0 - endif - - call add(out, join([ - \ get(val, 'filename', ''), - \ line, - \ column, - \ get(val, 'message', '') ], ':')) - endfor - catch /\m^Vim\%((\a\+)\)\=:E716/ - call syntastic#log#warn('checker perl6/perl6: unrecognized error item ' . string(val)) - let out = [] - endtry - else - call syntastic#log#warn('checker perl6/perl6: unrecognized error format') - endif - - return out -endfunction " }}}2 - -function! syntastic#preprocess#prospector(errors) abort " {{{2 - let errs = join(a:errors, '') - if errs ==# '' - return [] - endif - - let json = s:_decode_JSON(errs) - - let out = [] - if type(json) == type({}) && has_key(json, 'messages') - if type(json['messages']) == type([]) - for e in json['messages'] - if type(e) == type({}) - try - if e['source'] ==# 'pylint' - let e['location']['character'] += 1 - endif - - let msg = - \ e['location']['path'] . ':' . - \ e['location']['line'] . ':' . - \ e['location']['character'] . ': ' . - \ e['code'] . ' ' . - \ e['message'] . ' ' . - \ '[' . e['source'] . ']' - - call add(out, msg) - catch /\m^Vim\%((\a\+)\)\=:E716/ - call syntastic#log#warn('checker python/prospector: unrecognized error item ' . string(e)) - let out = [] - break - endtry - else - call syntastic#log#warn('checker python/prospector: unrecognized error item ' . string(e)) - let out = [] - break - endif - endfor - else - call syntastic#log#warn('checker python/prospector: unrecognized error format (crashed checker?)') - endif - else - call syntastic#log#warn('checker python/prospector: unrecognized error format (crashed checker?)') - endif - - return out -endfunction " }}}2 - -function! syntastic#preprocess#rparse(errors) abort " {{{2 - let errlist = copy(a:errors) - - " remove uninteresting lines and handle continuations - let i = 0 - while i < len(errlist) - if i > 0 && errlist[i][:1] ==# ' ' && errlist[i] !~# '\m\s\+\^$' - let errlist[i-1] .= errlist[i][1:] - call remove(errlist, i) - elseif errlist[i] !~# '\m^\(Lint:\|Lint checking:\|Error in\) ' - call remove(errlist, i) - else - let i += 1 - endif - endwhile - - let out = [] - let fname = '' - for e in errlist - if match(e, '\m^Lint: ') == 0 - let parts = matchlist(e, '\m^Lint: \(.*\): found on lines \([0-9, ]\+\)\(+\(\d\+\) more\)\=') - if len(parts) >= 3 - for line in split(parts[2], '\m,\s*') - call add(out, 'E:' . fname . ':' . line . ': ' . parts[1]) - endfor - endif - if len(parts) >= 5 && parts[4] !=# '' - call add(out, 'E:' . fname . ':0: ' . parts[1] . ' - ' . parts[4] . ' messages not shown') - endif - elseif match(e, '\m^Lint checking: ') == 0 - let fname = matchstr(e, '\m^Lint checking: \zs.*') - elseif match(e, '\m^Error in ') == 0 - call add(out, substitute(e, '\m^Error in .\+ : .\+\ze:\d\+:\d\+: ', 'E:' . fname, '')) - endif - endfor - - return out -endfunction " }}}2 - -function! syntastic#preprocess#scss_lint(errors) abort " {{{2 - let errs = join(a:errors, '') - if errs ==# '' - return [] - endif - - let json = s:_decode_JSON(errs) - - let out = [] - if type(json) == type({}) - for fname in keys(json) - if type(json[fname]) == type([]) - for e in json[fname] - try - cal add(out, fname . ':' . - \ e['severity'][0] . ':' . - \ e['line'] . ':' . - \ e['column'] . ':' . - \ e['length'] . ':' . - \ ( has_key(e, 'linter') ? e['linter'] . ': ' : '' ) . - \ e['reason']) - catch /\m^Vim\%((\a\+)\)\=:E716/ - call syntastic#log#warn('checker scss/scss_lint: unrecognized error item ' . string(e)) - let out = [] - endtry - endfor - else - call syntastic#log#warn('checker scss/scss_lint: unrecognized error format (crashed checker?)') - endif - endfor - else - call syntastic#log#warn('checker scss/scss_lint: unrecognized error format (crashed checker?)') - endif - return out -endfunction " }}}2 - -function! syntastic#preprocess#stylelint(errors) abort " {{{2 - let out = [] - - " CssSyntaxError: /path/to/file.css:2:11: Missed semicolon - let parts = matchlist(a:errors[0], '\v^CssSyntaxError: (.{-1,}):(\d+):(\d+): (.+)') - if len(parts) > 4 - call add(out, 'E:' . join(parts[1:4], ':')) - else - let errs = s:_decode_JSON(join(a:errors, '')) - - let out = [] - if type(errs) == type([]) && len(errs) == 1 && type(errs[0]) == type({}) && - \ has_key(errs[0], 'source') && has_key(errs[0], 'warnings') && type(errs[0]['warnings']) == type([]) - - for e in errs[0]['warnings'] - try - let severity = type(e['severity']) == type(0) ? ['W', 'E'][e['severity']-1] : e['severity'][0] - let msg = - \ severity . ':' . - \ errs[0]['source'] . ':' . - \ e['line'] . ':' . - \ e['column'] . ':' . - \ e['text'] - call add(out, msg) - catch /\m^Vim\%((\a\+)\)\=:E716/ - call syntastic#log#warn('checker css/stylelint: unrecognized error item ' . string(e)) - let out = [] - break - endtry - endfor - else - call syntastic#log#warn('checker css/stylelint: unrecognized error format (crashed checker?)') - endif - endif - return out -endfunction " }}}2 - -function! syntastic#preprocess#tern_lint(errors) abort " {{{2 - let errs = join(a:errors, '') - let json = s:_decode_JSON(errs) - -echomsg string(json) - let out = [] - if type(json) == type({}) && has_key(json, 'messages') && type(json['messages']) == type([]) - for e in json['messages'] - try - let line_from = byte2line(e['from'] + 1) - if line_from > 0 - let line = line_from - let column = e['from'] - line2byte(line_from) + 2 - let line_to = byte2line(e['from'] + 1) - let hl = line_to == line ? e['to'] - line2byte(line_to) + 1 : 0 - else - let line = 0 - let column = 0 - let hl = 0 - endif - - if column < 0 - let column = 0 - endif - if hl < 0 - let hl = 0 - endif - - call add(out, - \ e['file'] . ':' . - \ e['severity'][0] . ':' . - \ line . ':' . - \ column . ':' . - \ hl . ':' . - \ e['message']) - catch /\m^Vim\%((\a\+)\)\=:E716/ - call syntastic#log#warn('checker javascript/tern_lint: unrecognized error item ' . string(e)) - let out = [] - endtry - endfor - else - call syntastic#log#warn('checker javascript/tern_lint: unrecognized error format (crashed checker?)') - endif - -echomsg string(out) - return out -endfunction " }}}2 - -function! syntastic#preprocess#tslint(errors) abort " {{{2 - return map(copy(a:errors), 'substitute(v:val, ''\v^((ERROR|WARNING): )?\zs(\([^)]+\))\s(.+)$'', ''\4 \3'', "")') -endfunction " }}}2 - -function! syntastic#preprocess#validator(errors) abort " {{{2 - let out = [] - for e in a:errors - let parts = matchlist(e, '\v^"([^"]+)"(.+)') - if len(parts) >= 3 - " URL decode, except leave alone any "+" - let parts[1] = substitute(parts[1], '\m%\(\x\x\)', '\=nr2char("0x".submatch(1))', 'g') - let parts[1] = substitute(parts[1], '\m\\"', '"', 'g') - let parts[1] = substitute(parts[1], '\m\\\\', '\\', 'g') - call add(out, '"' . parts[1] . '"' . parts[2]) - endif - endfor - return out -endfunction " }}}2 - -function! syntastic#preprocess#vint(errors) abort " {{{2 - let errs = s:_decode_JSON(join(a:errors, '')) - - let out = [] - if type(errs) == type([]) - for e in errs - if type(e) == type({}) - try - let msg = - \ e['file_path'] . ':' . - \ e['line_number'] . ':' . - \ e['column_number'] . ':' . - \ e['severity'][0] . ': ' . - \ e['description'] . ' (' . - \ e['policy_name'] . ')' - - call add(out, msg) - catch /\m^Vim\%((\a\+)\)\=:E716/ - call syntastic#log#warn('checker vim/vint: unrecognized error item ' . string(e)) - let out = [] - break - endtry - else - call syntastic#log#warn('checker vim/vint: unrecognized error item ' . string(e)) - let out = [] - break - endif - endfor - else - call syntastic#log#warn('checker vim/vint: unrecognized error format (crashed checker?)') - endif - - return out -endfunction " }}}2 - -" }}}1 - -" Workarounds {{{1 - -" In errorformat, \ or % following %f make it depend on isfname. The default -" setting of isfname is crafted to work with completion, rather than general -" filename matching. The result for syntastic is that filenames containing -" spaces (or a few other special characters) can't be matched. -" -" Fixing isfname to address this problem would depend on the set of legal -" characters for filenames on the filesystem the project's files lives on. -" Inferring the kind of filesystem a file lives on, in advance to parsing the -" file's name, is an interesting problem (think f.i. a file loaded from a VFAT -" partition, mounted on Linux). A problem syntastic is not prepared to solve. -" -" As a result, the functions below exist for the only reason to avoid using -" things like %f\, in errorformat. -" -" References: -" https://groups.google.com/forum/#!topic/vim_dev/pTKmZmouhio -" https://vimhelp.appspot.com/quickfix.txt.html#error-file-format - -function! syntastic#preprocess#basex(errors) abort " {{{2 - let out = [] - let idx = 0 - while idx < len(a:errors) - let parts = matchlist(a:errors[idx], '\v^\[\S+\] Stopped at (.+), (\d+)/(\d+):') - if len(parts) > 3 - let err = parts[1] . ':' . parts[2] . ':' . parts[3] . ':' - let parts = matchlist(a:errors[idx+1], '\v^\[(.)\D+(\d+)\] (.+)') - if len(parts) > 3 - let err .= (parts[1] ==? 'W' || parts[1] ==? 'E' ? parts[1] : 'E') . ':' . parts[2] . ':' . parts[3] - call add(out, err) - let idx +=1 - endif - elseif a:errors[idx] =~# '\m^\[' - " unparseable errors - call add(out, a:errors[idx]) - endif - let idx +=1 - endwhile - return out -endfunction " }}}2 - -function! syntastic#preprocess#bro(errors) abort " {{{2 - let out = [] - for e in a:errors - let parts = matchlist(e, '\v^%(fatal )?(error|warning) in (.{-1,}), line (\d+): (.+)') - if len(parts) > 4 - let parts[1] = parts[1][0] - call add(out, join(parts[1:4], ':')) - endif - endfor - return out -endfunction " }}}2 - -function! syntastic#preprocess#coffeelint(errors) abort " {{{2 - let out = [] - for e in a:errors - let parts = matchlist(e, '\v^(.{-1,}),(\d+)%(,\d*)?,(error|warn),(.+)') - if len(parts) > 4 - let parts[3] = parts[3][0] - call add(out, join(parts[1:4], ':')) - endif - endfor - return out -endfunction " }}}2 - -function! syntastic#preprocess#mypy(errors) abort " {{{2 - let out = [] - for e in a:errors - " new format - let parts = matchlist(e, '\v^(.{-1,}):(\d+): error: (.+)') - if len(parts) > 3 - call add(out, join(parts[1:3], ':')) - continue - endif - - " old format - let parts = matchlist(e, '\v^(.{-1,}), line (\d+): (.+)') - if len(parts) > 3 - call add(out, join(parts[1:3], ':')) - endif - endfor - return out -endfunction " }}}2 - -function! syntastic#preprocess#nix(errors) abort " {{{2 - let out = [] - for e in a:errors - let parts = matchlist(e, '\v^(.{-1,}), at (.{-1,}):(\d+):(\d+)$') - if len(parts) > 4 - call add(out, join(parts[2:4], ':') . ':' . parts[1]) - continue - endif - - let parts = matchlist(e, '\v^(.{-1,}) at (.{-1,}), line (\d+):') - if len(parts) > 3 - call add(out, parts[2] . ':' . parts[3] . ':' . parts[1]) - continue - endif - - let parts = matchlist(e, '\v^error: (.{-1,}), in (.{-1,})$') - if len(parts) > 2 - call add(out, parts[2] . ':' . parts[1]) - endif - endfor - return out -endfunction " }}}2 - -" }}}1 - -" Private functions {{{1 - -" @vimlint(EVL102, 1, l:true) -" @vimlint(EVL102, 1, l:false) -" @vimlint(EVL102, 1, l:null) -function! s:_decode_JSON(json) abort " {{{2 - if a:json ==# '' - return [] - endif - - " The following is inspired by https://github.com/MarcWeber/vim-addon-manager and - " http://stackoverflow.com/questions/17751186/iterating-over-a-string-in-vimscript-or-parse-a-json-file/19105763#19105763 - " A hat tip to Marc Weber for this trick - if substitute(a:json, '\v\"%(\\.|[^"\\])*\"|true|false|null|[+-]?\d+%(\.\d+%([Ee][+-]?\d+)?)?', '', 'g') !~# "[^,:{}[\\] \t]" - " JSON artifacts - let true = 1 - let false = 0 - let null = '' - - try - let object = eval(a:json) - catch - " malformed JSON - let object = '' - endtry - else - let object = '' - endif - - return object -endfunction " }}}2 -" @vimlint(EVL102, 0, l:true) -" @vimlint(EVL102, 0, l:false) -" @vimlint(EVL102, 0, l:null) - -" }}}1 - -let &cpo = s:save_cpo -unlet s:save_cpo - -" vim: set sw=4 sts=4 et fdm=marker: diff --git a/sources_non_forked/syntastic/autoload/syntastic/util.vim b/sources_non_forked/syntastic/autoload/syntastic/util.vim deleted file mode 100644 index 8a17fe64..00000000 --- a/sources_non_forked/syntastic/autoload/syntastic/util.vim +++ /dev/null @@ -1,635 +0,0 @@ -if exists('g:loaded_syntastic_util_autoload') || !exists('g:loaded_syntastic_plugin') - finish -endif -let g:loaded_syntastic_util_autoload = 1 - -let s:save_cpo = &cpo -set cpo&vim - -" Public functions {{{1 - -function! syntastic#util#isRunningWindows() abort " {{{2 - return has('win16') || has('win32') || has('win64') -endfunction " }}}2 - -function! syntastic#util#DevNull() abort " {{{2 - if syntastic#util#isRunningWindows() - return 'NUL' - endif - return '/dev/null' -endfunction " }}}2 - -" Get directory separator -function! syntastic#util#Slash() abort " {{{2 - return (!exists('+shellslash') || &shellslash) ? '/' : '\' -endfunction " }}}2 - -function! syntastic#util#CygwinPath(path) abort " {{{2 - return substitute(syntastic#util#system('cygpath -m ' . syntastic#util#shescape(a:path)), "\n", '', 'g') -endfunction " }}}2 - -function! syntastic#util#system(command) abort " {{{2 - let old_shell = &shell - let old_lc_messages = $LC_MESSAGES - let old_lc_all = $LC_ALL - - let &shell = syntastic#util#var('shell') - let $LC_MESSAGES = 'C' - let $LC_ALL = '' - - let crashed = 0 - let cmd_start = reltime() - try - let out = system(a:command) - catch - let crashed = 1 - call syntastic#log#error('exception running system(' . string(a:command) . '): ' . v:exception) - if syntastic#util#isRunningWindows() - call syntastic#log#debug(g:_SYNTASTIC_DEBUG_CHECKERS, '$TMP = ' . string($TMP) . ', $TEMP = ' . string($TEMP)) - else - call syntastic#log#debug(g:_SYNTASTIC_DEBUG_CHECKERS, '$TERM = ' . string($TERM)) - call syntastic#log#debug(g:_SYNTASTIC_DEBUG_CHECKERS, '$TMPDIR = ' . string($TMPDIR)) - endif - call syntastic#log#debug(g:_SYNTASTIC_DEBUG_TRACE, '$PATH = ' . string($PATH)) - call syntastic#log#debug(g:_SYNTASTIC_DEBUG_TRACE, 'getcwd() = ' . string(getcwd())) - call syntastic#log#debugShowOptions(g:_SYNTASTIC_DEBUG_TRACE, g:_SYNTASTIC_SHELL_OPTIONS) - let out = '' - endtry - let cmd_time = split(reltimestr(reltime(cmd_start)))[0] - - let $LC_ALL = old_lc_all - let $LC_MESSAGES = old_lc_messages - - let &shell = old_shell - - if !crashed && exists('g:_SYNTASTIC_DEBUG_TRACE') - call syntastic#log#debug(g:_SYNTASTIC_DEBUG_TRACE, 'system: command run in ' . cmd_time . 's') - endif - - return out -endfunction " }}}2 - -" Create a temporary directory -function! syntastic#util#tmpdir() abort " {{{2 - let tempdir = '' - - if (has('unix') || has('mac')) && executable('mktemp') && !has('win32unix') - " TODO: option "-t" to mktemp(1) is not portable - let tmp = $TMPDIR !=# '' ? $TMPDIR : $TMP !=# '' ? $TMP : '/tmp' - let out = split(syntastic#util#system('mktemp -q -d ' . tmp . '/vim-syntastic-' . s:_fuzz() . '-XXXXXXXX'), "\n") - if v:shell_error == 0 && len(out) == 1 - let tempdir = out[0] - endif - endif - - if tempdir ==# '' - if has('win32') || has('win64') - let tempdir = $TEMP . syntastic#util#Slash() . 'vim-syntastic-' . s:_fuzz() - elseif has('win32unix') - let tempdir = syntastic#util#CygwinPath('/tmp/vim-syntastic-' . s:_fuzz()) - elseif $TMPDIR !=# '' - let tempdir = $TMPDIR . '/vim-syntastic-' . s:_fuzz() - else - let tempdir = '/tmp/vim-syntastic-' . s:_fuzz() - endif - - try - call mkdir(tempdir, 'p', 0700) - catch /\m^Vim\%((\a\+)\)\=:E739/ - call syntastic#log#error(v:exception) - let tempdir = '.' - endtry - endif - - return tempdir -endfunction " }}}2 - -" Recursively remove a directory -function! syntastic#util#rmrf(what) abort " {{{2 - " try to make sure we don't delete directories we didn't create - if a:what !~? 'vim-syntastic-' - return - endif - - if getftype(a:what) ==# 'dir' - call s:_delete(a:what, 'rf') - else - silent! call delete(a:what) - endif -endfunction " }}}2 - -function! syntastic#util#getbufvar(buf, name, ...) abort " {{{2 - return a:0 ? s:_getbufvar(a:buf, a:name, a:1) : getbufvar(a:buf, a:name) -endfunction " }}}2 - -" Search the first 5 lines of the file for a magic number and return a map -" containing the args and the executable -" -" e.g. -" -" #!/usr/bin/perl -f -bar -" -" returns -" -" {'exe': '/usr/bin/perl', 'args': ['-f', '-bar']} -function! syntastic#util#parseShebang(buf) abort " {{{2 - for lnum in range(1, 5) - let line = get(getbufline(a:buf, lnum), 0, '') - if line =~# '^#!' - let line = substitute(line, '\v^#!\s*(\S+/env(\s+-\S+)*\s+)?', '', '') - let exe = matchstr(line, '\m^\S*\ze') - let args = split(matchstr(line, '\m^\S*\zs.*')) - return { 'exe': exe, 'args': args } - endif - endfor - - return { 'exe': '', 'args': [] } -endfunction " }}}2 - -" Get the value of a Vim variable. Allow buffer variables to override global ones. -function! syntastic#util#bufRawVar(buf, name, ...) abort " {{{2 - return s:_getbufvar(a:buf, a:name, get(g:, a:name, a:0 ? a:1 : '')) -endfunction "}}}2 - -" Get the value of a syntastic variable. Allow buffer variables to override global ones. -function! syntastic#util#bufVar(buf, name, ...) abort " {{{2 - return call('syntastic#util#bufRawVar', [a:buf, 'syntastic_' . a:name] + a:000) -endfunction "}}}2 - -" Get the value of a Vim variable. Allow local variables to override global ones. -function! syntastic#util#rawVar(name, ...) abort " {{{2 - return get(b:, a:name, get(g:, a:name, a:0 ? a:1 : '')) -endfunction " }}}2 - -" Get the value of a syntastic variable. Allow local variables to override global ones. -function! syntastic#util#var(name, ...) abort " {{{2 - return call('syntastic#util#rawVar', ['syntastic_' . a:name] + a:000) -endfunction " }}}2 - -" Parse a version string. Return an array of version components. -function! syntastic#util#parseVersion(version, ...) abort " {{{2 - return map(split(matchstr( a:version, a:0 ? a:1 : '\v^\D*\zs\d+(\.\d+)+\ze' ), '\m\.'), 'str2nr(v:val)') -endfunction " }}}2 - -" Verify that the 'installed' version is at least the 'required' version. -" -" 'installed' and 'required' must be arrays. If they have different lengths, -" the "missing" elements will be assumed to be 0 for the purposes of checking. -" -" See http://semver.org for info about version numbers. -function! syntastic#util#versionIsAtLeast(installed, required) abort " {{{2 - return syntastic#util#compareLexi(a:installed, a:required) >= 0 -endfunction " }}}2 - -" Almost lexicographic comparison of two lists of integers. :) If lists -" have different lengths, the "missing" elements are assumed to be 0. -function! syntastic#util#compareLexi(a, b) abort " {{{2 - for idx in range(max([len(a:a), len(a:b)])) - let a_element = str2nr(get(a:a, idx, 0)) - let b_element = str2nr(get(a:b, idx, 0)) - if a_element != b_element - return a_element > b_element ? 1 : -1 - endif - endfor - " still here, thus everything matched - return 0 -endfunction " }}}2 - -function! syntastic#util#screenWidth(str, tabstop) abort " {{{2 - let chunks = split(a:str, "\t", 1) - let width = s:_width(chunks[-1]) - for c in chunks[:-2] - let cwidth = s:_width(c) - let width += cwidth + a:tabstop - cwidth % a:tabstop - endfor - return width -endfunction " }}}2 - -" Print as much of a:msg as possible without "Press Enter" prompt appearing -function! syntastic#util#wideMsg(msg) abort " {{{2 - let old_ruler = &ruler - let old_showcmd = &showcmd - - "This is here because it is possible for some error messages to - "begin with \n which will cause a "press enter" prompt. - let msg = substitute(a:msg, "\n", '', 'g') - - "convert tabs to spaces so that the tabs count towards the window - "width as the proper amount of characters - let chunks = split(msg, "\t", 1) - let msg = join(map(chunks[:-2], 'v:val . repeat(" ", &tabstop - s:_width(v:val) % &tabstop)'), '') . chunks[-1] - let msg = strpart(msg, 0, &columns - 1) - - set noruler noshowcmd - call syntastic#util#redraw(0) - - echo msg - - let &ruler = old_ruler - let &showcmd = old_showcmd -endfunction " }}}2 - -" Check whether a buffer is loaded, listed, and not hidden -function! syntastic#util#bufIsActive(buffer) abort " {{{2 - " convert to number, or hell breaks loose - let buf = str2nr(a:buffer) - - if !bufloaded(buf) || !buflisted(buf) - return 0 - endif - - " get rid of hidden buffers - for tab in range(1, tabpagenr('$')) - if index(tabpagebuflist(tab), buf) >= 0 - return 1 - endif - endfor - - return 0 -endfunction " }}}2 - -" Start in directory a:where and walk up the parent folders until it finds a -" file named a:what; return path to that file -function! syntastic#util#findFileInParent(what, where) abort " {{{2 - let old_suffixesadd = &suffixesadd - let &suffixesadd = '' - let file = findfile(a:what, escape(a:where, ' ,') . ';') - let &suffixesadd = old_suffixesadd - return file -endfunction " }}}2 - -" Start in directory a:where and walk up the parent folders until it finds a -" file matching a:what; return path to that file -function! syntastic#util#findGlobInParent(what, where) abort " {{{2 - let here = fnamemodify(a:where, ':p') - - let root = syntastic#util#Slash() - if syntastic#util#isRunningWindows() && here[1] ==# ':' - " The drive letter is an ever-green source of fun. That's because - " we don't care about running syntastic on Amiga these days. ;) - let root = fnamemodify(root, ':p') - let root = here[0] . root[1:] - endif - - let old = '' - while here !=# '' - try - " Vim 7.4.279 and later - let p = globpath(here, a:what, 1, 1) - catch /\m^Vim\%((\a\+)\)\=:E118/ - let p = split(globpath(here, a:what, 1), "\n") - endtry - - if !empty(p) - return fnamemodify(p[0], ':p') - elseif here ==? root || here ==? old - break - endif - - let old = here - - " we use ':h:h' rather than ':h' since ':p' adds a trailing '/' - " if 'here' is a directory - let here = fnamemodify(here, ':p:h:h') - endwhile - - return '' -endfunction " }}}2 - -" Returns the buffer number of a filename -" @vimlint(EVL104, 1, l:old_shellslash) -function! syntastic#util#fname2buf(fname) abort " {{{2 - if exists('+shellslash') - " bufnr() can't cope with backslashes - let old_shellslash = &shellslash - let &shellslash = 1 - endif - - " this is a best-effort attempt to escape file patterns (cf. :h file-pattern) - " XXX it fails for filenames containing something like \{2,3} - let buf = -1 - for md in [':~:.', ':~', ':p'] - try - " Older versions of Vim can throw E94 here - let buf = bufnr('^' . escape(fnamemodify(a:fname, md), '\*?,{}[') . '$') - catch - " catch everything - endtry - if buf != -1 - break - endif - endfor - if buf == -1 - " XXX definitely wrong, but hope is the last thing to die :) - let buf = bufnr(fnamemodify(a:fname, ':p')) - endif - - if exists('+shellslash') - let &shellslash = old_shellslash - endif - - return buf -endfunction " }}}2 -" @vimlint(EVL104, 0, l:old_shellslash) - -" Returns unique elements in a list -function! syntastic#util#unique(list) abort " {{{2 - let seen = {} - let uniques = [] - for e in a:list - let k = string(e) - if !has_key(seen, k) - let seen[k] = 1 - call add(uniques, e) - endif - endfor - return uniques -endfunction " }}}2 - -" A less noisy shellescape() -function! syntastic#util#shescape(string) abort " {{{2 - return a:string =~# '\m^[A-Za-z0-9_/.-]\+$' ? a:string : shellescape(a:string) -endfunction " }}}2 - -" A less noisy shellescape(expand()) -function! syntastic#util#shexpand(string, ...) abort " {{{2 - return syntastic#util#shescape(a:0 ? expand(a:string, a:1) : expand(a:string, 1)) -endfunction " }}}2 - -" Escape arguments -function! syntastic#util#argsescape(opt) abort " {{{2 - if type(a:opt) == type('') && a:opt !=# '' - return [a:opt] - elseif type(a:opt) == type([]) - return map(copy(a:opt), 'syntastic#util#shescape(v:val)') - endif - - return [] -endfunction " }}}2 - -" Decode XML entities -function! syntastic#util#decodeXMLEntities(string) abort " {{{2 - let str = a:string - let str = substitute(str, '\m<', '<', 'g') - let str = substitute(str, '\m>', '>', 'g') - let str = substitute(str, '\m"', '"', 'g') - let str = substitute(str, '\m'', "'", 'g') - let str = substitute(str, '\m&', '\&', 'g') - return str -endfunction " }}}2 - -function! syntastic#util#redraw(full) abort " {{{2 - if a:full - redraw! - else - redraw - endif -endfunction " }}}2 - -function! syntastic#util#dictFilter(errors, filter) abort " {{{2 - let rules = s:_translateFilter(a:filter) - " call syntastic#log#debug(g:_SYNTASTIC_DEBUG_TRACE, "applying filter:", rules) - try - call filter(a:errors, rules) - catch /\m^Vim\%((\a\+)\)\=:E/ - let msg = matchstr(v:exception, '\m^Vim\%((\a\+)\)\=:\zs.*') - call syntastic#log#error('quiet_messages: ' . msg) - endtry -endfunction " }}}2 - -" Return a [seconds, fractions] list of strings, representing the -" (hopefully high resolution) time since program start -function! syntastic#util#stamp() abort " {{{2 - return split( split(reltimestr(reltime(g:_SYNTASTIC_START)))[0], '\.' ) -endfunction " }}}2 - -function! syntastic#util#setLastTick(buf) abort " {{{2 - call setbufvar(a:buf, 'syntastic_lasttick', getbufvar(a:buf, 'changedtick')) -endfunction " }}}2 - -" Add unique IDs to windows -function! syntastic#util#setWids() abort " {{{2 - for tab in range(1, tabpagenr('$')) - for win in range(1, tabpagewinnr(tab, '$')) - if gettabwinvar(tab, win, 'syntastic_wid') ==# '' - call settabwinvar(tab, win, 'syntastic_wid', s:_wid_base . s:_wid_pool) - let s:_wid_pool += 1 - endif - endfor - endfor -endfunction " }}}2 - -function! syntastic#util#str2float(val) abort " {{{2 - return s:_str2float(a:val) -endfunction " }}}2 - -function! syntastic#util#float2str(val) abort " {{{2 - return s:_float2str(a:val) -endfunction " }}}2 - -" Crude printf()-like width formatter. Handles wide characters. -function! syntastic#util#wformat(format, str) abort " {{{2 - if a:format ==# '' - return a:str - endif - - echomsg string(a:format) . ', ' . string(a:str) - let specs = matchlist(a:format, '\v^(-?)(0?)(%([1-9]\d*))?%(\.(\d+))?$') - if len(specs) < 5 - return a:str - endif - - let flushleft = specs[1] ==# '-' - let lpad = specs[2] ==# '0' ? '0' : ' ' - let minlen = str2nr(specs[3]) - let maxlen = str2nr(specs[4]) - let out = substitute(a:str, "\t", ' ', 'g') - - if maxlen && s:_width(out) > maxlen - let chars = filter(split(out, '\zs\ze', 1), 'v:val !=# ""') - let out = '' - - if flushleft - for c in chars - if s:_width(out . c) < maxlen - let out .= c - else - let out .= &encoding ==# 'utf-8' && &termencoding ==# 'utf-8' ? "\u2026" : '>' - break - endif - endfor - else - call reverse(chars) - for c in chars - if s:_width(c . out) < maxlen - let out = c . out - else - let out = (&encoding ==# 'utf-8' && &termencoding ==# 'utf-8' ? "\u2026" : '<') . out - break - endif - endfor - endif - endif - - if minlen && s:_width(out) < minlen - if flushleft - let out .= repeat(' ', minlen - s:_width(out)) - else - let out = repeat(lpad, minlen - s:_width(out)) . out - endif - endif - - return out -endfunction " }}}2 - -" }}}1 - -" Private functions {{{1 - -function! s:_translateFilter(filters) abort " {{{2 - let conditions = [] - for k in keys(a:filters) - if type(a:filters[k]) == type([]) - call extend(conditions, map(copy(a:filters[k]), 's:_translateElement(k, v:val)')) - else - call add(conditions, s:_translateElement(k, a:filters[k])) - endif - endfor - - if conditions == [] - let conditions = ['1'] - endif - return len(conditions) == 1 ? conditions[0] : join(map(conditions, '"(" . v:val . ")"'), ' && ') -endfunction " }}}2 - -function! s:_translateElement(key, term) abort " {{{2 - let fkey = a:key - if fkey[0] ==# '!' - let fkey = fkey[1:] - let not = 1 - else - let not = 0 - endif - - if fkey ==? 'level' - let op = not ? ' ==? ' : ' !=? ' - let ret = 'v:val["type"]' . op . string(a:term[0]) - elseif fkey ==? 'type' - if a:term ==? 'style' - let op = not ? ' ==? ' : ' !=? ' - let ret = 'get(v:val, "subtype", "")' . op . '"style"' - else - let op = not ? '!' : '' - let ret = op . 'has_key(v:val, "subtype")' - endif - elseif fkey ==? 'regex' - let op = not ? ' =~? ' : ' !~? ' - let ret = 'v:val["text"]' . op . string(a:term) - elseif fkey ==? 'file' || fkey[:4] ==? 'file:' - let op = not ? ' =~# ' : ' !~# ' - let ret = 'bufname(str2nr(v:val["bufnr"]))' - let mod = fkey[4:] - if mod !=# '' - let ret = 'fnamemodify(' . ret . ', ' . string(mod) . ')' - endif - let ret .= op . string(a:term) - else - call syntastic#log#warn('quiet_messages: ignoring invalid key ' . strtrans(string(fkey))) - let ret = '1' - endif - return ret -endfunction " }}}2 - -" strwidth() was added in Vim 7.3; if it doesn't exist, we use strlen() -" and hope for the best :) -let s:_width = function(exists('*strwidth') ? 'strwidth' : 'strlen') -lockvar s:_width - -" @vimlint(EVL103, 1, a:flags) -function! s:_delete_dumb(what, flags) abort " {{{2 - if !exists('s:rmrf') - let s:rmrf = - \ has('unix') || has('mac') ? 'rm -rf' : - \ has('win32') || has('win64') ? 'rmdir /S /Q' : - \ has('win16') || has('win95') || has('dos16') || has('dos32') ? 'deltree /Y' : '' - endif - - if s:rmrf !=# '' - silent! call syntastic#util#system(s:rmrf . ' ' . syntastic#util#shescape(a:what)) - else - call s:_rmrf(a:what) - endif -endfunction " }}}2 -" @vimlint(EVL103, 0, a:flags) - -" delete(dir, 'rf') was added in Vim 7.4.1107, but it didn't become usable until 7.4.1128 -let s:_delete = function(v:version > 704 || (v:version == 704 && has('patch1128')) ? 'delete' : 's:_delete_dumb') -lockvar s:_delete - -function! s:_rmrf(what) abort " {{{2 - if !exists('s:rmdir') - let s:rmdir = syntastic#util#shescape(get(g:, 'netrw_localrmdir', 'rmdir')) - endif - - if getftype(a:what) ==# 'dir' - if filewritable(a:what) != 2 - return - endif - - try - " Vim 7.4.279 and later - let entries = globpath(a:what, '*', 1, 1) - catch /\m^Vim\%((\a\+)\)\=:E118/ - let entries = split(globpath(a:what, '*', 1), "\n") - endtry - for f in entries - call s:_rmrf(f) - endfor - silent! call syntastic#util#system(s:rmdir . ' ' . syntastic#util#shescape(a:what)) - else - silent! call delete(a:what) - endif -endfunction " }}}2 - -let s:_str2float = function(exists('*str2float') ? 'str2float' : 'str2nr') -lockvar s:_str2float - -function! s:_float2str_smart(val) abort " {{{2 - return printf('%.1f', a:val) -endfunction " }}}2 - -function! s:_float2str_dumb(val) abort " {{{2 - return a:val -endfunction " }}}2 - -let s:_float2str = function(has('float') ? 's:_float2str_smart' : 's:_float2str_dumb') -lockvar s:_float2str - -function! s:_getbufvar_dumb(buf, name, ...) abort " {{{2 - let ret = getbufvar(a:buf, a:name) - if a:0 && type(ret) == type('') && ret ==# '' - unlet! ret - let ret = a:1 - endif - return ret -endfunction "}}}2 - -let s:_getbufvar = function(v:version > 703 || (v:version == 703 && has('patch831')) ? 'getbufvar' : 's:_getbufvar_dumb') -lockvar s:_getbufvar - -function! s:_fuzz_dumb() abort " {{{2 - return 'tmp' -endfunction " }}}2 - -let s:_fuzz = function(exists('*getpid') ? 'getpid' : 's:_fuzz_dumb') -lockvar s:_fuzz - -" }}}1 - -let s:_wid_base = 'syntastic_' . s:_fuzz() . '_' . reltimestr(g:_SYNTASTIC_START) . '_' -let s:_wid_pool = 0 - -let &cpo = s:save_cpo -unlet s:save_cpo - -" vim: set sw=4 sts=4 et fdm=marker: diff --git a/sources_non_forked/syntastic/doc/syntastic-checkers.txt b/sources_non_forked/syntastic/doc/syntastic-checkers.txt deleted file mode 100644 index ec76927a..00000000 --- a/sources_non_forked/syntastic/doc/syntastic-checkers.txt +++ /dev/null @@ -1,7812 +0,0 @@ -*syntastic-checkers.txt* Syntastic checkers -*syntastic-checkers* - -============================================================================== -SYNTAX CHECKERS BY LANGUAGE *syntastic-checkers-lang* - -|syntastic| comes with checkers for the following languages: - - ACPI Source Language.....................|syntastic-checkers-asl| - ActionScript.............................|syntastic-checkers-actionscript| - Ada......................................|syntastic-checkers-ada| - Ansible..................................|syntastic-checkers-ansible| - API Blueprint............................|syntastic-checkers-apiblueprint| - AppleScript..............................|syntastic-checkers-applescript| - AsciiDoc.................................|syntastic-checkers-asciidoc| - Assembly Languages.......................|syntastic-checkers-asm| - - BEMHTML..................................|syntastic-checkers-bemhtml| - Bro......................................|syntastic-checkers-bro| - - C........................................|syntastic-checkers-c| - C#.......................................|syntastic-checkers-cs| - C++......................................|syntastic-checkers-cpp| - Cabal....................................|syntastic-checkers-cabal| - Chef.....................................|syntastic-checkers-chef| - CMake....................................|syntastic-checkers-cmake| - COBOL....................................|syntastic-checkers-cobol| - Coco.....................................|syntastic-checkers-co| - CoffeeScript.............................|syntastic-checkers-coffee| - Coq......................................|syntastic-checkers-coq| - CSS......................................|syntastic-checkers-css| - Cucumber.................................|syntastic-checkers-cucumber| - CUDA.....................................|syntastic-checkers-cuda| - - D........................................|syntastic-checkers-d| - Dart.....................................|syntastic-checkers-dart| - DocBook..................................|syntastic-checkers-docbk| - Dockerfile...............................|syntastic-checkers-dockerfile| - Dust.....................................|syntastic-checkers-dustjs| - - Elixir...................................|syntastic-checkers-elixir| - Erlang...................................|syntastic-checkers-erlang| - eRuby....................................|syntastic-checkers-eruby| - - Fortran..................................|syntastic-checkers-fortran| - - Gentoo Metadata..........................|syntastic-checkers-gentoo| - Gettext PO...............................|syntastic-checkers-po| - GLSL.....................................|syntastic-checkers-glsl| - Go.......................................|syntastic-checkers-go| - - Haml.....................................|syntastic-checkers-haml| - Handlebars...............................|syntastic-checkers-handlebars| - Haskell..................................|syntastic-checkers-haskell| - Haxe.....................................|syntastic-checkers-haxe| - HSS......................................|syntastic-checkers-hss| - HTML.....................................|syntastic-checkers-html| - - Java.....................................|syntastic-checkers-java| - JavaScript...............................|syntastic-checkers-javascript| - JSON.....................................|syntastic-checkers-json| - Julia....................................|syntastic-checkers-julia| - - LESS.....................................|syntastic-checkers-less| - Lex......................................|syntastic-checkers-lex| - Limbo....................................|syntastic-checkers-limbo| - LISP.....................................|syntastic-checkers-lisp| - LLVM.....................................|syntastic-checkers-llvm| - Lua......................................|syntastic-checkers-lua| - - Markdown.................................|syntastic-checkers-markdown| - MATLAB...................................|syntastic-checkers-matlab| - Mercury..................................|syntastic-checkers-mercury| - - NASM.....................................|syntastic-checkers-nasm| - Nix......................................|syntastic-checkers-nix| - nroff....................................|syntastic-checkers-nroff| - - Objective-C..............................|syntastic-checkers-objc| - Objective-C++............................|syntastic-checkers-objcpp| - OCaml....................................|syntastic-checkers-ocaml| - - Perl.....................................|syntastic-checkers-perl| - Perl 6...................................|syntastic-checkers-perl6| - PHP......................................|syntastic-checkers-php| - POD......................................|syntastic-checkers-pod| - Pug (formerly Jade)......................|syntastic-checkers-pug| - Puppet...................................|syntastic-checkers-puppet| - Python...................................|syntastic-checkers-python| - - QML......................................|syntastic-checkers-qml| - - R........................................|syntastic-checkers-r| - R Markdown...............................|syntastic-checkers-rmd| - Racket...................................|syntastic-checkers-racket| - Relax NG.................................|syntastic-checkers-rnc| - reStructuredText.........................|syntastic-checkers-rst| - RPM spec.................................|syntastic-checkers-spec| - Ruby.....................................|syntastic-checkers-ruby| - - SASS.....................................|syntastic-checkers-sass| - Scala....................................|syntastic-checkers-scala| - SCSS.....................................|syntastic-checkers-scss| - Sh.......................................|syntastic-checkers-sh| - Slim.....................................|syntastic-checkers-slim| - SML......................................|syntastic-checkers-sml| - Solidity.................................|syntastic-checkers-solidity| - SQL......................................|syntastic-checkers-sql| - Stylus...................................|syntastic-checkers-stylus| - - Tcl......................................|syntastic-checkers-tcl| - TeX......................................|syntastic-checkers-tex| - Texinfo..................................|syntastic-checkers-texinfo| - Text.....................................|syntastic-checkers-text| - Turtle...................................|syntastic-checkers-turtle| - TriG.....................................|syntastic-checkers-trig| - Twig.....................................|syntastic-checkers-twig| - TypeScript...............................|syntastic-checkers-typescript| - - Vala.....................................|syntastic-checkers-vala| - Verilog..................................|syntastic-checkers-verilog| - VHDL.....................................|syntastic-checkers-vhdl| - Vim help.................................|syntastic-checkers-help| - VimL.....................................|syntastic-checkers-vim| - Vue.js...................................|syntastic-checkers-vue| - - xHTML....................................|syntastic-checkers-xhtml| - XML......................................|syntastic-checkers-xml| - XQuery...................................|syntastic-checkers-xquery| - XSLT.....................................|syntastic-checkers-xslt| - - YACC.....................................|syntastic-checkers-yacc| - YAML.....................................|syntastic-checkers-yaml| - YANG.....................................|syntastic-checkers-yang| - - Z80......................................|syntastic-checkers-z80| - Zope Page Templates......................|syntastic-checkers-zpt| - Zsh......................................|syntastic-checkers-zsh| - -Third-party checkers are available for additional languages. - -============================================================================== -SYNTAX CHECKERS FOR ACPI SOURCE LANGUAGE *syntastic-checkers-asl* - -The following checkers are available for the ACPI Source Language (filetype -"asl"): - - 1. iasl.....................|syntastic-asl-iasl| - ------------------------------------------------------------------------------- -1. iasl *syntastic-asl-iasl* - -Name: iasl -Maintainer: Peter Wu - -"iasl" is a compiler/decompiler for ACPI Source Language (ASL) and ACPI -Machine Language (AML). See the project's page for details: - - https://acpica.org/ - -Checker options~ - -This checker is initialised using the "makeprgBuild()" function and thus it -accepts the standard options described at |syntastic-config-makeprg|. - -Note~ - -You probably also need a plugin to set |filetype| for ASL files, such as -"vim-acpi-asl": - - https://github.com/martinlroth/vim-acpi-asl - -============================================================================== -SYNTAX CHECKERS FOR ACTIONSCRIPT *syntastic-checkers-actionscript* - -The following checkers are available for ActionScript (filetype -"actionscript"): - - 1. mxmlc....................|syntastic-actionscript-mxmlc| - ------------------------------------------------------------------------------- -1. mxmlc *syntastic-actionscript-mxmlc* - -Name: mxmlc -Maintainer: Andy Earnshaw - -"mxmlc" is a compiler for ActionScript. See Apache Flex for details: - - http://flex.apache.org/ - -Checker options~ - -This checker is initialised using the "makeprgBuild()" function and thus it -accepts the standard options described at |syntastic-config-makeprg|. - -============================================================================== -SYNTAX CHECKERS FOR ADA *syntastic-checkers-ada* - -The following checkers are available for Ada (filetype "ada"): - - 1. GCC......................|syntastic-ada-gcc| - ------------------------------------------------------------------------------- -1. GCC *syntastic-ada-gcc* - -Name: gcc -Maintainer: Alfredo Di Napoli - -Checker options~ - *'g:syntastic_ada_compiler'* -Type: string -Default: "gcc" -Compiler executable. - - *'g:syntastic_ada_errorformat'* -Type: string -Default: unset -Override for the default |'errorformat'|. - - *'g:syntastic_ada_remove_include_errors'* -Type: boolean -Default: 0 -By default, errors in files included from the file being checked are shown. -Set this variable to 1 to remove messages about errors in included files. -Please note that this means syntastic will silently abort checks if there are -fatal errors in one of the included files. - - *'g:syntastic_ada_compiler_options'* -Type: string -Default: unset -Compilation flags (such as defines or include directories) to be passed to the -linter. - - *'g:syntastic_ada_config_file'* -Type: string -Default: ".syntastic_ada_config" -File containing additional compilation flags to be passed to the linter, one -option per line (cf. |syntastic-config-files|). - - *'g:syntastic_ada_include_dirs'* -Type: array of strings -Default: [] -Include directories to be passed to the linter, in addition to the above -compilation flags. You can set it like this: > - let g:syntastic_ada_include_dirs = ["includes", "headers"] -< -and the corresponding "-Iincludes -Iheaders" will be added to the compilation -flags. - - *'b:syntastic_ada_cflags'* -Type: string -Default: unset -Buffer-local variable. Additional compilation flags specific to the current -buffer. - - *'g:syntastic_ada_check_header'* -Type: boolean -Default: 0 -If the current file is a header (namely if its extension is "ads"), all checks -are silently skipped. You can force syntastic to check header files by -setting the above variable to 1. - -Note~ - -This checker doesn't call the "makeprgBuild()" function, and thus it ignores -the usual 'g:syntastic_ada_gcc_