mirror of
https://github.com/sheerun/vim-polyglot.git
synced 2025-11-08 11:33:52 -05:00
Compare commits
33 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e166f741ef | ||
|
|
d4fcef1aa8 | ||
|
|
7972e8eea1 | ||
|
|
6ed481e463 | ||
|
|
c1e1870a3d | ||
|
|
f0d6ecff07 | ||
|
|
15e5df246e | ||
|
|
94ababe91f | ||
|
|
080b8cdc60 | ||
|
|
e47af23f64 | ||
|
|
8f5134aef8 | ||
|
|
be8d039e02 | ||
|
|
38ce8e9cb6 | ||
|
|
55ad5a982a | ||
|
|
b2055afaa7 | ||
|
|
63a175357a | ||
|
|
25db54573a | ||
|
|
d1bfe50419 | ||
|
|
22e8e01c1e | ||
|
|
30bef582ba | ||
|
|
74d940cda3 | ||
|
|
54d2386262 | ||
|
|
a47c315b01 | ||
|
|
ff0ada0dc3 | ||
|
|
e194de5875 | ||
|
|
012cf89210 | ||
|
|
ac71777dc2 | ||
|
|
23defeb610 | ||
|
|
114a93bb7c | ||
|
|
f3ab28a287 | ||
|
|
bc3b36088e | ||
|
|
5d0150e326 | ||
|
|
cf8e31ff7f |
21
.github/workflows/test.yml
vendored
Normal file
21
.github/workflows/test.yml
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
name: Vim Polyglot CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 0 * * 0' # weekly
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Install Vim
|
||||||
|
run: |
|
||||||
|
sudo add-apt-repository ppa:jonathonf/vim -y
|
||||||
|
sudo apt-get update -q
|
||||||
|
sudo apt-get install -y vim
|
||||||
|
vim --version
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Run Tests
|
||||||
|
run: make test
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
language: vim
|
|
||||||
before_script:
|
|
||||||
- sudo add-apt-repository ppa:jonathonf/vim -y
|
|
||||||
- sudo apt-get update -q
|
|
||||||
- sudo apt-get install -y vim
|
|
||||||
- vim --version
|
|
||||||
script: ./test
|
|
||||||
10
Makefile
Normal file
10
Makefile
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
.PHONY: all test dev
|
||||||
|
|
||||||
|
all:
|
||||||
|
@ scripts/build
|
||||||
|
|
||||||
|
test:
|
||||||
|
@ scripts/test
|
||||||
|
|
||||||
|
dev:
|
||||||
|
@ echo "packages.yaml\nheuristics.yaml\nscripts/test\nscripts/build\nscripts/test_extensions.vim" | DEV=1 entr bash -c 'make && make test'
|
||||||
379
README.md
379
README.md
@@ -1,22 +1,20 @@
|
|||||||

|

|
||||||
|
|
||||||
[![Build Status][travis-img-url]][travis-url] []()
|
 []()
|
||||||
|
|
||||||
[travis-img-url]: https://travis-ci.org/sheerun/vim-polyglot.svg
|
|
||||||
[travis-url]: https://travis-ci.org/sheerun/vim-polyglot
|
|
||||||
|
|
||||||
A collection of language packs for Vim.
|
A collection of language packs for Vim.
|
||||||
|
|
||||||
> One to rule them all, one to find them, one to bring them all and in the darkness bind them.
|
> One to rule them all, one to find them, one to bring them all and in the darkness bind them.
|
||||||
|
|
||||||
- It **won't affect your startup time**, as scripts are loaded only on demand\*.
|
- It **won't affect your startup time**, as scripts are loaded only on demand\*.
|
||||||
- It **installs and updates 120+ times faster** than the <!--Package Count-->157<!--/Package Count--> packages it consists of.
|
- It **installs and updates 120+ times faster** than the <!--Package Count-->190<!--/Package Count--> packages it consists of.
|
||||||
|
- It is more secure because scripts loaded for all extensions are generated by vim-polyglot (ftdetect).
|
||||||
- Solid syntax and indentation support (other features skipped). Only the best language packs.
|
- Solid syntax and indentation support (other features skipped). Only the best language packs.
|
||||||
- All unnecessary files are ignored (like enormous documentation from php support).
|
- All unnecessary files are ignored (like enormous documentation from php support).
|
||||||
- No support for esoteric languages, only most popular ones (modern too, like `slim`).
|
- No support for esoteric languages, only most popular ones (modern too, like `slim`).
|
||||||
- Each build is tested by automated vimrunner script on CI. See `spec` directory.
|
- Each build is tested by automated vimrunner script on CI. See `spec` directory.
|
||||||
|
|
||||||
\*To be completely honest, optimized `ftdetect` script takes up to `19ms` to load.
|
\*To be completely honest, optimized `ftdetect` script takes around `19ms` to load.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
@@ -38,200 +36,229 @@ mkdir -p ~/.vim/pack/default/start
|
|||||||
git clone https://github.com/sheerun/vim-polyglot ~/.vim/pack/default/start/vim-polyglot
|
git clone https://github.com/sheerun/vim-polyglot ~/.vim/pack/default/start/vim-polyglot
|
||||||
```
|
```
|
||||||
|
|
||||||
NOTE: Not all features of listed language packs are available. We strip them from functionality slowing vim startup in general (for example we ignore `plugins` folder that is loaded regardless of file type, use `ftplugin` instead).
|
NOTE: Not all features of individual language packs are available. We strip them from functionality slowing vim startup (for example we ignore `plugins` folder that is loaded regardless of file type, instead we prefer `ftplugin` which is loaded lazily).
|
||||||
|
|
||||||
If you need full functionality of any plugin, please use it directly with your plugin manager.
|
If you need full functionality of any plugin, please use it directly with your plugin manager.
|
||||||
|
|
||||||
## Language packs
|
## Language packs
|
||||||
|
|
||||||
<!--Language Packs-->
|
<!--Language Packs-->
|
||||||
- [acpiasl](https://github.com/martinlroth/vim-acpi-asl) (syntax)
|
- [8th](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [ansible](https://github.com/pearofducks/ansible-vim) (syntax, indent, ftplugin)
|
- [a2ps](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [apiblueprint](https://github.com/sheerun/apiblueprint.vim) (syntax, ctags)
|
- [a65](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [applescript](https://github.com/mityu/vim-applescript) (syntax, indent)
|
- [aap](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [arduino](https://github.com/sudar/vim-arduino-syntax) (syntax, indent)
|
- [abap](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [asciidoc](https://github.com/asciidoc/vim-asciidoc) (syntax)
|
- [abaqus](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [autohotkey](https://github.com/hnamikaw/vim-autohotkey) (indent)
|
- [abc](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [blade](https://github.com/jwalton512/vim-blade) (syntax, indent, ftplugin)
|
- [abel](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [brewfile](https://github.com/bfontaine/Brewfile.vim) (syntax)
|
- [acedb](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [c++11](https://github.com/octol/vim-cpp-enhanced-highlight) (syntax)
|
- [acpiasl](https://github.com/martinlroth/vim-acpi-asl)
|
||||||
- [c/c++](https://github.com/vim-jp/vim-cpp) (syntax)
|
- [ada](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [caddyfile](https://github.com/isobit/vim-caddyfile) (syntax, indent, ftplugin)
|
- [ahdl](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [carp](https://github.com/hellerve/carp-vim) (syntax)
|
- [aidl](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [cjsx](https://github.com/mtscout6/vim-cjsx) (syntax, ftplugin)
|
- [alsaconf](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [clojure](https://github.com/guns/vim-clojure-static) (syntax, indent, autoload, ftplugin)
|
- [aml](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [cmake](https://github.com/pboettch/vim-cmake-syntax) (syntax, indent)
|
- [ampl](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [coffee-script](https://github.com/kchmck/vim-coffee-script) (syntax, compiler, indent, autoload, ftplugin)
|
- [ansible](https://github.com/pearofducks/ansible-vim)
|
||||||
- [cql](https://github.com/elubow/cql-vim) (syntax)
|
- [ant](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [cryptol](https://github.com/victoredwardocallaghan/cryptol.vim) (syntax, compiler, ftplugin)
|
- [apache](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [crystal](https://github.com/rhysd/vim-crystal) (syntax, indent, autoload, ftplugin)
|
- [apiblueprint](https://github.com/sheerun/apiblueprint.vim)
|
||||||
- [csv](https://github.com/chrisbra/csv.vim) (syntax, autoload, ftplugin)
|
- [applescript](https://github.com/mityu/vim-applescript)
|
||||||
- [cucumber](https://github.com/tpope/vim-cucumber) (syntax, indent, compiler, ftplugin)
|
- [aptconf](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [cue](https://github.com/mgrabovsky/vim-cuesheet) (syntax)
|
- [arch](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [dart](https://github.com/dart-lang/dart-vim-plugin) (syntax, indent, autoload, ftplugin)
|
- [arduino](https://github.com/sudar/vim-arduino-syntax)
|
||||||
- [dhall](https://github.com/vmchale/dhall-vim) (syntax, ftplugin)
|
- [art](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [dlang](https://github.com/JesseKPhillips/d.vim) (syntax, indent)
|
- [asciidoc](https://github.com/asciidoc/vim-asciidoc)
|
||||||
- [dockerfile](https://github.com/ekalinin/Dockerfile.vim) (syntax, indent, ftplugin)
|
- [asn](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [elixir](https://github.com/elixir-lang/vim-elixir) (syntax, indent, compiler, autoload, ftplugin)
|
- [aspperl](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [elm](https://github.com/andys8/vim-elm-syntax) (syntax, indent)
|
- [aspvbs](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [emberscript](https://github.com/yalesov/vim-ember-script) (syntax, indent, ftplugin)
|
- [atlas](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [emblem](https://github.com/yalesov/vim-emblem) (syntax, indent, ftplugin)
|
- [autohotkey](https://github.com/hnamikaw/vim-autohotkey)
|
||||||
- [erlang](https://github.com/vim-erlang/vim-erlang-runtime) (syntax, indent)
|
- [autoit](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [fennel](https://github.com/bakpakin/fennel.vim) (syntax, indent, ftplugin)
|
- [automake](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [ferm](https://github.com/vim-scripts/ferm.vim) (syntax)
|
- [ave](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [fish](https://github.com/georgewitteman/vim-fish) (syntax, indent, compiler, autoload, ftplugin)
|
- [awk](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [flatbuffers](https://github.com/dcharbon/vim-flatbuffers) (syntax)
|
- [blade](https://github.com/jwalton512/vim-blade)
|
||||||
- [fsharp](https://github.com/ionide/Ionide-vim) (syntax, indent)
|
- [brewfile](https://github.com/bfontaine/Brewfile.vim)
|
||||||
- [gdscript](https://github.com/calviken/vim-gdscript3) (syntax, indent)
|
- [c/c++](https://github.com/vim-jp/vim-cpp)
|
||||||
- [git](https://github.com/tpope/vim-git) (syntax, indent, ftplugin)
|
- [caddyfile](https://github.com/isobit/vim-caddyfile)
|
||||||
- [glsl](https://github.com/tikhomirov/vim-glsl) (syntax, indent)
|
- [carp](https://github.com/hellerve/carp-vim)
|
||||||
- [gmpl](https://github.com/maelvalais/gmpl.vim) (syntax)
|
- [cjsx](https://github.com/mtscout6/vim-cjsx)
|
||||||
- [gnuplot](https://github.com/vim-scripts/gnuplot-syntax-highlighting) (syntax)
|
- [clojure](https://github.com/guns/vim-clojure-static)
|
||||||
- [go](https://github.com/fatih/vim-go) (syntax, compiler, indent)
|
- [cmake](https://github.com/pboettch/vim-cmake-syntax)
|
||||||
- [gradle](https://github.com/tfnico/vim-gradle) (compiler)
|
- [coffee-script](https://github.com/kchmck/vim-coffee-script)
|
||||||
- [graphql](https://github.com/jparise/vim-graphql) (syntax, indent, autoload, ftplugin, after)
|
- [cql](https://github.com/elubow/cql-vim)
|
||||||
- [haml](https://github.com/sheerun/vim-haml) (syntax, indent, compiler, ftplugin)
|
- [cryptol](https://github.com/victoredwardocallaghan/cryptol.vim)
|
||||||
- [handlebars](https://github.com/sheerun/vim-mustache-handlebars) (syntax, indent, ftplugin)
|
- [crystal](https://github.com/rhysd/vim-crystal)
|
||||||
- [haproxy](https://github.com/CH-DanReif/haproxy.vim) (syntax)
|
- [csv](https://github.com/chrisbra/csv.vim)
|
||||||
- [haskell](https://github.com/neovimhaskell/haskell-vim) (syntax, indent, ftplugin)
|
- [cucumber](https://github.com/tpope/vim-cucumber)
|
||||||
- [haxe](https://github.com/yaymukund/vim-haxe) (syntax)
|
- [cue](https://github.com/mgrabovsky/vim-cuesheet)
|
||||||
- [hcl](https://github.com/b4b4r07/vim-hcl) (syntax, indent, ftplugin)
|
- [dart](https://github.com/dart-lang/dart-vim-plugin)
|
||||||
- [helm](https://github.com/towolf/vim-helm) (syntax)
|
- [dhall](https://github.com/vmchale/dhall-vim)
|
||||||
- [hive](https://github.com/zebradil/hive.vim) (syntax, ftplugin)
|
- [dlang](https://github.com/JesseKPhillips/d.vim)
|
||||||
- [html5](https://github.com/othree/html5.vim) (syntax, indent, autoload, ftplugin)
|
- [dockerfile](https://github.com/ekalinin/Dockerfile.vim)
|
||||||
- [i3](https://github.com/mboughaba/i3config.vim) (syntax, ftplugin)
|
- [elf](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [icalenadr](https://github.com/chutzpah/icalendar.vim) (syntax)
|
- [elixir](https://github.com/elixir-lang/vim-elixir)
|
||||||
- [idris](https://github.com/idris-hackers/idris-vim) (syntax, indent, ftplugin)
|
- [elm](https://github.com/andys8/vim-elm-syntax)
|
||||||
- [ion](https://github.com/vmchale/ion-vim) (syntax, ftplugin)
|
- [emberscript](https://github.com/yalesov/vim-ember-script)
|
||||||
- [javascript](https://github.com/pangloss/vim-javascript) (syntax, indent, compiler, ftplugin, extras)
|
- [emblem](https://github.com/yalesov/vim-emblem)
|
||||||
- [jenkins](https://github.com/martinda/Jenkinsfile-vim-syntax) (syntax, indent)
|
- [erlang](https://github.com/vim-erlang/vim-erlang-runtime)
|
||||||
- [jinja](https://github.com/lepture/vim-jinja) (syntax, indent)
|
- [fennel](https://github.com/bakpakin/fennel.vim)
|
||||||
- [jq](https://github.com/vito-c/jq.vim) (syntax, ftplugin)
|
- [ferm](https://github.com/vim-scripts/ferm.vim)
|
||||||
- [json5](https://github.com/GutenYe/json5.vim) (syntax)
|
- [fish](https://github.com/georgewitteman/vim-fish)
|
||||||
- [json](https://github.com/elzr/vim-json) (syntax, indent, ftplugin)
|
- [flatbuffers](https://github.com/dcharbon/vim-flatbuffers)
|
||||||
- [jsonnet](https://github.com/google/vim-jsonnet) (syntax, autoload, ftplugin)
|
- [forth](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [jst](https://github.com/briancollins/vim-jst) (syntax, indent)
|
- [fsharp](https://github.com/ionide/Ionide-vim)
|
||||||
- [jsx](https://github.com/MaxMEllon/vim-jsx-pretty) (autoload, after)
|
- [gdscript](https://github.com/calviken/vim-gdscript3)
|
||||||
- [julia](https://github.com/JuliaEditorSupport/julia-vim) (syntax, indent, autoload, ftplugin)
|
- [git](https://github.com/tpope/vim-git)
|
||||||
- [kotlin](https://github.com/udalov/kotlin-vim) (syntax, indent, ftplugin)
|
- [glsl](https://github.com/tikhomirov/vim-glsl)
|
||||||
- [ledger](https://github.com/ledger/vim-ledger) (syntax, compiler, indent)
|
- [gmpl](https://github.com/maelvalais/gmpl.vim)
|
||||||
- [less](https://github.com/groenewege/vim-less) (syntax, indent, ftplugin)
|
- [gnuplot](https://github.com/vim-scripts/gnuplot-syntax-highlighting)
|
||||||
- [lilypond](https://github.com/anowlcalledjosh/vim-lilypond) (syntax, indent, compiler, ftplugin)
|
- [go](https://github.com/fatih/vim-go)
|
||||||
- [livescript](https://github.com/gkz/vim-ls) (syntax, indent, compiler, ftplugin)
|
- [gradle](https://github.com/tfnico/vim-gradle)
|
||||||
- [llvm](https://github.com/rhysd/vim-llvm) (syntax, indent, ftplugin)
|
- [graphql](https://github.com/jparise/vim-graphql)
|
||||||
- [log](https://github.com/MTDL9/vim-log-highlighting) (syntax)
|
- [grub](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [lua](https://github.com/tbastos/vim-lua) (syntax, indent)
|
- [haml](https://github.com/sheerun/vim-haml)
|
||||||
- [mako](https://github.com/sophacles/vim-bundle-mako) (syntax, indent, ftplugin)
|
- [handlebars](https://github.com/sheerun/vim-mustache-handlebars)
|
||||||
- [markdown](https://github.com/plasticboy/vim-markdown) (syntax, indent, ftplugin)
|
- [haproxy](https://github.com/CH-DanReif/haproxy.vim)
|
||||||
- [mathematica](https://github.com/voldikss/vim-mma) (syntax, ftplugin)
|
- [haskell](https://github.com/neovimhaskell/haskell-vim)
|
||||||
- [mdx](https://github.com/jxnblk/vim-mdx-js) (syntax)
|
- [haxe](https://github.com/yaymukund/vim-haxe)
|
||||||
- [meson](https://github.com/mesonbuild/meson) (syntax, indent, ftplugin)
|
- [hcl](https://github.com/b4b4r07/vim-hcl)
|
||||||
- [moonscript](https://github.com/leafo/moonscript-vim) (syntax, indent, ftplugin)
|
- [helm](https://github.com/towolf/vim-helm)
|
||||||
- [nginx](https://github.com/chr4/nginx.vim) (syntax, indent, ftplugin)
|
- [help](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [nim](https://github.com/zah/nim.vim) (syntax, compiler, indent)
|
- [hive](https://github.com/zebradil/hive.vim)
|
||||||
- [nix](https://github.com/LnL7/vim-nix) (syntax, indent, compiler, ftplugin)
|
- [html5](https://github.com/othree/html5.vim)
|
||||||
- [objc](https://github.com/b4winckler/vim-objc) (ftplugin, syntax, indent)
|
- [i3](https://github.com/mboughaba/i3config.vim)
|
||||||
- [ocaml](https://github.com/rgrinberg/vim-ocaml) (syntax, indent, compiler, ftplugin)
|
- [icalendar](https://github.com/chutzpah/icalendar.vim)
|
||||||
- [octave](https://github.com/McSinyx/vim-octave) (syntax, indent)
|
- [idris](https://github.com/idris-hackers/idris-vim)
|
||||||
- [opencl](https://github.com/petRUShka/vim-opencl) (syntax, indent, ftplugin)
|
- [ion](https://github.com/vmchale/ion-vim)
|
||||||
- [perl](https://github.com/vim-perl/vim-perl) (syntax, indent, ftplugin)
|
- [javascript](https://github.com/pangloss/vim-javascript)
|
||||||
- [pgsql](https://github.com/lifepillar/pgsql.vim) (syntax, indent)
|
- [jenkins](https://github.com/martinda/Jenkinsfile-vim-syntax)
|
||||||
- [php](https://github.com/StanAngeloff/php.vim) (syntax)
|
- [jinja](https://github.com/lepture/vim-jinja)
|
||||||
- [plantuml](https://github.com/aklt/plantuml-syntax) (syntax, indent, ftplugin)
|
- [jq](https://github.com/vito-c/jq.vim)
|
||||||
- [pony](https://github.com/jakwings/vim-pony) (syntax, indent, autoload, ftplugin)
|
- [json5](https://github.com/GutenYe/json5.vim)
|
||||||
- [powershell](https://github.com/PProvost/vim-ps1) (syntax, indent, compiler, ftplugin)
|
- [json](https://github.com/elzr/vim-json)
|
||||||
- [protobuf](https://github.com/uarun/vim-protobuf) (syntax, indent)
|
- [jsonnet](https://github.com/google/vim-jsonnet)
|
||||||
- [pug](https://github.com/digitaltoad/vim-pug) (syntax, indent, ftplugin)
|
- [jst](https://github.com/briancollins/vim-jst)
|
||||||
- [puppet](https://github.com/rodjek/vim-puppet) (syntax, indent, autoload, ftplugin, ctags)
|
- [jsx](https://github.com/MaxMEllon/vim-jsx-pretty)
|
||||||
- [purescript](https://github.com/purescript-contrib/purescript-vim) (syntax, indent, ftplugin)
|
- [julia](https://github.com/JuliaEditorSupport/julia-vim)
|
||||||
- [python-compiler](https://github.com/aliev/vim-compiler-python) (compiler, autoload)
|
- [kotlin](https://github.com/udalov/kotlin-vim)
|
||||||
- [python-indent](https://github.com/Vimjas/vim-python-pep8-indent) (indent)
|
- [ledger](https://github.com/ledger/vim-ledger)
|
||||||
- [python](https://github.com/vim-python/python-syntax) (syntax)
|
- [less](https://github.com/groenewege/vim-less)
|
||||||
- [qmake](https://github.com/artoj/qmake-syntax-vim) (syntax)
|
- [lilypond](https://github.com/anowlcalledjosh/vim-lilypond)
|
||||||
- [qml](https://github.com/peterhoeg/vim-qml) (syntax, indent, ftplugin)
|
- [livescript](https://github.com/gkz/vim-ls)
|
||||||
- [r-lang](https://github.com/vim-scripts/R.vim) (syntax)
|
- [llvm](https://github.com/rhysd/vim-llvm)
|
||||||
- [racket](https://github.com/wlangstroth/vim-racket) (syntax, indent, ftplugin)
|
- [log](https://github.com/MTDL9/vim-log-highlighting)
|
||||||
- [ragel](https://github.com/jneen/ragel.vim) (syntax)
|
- [lua](https://github.com/tbastos/vim-lua)
|
||||||
- [raku](https://github.com/Raku/vim-raku) (syntax, indent, ftplugin)
|
- [m4](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [raml](https://github.com/IN3D/vim-raml) (syntax, ftplugin)
|
- [mako](https://github.com/sophacles/vim-bundle-mako)
|
||||||
- [razor](https://github.com/adamclerk/vim-razor) (syntax, indent, ftplugin)
|
- [markdown](https://github.com/plasticboy/vim-markdown)
|
||||||
- [reason](https://github.com/reasonml-editor/vim-reason-plus) (syntax, indent)
|
- [mathematica](https://github.com/voldikss/vim-mma)
|
||||||
- [requirements](https://github.com/raimon49/requirements.txt.vim) (syntax, autoload)
|
- [mdx](https://github.com/jxnblk/vim-mdx-js)
|
||||||
- [rspec](https://github.com/keith/rspec.vim) (syntax)
|
- [meson](https://github.com/mesonbuild/meson/tree/master/data/syntax-highlighting/vim)
|
||||||
- [rst](https://github.com/marshallward/vim-restructuredtext) (syntax, indent, autoload, ftplugin)
|
- [moonscript](https://github.com/leafo/moonscript-vim)
|
||||||
- [ruby](https://github.com/vim-ruby/vim-ruby) (syntax, indent, compiler, autoload, ftplugin)
|
- [murphi](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [rust](https://github.com/rust-lang/rust.vim) (syntax, indent, compiler, autoload, ftplugin, ctags)
|
- [nginx](https://github.com/chr4/nginx.vim)
|
||||||
- [sbt](https://github.com/derekwyatt/vim-sbt) (syntax)
|
- [nim](https://github.com/zah/nim.vim)
|
||||||
- [scala](https://github.com/derekwyatt/vim-scala) (syntax, indent, compiler, ftplugin, ctags)
|
- [nix](https://github.com/LnL7/vim-nix)
|
||||||
- [scss](https://github.com/cakebaker/scss-syntax.vim) (syntax, indent, ftplugin)
|
- [objc](https://github.com/b4winckler/vim-objc)
|
||||||
- [sh](https://github.com/arzg/vim-sh) (syntax)
|
- [ocaml](https://github.com/rgrinberg/vim-ocaml)
|
||||||
- [slim](https://github.com/slim-template/vim-slim) (syntax, indent, ftplugin)
|
- [octave](https://github.com/McSinyx/vim-octave)
|
||||||
- [slime](https://github.com/slime-lang/vim-slime-syntax) (syntax, indent)
|
- [opencl](https://github.com/petRUShka/vim-opencl)
|
||||||
- [smt2](https://github.com/bohlender/vim-smt2) (syntax, autoload, ftplugin)
|
- [perl](https://github.com/vim-perl/vim-perl)
|
||||||
- [solidity](https://github.com/tomlion/vim-solidity) (syntax, indent, ftplugin)
|
- [pgsql](https://github.com/lifepillar/pgsql.vim)
|
||||||
- [sql](https://github.com/shmup/vim-sql-syntax) (syntax)
|
- [php](https://github.com/StanAngeloff/php.vim)
|
||||||
- [stylus](https://github.com/wavded/vim-stylus) (syntax, indent, ftplugin)
|
- [plantuml](https://github.com/aklt/plantuml-syntax)
|
||||||
- [svelte](https://github.com/evanleck/vim-svelte#main) (syntax, indent, ftplugin)
|
- [pony](https://github.com/jakwings/vim-pony)
|
||||||
- [svg-indent](https://github.com/jasonshell/vim-svg-indent) (indent)
|
- [powershell](https://github.com/PProvost/vim-ps1)
|
||||||
- [svg](https://github.com/vim-scripts/svg.vim) (syntax)
|
- [protobuf](https://github.com/uarun/vim-protobuf)
|
||||||
- [swift](https://github.com/keith/swift.vim) (syntax, indent, compiler, ftplugin, ctags)
|
- [pug](https://github.com/digitaltoad/vim-pug)
|
||||||
- [sxhkd](https://github.com/baskerville/vim-sxhkdrc) (syntax)
|
- [puppet](https://github.com/rodjek/vim-puppet)
|
||||||
- [systemd](https://github.com/wgwoods/vim-systemd-syntax) (syntax, ftplugin)
|
- [purescript](https://github.com/purescript-contrib/purescript-vim)
|
||||||
- [terraform](https://github.com/hashivim/vim-terraform) (syntax, indent, autoload, ftplugin)
|
- [python-compiler](https://github.com/aliev/vim-compiler-python)
|
||||||
- [textile](https://github.com/timcharper/textile.vim) (syntax, ftplugin)
|
- [python-indent](https://github.com/Vimjas/vim-python-pep8-indent)
|
||||||
- [thrift](https://github.com/solarnz/thrift.vim) (syntax)
|
- [python](https://github.com/vim-python/python-syntax)
|
||||||
- [tmux](https://github.com/ericpruitt/tmux.vim) (syntax, ftplugin)
|
- [qmake](https://github.com/artoj/qmake-syntax-vim)
|
||||||
- [tomdoc](https://github.com/wellbredgrapefruit/tomdoc.vim) (syntax)
|
- [qml](https://github.com/peterhoeg/vim-qml)
|
||||||
- [toml](https://github.com/cespare/vim-toml) (syntax, ftplugin)
|
- [r-lang](https://github.com/vim-scripts/R.vim)
|
||||||
- [tptp](https://github.com/c-cube/vim-tptp) (syntax)
|
- [racket](https://github.com/wlangstroth/vim-racket)
|
||||||
- [twig](https://github.com/lumiliet/vim-twig) (syntax, indent, ftplugin)
|
- [ragel](https://github.com/jneen/ragel.vim)
|
||||||
- [typescript](https://github.com/HerringtonDarkholme/yats.vim) (syntax, indent, compiler, ftplugin, ctags)
|
- [raku](https://github.com/Raku/vim-raku)
|
||||||
- [unison](https://github.com/unisonweb/unison#trunk) (syntax)
|
- [raml](https://github.com/IN3D/vim-raml)
|
||||||
- [v](https://github.com/ollykel/v-vim) (syntax, indent, ftplugin)
|
- [razor](https://github.com/adamclerk/vim-razor)
|
||||||
- [vala](https://github.com/arrufat/vala.vim) (syntax, indent, ftplugin)
|
- [reason](https://github.com/reasonml-editor/vim-reason-plus)
|
||||||
- [vbnet](https://github.com/vim-scripts/vbnet.vim) (syntax)
|
- [requirements](https://github.com/raimon49/requirements.txt.vim)
|
||||||
- [vcl](https://github.com/smerrill/vcl-vim-plugin) (syntax)
|
- [rspec](https://github.com/keith/rspec.vim)
|
||||||
- [vifm](https://github.com/vifm/vifm.vim) (syntax, autoload, ftplugin)
|
- [rst](https://github.com/marshallward/vim-restructuredtext)
|
||||||
- [vm](https://github.com/lepture/vim-velocity) (syntax, indent)
|
- [ruby](https://github.com/vim-ruby/vim-ruby)
|
||||||
- [vue](https://github.com/posva/vim-vue) (syntax, indent, ftplugin)
|
- [rust](https://github.com/rust-lang/rust.vim)
|
||||||
- [xdc](https://github.com/amal-khailtash/vim-xdc-syntax) (syntax)
|
- [sbt](https://github.com/derekwyatt/vim-sbt)
|
||||||
- [xls](https://github.com/vim-scripts/XSLT-syntax) (syntax)
|
- [scala](https://github.com/derekwyatt/vim-scala)
|
||||||
- [xml](https://github.com/amadeus/vim-xml) (syntax)
|
- [scss](https://github.com/cakebaker/scss-syntax.vim)
|
||||||
- [yaml](https://github.com/stephpy/vim-yaml) (syntax, ftplugin)
|
- [sh](https://github.com/arzg/vim-sh)
|
||||||
- [yard](https://github.com/sheerun/vim-yardoc) (syntax)
|
- [slim](https://github.com/slim-template/vim-slim)
|
||||||
- [zephir](https://github.com/xwsoul/vim-zephir) (syntax)
|
- [slime](https://github.com/slime-lang/vim-slime-syntax)
|
||||||
- [zig](https://github.com/ziglang/zig.vim) (syntax, indent, autoload, ftplugin)
|
- [smt2](https://github.com/bohlender/vim-smt2)
|
||||||
- [zinit](https://github.com/zinit-zsh/zplugin-vim-syntax) (syntax)
|
- [solidity](https://github.com/tomlion/vim-solidity)
|
||||||
|
- [sql](https://github.com/shmup/vim-sql-syntax)
|
||||||
|
- [stylus](https://github.com/wavded/vim-stylus)
|
||||||
|
- [svelte](https://github.com/evanleck/vim-svelte/tree/main)
|
||||||
|
- [svg-indent](https://github.com/jasonshell/vim-svg-indent)
|
||||||
|
- [svg](https://github.com/vim-scripts/svg.vim)
|
||||||
|
- [swift](https://github.com/keith/swift.vim)
|
||||||
|
- [sxhkd](https://github.com/baskerville/vim-sxhkdrc)
|
||||||
|
- [systemd](https://github.com/wgwoods/vim-systemd-syntax)
|
||||||
|
- [terraform](https://github.com/hashivim/vim-terraform)
|
||||||
|
- [textile](https://github.com/timcharper/textile.vim)
|
||||||
|
- [thrift](https://github.com/solarnz/thrift.vim)
|
||||||
|
- [tmux](https://github.com/ericpruitt/tmux.vim/tree/master/vim)
|
||||||
|
- [toml](https://github.com/cespare/vim-toml)
|
||||||
|
- [tptp](https://github.com/c-cube/vim-tptp)
|
||||||
|
- [trasys](https://github.com/vim/vim/tree/master/runtime)
|
||||||
|
- [twig](https://github.com/lumiliet/vim-twig)
|
||||||
|
- [typescript](https://github.com/HerringtonDarkholme/yats.vim)
|
||||||
|
- [unison](https://github.com/unisonweb/unison/tree/trunk/editor-support/vim)
|
||||||
|
- [v](https://github.com/ollykel/v-vim)
|
||||||
|
- [vala](https://github.com/arrufat/vala.vim)
|
||||||
|
- [vbnet](https://github.com/vim-scripts/vbnet.vim)
|
||||||
|
- [vcl](https://github.com/smerrill/vcl-vim-plugin)
|
||||||
|
- [velocity](https://github.com/lepture/vim-velocity)
|
||||||
|
- [vmasm](https://github.com/vim/vim/tree/master/runtime)
|
||||||
|
- [vue](https://github.com/posva/vim-vue)
|
||||||
|
- [xdc](https://github.com/amal-khailtash/vim-xdc-syntax)
|
||||||
|
- [xml](https://github.com/amadeus/vim-xml)
|
||||||
|
- [xsl](https://github.com/vim-scripts/XSLT-syntax)
|
||||||
|
- [yaml](https://github.com/stephpy/vim-yaml)
|
||||||
|
- [yard](https://github.com/sheerun/vim-yardoc)
|
||||||
|
- [zephir](https://github.com/xwsoul/vim-zephir)
|
||||||
|
- [zig](https://github.com/ziglang/zig.vim)
|
||||||
|
- [zinit](https://github.com/zinit-zsh/zplugin-vim-syntax)
|
||||||
<!--/Language Packs-->
|
<!--/Language Packs-->
|
||||||
|
|
||||||
## Updating
|
## Updating
|
||||||
|
|
||||||
You can either wait for new patch release with updates or run the `./build` script by yourself.
|
You can either wait for new patch release with updates or run `make` by yourself.
|
||||||
|
|
||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
Please make sure you have `syntax on` in your `.vimrc`, otherwise syntax files are not loaded at all.
|
Please make sure you have `syntax on` in your `.vimrc` (or use something like [sheerun/vimrc](https://github.com/sheerun/vimrc))
|
||||||
|
|
||||||
Individual language packs can be disabled by setting `g:polyglot_disabled` as follows:
|
Individual language packs can be disabled by setting `g:polyglot_disabled` as follows:
|
||||||
|
|
||||||
```viml
|
```viml
|
||||||
" ~/.vimrc, declare this variable before polyglot is loaded
|
|
||||||
let g:polyglot_disabled = ['css']
|
let g:polyglot_disabled = ['css']
|
||||||
```
|
```
|
||||||
|
|
||||||
Note that disabling languages won't make in general your vim startup any faster / slower (only for specific file type). Vim-polyglot is selection of language plugins that are loaded only on demand.
|
*Please declare this variable before polyglot is loaded (at the top of .vimrc)*
|
||||||
|
|
||||||
|
Please note that disabling a language won't make in your vim startup any faster / slower (only for specific this specific filetype). All plugins are loaded lazily, on demand.
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
Language packs are periodically updated using automated `build` script.
|
Language packs are periodically updated using automated `scripts/build` script.
|
||||||
|
|
||||||
Feel free to add your language, and send pull-request. In your pull request, please include:
|
Feel free to add your language to `packages.yaml`, and send pull-request. Please don't run `make` and include that in your PR, send just changes to `packages.yaml` and build scripts if really necessary. You can run `make test` to run rough tests.
|
||||||
1. How you chose the particular repo from which to pull support for this language.
|
|
||||||
2. An updated https://github.com/sheerun/vim-polyglot/blob/master/build .
|
|
||||||
3. If at all possible, absolutely nothing else (in particular, please don't run `build` and include that in your PR).
|
|
||||||
|
|
||||||
The easier it is to validate that the new language won't do anything wacky, the faster it'll be merged. In particular, languages that utilize global plugins (loaded for every filetype), or plugins with dangerous features (like `call` based on the contents of a file being edited), will never be merged, as they will be slow or dangerous, respectively.
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
See linked repositories for detailed license information.
|
See linked repositories for detailed license information. This repository is MIT-licensed.
|
||||||
|
|||||||
@@ -1,3 +1,50 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
|
||||||
|
|
||||||
|
" Copyright (c) 2016-2020 Jon Parise <jon@indelible.org>
|
||||||
|
"
|
||||||
|
" Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
" of this software and associated documentation files (the "Software"), to
|
||||||
|
" deal in the Software without restriction, including without limitation the
|
||||||
|
" rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||||
|
" sell copies of the Software, and to permit persons to whom the Software is
|
||||||
|
" furnished to do so, subject to the following conditions:
|
||||||
|
"
|
||||||
|
" The above copyright notice and this permission notice shall be included in
|
||||||
|
" all copies or substantial portions of the Software.
|
||||||
|
"
|
||||||
|
" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
" LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
" FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||||
|
" IN THE SOFTWARE.
|
||||||
|
"
|
||||||
|
" Language: GraphQL
|
||||||
|
" Maintainer: Jon Parise <jon@indelible.org>
|
||||||
|
|
||||||
|
runtime! indent/graphql.vim
|
||||||
|
|
||||||
|
" Don't redefine our function and also require the standard Javascript indent
|
||||||
|
" function to exist.
|
||||||
|
if exists('*GetJavascriptGraphQLIndent') || !exists('*GetJavascriptIndent')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Set the indentexpr with our own version that will call GetGraphQLIndent when
|
||||||
|
" we're inside of a GraphQL string and otherwise defer to GetJavascriptIndent.
|
||||||
|
setlocal indentexpr=GetJavascriptGraphQLIndent()
|
||||||
|
|
||||||
|
function GetJavascriptGraphQLIndent()
|
||||||
|
let l:stack = map(synstack(v:lnum, 1), "synIDattr(v:val,'name')")
|
||||||
|
if !empty(l:stack) && l:stack[0] ==# 'graphqlTemplateString'
|
||||||
|
return GetGraphQLIndent()
|
||||||
|
endif
|
||||||
|
|
||||||
|
return GetJavascriptIndent()
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
endif
|
||||||
if !exists('g:polyglot_disabled') || !(index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'jsx') != -1)
|
if !exists('g:polyglot_disabled') || !(index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'jsx') != -1)
|
||||||
|
|
||||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
|
|||||||
47
after/indent/typescript.vim
Normal file
47
after/indent/typescript.vim
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
|
||||||
|
|
||||||
|
" Copyright (c) 2016-2020 Jon Parise <jon@indelible.org>
|
||||||
|
"
|
||||||
|
" Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
" of this software and associated documentation files (the "Software"), to
|
||||||
|
" deal in the Software without restriction, including without limitation the
|
||||||
|
" rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||||
|
" sell copies of the Software, and to permit persons to whom the Software is
|
||||||
|
" furnished to do so, subject to the following conditions:
|
||||||
|
"
|
||||||
|
" The above copyright notice and this permission notice shall be included in
|
||||||
|
" all copies or substantial portions of the Software.
|
||||||
|
"
|
||||||
|
" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
" LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
" FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||||
|
" IN THE SOFTWARE.
|
||||||
|
"
|
||||||
|
" Language: GraphQL
|
||||||
|
" Maintainer: Jon Parise <jon@indelible.org>
|
||||||
|
|
||||||
|
runtime! indent/graphql.vim
|
||||||
|
|
||||||
|
" Don't redefine our function and also require the standard Typescript indent
|
||||||
|
" function to exist.
|
||||||
|
if exists('*GetTypescriptGraphQLIndent') || !exists('*GetTypescriptIndent')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Set the indentexpr with our own version that will call GetGraphQLIndent when
|
||||||
|
" we're inside of a GraphQL string and otherwise defer to GetTypescriptIndent.
|
||||||
|
setlocal indentexpr=GetTypescriptGraphQLIndent()
|
||||||
|
|
||||||
|
function GetTypescriptGraphQLIndent()
|
||||||
|
let l:stack = map(synstack(v:lnum, 1), "synIDattr(v:val,'name')")
|
||||||
|
if !empty(l:stack) && l:stack[0] ==# 'graphqlTemplateString'
|
||||||
|
return GetGraphQLIndent()
|
||||||
|
endif
|
||||||
|
|
||||||
|
return GetTypescriptIndent()
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -1,321 +0,0 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'c++11') == -1
|
|
||||||
|
|
||||||
" Vim syntax file
|
|
||||||
" Language: C Additions
|
|
||||||
" Maintainer: Jon Haggblad <jon@haeggblad.com>
|
|
||||||
" Contributor: Mikhail Wolfson <mywolfson@gmail.com>
|
|
||||||
" URL: http://www.haeggblad.com
|
|
||||||
" Last Change: 6 Sep 2014
|
|
||||||
" Version: 0.3
|
|
||||||
" Changelog:
|
|
||||||
" 0.3 - integration of aftersyntaxc.vim
|
|
||||||
" 0.2 - Cleanup
|
|
||||||
" 0.1 - initial version.
|
|
||||||
"
|
|
||||||
" Syntax highlighting for functions in C.
|
|
||||||
"
|
|
||||||
" Based on:
|
|
||||||
" http://stackoverflow.com/questions/736701/class-function-names-highlighting-in-vim
|
|
||||||
|
|
||||||
" -----------------------------------------------------------------------------
|
|
||||||
" Highlight function names.
|
|
||||||
" -----------------------------------------------------------------------------
|
|
||||||
if !exists('g:cpp_no_function_highlight')
|
|
||||||
syn match cCustomParen transparent "(" contains=cParen contains=cCppParen
|
|
||||||
syn match cCustomFunc "\w\+\s*(\@=" contains=cCustomParen
|
|
||||||
hi def link cCustomFunc Function
|
|
||||||
endif
|
|
||||||
|
|
||||||
" -----------------------------------------------------------------------------
|
|
||||||
" Highlight member variable names.
|
|
||||||
" -----------------------------------------------------------------------------
|
|
||||||
if exists('g:cpp_member_variable_highlight') && g:cpp_member_variable_highlight
|
|
||||||
syn match cCustomDot "\." contained
|
|
||||||
syn match cCustomPtr "->" contained
|
|
||||||
syn match cCustomMemVar "\(\.\|->\)\h\w*" contains=cCustomDot,cCustomPtr
|
|
||||||
hi def link cCustomMemVar Function
|
|
||||||
endif
|
|
||||||
|
|
||||||
" -----------------------------------------------------------------------------
|
|
||||||
" Highlight POSIX functions.
|
|
||||||
" -----------------------------------------------------------------------------
|
|
||||||
if exists('g:cpp_posix_standard') && g:cpp_posix_standard
|
|
||||||
syn keyword cPOSIXFunction socket accept bind connect getsockname
|
|
||||||
syn keyword cPOSIXFunction listen recv recvfrom recvmsg
|
|
||||||
syn keyword cPOSIXFunction send sendto sendmsg setsockopt socketpair
|
|
||||||
syn keyword cPOSIXFunction htonl htons ntohl ntohs
|
|
||||||
syn keyword cPOSIXFunction inet_ntop inet_pton getaddrinfo
|
|
||||||
syn keyword cPOSIXFunction poll select pselect
|
|
||||||
hi def link cPOSIXFunction Function
|
|
||||||
endif
|
|
||||||
|
|
||||||
" -----------------------------------------------------------------------------
|
|
||||||
" Source: aftersyntaxc.vim
|
|
||||||
" -----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
" Common ANSI-standard functions
|
|
||||||
syn keyword cAnsiFunction MULU_ DIVU_ MODU_ MUL_ DIV_ MOD_
|
|
||||||
syn keyword cAnsiFunction main typeof
|
|
||||||
syn keyword cAnsiFunction open close read write lseek dup dup2
|
|
||||||
syn keyword cAnsiFunction fcntl ioctl
|
|
||||||
syn keyword cAnsiFunction wctrans towctrans towupper
|
|
||||||
syn keyword cAnsiFunction towlower wctype iswctype
|
|
||||||
syn keyword cAnsiFunction iswxdigit iswupper iswspace
|
|
||||||
syn keyword cAnsiFunction iswpunct iswprint iswlower
|
|
||||||
syn keyword cAnsiFunction iswgraph iswdigit iswcntrl
|
|
||||||
syn keyword cAnsiFunction iswalpha iswalnum wcsrtombs
|
|
||||||
syn keyword cAnsiFunction mbsrtowcs wcrtomb mbrtowc
|
|
||||||
syn keyword cAnsiFunction mbrlen mbsinit wctob
|
|
||||||
syn keyword cAnsiFunction btowc wcsfxtime wcsftime
|
|
||||||
syn keyword cAnsiFunction wmemset wmemmove wmemcpy
|
|
||||||
syn keyword cAnsiFunction wmemcmp wmemchr wcstok
|
|
||||||
syn keyword cAnsiFunction wcsstr wcsspn wcsrchr
|
|
||||||
syn keyword cAnsiFunction wcspbrk wcslen wcscspn
|
|
||||||
syn keyword cAnsiFunction wcschr wcsxfrm wcsncmp
|
|
||||||
syn keyword cAnsiFunction wcscoll wcscmp wcsncat
|
|
||||||
syn keyword cAnsiFunction wcscat wcsncpy wcscpy
|
|
||||||
syn keyword cAnsiFunction wcstoull wcstoul wcstoll
|
|
||||||
syn keyword cAnsiFunction wcstol wcstold wcstof
|
|
||||||
syn keyword cAnsiFunction wcstod ungetwc putwchar
|
|
||||||
syn keyword cAnsiFunction putwc getwchar getwc
|
|
||||||
syn keyword cAnsiFunction fwide fputws fputwc
|
|
||||||
syn keyword cAnsiFunction fgetws fgetwc wscanf
|
|
||||||
syn keyword cAnsiFunction wprintf vwscanf vwprintf
|
|
||||||
syn keyword cAnsiFunction vswscanf vswprintf vfwscanf
|
|
||||||
syn keyword cAnsiFunction vfwprintf swscanf swprintf
|
|
||||||
syn keyword cAnsiFunction fwscanf fwprintf zonetime
|
|
||||||
syn keyword cAnsiFunction strfxtime strftime localtime
|
|
||||||
syn keyword cAnsiFunction gmtime ctime asctime
|
|
||||||
syn keyword cAnsiFunction time mkxtime mktime
|
|
||||||
syn keyword cAnsiFunction difftime clock strlen
|
|
||||||
syn keyword cAnsiFunction strerror memset strtok
|
|
||||||
syn keyword cAnsiFunction strstr strspn strrchr
|
|
||||||
syn keyword cAnsiFunction strpbrk strcspn strchr
|
|
||||||
syn keyword cAnsiFunction memchr strxfrm strncmp
|
|
||||||
syn keyword cAnsiFunction strcoll strcmp memcmp
|
|
||||||
syn keyword cAnsiFunction strncat strcat strncpy
|
|
||||||
syn keyword cAnsiFunction strcpy memmove memcpy
|
|
||||||
syn keyword cAnsiFunction wcstombs mbstowcs wctomb
|
|
||||||
syn keyword cAnsiFunction mbtowc mblen lldiv
|
|
||||||
syn keyword cAnsiFunction ldiv div llabs
|
|
||||||
syn keyword cAnsiFunction labs abs qsort
|
|
||||||
"syn keyword cAnsiFunction bsearch system getenv
|
|
||||||
syn keyword cAnsiFunction bsearch getenv
|
|
||||||
syn keyword cAnsiFunction exit atexit abort
|
|
||||||
syn keyword cAnsiFunction realloc malloc free
|
|
||||||
syn keyword cAnsiFunction calloc srand rand
|
|
||||||
syn keyword cAnsiFunction strtoull strtoul strtoll
|
|
||||||
syn keyword cAnsiFunction strtol strtold strtof
|
|
||||||
syn keyword cAnsiFunction strtod atoll atol
|
|
||||||
syn keyword cAnsiFunction atoi atof perror
|
|
||||||
syn keyword cAnsiFunction ferror feof clearerr
|
|
||||||
syn keyword cAnsiFunction rewind ftell fsetpos
|
|
||||||
syn keyword cAnsiFunction fseek fgetpos fwrite
|
|
||||||
syn keyword cAnsiFunction fread ungetc puts
|
|
||||||
syn keyword cAnsiFunction putchar putc gets
|
|
||||||
syn keyword cAnsiFunction getchar getc fputs
|
|
||||||
syn keyword cAnsiFunction fputc fgets fgetc
|
|
||||||
syn keyword cAnsiFunction vsscanf vsprintf vsnprintf
|
|
||||||
syn keyword cAnsiFunction vscanf vprintf vfscanf
|
|
||||||
syn keyword cAnsiFunction vfprintf sscanf sprintf
|
|
||||||
syn keyword cAnsiFunction snprintf scanf printf
|
|
||||||
syn keyword cAnsiFunction fscanf fprintf setvbuf
|
|
||||||
syn keyword cAnsiFunction setbuf freopen fopen
|
|
||||||
syn keyword cAnsiFunction fflush fclose tmpnam
|
|
||||||
syn keyword cAnsiFunction tmpfile rename remove
|
|
||||||
syn keyword cAnsiFunction offsetof va_start va_end
|
|
||||||
syn keyword cAnsiFunction va_copy va_arg raise signal
|
|
||||||
syn keyword cAnsiFunction longjmp setjmp isunordered
|
|
||||||
syn keyword cAnsiFunction islessgreater islessequal isless
|
|
||||||
syn keyword cAnsiFunction isgreaterequal isgreater fmal
|
|
||||||
syn keyword cAnsiFunction fmaf fma fminl
|
|
||||||
syn keyword cAnsiFunction fminf fmin fmaxl
|
|
||||||
syn keyword cAnsiFunction fmaxf fmax fdiml
|
|
||||||
syn keyword cAnsiFunction fdimf fdim nextafterxl
|
|
||||||
syn keyword cAnsiFunction nextafterxf nextafterx nextafterl
|
|
||||||
syn keyword cAnsiFunction nextafterf nextafter nanl
|
|
||||||
syn keyword cAnsiFunction nanf nan copysignl
|
|
||||||
syn keyword cAnsiFunction copysignf copysign remquol
|
|
||||||
syn keyword cAnsiFunction remquof remquo remainderl
|
|
||||||
syn keyword cAnsiFunction remainderf remainder fmodl
|
|
||||||
syn keyword cAnsiFunction fmodf fmod truncl
|
|
||||||
syn keyword cAnsiFunction truncf trunc llroundl
|
|
||||||
syn keyword cAnsiFunction llroundf llround lroundl
|
|
||||||
syn keyword cAnsiFunction lroundf lround roundl
|
|
||||||
syn keyword cAnsiFunction roundf round llrintl
|
|
||||||
syn keyword cAnsiFunction llrintf llrint lrintl
|
|
||||||
syn keyword cAnsiFunction lrintf lrint rintl
|
|
||||||
syn keyword cAnsiFunction rintf rint nearbyintl
|
|
||||||
syn keyword cAnsiFunction nearbyintf nearbyint floorl
|
|
||||||
syn keyword cAnsiFunction floorf floor ceill
|
|
||||||
syn keyword cAnsiFunction ceilf ceil tgammal
|
|
||||||
syn keyword cAnsiFunction tgammaf tgamma lgammal
|
|
||||||
syn keyword cAnsiFunction lgammaf lgamma erfcl
|
|
||||||
syn keyword cAnsiFunction erfcf erfc erfl
|
|
||||||
syn keyword cAnsiFunction erff erf sqrtl
|
|
||||||
syn keyword cAnsiFunction sqrtf sqrt powl
|
|
||||||
syn keyword cAnsiFunction powf pow hypotl
|
|
||||||
syn keyword cAnsiFunction hypotf hypot fabsl
|
|
||||||
syn keyword cAnsiFunction fabsf fabs cbrtl
|
|
||||||
syn keyword cAnsiFunction cbrtf cbrt scalblnl
|
|
||||||
syn keyword cAnsiFunction scalblnf scalbln scalbnl
|
|
||||||
syn keyword cAnsiFunction scalbnf scalbn modfl
|
|
||||||
syn keyword cAnsiFunction modff modf logbl
|
|
||||||
syn keyword cAnsiFunction logbf logb log2l
|
|
||||||
syn keyword cAnsiFunction log2f log2 log1pl
|
|
||||||
syn keyword cAnsiFunction log1pf log1p log10l
|
|
||||||
syn keyword cAnsiFunction log10f log10 logl
|
|
||||||
syn keyword cAnsiFunction logf log ldexpl
|
|
||||||
syn keyword cAnsiFunction ldexpf ldexp ilogbl
|
|
||||||
syn keyword cAnsiFunction ilogbf ilogb frexpl
|
|
||||||
syn keyword cAnsiFunction frexpf frexp expm1l
|
|
||||||
syn keyword cAnsiFunction expm1f expm1 exp2l
|
|
||||||
syn keyword cAnsiFunction exp2f exp2 expl
|
|
||||||
syn keyword cAnsiFunction expf exp tanhl
|
|
||||||
syn keyword cAnsiFunction tanhf tanh sinhl
|
|
||||||
syn keyword cAnsiFunction sinhf sinh coshl
|
|
||||||
syn keyword cAnsiFunction coshf cosh atanhl
|
|
||||||
syn keyword cAnsiFunction atanhf atanh asinhl
|
|
||||||
syn keyword cAnsiFunction asinhf asinh acoshl
|
|
||||||
syn keyword cAnsiFunction acoshf acosh tanl
|
|
||||||
syn keyword cAnsiFunction tanf tan sinl
|
|
||||||
syn keyword cAnsiFunction sinf sin cosl
|
|
||||||
syn keyword cAnsiFunction cosf cos atan2l
|
|
||||||
syn keyword cAnsiFunction atan2f atan2 atanl
|
|
||||||
syn keyword cAnsiFunction atanf atan asinl
|
|
||||||
syn keyword cAnsiFunction asinf asin acosl
|
|
||||||
syn keyword cAnsiFunction acosf acos signbit
|
|
||||||
syn keyword cAnsiFunction isnormal isnan isinf
|
|
||||||
syn keyword cAnsiFunction isfinite fpclassify localeconv
|
|
||||||
syn keyword cAnsiFunction setlocale wcstoumax wcstoimax
|
|
||||||
syn keyword cAnsiFunction strtoumax strtoimax feupdateenv
|
|
||||||
syn keyword cAnsiFunction fesetenv feholdexcept fegetenv
|
|
||||||
syn keyword cAnsiFunction fesetround fegetround fetestexcept
|
|
||||||
syn keyword cAnsiFunction fesetexceptflag feraiseexcept fegetexceptflag
|
|
||||||
syn keyword cAnsiFunction feclearexcept toupper tolower
|
|
||||||
syn keyword cAnsiFunction isxdigit isupper isspace
|
|
||||||
syn keyword cAnsiFunction ispunct isprint islower
|
|
||||||
syn keyword cAnsiFunction isgraph isdigit iscntrl
|
|
||||||
syn keyword cAnsiFunction isalpha isalnum creall
|
|
||||||
syn keyword cAnsiFunction crealf creal cprojl
|
|
||||||
syn keyword cAnsiFunction cprojf cproj conjl
|
|
||||||
syn keyword cAnsiFunction conjf conj cimagl
|
|
||||||
syn keyword cAnsiFunction cimagf cimag cargl
|
|
||||||
syn keyword cAnsiFunction cargf carg csqrtl
|
|
||||||
syn keyword cAnsiFunction csqrtf csqrt cpowl
|
|
||||||
syn keyword cAnsiFunction cpowf cpow cabsl
|
|
||||||
syn keyword cAnsiFunction cabsf cabs clogl
|
|
||||||
syn keyword cAnsiFunction clogf clog cexpl
|
|
||||||
syn keyword cAnsiFunction cexpf cexp ctanhl
|
|
||||||
syn keyword cAnsiFunction ctanhf ctanh csinhl
|
|
||||||
syn keyword cAnsiFunction csinhf csinh ccoshl
|
|
||||||
syn keyword cAnsiFunction ccoshf ccosh catanhl
|
|
||||||
syn keyword cAnsiFunction catanhf catanh casinhl
|
|
||||||
syn keyword cAnsiFunction casinhf casinh cacoshl
|
|
||||||
syn keyword cAnsiFunction cacoshf cacosh ctanl
|
|
||||||
syn keyword cAnsiFunction ctanf ctan csinl
|
|
||||||
syn keyword cAnsiFunction csinf csin ccosl
|
|
||||||
syn keyword cAnsiFunction ccosf ccos catanl
|
|
||||||
syn keyword cAnsiFunction catanf catan casinl
|
|
||||||
syn keyword cAnsiFunction casinf casin cacosl
|
|
||||||
syn keyword cAnsiFunction cacosf cacos assert
|
|
||||||
syn keyword cAnsiFunction UINTMAX_C INTMAX_C UINT64_C
|
|
||||||
syn keyword cAnsiFunction UINT32_C UINT16_C UINT8_C
|
|
||||||
syn keyword cAnsiFunction INT64_C INT32_C INT16_C INT8_C
|
|
||||||
|
|
||||||
" Common ANSI-standard Names
|
|
||||||
syn keyword cAnsiName PRId8 PRIi16 PRIo32 PRIu64
|
|
||||||
syn keyword cAnsiName PRId16 PRIi32 PRIo64 PRIuLEAST8
|
|
||||||
syn keyword cAnsiName PRId32 PRIi64 PRIoLEAST8 PRIuLEAST16
|
|
||||||
syn keyword cAnsiName PRId64 PRIiLEAST8 PRIoLEAST16 PRIuLEAST32
|
|
||||||
syn keyword cAnsiName PRIdLEAST8 PRIiLEAST16 PRIoLEAST32 PRIuLEAST64
|
|
||||||
syn keyword cAnsiName PRIdLEAST16 PRIiLEAST32 PRIoLEAST64 PRIuFAST8
|
|
||||||
syn keyword cAnsiName PRIdLEAST32 PRIiLEAST64 PRIoFAST8 PRIuFAST16
|
|
||||||
syn keyword cAnsiName PRIdLEAST64 PRIiFAST8 PRIoFAST16 PRIuFAST32
|
|
||||||
syn keyword cAnsiName PRIdFAST8 PRIiFAST16 PRIoFAST32 PRIuFAST64
|
|
||||||
syn keyword cAnsiName PRIdFAST16 PRIiFAST32 PRIoFAST64 PRIuMAX
|
|
||||||
syn keyword cAnsiName PRIdFAST32 PRIiFAST64 PRIoMAX PRIuPTR
|
|
||||||
syn keyword cAnsiName PRIdFAST64 PRIiMAX PRIoPTR PRIx8
|
|
||||||
syn keyword cAnsiName PRIdMAX PRIiPTR PRIu8 PRIx16
|
|
||||||
syn keyword cAnsiName PRIdPTR PRIo8 PRIu16 PRIx32
|
|
||||||
syn keyword cAnsiName PRIi8 PRIo16 PRIu32 PRIx64
|
|
||||||
|
|
||||||
syn keyword cAnsiName PRIxLEAST8 SCNd8 SCNiFAST32 SCNuLEAST32
|
|
||||||
syn keyword cAnsiName PRIxLEAST16 SCNd16 SCNiFAST64 SCNuLEAST64
|
|
||||||
syn keyword cAnsiName PRIxLEAST32 SCNd32 SCNiMAX SCNuFAST8
|
|
||||||
syn keyword cAnsiName PRIxLEAST64 SCNd64 SCNiPTR SCNuFAST16
|
|
||||||
syn keyword cAnsiName PRIxFAST8 SCNdLEAST8 SCNo8 SCNuFAST32
|
|
||||||
syn keyword cAnsiName PRIxFAST16 SCNdLEAST16 SCNo16 SCNuFAST64
|
|
||||||
syn keyword cAnsiName PRIxFAST32 SCNdLEAST32 SCNo32 SCNuMAX
|
|
||||||
syn keyword cAnsiName PRIxFAST64 SCNdLEAST64 SCNo64 SCNuPTR
|
|
||||||
syn keyword cAnsiName PRIxMAX SCNdFAST8 SCNoLEAST8 SCNx8
|
|
||||||
syn keyword cAnsiName PRIxPTR SCNdFAST16 SCNoLEAST16 SCNx16
|
|
||||||
syn keyword cAnsiName PRIX8 SCNdFAST32 SCNoLEAST32 SCNx32
|
|
||||||
syn keyword cAnsiName PRIX16 SCNdFAST64 SCNoLEAST64 SCNx64
|
|
||||||
syn keyword cAnsiName PRIX32 SCNdMAX SCNoFAST8 SCNxLEAST8
|
|
||||||
syn keyword cAnsiName PRIX64 SCNdPTR SCNoFAST16 SCNxLEAST16
|
|
||||||
syn keyword cAnsiName PRIXLEAST8 SCNi8 SCNoFAST32 SCNxLEAST32
|
|
||||||
syn keyword cAnsiName PRIXLEAST16 SCNi16 SCNoFAST64 SCNxLEAST64
|
|
||||||
syn keyword cAnsiName PRIXLEAST32 SCNi32 SCNoMAX SCNxFAST8
|
|
||||||
syn keyword cAnsiName PRIXLEAST64 SCNi64 SCNoPTR SCNxFAST16
|
|
||||||
syn keyword cAnsiName PRIXFAST8 SCNiLEAST8 SCNu8 SCNxFAST32
|
|
||||||
syn keyword cAnsiName PRIXFAST16 SCNiLEAST16 SCNu16 SCNxFAST64
|
|
||||||
syn keyword cAnsiName PRIXFAST32 SCNiLEAST32 SCNu32 SCNxMAX
|
|
||||||
syn keyword cAnsiName PRIXFAST64 SCNiLEAST64 SCNu64 SCNxPTR
|
|
||||||
syn keyword cAnsiName PRIXMAX SCNiFAST8 SCNuLEAST8
|
|
||||||
syn keyword cAnsiName PRIXPTR SCNiFAST16 SCNuLEAST16
|
|
||||||
|
|
||||||
syn keyword cAnsiName errno environ
|
|
||||||
|
|
||||||
syn keyword cAnsiName STDC CX_LIMITED_RANGE
|
|
||||||
syn keyword cAnsiName STDC FENV_ACCESS
|
|
||||||
syn keyword cAnsiName STDC FP_CONTRACT
|
|
||||||
|
|
||||||
syn keyword cAnsiName and bitor not_eq xor
|
|
||||||
syn keyword cAnsiName and_eq compl or xor_eq
|
|
||||||
syn keyword cAnsiName bitand not or_eq
|
|
||||||
|
|
||||||
hi def link cAnsiFunction cFunction
|
|
||||||
hi def link cAnsiName cIdentifier
|
|
||||||
hi def link cFunction Function
|
|
||||||
hi def link cIdentifier Identifier
|
|
||||||
|
|
||||||
" Booleans
|
|
||||||
syn keyword cBoolean true false TRUE FALSE
|
|
||||||
hi def link cBoolean Boolean
|
|
||||||
|
|
||||||
" -----------------------------------------------------------------------------
|
|
||||||
" Additional optional highlighting
|
|
||||||
" -----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
" Operators
|
|
||||||
"syn match cOperator "\(<<\|>>\|[-+*/%&^|<>!=]\)="
|
|
||||||
"syn match cOperator "<<\|>>\|&&\|||\|++\|--\|->"
|
|
||||||
"syn match cOperator "[.!~*&%<>^|=,+-]"
|
|
||||||
"syn match cOperator "/[^/*=]"me=e-1
|
|
||||||
"syn match cOperator "/$"
|
|
||||||
"syn match cOperator "&&\|||"
|
|
||||||
"syn match cOperator "[][]"
|
|
||||||
"
|
|
||||||
"" Preprocs
|
|
||||||
"syn keyword cDefined defined contained containedin=cDefine
|
|
||||||
"hi def link cDefined cDefine
|
|
||||||
|
|
||||||
"" Functions
|
|
||||||
"syn match cUserFunction "\<\h\w*\>\(\s\|\n\)*("me=e-1 contains=cType,cDelimiter,cDefine
|
|
||||||
"syn match cUserFunctionPointer "(\s*\*\s*\h\w*\s*)\(\s\|\n\)*(" contains=cDelimiter,cOperator
|
|
||||||
"
|
|
||||||
"hi def link cUserFunction cFunction
|
|
||||||
"hi def link cUserFunctionPointer cFunction
|
|
||||||
"
|
|
||||||
"" Delimiters
|
|
||||||
"syn match cDelimiter "[();\\]"
|
|
||||||
"" foldmethod=syntax fix, courtesy of Ivan Freitas
|
|
||||||
"syn match cBraces display "[{}]"
|
|
||||||
|
|
||||||
" Links
|
|
||||||
"hi def link cDelimiter Delimiter
|
|
||||||
" foldmethod=syntax fix, courtesy of Ivan Freitas
|
|
||||||
"hi def link cBraces Delimiter
|
|
||||||
|
|
||||||
endif
|
|
||||||
2297
after/syntax/cpp.vim
2297
after/syntax/cpp.vim
File diff suppressed because it is too large
Load Diff
641
autoload/ada.vim
Normal file
641
autoload/ada.vim
Normal file
@@ -0,0 +1,641 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ada') == -1
|
||||||
|
|
||||||
|
"------------------------------------------------------------------------------
|
||||||
|
" Description: Perform Ada specific completion & tagging.
|
||||||
|
" Language: Ada (2005)
|
||||||
|
" $Id: ada.vim 887 2008-07-08 14:29:01Z krischik $
|
||||||
|
" Maintainer: Mathias Brousset <mathiasb17@gmail.com>
|
||||||
|
" Martin Krischik <krischik@users.sourceforge.net>
|
||||||
|
" Taylor Venable <taylor@metasyntax.net>
|
||||||
|
" Neil Bird <neil@fnxweb.com>
|
||||||
|
" Ned Okie <nokie@radford.edu>
|
||||||
|
" $Author: krischik $
|
||||||
|
" $Date: 2017-01-31 20:20:05 +0200 (Mon, 01 Jan 2017) $
|
||||||
|
" Version: 4.6
|
||||||
|
" $Revision: 887 $
|
||||||
|
" $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/autoload/ada.vim $
|
||||||
|
" History: 24.05.2006 MK Unified Headers
|
||||||
|
" 26.05.2006 MK ' should not be in iskeyword.
|
||||||
|
" 16.07.2006 MK Ada-Mode as vim-ball
|
||||||
|
" 02.10.2006 MK Better folding.
|
||||||
|
" 15.10.2006 MK Bram's suggestion for runtime integration
|
||||||
|
" 05.11.2006 MK Bram suggested not to use include protection for
|
||||||
|
" autoload
|
||||||
|
" 05.11.2006 MK Bram suggested to save on spaces
|
||||||
|
" 08.07.2007 TV fix mapleader problems.
|
||||||
|
" 09.05.2007 MK Session just won't work no matter how much
|
||||||
|
" tweaking is done
|
||||||
|
" 19.09.2007 NO still some mapleader problems
|
||||||
|
" 31.01.2017 MB fix more mapleader problems
|
||||||
|
" Help Page: ft-ada-functions
|
||||||
|
"------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
if version < 700
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let s:keepcpo= &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
" Section: Constants {{{1
|
||||||
|
"
|
||||||
|
let g:ada#DotWordRegex = '\a\w*\(\_s*\.\_s*\a\w*\)*'
|
||||||
|
let g:ada#WordRegex = '\a\w*'
|
||||||
|
let g:ada#Comment = "\\v^(\"[^\"]*\"|'.'|[^\"']){-}\\zs\\s*--.*"
|
||||||
|
let g:ada#Keywords = []
|
||||||
|
|
||||||
|
" Section: g:ada#Keywords {{{1
|
||||||
|
"
|
||||||
|
" Section: add Ada keywords {{{2
|
||||||
|
"
|
||||||
|
for Item in ['abort', 'else', 'new', 'return', 'abs', 'elsif', 'not', 'reverse', 'abstract', 'end', 'null', 'accept', 'entry', 'select', 'access', 'exception', 'of', 'separate', 'aliased', 'exit', 'or', 'subtype', 'all', 'others', 'synchronized', 'and', 'for', 'out', 'array', 'function', 'overriding', 'tagged', 'at', 'task', 'generic', 'package', 'terminate', 'begin', 'goto', 'pragma', 'then', 'body', 'private', 'type', 'if', 'procedure', 'case', 'in', 'protected', 'until', 'constant', 'interface', 'use', 'is', 'raise', 'declare', 'range', 'when', 'delay', 'limited', 'record', 'while', 'delta', 'loop', 'rem', 'with', 'digits', 'renames', 'do', 'mod', 'requeue', 'xor']
|
||||||
|
let g:ada#Keywords += [{
|
||||||
|
\ 'word': Item,
|
||||||
|
\ 'menu': 'keyword',
|
||||||
|
\ 'info': 'Ada keyword.',
|
||||||
|
\ 'kind': 'k',
|
||||||
|
\ 'icase': 1}]
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" Section: GNAT Project Files {{{3
|
||||||
|
"
|
||||||
|
if exists ('g:ada_with_gnat_project_files')
|
||||||
|
for Item in ['project']
|
||||||
|
let g:ada#Keywords += [{
|
||||||
|
\ 'word': Item,
|
||||||
|
\ 'menu': 'keyword',
|
||||||
|
\ 'info': 'GNAT projectfile keyword.',
|
||||||
|
\ 'kind': 'k',
|
||||||
|
\ 'icase': 1}]
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Section: add standart exception {{{2
|
||||||
|
"
|
||||||
|
for Item in ['Constraint_Error', 'Program_Error', 'Storage_Error', 'Tasking_Error', 'Status_Error', 'Mode_Error', 'Name_Error', 'Use_Error', 'Device_Error', 'End_Error', 'Data_Error', 'Layout_Error', 'Length_Error', 'Pattern_Error', 'Index_Error', 'Translation_Error', 'Time_Error', 'Argument_Error', 'Tag_Error', 'Picture_Error', 'Terminator_Error', 'Conversion_Error', 'Pointer_Error', 'Dereference_Error', 'Update_Error']
|
||||||
|
let g:ada#Keywords += [{
|
||||||
|
\ 'word': Item,
|
||||||
|
\ 'menu': 'exception',
|
||||||
|
\ 'info': 'Ada standart exception.',
|
||||||
|
\ 'kind': 'x',
|
||||||
|
\ 'icase': 1}]
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" Section: add GNAT exception {{{3
|
||||||
|
"
|
||||||
|
if exists ('g:ada_gnat_extensions')
|
||||||
|
for Item in ['Assert_Failure']
|
||||||
|
let g:ada#Keywords += [{
|
||||||
|
\ 'word': Item,
|
||||||
|
\ 'menu': 'exception',
|
||||||
|
\ 'info': 'GNAT exception.',
|
||||||
|
\ 'kind': 'x',
|
||||||
|
\ 'icase': 1}]
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Section: add Ada buildin types {{{2
|
||||||
|
"
|
||||||
|
for Item in ['Boolean', 'Integer', 'Natural', 'Positive', 'Float', 'Character', 'Wide_Character', 'Wide_Wide_Character', 'String', 'Wide_String', 'Wide_Wide_String', 'Duration']
|
||||||
|
let g:ada#Keywords += [{
|
||||||
|
\ 'word': Item,
|
||||||
|
\ 'menu': 'type',
|
||||||
|
\ 'info': 'Ada buildin type.',
|
||||||
|
\ 'kind': 't',
|
||||||
|
\ 'icase': 1}]
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" Section: add GNAT buildin types {{{3
|
||||||
|
"
|
||||||
|
if exists ('g:ada_gnat_extensions')
|
||||||
|
for Item in ['Short_Integer', 'Short_Short_Integer', 'Long_Integer', 'Long_Long_Integer', 'Short_Float', 'Short_Short_Float', 'Long_Float', 'Long_Long_Float']
|
||||||
|
let g:ada#Keywords += [{
|
||||||
|
\ 'word': Item,
|
||||||
|
\ 'menu': 'type',
|
||||||
|
\ 'info': 'GNAT buildin type.',
|
||||||
|
\ 'kind': 't',
|
||||||
|
\ 'icase': 1}]
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Section: add Ada Attributes {{{2
|
||||||
|
"
|
||||||
|
for Item in ['''Access', '''Address', '''Adjacent', '''Aft', '''Alignment', '''Base', '''Bit_Order', '''Body_Version', '''Callable', '''Caller', '''Ceiling', '''Class', '''Component_Size', '''Compose', '''Constrained', '''Copy_Sign', '''Count', '''Definite', '''Delta', '''Denorm', '''Digits', '''Emax', '''Exponent', '''External_Tag', '''Epsilon', '''First', '''First_Bit', '''Floor', '''Fore', '''Fraction', '''Identity', '''Image', '''Input', '''Large', '''Last', '''Last_Bit', '''Leading_Part', '''Length', '''Machine', '''Machine_Emax', '''Machine_Emin', '''Machine_Mantissa', '''Machine_Overflows', '''Machine_Radix', '''Machine_Rounding', '''Machine_Rounds', '''Mantissa', '''Max', '''Max_Size_In_Storage_Elements', '''Min', '''Mod', '''Model', '''Model_Emin', '''Model_Epsilon', '''Model_Mantissa', '''Model_Small', '''Modulus', '''Output', '''Partition_ID', '''Pos', '''Position', '''Pred', '''Priority', '''Range', '''Read', '''Remainder', '''Round', '''Rounding', '''Safe_Emax', '''Safe_First', '''Safe_Large', '''Safe_Last', '''Safe_Small', '''Scale', '''Scaling', '''Signed_Zeros', '''Size', '''Small', '''Storage_Pool', '''Storage_Size', '''Stream_Size', '''Succ', '''Tag', '''Terminated', '''Truncation', '''Unbiased_Rounding', '''Unchecked_Access', '''Val', '''Valid', '''Value', '''Version', '''Wide_Image', '''Wide_Value', '''Wide_Wide_Image', '''Wide_Wide_Value', '''Wide_Wide_Width', '''Wide_Width', '''Width', '''Write']
|
||||||
|
let g:ada#Keywords += [{
|
||||||
|
\ 'word': Item,
|
||||||
|
\ 'menu': 'attribute',
|
||||||
|
\ 'info': 'Ada attribute.',
|
||||||
|
\ 'kind': 'a',
|
||||||
|
\ 'icase': 1}]
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" Section: add GNAT Attributes {{{3
|
||||||
|
"
|
||||||
|
if exists ('g:ada_gnat_extensions')
|
||||||
|
for Item in ['''Abort_Signal', '''Address_Size', '''Asm_Input', '''Asm_Output', '''AST_Entry', '''Bit', '''Bit_Position', '''Code_Address', '''Default_Bit_Order', '''Elaborated', '''Elab_Body', '''Elab_Spec', '''Emax', '''Enum_Rep', '''Epsilon', '''Fixed_Value', '''Has_Access_Values', '''Has_Discriminants', '''Img', '''Integer_Value', '''Machine_Size', '''Max_Interrupt_Priority', '''Max_Priority', '''Maximum_Alignment', '''Mechanism_Code', '''Null_Parameter', '''Object_Size', '''Passed_By_Reference', '''Range_Length', '''Storage_Unit', '''Target_Name', '''Tick', '''To_Address', '''Type_Class', '''UET_Address', '''Unconstrained_Array', '''Universal_Literal_String', '''Unrestricted_Access', '''VADS_Size', '''Value_Size', '''Wchar_T_Size', '''Word_Size']
|
||||||
|
let g:ada#Keywords += [{
|
||||||
|
\ 'word': Item,
|
||||||
|
\ 'menu': 'attribute',
|
||||||
|
\ 'info': 'GNAT attribute.',
|
||||||
|
\ 'kind': 'a',
|
||||||
|
\ 'icase': 1}]
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Section: add Ada Pragmas {{{2
|
||||||
|
"
|
||||||
|
for Item in ['All_Calls_Remote', 'Assert', 'Assertion_Policy', 'Asynchronous', 'Atomic', 'Atomic_Components', 'Attach_Handler', 'Controlled', 'Convention', 'Detect_Blocking', 'Discard_Names', 'Elaborate', 'Elaborate_All', 'Elaborate_Body', 'Export', 'Import', 'Inline', 'Inspection_Point', 'Interface (Obsolescent)', 'Interrupt_Handler', 'Interrupt_Priority', 'Linker_Options', 'List', 'Locking_Policy', 'Memory_Size (Obsolescent)', 'No_Return', 'Normalize_Scalars', 'Optimize', 'Pack', 'Page', 'Partition_Elaboration_Policy', 'Preelaborable_Initialization', 'Preelaborate', 'Priority', 'Priority_Specific_Dispatching', 'Profile', 'Pure', 'Queueing_Policy', 'Relative_Deadline', 'Remote_Call_Interface', 'Remote_Types', 'Restrictions', 'Reviewable', 'Shared (Obsolescent)', 'Shared_Passive', 'Storage_Size', 'Storage_Unit (Obsolescent)', 'Suppress', 'System_Name (Obsolescent)', 'Task_Dispatching_Policy', 'Unchecked_Union', 'Unsuppress', 'Volatile', 'Volatile_Components']
|
||||||
|
let g:ada#Keywords += [{
|
||||||
|
\ 'word': Item,
|
||||||
|
\ 'menu': 'pragma',
|
||||||
|
\ 'info': 'Ada pragma.',
|
||||||
|
\ 'kind': 'p',
|
||||||
|
\ 'icase': 1}]
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" Section: add GNAT Pragmas {{{3
|
||||||
|
"
|
||||||
|
if exists ('g:ada_gnat_extensions')
|
||||||
|
for Item in ['Abort_Defer', 'Ada_83', 'Ada_95', 'Ada_05', 'Annotate', 'Ast_Entry', 'C_Pass_By_Copy', 'Comment', 'Common_Object', 'Compile_Time_Warning', 'Complex_Representation', 'Component_Alignment', 'Convention_Identifier', 'CPP_Class', 'CPP_Constructor', 'CPP_Virtual', 'CPP_Vtable', 'Debug', 'Elaboration_Checks', 'Eliminate', 'Export_Exception', 'Export_Function', 'Export_Object', 'Export_Procedure', 'Export_Value', 'Export_Valued_Procedure', 'Extend_System', 'External', 'External_Name_Casing', 'Finalize_Storage_Only', 'Float_Representation', 'Ident', 'Import_Exception', 'Import_Function', 'Import_Object', 'Import_Procedure', 'Import_Valued_Procedure', 'Initialize_Scalars', 'Inline_Always', 'Inline_Generic', 'Interface_Name', 'Interrupt_State', 'Keep_Names', 'License', 'Link_With', 'Linker_Alias', 'Linker_Section', 'Long_Float', 'Machine_Attribute', 'Main_Storage', 'Obsolescent', 'Passive', 'Polling', 'Profile_Warnings', 'Propagate_Exceptions', 'Psect_Object', 'Pure_Function', 'Restriction_Warnings', 'Source_File_Name', 'Source_File_Name_Project', 'Source_Reference', 'Stream_Convert', 'Style_Checks', 'Subtitle', 'Suppress_All', 'Suppress_Exception_Locations', 'Suppress_Initialization', 'Task_Info', 'Task_Name', 'Task_Storage', 'Thread_Body', 'Time_Slice', 'Title', 'Unimplemented_Unit', 'Universal_Data', 'Unreferenced', 'Unreserve_All_Interrupts', 'Use_VADS_Size', 'Validity_Checks', 'Warnings', 'Weak_External']
|
||||||
|
let g:ada#Keywords += [{
|
||||||
|
\ 'word': Item,
|
||||||
|
\ 'menu': 'pragma',
|
||||||
|
\ 'info': 'GNAT pragma.',
|
||||||
|
\ 'kind': 'p',
|
||||||
|
\ 'icase': 1}]
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
" 1}}}
|
||||||
|
|
||||||
|
" Section: g:ada#Ctags_Kinds {{{1
|
||||||
|
"
|
||||||
|
let g:ada#Ctags_Kinds = {
|
||||||
|
\ 'P': ["packspec", "package specifications"],
|
||||||
|
\ 'p': ["package", "packages"],
|
||||||
|
\ 'T': ["typespec", "type specifications"],
|
||||||
|
\ 't': ["type", "types"],
|
||||||
|
\ 'U': ["subspec", "subtype specifications"],
|
||||||
|
\ 'u': ["subtype", "subtypes"],
|
||||||
|
\ 'c': ["component", "record type components"],
|
||||||
|
\ 'l': ["literal", "enum type literals"],
|
||||||
|
\ 'V': ["varspec", "variable specifications"],
|
||||||
|
\ 'v': ["variable", "variables"],
|
||||||
|
\ 'f': ["formal", "generic formal parameters"],
|
||||||
|
\ 'n': ["constant", "constants"],
|
||||||
|
\ 'x': ["exception", "user defined exceptions"],
|
||||||
|
\ 'R': ["subprogspec", "subprogram specifications"],
|
||||||
|
\ 'r': ["subprogram", "subprograms"],
|
||||||
|
\ 'K': ["taskspec", "task specifications"],
|
||||||
|
\ 'k': ["task", "tasks"],
|
||||||
|
\ 'O': ["protectspec", "protected data specifications"],
|
||||||
|
\ 'o': ["protected", "protected data"],
|
||||||
|
\ 'E': ["entryspec", "task/protected data entry specifications"],
|
||||||
|
\ 'e': ["entry", "task/protected data entries"],
|
||||||
|
\ 'b': ["label", "labels"],
|
||||||
|
\ 'i': ["identifier", "loop/declare identifiers"],
|
||||||
|
\ 'a': ["autovar", "automatic variables"],
|
||||||
|
\ 'y': ["annon", "loops and blocks with no identifier"]}
|
||||||
|
|
||||||
|
" Section: ada#Word (...) {{{1
|
||||||
|
"
|
||||||
|
" Extract current Ada word across multiple lines
|
||||||
|
" AdaWord ([line, column])\
|
||||||
|
"
|
||||||
|
function ada#Word (...)
|
||||||
|
if a:0 > 1
|
||||||
|
let l:Line_Nr = a:1
|
||||||
|
let l:Column_Nr = a:2 - 1
|
||||||
|
else
|
||||||
|
let l:Line_Nr = line('.')
|
||||||
|
let l:Column_Nr = col('.') - 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:Line = substitute (getline (l:Line_Nr), g:ada#Comment, '', '' )
|
||||||
|
|
||||||
|
" Cope with tag searching for items in comments; if we are, don't loop
|
||||||
|
" backards looking for previous lines
|
||||||
|
if l:Column_Nr > strlen(l:Line)
|
||||||
|
" We were in a comment
|
||||||
|
let l:Line = getline(l:Line_Nr)
|
||||||
|
let l:Search_Prev_Lines = 0
|
||||||
|
else
|
||||||
|
let l:Search_Prev_Lines = 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Go backwards until we find a match (Ada ID) that *doesn't* include our
|
||||||
|
" location - i.e., the previous ID. This is because the current 'correct'
|
||||||
|
" match will toggle matching/not matching as we traverse characters
|
||||||
|
" backwards. Thus, we have to find the previous unrelated match, exclude
|
||||||
|
" it, then use the next full match (ours).
|
||||||
|
" Remember to convert vim column 'l:Column_Nr' [1..n] to string offset [0..(n-1)]
|
||||||
|
" ... but start, here, one after the required char.
|
||||||
|
let l:New_Column = l:Column_Nr + 1
|
||||||
|
while 1
|
||||||
|
let l:New_Column = l:New_Column - 1
|
||||||
|
if l:New_Column < 0
|
||||||
|
" Have to include previous l:Line from file
|
||||||
|
let l:Line_Nr = l:Line_Nr - 1
|
||||||
|
if l:Line_Nr < 1 || !l:Search_Prev_Lines
|
||||||
|
" Start of file or matching in a comment
|
||||||
|
let l:Line_Nr = 1
|
||||||
|
let l:New_Column = 0
|
||||||
|
let l:Our_Match = match (l:Line, g:ada#WordRegex )
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
" Get previous l:Line, and prepend it to our search string
|
||||||
|
let l:New_Line = substitute (getline (l:Line_Nr), g:ada#Comment, '', '' )
|
||||||
|
let l:New_Column = strlen (l:New_Line) - 1
|
||||||
|
let l:Column_Nr = l:Column_Nr + l:New_Column
|
||||||
|
let l:Line = l:New_Line . l:Line
|
||||||
|
endif
|
||||||
|
" Check to see if this is a match excluding 'us'
|
||||||
|
let l:Match_End = l:New_Column +
|
||||||
|
\ matchend (strpart (l:Line,l:New_Column), g:ada#WordRegex ) - 1
|
||||||
|
if l:Match_End >= l:New_Column &&
|
||||||
|
\ l:Match_End < l:Column_Nr
|
||||||
|
" Yes
|
||||||
|
let l:Our_Match = l:Match_End+1 +
|
||||||
|
\ match (strpart (l:Line,l:Match_End+1), g:ada#WordRegex )
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
endwhile
|
||||||
|
|
||||||
|
" Got anything?
|
||||||
|
if l:Our_Match < 0
|
||||||
|
return ''
|
||||||
|
else
|
||||||
|
let l:Line = strpart (l:Line, l:Our_Match)
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Now simply add further lines until the match gets no bigger
|
||||||
|
let l:Match_String = matchstr (l:Line, g:ada#WordRegex)
|
||||||
|
let l:Last_Line = line ('$')
|
||||||
|
let l:Line_Nr = line ('.') + 1
|
||||||
|
while l:Line_Nr <= l:Last_Line
|
||||||
|
let l:Last_Match = l:Match_String
|
||||||
|
let l:Line = l:Line .
|
||||||
|
\ substitute (getline (l:Line_Nr), g:ada#Comment, '', '')
|
||||||
|
let l:Match_String = matchstr (l:Line, g:ada#WordRegex)
|
||||||
|
if l:Match_String == l:Last_Match
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
endwhile
|
||||||
|
|
||||||
|
" Strip whitespace & return
|
||||||
|
return substitute (l:Match_String, '\s\+', '', 'g')
|
||||||
|
endfunction ada#Word
|
||||||
|
|
||||||
|
" Section: ada#List_Tag (...) {{{1
|
||||||
|
"
|
||||||
|
" List tags in quickfix window
|
||||||
|
"
|
||||||
|
function ada#List_Tag (...)
|
||||||
|
if a:0 > 1
|
||||||
|
let l:Tag_Word = ada#Word (a:1, a:2)
|
||||||
|
elseif a:0 > 0
|
||||||
|
let l:Tag_Word = a:1
|
||||||
|
else
|
||||||
|
let l:Tag_Word = ada#Word ()
|
||||||
|
endif
|
||||||
|
|
||||||
|
echo "Searching for" l:Tag_Word
|
||||||
|
|
||||||
|
let l:Pattern = '^' . l:Tag_Word . '$'
|
||||||
|
let l:Tag_List = taglist (l:Pattern)
|
||||||
|
let l:Error_List = []
|
||||||
|
"
|
||||||
|
" add symbols
|
||||||
|
"
|
||||||
|
for Tag_Item in l:Tag_List
|
||||||
|
if l:Tag_Item['kind'] == ''
|
||||||
|
let l:Tag_Item['kind'] = 's'
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:Error_List += [
|
||||||
|
\ l:Tag_Item['filename'] . '|' .
|
||||||
|
\ l:Tag_Item['cmd'] . '|' .
|
||||||
|
\ l:Tag_Item['kind'] . "\t" .
|
||||||
|
\ l:Tag_Item['name'] ]
|
||||||
|
endfor
|
||||||
|
set errorformat=%f\|%l\|%m
|
||||||
|
cexpr l:Error_List
|
||||||
|
cwindow
|
||||||
|
endfunction ada#List_Tag
|
||||||
|
|
||||||
|
" Section: ada#Jump_Tag (Word, Mode) {{{1
|
||||||
|
"
|
||||||
|
" Word tag - include '.' and if Ada make uppercase
|
||||||
|
"
|
||||||
|
function ada#Jump_Tag (Word, Mode)
|
||||||
|
if a:Word == ''
|
||||||
|
" Get current word
|
||||||
|
let l:Word = ada#Word()
|
||||||
|
if l:Word == ''
|
||||||
|
throw "NOT_FOUND: no identifier found."
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
let l:Word = a:Word
|
||||||
|
endif
|
||||||
|
|
||||||
|
echo "Searching for " . l:Word
|
||||||
|
|
||||||
|
try
|
||||||
|
execute a:Mode l:Word
|
||||||
|
catch /.*:E426:.*/
|
||||||
|
let ignorecase = &ignorecase
|
||||||
|
set ignorecase
|
||||||
|
execute a:Mode l:Word
|
||||||
|
let &ignorecase = ignorecase
|
||||||
|
endtry
|
||||||
|
|
||||||
|
return
|
||||||
|
endfunction ada#Jump_Tag
|
||||||
|
|
||||||
|
" Section: ada#Insert_Backspace () {{{1
|
||||||
|
"
|
||||||
|
" Backspace at end of line after auto-inserted commentstring '-- ' wipes it
|
||||||
|
"
|
||||||
|
function ada#Insert_Backspace ()
|
||||||
|
let l:Line = getline ('.')
|
||||||
|
if col ('.') > strlen (l:Line) &&
|
||||||
|
\ match (l:Line, '-- $') != -1 &&
|
||||||
|
\ match (&comments,'--') != -1
|
||||||
|
return "\<bs>\<bs>\<bs>"
|
||||||
|
else
|
||||||
|
return "\<bs>"
|
||||||
|
endif
|
||||||
|
|
||||||
|
return
|
||||||
|
endfunction ada#InsertBackspace
|
||||||
|
|
||||||
|
" Section: Insert Completions {{{1
|
||||||
|
"
|
||||||
|
" Section: ada#User_Complete(findstart, base) {{{2
|
||||||
|
"
|
||||||
|
" This function is used for the 'complete' option.
|
||||||
|
"
|
||||||
|
function! ada#User_Complete(findstart, base)
|
||||||
|
if a:findstart == 1
|
||||||
|
"
|
||||||
|
" locate the start of the word
|
||||||
|
"
|
||||||
|
let line = getline ('.')
|
||||||
|
let start = col ('.') - 1
|
||||||
|
while start > 0 && line[start - 1] =~ '\i\|'''
|
||||||
|
let start -= 1
|
||||||
|
endwhile
|
||||||
|
return start
|
||||||
|
else
|
||||||
|
"
|
||||||
|
" look up matches
|
||||||
|
"
|
||||||
|
let l:Pattern = '^' . a:base . '.*$'
|
||||||
|
"
|
||||||
|
" add keywords
|
||||||
|
"
|
||||||
|
for Tag_Item in g:ada#Keywords
|
||||||
|
if l:Tag_Item['word'] =~? l:Pattern
|
||||||
|
if complete_add (l:Tag_Item) == 0
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
if complete_check ()
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
endfunction ada#User_Complete
|
||||||
|
|
||||||
|
" Section: ada#Completion (cmd) {{{2
|
||||||
|
"
|
||||||
|
" Word completion (^N/^R/^X^]) - force '.' inclusion
|
||||||
|
function ada#Completion (cmd)
|
||||||
|
set iskeyword+=46
|
||||||
|
return a:cmd . "\<C-R>=ada#Completion_End ()\<CR>"
|
||||||
|
endfunction ada#Completion
|
||||||
|
|
||||||
|
" Section: ada#Completion_End () {{{2
|
||||||
|
"
|
||||||
|
function ada#Completion_End ()
|
||||||
|
set iskeyword-=46
|
||||||
|
return ''
|
||||||
|
endfunction ada#Completion_End
|
||||||
|
|
||||||
|
" Section: ada#Create_Tags {{{1
|
||||||
|
"
|
||||||
|
function ada#Create_Tags (option)
|
||||||
|
if a:option == 'file'
|
||||||
|
let l:Filename = fnamemodify (bufname ('%'), ':p')
|
||||||
|
elseif a:option == 'dir'
|
||||||
|
let l:Filename =
|
||||||
|
\ fnamemodify (bufname ('%'), ':p:h') . "*.ada " .
|
||||||
|
\ fnamemodify (bufname ('%'), ':p:h') . "*.adb " .
|
||||||
|
\ fnamemodify (bufname ('%'), ':p:h') . "*.ads"
|
||||||
|
else
|
||||||
|
let l:Filename = a:option
|
||||||
|
endif
|
||||||
|
execute '!ctags --excmd=number ' . l:Filename
|
||||||
|
endfunction ada#Create_Tags
|
||||||
|
|
||||||
|
" Section: ada#Switch_Session {{{1
|
||||||
|
"
|
||||||
|
function ada#Switch_Session (New_Session)
|
||||||
|
"
|
||||||
|
" you should not save to much date into the seession since they will
|
||||||
|
" be sourced
|
||||||
|
"
|
||||||
|
let l:sessionoptions=&sessionoptions
|
||||||
|
|
||||||
|
try
|
||||||
|
set sessionoptions=buffers,curdir,folds,globals,resize,slash,tabpages,tabpages,unix,winpos,winsize
|
||||||
|
|
||||||
|
if a:New_Session != v:this_session
|
||||||
|
"
|
||||||
|
" We actually got a new session - otherwise there
|
||||||
|
" is nothing to do.
|
||||||
|
"
|
||||||
|
if strlen (v:this_session) > 0
|
||||||
|
execute 'mksession! ' . v:this_session
|
||||||
|
endif
|
||||||
|
|
||||||
|
let v:this_session = a:New_Session
|
||||||
|
|
||||||
|
"if filereadable (v:this_session)
|
||||||
|
"execute 'source ' . v:this_session
|
||||||
|
"endif
|
||||||
|
|
||||||
|
augroup ada_session
|
||||||
|
autocmd!
|
||||||
|
autocmd VimLeavePre * execute 'mksession! ' . v:this_session
|
||||||
|
augroup END
|
||||||
|
|
||||||
|
"if exists ("g:Tlist_Auto_Open") && g:Tlist_Auto_Open
|
||||||
|
"TlistOpen
|
||||||
|
"endif
|
||||||
|
|
||||||
|
endif
|
||||||
|
finally
|
||||||
|
let &sessionoptions=l:sessionoptions
|
||||||
|
endtry
|
||||||
|
|
||||||
|
return
|
||||||
|
endfunction ada#Switch_Session
|
||||||
|
|
||||||
|
" Section: GNAT Pretty Printer folding {{{1
|
||||||
|
"
|
||||||
|
if exists('g:ada_folding') && g:ada_folding[0] == 'g'
|
||||||
|
"
|
||||||
|
" Lines consisting only of ')' ';' are due to a gnat pretty bug and
|
||||||
|
" have the same level as the line above (can't happen in the first
|
||||||
|
" line).
|
||||||
|
"
|
||||||
|
let s:Fold_Collate = '^\([;)]*$\|'
|
||||||
|
|
||||||
|
"
|
||||||
|
" some lone statements are folded with the line above
|
||||||
|
"
|
||||||
|
if stridx (g:ada_folding, 'i') >= 0
|
||||||
|
let s:Fold_Collate .= '\s\+\<is\>$\|'
|
||||||
|
endif
|
||||||
|
if stridx (g:ada_folding, 'b') >= 0
|
||||||
|
let s:Fold_Collate .= '\s\+\<begin\>$\|'
|
||||||
|
endif
|
||||||
|
if stridx (g:ada_folding, 'p') >= 0
|
||||||
|
let s:Fold_Collate .= '\s\+\<private\>$\|'
|
||||||
|
endif
|
||||||
|
if stridx (g:ada_folding, 'x') >= 0
|
||||||
|
let s:Fold_Collate .= '\s\+\<exception\>$\|'
|
||||||
|
endif
|
||||||
|
|
||||||
|
" We also handle empty lines and
|
||||||
|
" comments here.
|
||||||
|
let s:Fold_Collate .= '--\)'
|
||||||
|
|
||||||
|
function ada#Pretty_Print_Folding (Line) " {{{2
|
||||||
|
let l:Text = getline (a:Line)
|
||||||
|
|
||||||
|
if l:Text =~ s:Fold_Collate
|
||||||
|
"
|
||||||
|
" fold with line above
|
||||||
|
"
|
||||||
|
let l:Level = "="
|
||||||
|
elseif l:Text =~ '^\s\+('
|
||||||
|
"
|
||||||
|
" gnat outdents a line which stards with a ( by one characters so
|
||||||
|
" that parameters which follow are aligned.
|
||||||
|
"
|
||||||
|
let l:Level = (indent (a:Line) + 1) / &shiftwidth
|
||||||
|
else
|
||||||
|
let l:Level = indent (a:Line) / &shiftwidth
|
||||||
|
endif
|
||||||
|
|
||||||
|
return l:Level
|
||||||
|
endfunction ada#Pretty_Print_Folding " }}}2
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Section: Options and Menus {{{1
|
||||||
|
"
|
||||||
|
" Section: ada#Switch_Syntax_Options {{{2
|
||||||
|
"
|
||||||
|
function ada#Switch_Syntax_Option (option)
|
||||||
|
syntax off
|
||||||
|
if exists ('g:ada_' . a:option)
|
||||||
|
unlet g:ada_{a:option}
|
||||||
|
echo a:option . 'now off'
|
||||||
|
else
|
||||||
|
let g:ada_{a:option}=1
|
||||||
|
echo a:option . 'now on'
|
||||||
|
endif
|
||||||
|
syntax on
|
||||||
|
endfunction ada#Switch_Syntax_Option
|
||||||
|
|
||||||
|
" Section: ada#Map_Menu {{{2
|
||||||
|
"
|
||||||
|
function ada#Map_Menu (Text, Keys, Command)
|
||||||
|
if a:Keys[0] == ':'
|
||||||
|
execute
|
||||||
|
\ "50amenu " .
|
||||||
|
\ "Ada." . escape(a:Text, ' ') .
|
||||||
|
\ "<Tab>" . a:Keys .
|
||||||
|
\ " :" . a:Command . "<CR>"
|
||||||
|
execute
|
||||||
|
\ "command -buffer " .
|
||||||
|
\ a:Keys[1:] .
|
||||||
|
\" :" . a:Command . "<CR>"
|
||||||
|
elseif a:Keys[0] == '<'
|
||||||
|
execute
|
||||||
|
\ "50amenu " .
|
||||||
|
\ "Ada." . escape(a:Text, ' ') .
|
||||||
|
\ "<Tab>" . a:Keys .
|
||||||
|
\ " :" . a:Command . "<CR>"
|
||||||
|
execute
|
||||||
|
\ "nnoremap <buffer> " .
|
||||||
|
\ a:Keys .
|
||||||
|
\" :" . a:Command . "<CR>"
|
||||||
|
execute
|
||||||
|
\ "inoremap <buffer> " .
|
||||||
|
\ a:Keys .
|
||||||
|
\" <C-O>:" . a:Command . "<CR>"
|
||||||
|
else
|
||||||
|
if exists("g:mapleader")
|
||||||
|
let l:leader = g:mapleader
|
||||||
|
else
|
||||||
|
let l:leader = '\'
|
||||||
|
endif
|
||||||
|
execute
|
||||||
|
\ "50amenu " .
|
||||||
|
\ "Ada." . escape(a:Text, ' ') .
|
||||||
|
\ "<Tab>" . escape(l:leader . "a" . a:Keys , '\') .
|
||||||
|
\ " :" . a:Command . "<CR>"
|
||||||
|
execute
|
||||||
|
\ "nnoremap <buffer>" .
|
||||||
|
\ " <Leader>a" . a:Keys .
|
||||||
|
\" :" . a:Command
|
||||||
|
execute
|
||||||
|
\ "inoremap <buffer>" .
|
||||||
|
\ " <Leader>a" . a:Keys .
|
||||||
|
\" <C-O>:" . a:Command
|
||||||
|
endif
|
||||||
|
return
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Section: ada#Map_Popup {{{2
|
||||||
|
"
|
||||||
|
function ada#Map_Popup (Text, Keys, Command)
|
||||||
|
if exists("g:mapleader")
|
||||||
|
let l:leader = g:mapleader
|
||||||
|
else
|
||||||
|
let l:leader = '\'
|
||||||
|
endif
|
||||||
|
execute
|
||||||
|
\ "50amenu " .
|
||||||
|
\ "PopUp." . escape(a:Text, ' ') .
|
||||||
|
\ "<Tab>" . escape(l:leader . "a" . a:Keys , '\') .
|
||||||
|
\ " :" . a:Command . "<CR>"
|
||||||
|
|
||||||
|
call ada#Map_Menu (a:Text, a:Keys, a:Command)
|
||||||
|
return
|
||||||
|
endfunction ada#Map_Popup
|
||||||
|
|
||||||
|
" }}}1
|
||||||
|
|
||||||
|
lockvar g:ada#WordRegex
|
||||||
|
lockvar g:ada#DotWordRegex
|
||||||
|
lockvar g:ada#Comment
|
||||||
|
lockvar! g:ada#Keywords
|
||||||
|
lockvar! g:ada#Ctags_Kinds
|
||||||
|
|
||||||
|
let &cpo = s:keepcpo
|
||||||
|
unlet s:keepcpo
|
||||||
|
|
||||||
|
finish " 1}}}
|
||||||
|
|
||||||
|
"------------------------------------------------------------------------------
|
||||||
|
" Copyright (C) 2006 Martin Krischik
|
||||||
|
"
|
||||||
|
" Vim is Charityware - see ":help license" or uganda.txt for licence details.
|
||||||
|
"------------------------------------------------------------------------------
|
||||||
|
" vim: textwidth=78 wrap tabstop=8 shiftwidth=3 softtabstop=3 noexpandtab
|
||||||
|
" vim: foldmethod=marker
|
||||||
|
|
||||||
|
endif
|
||||||
517
autoload/fsharp.vim
Normal file
517
autoload/fsharp.vim
Normal file
@@ -0,0 +1,517 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'fsharp') == -1
|
||||||
|
|
||||||
|
" Vim autoload functions
|
||||||
|
|
||||||
|
if exists('g:loaded_autoload_fsharp')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let g:loaded_autoload_fsharp = 1
|
||||||
|
|
||||||
|
let s:cpo_save = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
function! s:prompt(msg)
|
||||||
|
let height = &cmdheight
|
||||||
|
if height < 2
|
||||||
|
set cmdheight=2
|
||||||
|
endif
|
||||||
|
echom a:msg
|
||||||
|
let &cmdheight = height
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:PlainNotification(content)
|
||||||
|
return { 'Content': a:content }
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:TextDocumentIdentifier(path)
|
||||||
|
let usr_ss_opt = &shellslash
|
||||||
|
set shellslash
|
||||||
|
let uri = fnamemodify(a:path, ":p")
|
||||||
|
if uri[0] == "/"
|
||||||
|
let uri = "file://" . uri
|
||||||
|
else
|
||||||
|
let uri = "file:///" . uri
|
||||||
|
endif
|
||||||
|
let &shellslash = usr_ss_opt
|
||||||
|
return { 'Uri': uri }
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:Position(line, character)
|
||||||
|
return { 'Line': a:line, 'Character': a:character }
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:TextDocumentPositionParams(documentUri, line, character)
|
||||||
|
return {
|
||||||
|
\ 'TextDocument': s:TextDocumentIdentifier(a:documentUri),
|
||||||
|
\ 'Position': s:Position(a:line, a:character)
|
||||||
|
\ }
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:DocumentationForSymbolRequest(xmlSig, assembly)
|
||||||
|
return {
|
||||||
|
\ 'XmlSig': a:xmlSig,
|
||||||
|
\ 'Assembly': a:assembly
|
||||||
|
\ }
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:ProjectParms(projectUri)
|
||||||
|
return { 'Project': s:TextDocumentIdentifier(a:projectUri) }
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:WorkspacePeekRequest(directory, deep, excludedDirs)
|
||||||
|
return {
|
||||||
|
\ 'Directory': fnamemodify(a:directory, ":p"),
|
||||||
|
\ 'Deep': a:deep,
|
||||||
|
\ 'ExcludedDirs': a:excludedDirs
|
||||||
|
\ }
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:WorkspaceLoadParms(files)
|
||||||
|
let prm = []
|
||||||
|
for file in a:files
|
||||||
|
call add(prm, s:TextDocumentIdentifier(file))
|
||||||
|
endfor
|
||||||
|
return { 'TextDocuments': prm }
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:FsdnRequest(query)
|
||||||
|
return { 'Query': a:query }
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:call(method, params, cont)
|
||||||
|
call LanguageClient#Call(a:method, a:params, a:cont)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:signature(filePath, line, character, cont)
|
||||||
|
return s:call('fsharp/signature', s:TextDocumentPositionParams(a:filePath, a:line, a:character), a:cont)
|
||||||
|
endfunction
|
||||||
|
function! s:signatureData(filePath, line, character, cont)
|
||||||
|
return s:call('fsharp/signatureData', s:TextDocumentPositionParams(a:filePath, a:line, a:character), a:cont)
|
||||||
|
endfunction
|
||||||
|
function! s:lineLens(projectPath, cont)
|
||||||
|
return s:call('fsharp/lineLens', s:ProjectParms(a:projectPath), a:cont)
|
||||||
|
endfunction
|
||||||
|
function! s:compilerLocation(cont)
|
||||||
|
return s:call('fsharp/compilerLocation', {}, a:cont)
|
||||||
|
endfunction
|
||||||
|
function! s:compile(projectPath, cont)
|
||||||
|
return s:call('fsharp/compile', s:ProjectParms(a:projectPath), a:cont)
|
||||||
|
endfunction
|
||||||
|
function! s:workspacePeek(directory, depth, excludedDirs, cont)
|
||||||
|
return s:call('fsharp/workspacePeek', s:WorkspacePeekRequest(a:directory, a:depth, a:excludedDirs), a:cont)
|
||||||
|
endfunction
|
||||||
|
function! s:workspaceLoad(files, cont)
|
||||||
|
return s:call('fsharp/workspaceLoad', s:WorkspaceLoadParms(a:files), a:cont)
|
||||||
|
endfunction
|
||||||
|
function! s:project(projectPath, cont)
|
||||||
|
return s:call('fsharp/project', s:ProjectParms(a:projectPath), a:cont)
|
||||||
|
endfunction
|
||||||
|
function! s:fsdn(signature, cont)
|
||||||
|
return s:call('fsharp/fsdn', s:FsdnRequest(a:signature), a:cont)
|
||||||
|
endfunction
|
||||||
|
function! s:f1Help(filePath, line, character, cont)
|
||||||
|
return s:call('fsharp/f1Help', s:TextDocumentPositionParams(a:filePath, a:line, a:character), a:cont)
|
||||||
|
endfunction
|
||||||
|
function! fsharp#documentation(filePath, line, character, cont)
|
||||||
|
return s:call('fsharp/documentation', s:TextDocumentPositionParams(a:filePath, a:line, a:character), a:cont)
|
||||||
|
endfunction
|
||||||
|
function! s:documentationSymbol(xmlSig, assembly, cont)
|
||||||
|
return s:call('fsharp/documentationSymbol', s:DocumentationForSymbolRequest(a:xmlSig, a:assembly), a:cont)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" FSharpConfigDto from https://github.com/fsharp/FsAutoComplete/blob/master/src/FsAutoComplete/LspHelpers.fs
|
||||||
|
"
|
||||||
|
" * The following options seems not working with workspace/didChangeConfiguration
|
||||||
|
" since the initialization has already completed?
|
||||||
|
" 'AutomaticWorkspaceInit',
|
||||||
|
" 'WorkspaceModePeekDeepLevel',
|
||||||
|
"
|
||||||
|
" * Changes made to linter/unused analyzer settings seems not reflected after sending them to FSAC?
|
||||||
|
"
|
||||||
|
let s:config_keys_camel =
|
||||||
|
\ [
|
||||||
|
\ {'key': 'AutomaticWorkspaceInit', 'default': 1},
|
||||||
|
\ {'key': 'WorkspaceModePeekDeepLevel', 'default': 2},
|
||||||
|
\ {'key': 'ExcludeProjectDirectories', 'default': []},
|
||||||
|
\ {'key': 'keywordsAutocomplete', 'default': 1},
|
||||||
|
\ {'key': 'ExternalAutocomplete', 'default': 0},
|
||||||
|
\ {'key': 'Linter', 'default': 1},
|
||||||
|
\ {'key': 'UnionCaseStubGeneration', 'default': 1},
|
||||||
|
\ {'key': 'UnionCaseStubGenerationBody'},
|
||||||
|
\ {'key': 'RecordStubGeneration', 'default': 1},
|
||||||
|
\ {'key': 'RecordStubGenerationBody'},
|
||||||
|
\ {'key': 'InterfaceStubGeneration', 'default': 1},
|
||||||
|
\ {'key': 'InterfaceStubGenerationObjectIdentifier', 'default': 'this'},
|
||||||
|
\ {'key': 'InterfaceStubGenerationMethodBody'},
|
||||||
|
\ {'key': 'UnusedOpensAnalyzer', 'default': 1},
|
||||||
|
\ {'key': 'UnusedDeclarationsAnalyzer', 'default': 1},
|
||||||
|
\ {'key': 'SimplifyNameAnalyzer', 'default': 0},
|
||||||
|
\ {'key': 'ResolveNamespaces', 'default': 1},
|
||||||
|
\ {'key': 'EnableReferenceCodeLens', 'default': 1},
|
||||||
|
\ {'key': 'EnableAnalyzers', 'default': 0},
|
||||||
|
\ {'key': 'AnalyzersPath'},
|
||||||
|
\ {'key': 'DisableInMemoryProjectReferences', 'default': 0},
|
||||||
|
\ {'key': 'LineLens', 'default': {'enabled': 'replaceCodeLens', 'prefix': '//'}},
|
||||||
|
\ {'key': 'UseSdkScripts', 'default': 1},
|
||||||
|
\ {'key': 'dotNetRoot'},
|
||||||
|
\ {'key': 'fsiExtraParameters', 'default': []},
|
||||||
|
\ ]
|
||||||
|
let s:config_keys = []
|
||||||
|
|
||||||
|
function! fsharp#toSnakeCase(str)
|
||||||
|
let sn = substitute(a:str, '\(\<\u\l\+\|\l\+\)\(\u\)', '\l\1_\l\2', 'g')
|
||||||
|
if sn == a:str | return tolower(a:str) | endif
|
||||||
|
return sn
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:buildConfigKeys()
|
||||||
|
if len(s:config_keys) == 0
|
||||||
|
for key_camel in s:config_keys_camel
|
||||||
|
let key = {}
|
||||||
|
let key.snake = fsharp#toSnakeCase(key_camel.key)
|
||||||
|
let key.camel = key_camel.key
|
||||||
|
if has_key(key_camel, 'default')
|
||||||
|
let key.default = key_camel.default
|
||||||
|
endif
|
||||||
|
call add(s:config_keys, key)
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! g:fsharp#getServerConfig()
|
||||||
|
let fsharp = {}
|
||||||
|
call s:buildConfigKeys()
|
||||||
|
for key in s:config_keys
|
||||||
|
if exists('g:fsharp#' . key.snake)
|
||||||
|
let fsharp[key.camel] = g:fsharp#{key.snake}
|
||||||
|
elseif exists('g:fsharp#' . key.camel)
|
||||||
|
let fsharp[key.camel] = g:fsharp#{key.camel}
|
||||||
|
elseif has_key(key, 'default') && g:fsharp#use_recommended_server_config
|
||||||
|
let g:fsharp#{key.snake} = key.default
|
||||||
|
let fsharp[key.camel] = key.default
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
return fsharp
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! g:fsharp#updateServerConfig()
|
||||||
|
let fsharp = fsharp#getServerConfig()
|
||||||
|
let settings = {'settings': {'FSharp': fsharp}}
|
||||||
|
call LanguageClient#Notify('workspace/didChangeConfiguration', settings)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:findWorkspace(dir, cont)
|
||||||
|
let s:cont_findWorkspace = a:cont
|
||||||
|
function! s:callback_findWorkspace(result)
|
||||||
|
let result = a:result
|
||||||
|
let content = json_decode(result.result.content)
|
||||||
|
if len(content.Data.Found) < 1
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
let workspace = { 'Type': 'none' }
|
||||||
|
for found in content.Data.Found
|
||||||
|
if workspace.Type == 'none'
|
||||||
|
let workspace = found
|
||||||
|
elseif found.Type == 'solution'
|
||||||
|
if workspace.Type == 'project'
|
||||||
|
let workspace = found
|
||||||
|
else
|
||||||
|
let curLen = len(workspace.Data.Items)
|
||||||
|
let newLen = len(found.Data.Items)
|
||||||
|
if newLen > curLen
|
||||||
|
let workspace = found
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
if workspace.Type == 'solution'
|
||||||
|
call s:cont_findWorkspace([workspace.Data.Path])
|
||||||
|
else
|
||||||
|
call s:cont_findWorkspace(workspace.Data.Fsprojs)
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
call s:workspacePeek(a:dir, g:fsharp#workspace_mode_peek_deep_level, g:fsharp#exclude_project_directories, function("s:callback_findWorkspace"))
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
let s:workspace = []
|
||||||
|
|
||||||
|
function! s:load(arg)
|
||||||
|
let s:loading_workspace = a:arg
|
||||||
|
function! s:callback_load(_)
|
||||||
|
echo "[FSAC] Workspace loaded: " . join(s:loading_workspace, ', ')
|
||||||
|
let s:workspace = s:workspace + s:loading_workspace
|
||||||
|
endfunction
|
||||||
|
call s:workspaceLoad(a:arg, function("s:callback_load"))
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#loadProject(...)
|
||||||
|
let prjs = []
|
||||||
|
for proj in a:000
|
||||||
|
call add(prjs, fnamemodify(proj, ':p'))
|
||||||
|
endfor
|
||||||
|
call s:load(prjs)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#loadWorkspaceAuto()
|
||||||
|
if &ft == 'fsharp'
|
||||||
|
call fsharp#updateServerConfig()
|
||||||
|
if g:fsharp#automatic_workspace_init
|
||||||
|
echom "[FSAC] Loading workspace..."
|
||||||
|
let bufferDirectory = fnamemodify(resolve(expand('%:p')), ':h')
|
||||||
|
call s:findWorkspace(bufferDirectory, function("s:load"))
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#reloadProjects()
|
||||||
|
if len(s:workspace) > 0
|
||||||
|
function! s:callback_reloadProjects(_)
|
||||||
|
call s:prompt("[FSAC] Workspace reloaded.")
|
||||||
|
endfunction
|
||||||
|
call s:workspaceLoad(s:workspace, function("s:callback_reloadProjects"))
|
||||||
|
else
|
||||||
|
echom "[FSAC] Workspace is empty"
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#OnFSProjSave()
|
||||||
|
if &ft == "fsharp_project" && exists('g:fsharp#automatic_reload_workspace') && g:fsharp#automatic_reload_workspace
|
||||||
|
call fsharp#reloadProjects()
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#showSignature()
|
||||||
|
function! s:callback_showSignature(result)
|
||||||
|
let result = a:result
|
||||||
|
if exists('result.result.content')
|
||||||
|
let content = json_decode(result.result.content)
|
||||||
|
if exists('content.Data')
|
||||||
|
echom substitute(content.Data, '\n\+$', ' ', 'g')
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
call s:signature(expand('%:p'), line('.') - 1, col('.') - 1, function("s:callback_showSignature"))
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#OnCursorMove()
|
||||||
|
if g:fsharp#show_signature_on_cursor_move
|
||||||
|
call fsharp#showSignature()
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#showF1Help()
|
||||||
|
let result = s:f1Help(expand('%:p'), line('.') - 1, col('.') - 1)
|
||||||
|
echo result
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#showTooltip()
|
||||||
|
function! s:callback_showTooltip(result)
|
||||||
|
let result = a:result
|
||||||
|
if exists('result.result.content')
|
||||||
|
let content = json_decode(result.result.content)
|
||||||
|
if exists('content.Data')
|
||||||
|
call LanguageClient#textDocument_hover()
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
" show hover only if signature exists for the current position
|
||||||
|
call s:signature(expand('%:p'), line('.') - 1, col('.') - 1, function("s:callback_showTooltip"))
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
let s:script_root_dir = expand('<sfile>:p:h') . "/../"
|
||||||
|
let s:fsac = fnamemodify(s:script_root_dir . "fsac/fsautocomplete.dll", ":p")
|
||||||
|
let g:fsharp#languageserver_command =
|
||||||
|
\ ['dotnet', s:fsac,
|
||||||
|
\ '--background-service-enabled'
|
||||||
|
\ ]
|
||||||
|
|
||||||
|
function! s:download(branch)
|
||||||
|
echom "[FSAC] Downloading FSAC. This may take a while..."
|
||||||
|
let zip = s:script_root_dir . "fsac.zip"
|
||||||
|
call system(
|
||||||
|
\ 'curl -fLo ' . zip . ' --create-dirs ' .
|
||||||
|
\ '"https://ci.appveyor.com/api/projects/fsautocomplete/fsautocomplete/artifacts/bin/pkgs/fsautocomplete.netcore.zip?branch=' . a:branch . '"'
|
||||||
|
\ )
|
||||||
|
if v:shell_error == 0
|
||||||
|
call system('unzip -o -d ' . s:script_root_dir . "/fsac " . zip)
|
||||||
|
echom "[FSAC] Updated FsAutoComplete to version " . a:branch . ""
|
||||||
|
else
|
||||||
|
echom "[FSAC] Failed to update FsAutoComplete"
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#updateFSAC(...)
|
||||||
|
if len(a:000) == 0
|
||||||
|
let branch = "master"
|
||||||
|
else
|
||||||
|
let branch = a:000[0]
|
||||||
|
endif
|
||||||
|
call s:download(branch)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
let s:fsi_buffer = -1
|
||||||
|
let s:fsi_job = -1
|
||||||
|
let s:fsi_width = 0
|
||||||
|
let s:fsi_height = 0
|
||||||
|
|
||||||
|
function! s:win_gotoid_safe(winid)
|
||||||
|
function! s:vimReturnFocus(window)
|
||||||
|
call win_gotoid(a:window)
|
||||||
|
redraw!
|
||||||
|
endfunction
|
||||||
|
if has('nvim')
|
||||||
|
call win_gotoid(a:winid)
|
||||||
|
else
|
||||||
|
call timer_start(1, { -> s:vimReturnFocus(a:winid) })
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:get_fsi_command()
|
||||||
|
let cmd = g:fsharp#fsi_command
|
||||||
|
for prm in g:fsharp#fsi_extra_parameters
|
||||||
|
let cmd = cmd . " " . prm
|
||||||
|
endfor
|
||||||
|
return cmd
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#openFsi(returnFocus)
|
||||||
|
if bufwinid(s:fsi_buffer) <= 0
|
||||||
|
let fsi_command = s:get_fsi_command()
|
||||||
|
" Neovim
|
||||||
|
if exists('*termopen') || exists('*term_start')
|
||||||
|
let current_win = win_getid()
|
||||||
|
execute g:fsharp#fsi_window_command
|
||||||
|
if s:fsi_width > 0 | execute 'vertical resize' s:fsi_width | endif
|
||||||
|
if s:fsi_height > 0 | execute 'resize' s:fsi_height | endif
|
||||||
|
" if window is closed but FSI is still alive then reuse it
|
||||||
|
if s:fsi_buffer >= 0 && bufexists(str2nr(s:fsi_buffer))
|
||||||
|
exec 'b' s:fsi_buffer
|
||||||
|
normal G
|
||||||
|
if !has('nvim') && mode() == 'n' | execute "normal A" | endif
|
||||||
|
if a:returnFocus | call s:win_gotoid_safe(current_win) | endif
|
||||||
|
" open FSI: Neovim
|
||||||
|
elseif has('nvim')
|
||||||
|
let s:fsi_job = termopen(fsi_command)
|
||||||
|
if s:fsi_job > 0
|
||||||
|
let s:fsi_buffer = bufnr("%")
|
||||||
|
else
|
||||||
|
close
|
||||||
|
echom "[FSAC] Failed to open FSI."
|
||||||
|
return -1
|
||||||
|
endif
|
||||||
|
" open FSI: Vim
|
||||||
|
else
|
||||||
|
let options = {
|
||||||
|
\ "term_name": "F# Interactive",
|
||||||
|
\ "curwin": 1,
|
||||||
|
\ "term_finish": "close"
|
||||||
|
\ }
|
||||||
|
let s:fsi_buffer = term_start(fsi_command, options)
|
||||||
|
if s:fsi_buffer != 0
|
||||||
|
if exists('*term_setkill') | call term_setkill(s:fsi_buffer, "term") | endif
|
||||||
|
let s:fsi_job = term_getjob(s:fsi_buffer)
|
||||||
|
else
|
||||||
|
close
|
||||||
|
echom "[FSAC] Failed to open FSI."
|
||||||
|
return -1
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
setlocal bufhidden=hide
|
||||||
|
normal G
|
||||||
|
if a:returnFocus | call s:win_gotoid_safe(current_win) | endif
|
||||||
|
return s:fsi_buffer
|
||||||
|
else
|
||||||
|
echom "[FSAC] Your Vim does not support terminal".
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
return s:fsi_buffer
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#toggleFsi()
|
||||||
|
let fsiWindowId = bufwinid(s:fsi_buffer)
|
||||||
|
if fsiWindowId > 0
|
||||||
|
let current_win = win_getid()
|
||||||
|
call win_gotoid(fsiWindowId)
|
||||||
|
let s:fsi_width = winwidth('%')
|
||||||
|
let s:fsi_height = winheight('%')
|
||||||
|
close
|
||||||
|
call win_gotoid(current_win)
|
||||||
|
else
|
||||||
|
call fsharp#openFsi(0)
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#quitFsi()
|
||||||
|
if s:fsi_buffer >= 0 && bufexists(str2nr(s:fsi_buffer))
|
||||||
|
if has('nvim')
|
||||||
|
let winid = bufwinid(s:fsi_buffer)
|
||||||
|
if winid > 0 | execute "close " . winid | endif
|
||||||
|
call jobstop(s:fsi_job)
|
||||||
|
else
|
||||||
|
call job_stop(s:fsi_job, "term")
|
||||||
|
endif
|
||||||
|
let s:fsi_buffer = -1
|
||||||
|
let s:fsi_job = -1
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#resetFsi()
|
||||||
|
call fsharp#quitFsi()
|
||||||
|
return fsharp#openFsi(1)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#sendFsi(text)
|
||||||
|
if fsharp#openFsi(!g:fsharp#fsi_focus_on_send) > 0
|
||||||
|
" Neovim
|
||||||
|
if has('nvim')
|
||||||
|
call chansend(s:fsi_job, a:text . ";;". "\n")
|
||||||
|
" Vim 8
|
||||||
|
else
|
||||||
|
call term_sendkeys(s:fsi_buffer, a:text . ";;" . "\<cr>")
|
||||||
|
call term_wait(s:fsi_buffer)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" https://stackoverflow.com/a/6271254
|
||||||
|
function! s:get_visual_selection()
|
||||||
|
let [line_start, column_start] = getpos("'<")[1:2]
|
||||||
|
let [line_end, column_end] = getpos("'>")[1:2]
|
||||||
|
let lines = getline(line_start, line_end)
|
||||||
|
if len(lines) == 0
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
let lines[-1] = lines[-1][: column_end - (&selection == 'inclusive' ? 1 : 2)]
|
||||||
|
let lines[0] = lines[0][column_start - 1:]
|
||||||
|
return lines
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:get_complete_buffer()
|
||||||
|
return join(getline(1, '$'), "\n")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#sendSelectionToFsi() range
|
||||||
|
let lines = s:get_visual_selection()
|
||||||
|
exec 'normal' len(lines) . 'j'
|
||||||
|
let text = join(lines, "\n")
|
||||||
|
return fsharp#sendFsi(text)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#sendLineToFsi()
|
||||||
|
let text = getline('.')
|
||||||
|
exec 'normal j'
|
||||||
|
return fsharp#sendFsi(text)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#sendAllToFsi()
|
||||||
|
let text = s:get_complete_buffer()
|
||||||
|
return fsharp#sendFsi(text)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
let &cpo = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
|
|
||||||
|
" vim: sw=4 et sts=4
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -55,6 +55,10 @@ function! go#config#TermCloseOnExit() abort
|
|||||||
return get(g:, 'go_term_close_on_exit', 1)
|
return get(g:, 'go_term_close_on_exit', 1)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#TermReuse() abort
|
||||||
|
return get(g:, 'go_term_reuse', 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! go#config#SetTermCloseOnExit(value) abort
|
function! go#config#SetTermCloseOnExit(value) abort
|
||||||
let g:go_term_close_on_exit = a:value
|
let g:go_term_close_on_exit = a:value
|
||||||
endfunction
|
endfunction
|
||||||
|
|||||||
744
autoload/ledger.vim
Normal file
744
autoload/ledger.vim
Normal file
@@ -0,0 +1,744 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ledger') == -1
|
||||||
|
|
||||||
|
scriptencoding utf-8
|
||||||
|
" vim:ts=2:sw=2:sts=2:foldmethod=marker
|
||||||
|
function! ledger#transaction_state_toggle(lnum, ...) abort
|
||||||
|
if a:0 == 1
|
||||||
|
let chars = a:1
|
||||||
|
else
|
||||||
|
let chars = ' *'
|
||||||
|
endif
|
||||||
|
let trans = s:transaction.from_lnum(a:lnum)
|
||||||
|
if empty(trans) || has_key(trans, 'expr')
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let old = has_key(trans, 'state') ? trans['state'] : ' '
|
||||||
|
let i = stridx(chars, old) + 1
|
||||||
|
let new = chars[i >= len(chars) ? 0 : i]
|
||||||
|
|
||||||
|
call trans.set_state(new)
|
||||||
|
|
||||||
|
call setline(trans['head'], trans.format_head())
|
||||||
|
endf
|
||||||
|
|
||||||
|
function! ledger#transaction_state_set(lnum, char) abort
|
||||||
|
" modifies or sets the state of the transaction at the cursor,
|
||||||
|
" removing the state altogether if a:char is empty
|
||||||
|
let trans = s:transaction.from_lnum(a:lnum)
|
||||||
|
if empty(trans) || has_key(trans, 'expr')
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
call trans.set_state(a:char)
|
||||||
|
|
||||||
|
call setline(trans['head'], trans.format_head())
|
||||||
|
endf
|
||||||
|
|
||||||
|
function! ledger#transaction_date_set(lnum, type, ...) abort
|
||||||
|
let time = a:0 == 1 ? a:1 : localtime()
|
||||||
|
let trans = s:transaction.from_lnum(a:lnum)
|
||||||
|
if empty(trans) || has_key(trans, 'expr')
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let formatted = strftime(g:ledger_date_format, time)
|
||||||
|
if has_key(trans, 'date') && ! empty(trans['date'])
|
||||||
|
let date = split(trans['date'], '=')
|
||||||
|
else
|
||||||
|
let date = [formatted]
|
||||||
|
endif
|
||||||
|
|
||||||
|
if a:type =~? 'effective\|actual'
|
||||||
|
echoerr 'actual/effective arguments were replaced by primary/auxiliary'
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
if a:type ==? 'primary'
|
||||||
|
let date[0] = formatted
|
||||||
|
elseif a:type ==? 'auxiliary'
|
||||||
|
if time < 0
|
||||||
|
" remove auxiliary date
|
||||||
|
let date = [date[0]]
|
||||||
|
else
|
||||||
|
" set auxiliary date
|
||||||
|
if len(date) >= 2
|
||||||
|
let date[1] = formatted
|
||||||
|
else
|
||||||
|
call add(date, formatted)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
elseif a:type ==? 'unshift'
|
||||||
|
let date = [formatted, date[0]]
|
||||||
|
endif
|
||||||
|
|
||||||
|
let trans['date'] = join(date[0:1], '=')
|
||||||
|
|
||||||
|
call setline(trans['head'], trans.format_head())
|
||||||
|
endf
|
||||||
|
|
||||||
|
" == get transactions ==
|
||||||
|
|
||||||
|
function! ledger#transaction_from_lnum(lnum) abort
|
||||||
|
return s:transaction.from_lnum(a:lnum)
|
||||||
|
endf
|
||||||
|
|
||||||
|
function! ledger#transactions(...) abort
|
||||||
|
if a:0 == 2
|
||||||
|
let lnum = a:1
|
||||||
|
let end = a:2
|
||||||
|
elseif a:0 == 0
|
||||||
|
let lnum = 1
|
||||||
|
let end = line('$')
|
||||||
|
else
|
||||||
|
throw 'wrong number of arguments for get_transactions()'
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
|
||||||
|
" safe view / position
|
||||||
|
let view = winsaveview()
|
||||||
|
let fe = &foldenable
|
||||||
|
set nofoldenable
|
||||||
|
|
||||||
|
let transactions = []
|
||||||
|
call cursor(lnum, 0)
|
||||||
|
while lnum && lnum < end
|
||||||
|
let trans = s:transaction.from_lnum(lnum)
|
||||||
|
if ! empty(trans)
|
||||||
|
call add(transactions, trans)
|
||||||
|
call cursor(trans['tail'], 0)
|
||||||
|
endif
|
||||||
|
let lnum = search('^[~=[:digit:]]', 'cW')
|
||||||
|
endw
|
||||||
|
|
||||||
|
" restore view / position
|
||||||
|
let &foldenable = fe
|
||||||
|
call winrestview(view)
|
||||||
|
|
||||||
|
return transactions
|
||||||
|
endf
|
||||||
|
|
||||||
|
" == transaction object implementation ==
|
||||||
|
|
||||||
|
let s:transaction = {} "{{{1
|
||||||
|
function! s:transaction.new() abort dict
|
||||||
|
return copy(s:transaction)
|
||||||
|
endf
|
||||||
|
|
||||||
|
function! s:transaction.from_lnum(lnum) abort dict "{{{2
|
||||||
|
let [head, tail] = s:get_transaction_extents(a:lnum)
|
||||||
|
if ! head
|
||||||
|
return {}
|
||||||
|
endif
|
||||||
|
|
||||||
|
let trans = copy(s:transaction)
|
||||||
|
let trans['head'] = head
|
||||||
|
let trans['tail'] = tail
|
||||||
|
|
||||||
|
" split off eventual comments at the end of line
|
||||||
|
let line = split(getline(head), '\ze\s*\%(\t\| \);', 1)
|
||||||
|
if len(line) > 1
|
||||||
|
let trans['appendix'] = join(line[1:], '')
|
||||||
|
endif
|
||||||
|
|
||||||
|
" parse rest of line
|
||||||
|
" FIXME (minor): will not preserve spacing (see 'join(parts)')
|
||||||
|
let parts = split(line[0], '\s\+')
|
||||||
|
if parts[0] ==# '~'
|
||||||
|
let trans['expr'] = join(parts[1:])
|
||||||
|
return trans
|
||||||
|
elseif parts[0] ==# '='
|
||||||
|
let trans['auto'] = join(parts[1:])
|
||||||
|
return trans
|
||||||
|
elseif parts[0] !~# '^\d'
|
||||||
|
" this case is avoided in s:get_transaction_extents(),
|
||||||
|
" but we'll check anyway.
|
||||||
|
return {}
|
||||||
|
endif
|
||||||
|
|
||||||
|
for part in parts
|
||||||
|
if ! has_key(trans, 'date') && part =~# '^\d'
|
||||||
|
let trans['date'] = part
|
||||||
|
elseif ! has_key(trans, 'code') && part =~# '^([^)]*)$'
|
||||||
|
let trans['code'] = part[1:-2]
|
||||||
|
elseif ! has_key(trans, 'state') && part =~# '^[[:punct:]]$'
|
||||||
|
" the first character by itself is assumed to be the state of the transaction.
|
||||||
|
let trans['state'] = part
|
||||||
|
else
|
||||||
|
" everything after date/code or state belongs to the description
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
call remove(parts, 0)
|
||||||
|
endfor
|
||||||
|
|
||||||
|
let trans['description'] = join(parts)
|
||||||
|
return trans
|
||||||
|
endf "}}}
|
||||||
|
|
||||||
|
function! s:transaction.set_state(char) abort dict "{{{2
|
||||||
|
if has_key(self, 'state') && a:char =~# '^\s*$'
|
||||||
|
call remove(self, 'state')
|
||||||
|
else
|
||||||
|
let self['state'] = a:char
|
||||||
|
endif
|
||||||
|
endf "}}}
|
||||||
|
|
||||||
|
function! s:transaction.parse_body(...) abort dict "{{{2
|
||||||
|
if a:0 == 2
|
||||||
|
let head = a:1
|
||||||
|
let tail = a:2
|
||||||
|
elseif a:0 == 0
|
||||||
|
let head = self['head']
|
||||||
|
let tail = self['tail']
|
||||||
|
else
|
||||||
|
throw 'wrong number of arguments for parse_body()'
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
|
||||||
|
if ! head || tail <= head
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
|
||||||
|
let lnum = head
|
||||||
|
let tags = {}
|
||||||
|
let postings = []
|
||||||
|
while lnum <= tail
|
||||||
|
let line = split(getline(lnum), '\s*\%(\t\| \);', 1)
|
||||||
|
|
||||||
|
if line[0] =~# '^\s\+[^[:blank:];]'
|
||||||
|
" posting
|
||||||
|
let [state, rest] = matchlist(line[0], '^\s\+\([*!]\?\)\s*\(.*\)$')[1:2]
|
||||||
|
if rest =~# '\t\| '
|
||||||
|
let [account, amount] = matchlist(rest, '^\(.\{-}\)\%(\t\| \)\s*\(.\{-}\)\s*$')[1:2]
|
||||||
|
else
|
||||||
|
let amount = ''
|
||||||
|
let account = matchstr(rest, '^\s*\zs.\{-}\ze\s*$')
|
||||||
|
endif
|
||||||
|
call add(postings, {'account': account, 'amount': amount, 'state': state})
|
||||||
|
end
|
||||||
|
|
||||||
|
" where are tags to be stored?
|
||||||
|
if empty(postings)
|
||||||
|
" they belong to the transaction
|
||||||
|
let tag_container = tags
|
||||||
|
else
|
||||||
|
" they belong to last posting
|
||||||
|
if ! has_key(postings[-1], 'tags')
|
||||||
|
let postings[-1]['tags'] = {}
|
||||||
|
endif
|
||||||
|
let tag_container = postings[-1]['tags']
|
||||||
|
endif
|
||||||
|
|
||||||
|
let comment = join(line[1:], ' ;')
|
||||||
|
if comment =~# '^\s*:'
|
||||||
|
" tags without values
|
||||||
|
for t in s:findall(comment, ':\zs[^:[:blank:]]\([^:]*[^:[:blank:]]\)\?\ze:')
|
||||||
|
let tag_container[t] = ''
|
||||||
|
endfor
|
||||||
|
elseif comment =~# '^\s*[^:[:blank:]][^:]\+:'
|
||||||
|
" tag with value
|
||||||
|
let key = matchstr(comment, '^\s*\zs[^:]\+\ze:')
|
||||||
|
if ! empty(key)
|
||||||
|
let val = matchstr(comment, ':\s*\zs.*\ze\s*$')
|
||||||
|
let tag_container[key] = val
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
let lnum += 1
|
||||||
|
endw
|
||||||
|
return [tags, postings]
|
||||||
|
endf "}}}
|
||||||
|
|
||||||
|
function! s:transaction.format_head() abort dict "{{{2
|
||||||
|
if has_key(self, 'expr')
|
||||||
|
return '~ '.self['expr']
|
||||||
|
elseif has_key(self, 'auto')
|
||||||
|
return '= '.self['auto']
|
||||||
|
endif
|
||||||
|
|
||||||
|
let parts = []
|
||||||
|
if has_key(self, 'date') | call add(parts, self['date']) | endif
|
||||||
|
if has_key(self, 'state') | call add(parts, self['state']) | endif
|
||||||
|
if has_key(self, 'code') | call add(parts, '('.self['code'].')') | endif
|
||||||
|
if has_key(self, 'description') | call add(parts, self['description']) | endif
|
||||||
|
|
||||||
|
let line = join(parts)
|
||||||
|
if has_key(self, 'appendix') | let line .= self['appendix'] | endif
|
||||||
|
|
||||||
|
return line
|
||||||
|
endf "}}}
|
||||||
|
"}}}
|
||||||
|
|
||||||
|
" == helper functions ==
|
||||||
|
|
||||||
|
" get a list of declared accounts in the buffer
|
||||||
|
function! ledger#declared_accounts(...) abort
|
||||||
|
if a:0 == 2
|
||||||
|
let lnum = a:1
|
||||||
|
let lend = a:2
|
||||||
|
elseif a:0 == 0
|
||||||
|
let lnum = 1
|
||||||
|
let lend = line('$')
|
||||||
|
else
|
||||||
|
throw 'wrong number of arguments for ledger#declared_accounts()'
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
|
||||||
|
" save view / position
|
||||||
|
let view = winsaveview()
|
||||||
|
let fe = &foldenable
|
||||||
|
set nofoldenable
|
||||||
|
|
||||||
|
let accounts = []
|
||||||
|
call cursor(lnum, 0)
|
||||||
|
while 1
|
||||||
|
let lnum = search('^account\s', 'cW', lend)
|
||||||
|
if !lnum || lnum > lend
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
|
||||||
|
" remove comments at the end and "account" at the front
|
||||||
|
let line = split(getline(lnum), '\s\+;')[0]
|
||||||
|
let line = matchlist(line, 'account\s\+\(.\+\)')[1]
|
||||||
|
|
||||||
|
if len(line) > 1
|
||||||
|
call add(accounts, line)
|
||||||
|
endif
|
||||||
|
|
||||||
|
call cursor(lnum+1,0)
|
||||||
|
endw
|
||||||
|
|
||||||
|
" restore view / position
|
||||||
|
let &foldenable = fe
|
||||||
|
call winrestview(view)
|
||||||
|
|
||||||
|
return accounts
|
||||||
|
endf
|
||||||
|
|
||||||
|
function! s:get_transaction_extents(lnum) abort
|
||||||
|
if ! (indent(a:lnum) || getline(a:lnum) =~# '^[~=[:digit:]]')
|
||||||
|
" only do something if lnum is in a transaction
|
||||||
|
return [0, 0]
|
||||||
|
endif
|
||||||
|
|
||||||
|
" safe view / position
|
||||||
|
let view = winsaveview()
|
||||||
|
let fe = &foldenable
|
||||||
|
set nofoldenable
|
||||||
|
|
||||||
|
call cursor(a:lnum, 0)
|
||||||
|
let head = search('^[~=[:digit:]]', 'bcnW')
|
||||||
|
let tail = search('^[^;[:blank:]]\S\+', 'nW')
|
||||||
|
let tail = tail > head ? tail - 1 : line('$')
|
||||||
|
|
||||||
|
" restore view / position
|
||||||
|
let &foldenable = fe
|
||||||
|
call winrestview(view)
|
||||||
|
|
||||||
|
return head ? [head, tail] : [0, 0]
|
||||||
|
endf
|
||||||
|
|
||||||
|
function! ledger#find_in_tree(tree, levels) abort
|
||||||
|
if empty(a:levels)
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
let results = []
|
||||||
|
let currentlvl = a:levels[0]
|
||||||
|
let nextlvls = a:levels[1:]
|
||||||
|
let branches = ledger#filter_items(keys(a:tree), currentlvl)
|
||||||
|
for branch in branches
|
||||||
|
let exact = empty(nextlvls)
|
||||||
|
call add(results, [branch, exact])
|
||||||
|
if ! empty(nextlvls)
|
||||||
|
for [result, exact] in ledger#find_in_tree(a:tree[branch], nextlvls)
|
||||||
|
call add(results, [branch.':'.result, exact])
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
return results
|
||||||
|
endf
|
||||||
|
|
||||||
|
function! ledger#filter_items(list, keyword) abort
|
||||||
|
" return only those items that start with a specified keyword
|
||||||
|
return filter(copy(a:list), 'v:val =~ ''^\V'.substitute(a:keyword, '\\', '\\\\', 'g').'''')
|
||||||
|
endf
|
||||||
|
|
||||||
|
function! s:findall(text, rx) abort
|
||||||
|
" returns all the matches in a string,
|
||||||
|
" there will be overlapping matches according to :help match()
|
||||||
|
let matches = []
|
||||||
|
|
||||||
|
while 1
|
||||||
|
let m = matchstr(a:text, a:rx, 0, len(matches)+1)
|
||||||
|
if empty(m)
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
|
||||||
|
call add(matches, m)
|
||||||
|
endw
|
||||||
|
|
||||||
|
return matches
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Move the cursor to the specified column, filling the line with spaces if necessary.
|
||||||
|
" Ensure that at least min_spaces are added, and go to the end of the line if
|
||||||
|
" the line is already too long
|
||||||
|
function! s:goto_col(pos, min_spaces) abort
|
||||||
|
exec 'normal!' '$'
|
||||||
|
let diff = max([a:min_spaces, a:pos - virtcol('.')])
|
||||||
|
if diff > 0 | exec 'normal!' diff . 'a ' | endif
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Return character position of decimal separator (multibyte safe)
|
||||||
|
function! s:decimalpos(expr) abort
|
||||||
|
let pos = match(a:expr, '\V' . g:ledger_decimal_sep)
|
||||||
|
if pos > 0
|
||||||
|
let pos = strchars(a:expr[:pos]) - 1
|
||||||
|
endif
|
||||||
|
return pos
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Align the amount expression after an account name at the decimal point.
|
||||||
|
"
|
||||||
|
" This function moves the amount expression of a posting so that the decimal
|
||||||
|
" separator is aligned at the column specified by g:ledger_align_at.
|
||||||
|
"
|
||||||
|
" For example, after selecting:
|
||||||
|
"
|
||||||
|
" 2015/05/09 Some Payee
|
||||||
|
" Expenses:Other $120,23 ; Tags here
|
||||||
|
" Expenses:Something $-4,99
|
||||||
|
" Expenses:More ($12,34 + $16,32)
|
||||||
|
"
|
||||||
|
" :'<,'>call ledger#align_commodity() produces:
|
||||||
|
"
|
||||||
|
" 2015/05/09 Some Payee
|
||||||
|
" Expenses:Other $120,23 ; Tags here
|
||||||
|
" Expenses:Something $-4,99
|
||||||
|
" Expenses:More ($12,34 + $16,32)
|
||||||
|
"
|
||||||
|
function! ledger#align_commodity() abort
|
||||||
|
" Extract the part of the line after the account name (excluding spaces):
|
||||||
|
let l:line = getline('.')
|
||||||
|
let rhs = matchstr(l:line, '\m^\s\+[^;[:space:]].\{-}\(\t\| \)\s*\zs.*$')
|
||||||
|
if rhs !=# ''
|
||||||
|
" Remove everything after the account name (including spaces):
|
||||||
|
call setline('.', substitute(l:line, '\m^\s\+[^[:space:]].\{-}\zs\(\t\| \).*$', '', ''))
|
||||||
|
let pos = -1
|
||||||
|
if g:ledger_decimal_sep !=# ''
|
||||||
|
" Find the position of the first decimal separator:
|
||||||
|
let pos = s:decimalpos(rhs)
|
||||||
|
endif
|
||||||
|
if pos < 0
|
||||||
|
" Find the position after the first digits
|
||||||
|
let pos = matchend(rhs, '\m\d[^[:space:]]*')
|
||||||
|
endif
|
||||||
|
" Go to the column that allows us to align the decimal separator at g:ledger_align_at:
|
||||||
|
if pos > 0
|
||||||
|
call s:goto_col(g:ledger_align_at - pos - 1, 2)
|
||||||
|
else
|
||||||
|
call s:goto_col(g:ledger_align_at - strdisplaywidth(rhs) - 2, 2)
|
||||||
|
endif " Append the part of the line that was previously removed:
|
||||||
|
exe 'normal! a' . rhs
|
||||||
|
endif
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Align the amount under the cursor and append/prepend the default currency.
|
||||||
|
function! ledger#align_amount_at_cursor() abort
|
||||||
|
" Select and cut text:
|
||||||
|
normal! viWd
|
||||||
|
" Find the position of the decimal separator
|
||||||
|
let pos = s:decimalpos(@") " Returns zero when the separator is the empty string
|
||||||
|
if pos <= 0
|
||||||
|
let pos = len(@")
|
||||||
|
endif
|
||||||
|
" Paste text at the correct column and append/prepend default commodity:
|
||||||
|
if g:ledger_commodity_before
|
||||||
|
call s:goto_col(g:ledger_align_at - pos - len(g:ledger_default_commodity) - len(g:ledger_commodity_sep) - 1, 2)
|
||||||
|
exe 'normal! a' . g:ledger_default_commodity . g:ledger_commodity_sep
|
||||||
|
normal! p
|
||||||
|
else
|
||||||
|
call s:goto_col(g:ledger_align_at - pos - 1, 2)
|
||||||
|
exe 'normal! pa' . g:ledger_commodity_sep . g:ledger_default_commodity
|
||||||
|
endif
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Report generation {{{1
|
||||||
|
|
||||||
|
" Helper functions and variables {{{2
|
||||||
|
" Position of report windows
|
||||||
|
let s:winpos_map = {
|
||||||
|
\ 'T': 'to new', 't': 'abo new', 'B': 'bo new', 'b': 'bel new',
|
||||||
|
\ 'L': 'to vnew', 'l': 'abo vnew', 'R': 'bo vnew', 'r': 'bel vnew'
|
||||||
|
\ }
|
||||||
|
|
||||||
|
function! s:error_message(msg) abort
|
||||||
|
redraw " See h:echo-redraw
|
||||||
|
echohl ErrorMsg
|
||||||
|
echo "\r"
|
||||||
|
echomsg a:msg
|
||||||
|
echohl NONE
|
||||||
|
endf
|
||||||
|
|
||||||
|
function! s:warning_message(msg) abort
|
||||||
|
redraw " See h:echo-redraw
|
||||||
|
echohl WarningMsg
|
||||||
|
echo "\r"
|
||||||
|
echomsg a:msg
|
||||||
|
echohl NONE
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Open the quickfix/location window when it is not empty,
|
||||||
|
" closes it if it is empty.
|
||||||
|
"
|
||||||
|
" Optional parameters:
|
||||||
|
" a:1 Quickfix window title.
|
||||||
|
" a:2 Message to show when the window is empty.
|
||||||
|
"
|
||||||
|
" Returns 0 if the quickfix window is empty, 1 otherwise.
|
||||||
|
function! s:quickfix_toggle(...) abort
|
||||||
|
if g:ledger_use_location_list
|
||||||
|
let l:list = 'l'
|
||||||
|
let l:open = (len(getloclist(winnr())) > 0)
|
||||||
|
else
|
||||||
|
let l:list = 'c'
|
||||||
|
let l:open = (len(getqflist()) > 0)
|
||||||
|
endif
|
||||||
|
|
||||||
|
if l:open
|
||||||
|
execute (g:ledger_qf_vertical ? 'vert' : 'botright') l:list.'open' g:ledger_qf_size
|
||||||
|
" Set local mappings to quit the quickfix window or lose focus.
|
||||||
|
nnoremap <silent> <buffer> <tab> <c-w><c-w>
|
||||||
|
execute 'nnoremap <silent> <buffer> q :' l:list.'close<CR>'
|
||||||
|
" Note that the following settings do not persist (e.g., when you close and re-open the quickfix window).
|
||||||
|
" See: https://superuser.com/questions/356912/how-do-i-change-the-quickix-title-status-bar-in-vim
|
||||||
|
if g:ledger_qf_hide_file
|
||||||
|
setl conceallevel=2
|
||||||
|
setl concealcursor=nc
|
||||||
|
syntax match qfFile /^[^|]*/ transparent conceal
|
||||||
|
endif
|
||||||
|
if a:0 > 0
|
||||||
|
let w:quickfix_title = a:1
|
||||||
|
endif
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
execute l:list.'close'
|
||||||
|
call s:warning_message((a:0 > 1) ? a:2 : 'No results')
|
||||||
|
return 0
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Populate a quickfix/location window with data. The argument must be a String
|
||||||
|
" or a List.
|
||||||
|
function! s:quickfix_populate(data) abort
|
||||||
|
" Note that cexpr/lexpr always uses the global value of errorformat
|
||||||
|
let l:efm = &errorformat " Save global errorformat
|
||||||
|
set errorformat=%EWhile\ parsing\ file\ \"%f\"\\,\ line\ %l:,%ZError:\ %m,%-C%.%#
|
||||||
|
set errorformat+=%tarning:\ \"%f\"\\,\ line\ %l:\ %m
|
||||||
|
" Format to parse command-line errors:
|
||||||
|
set errorformat+=Error:\ %m
|
||||||
|
" Format to parse reports:
|
||||||
|
set errorformat+=%f:%l\ %m
|
||||||
|
set errorformat+=%-G%.%#
|
||||||
|
execute (g:ledger_use_location_list ? 'l' : 'c').'getexpr' 'a:data'
|
||||||
|
let &errorformat = l:efm " Restore global errorformat
|
||||||
|
return
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Build a ledger command to process the given file.
|
||||||
|
function! s:ledger_cmd(file, args) abort
|
||||||
|
let l:options = g:ledger_extra_options
|
||||||
|
if len(g:ledger_date_format) > 0 && !g:ledger_is_hledger
|
||||||
|
let l:options = join([l:options, '--date-format', g:ledger_date_format,
|
||||||
|
\ '--input-date-format', g:ledger_date_format])
|
||||||
|
endif
|
||||||
|
return join([g:ledger_bin, l:options, '-f', shellescape(expand(a:file)), a:args])
|
||||||
|
endf
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
function! ledger#autocomplete_and_align() abort
|
||||||
|
if pumvisible()
|
||||||
|
return "\<c-n>"
|
||||||
|
endif
|
||||||
|
" Align an amount only if there is a digit immediately before the cursor and
|
||||||
|
" such digit is preceded by at least one space (the latter condition is
|
||||||
|
" necessary to avoid situations where a date starting at the first column is
|
||||||
|
" confused with a commodity to be aligned).
|
||||||
|
if match(getline('.'), '\s.*\d\%'.col('.').'c') > -1
|
||||||
|
normal! h
|
||||||
|
call ledger#align_amount_at_cursor()
|
||||||
|
return "\<c-o>A"
|
||||||
|
endif
|
||||||
|
return "\<c-x>\<c-o>"
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Use current line as input to ledger entry and replace with output. If there
|
||||||
|
" are errors, they are echoed instead.
|
||||||
|
function! ledger#entry() abort
|
||||||
|
let l:output = systemlist(s:ledger_cmd(g:ledger_main, join(['entry', getline('.')])))
|
||||||
|
" Filter out warnings
|
||||||
|
let l:output = filter(l:output, "v:val !~? '^Warning: '")
|
||||||
|
" Errors may occur
|
||||||
|
if v:shell_error
|
||||||
|
echomsg join(l:output)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
" Append output so we insert instead of overwrite, then delete line
|
||||||
|
call append('.', l:output)
|
||||||
|
normal! "_dd
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" Run an arbitrary ledger command and show the output in a new buffer. If
|
||||||
|
" there are errors, no new buffer is opened: the errors are displayed in a
|
||||||
|
" quickfix window instead.
|
||||||
|
"
|
||||||
|
" Parameters:
|
||||||
|
" file The file to be processed.
|
||||||
|
" args A string of Ledger command-line arguments.
|
||||||
|
"
|
||||||
|
" Returns:
|
||||||
|
" Ledger's output as a String.
|
||||||
|
function! ledger#report(file, args) abort
|
||||||
|
let l:output = systemlist(s:ledger_cmd(a:file, a:args))
|
||||||
|
if v:shell_error " If there are errors, show them in a quickfix/location list.
|
||||||
|
call s:quickfix_populate(l:output)
|
||||||
|
call s:quickfix_toggle('Errors', 'Unable to parse errors')
|
||||||
|
endif
|
||||||
|
return l:output
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Open the output of a Ledger's command in a new buffer.
|
||||||
|
"
|
||||||
|
" Parameters:
|
||||||
|
" report A String containing the output of a Ledger's command.
|
||||||
|
"
|
||||||
|
" Returns:
|
||||||
|
" 1 if a new buffer is created; 0 otherwise.
|
||||||
|
function! ledger#output(report) abort
|
||||||
|
if empty(a:report)
|
||||||
|
call s:warning_message('No results')
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
" Open a new buffer to show Ledger's output.
|
||||||
|
execute get(s:winpos_map, g:ledger_winpos, 'bo new')
|
||||||
|
setlocal buftype=nofile bufhidden=wipe modifiable nobuflisted noswapfile nowrap
|
||||||
|
call append(0, a:report)
|
||||||
|
setlocal nomodifiable
|
||||||
|
" Set local mappings to quit window or lose focus.
|
||||||
|
nnoremap <silent> <buffer> <tab> <c-w><c-p>
|
||||||
|
nnoremap <silent> <buffer> q <c-w><c-p>@=winnr('#')<cr><c-w>c
|
||||||
|
" Add some coloring to the report
|
||||||
|
syntax match LedgerNumber /-\@1<!\d\+\([,.]\d\+\)*/
|
||||||
|
syntax match LedgerNegativeNumber /-\d\+\([,.]\d\+\)*/
|
||||||
|
syntax match LedgerImproperPerc /\d\d\d\+%/
|
||||||
|
return 1
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Show an arbitrary register report in a quickfix list.
|
||||||
|
"
|
||||||
|
" Parameters:
|
||||||
|
" file The file to be processed
|
||||||
|
" args A string of Ledger command-line arguments.
|
||||||
|
function! ledger#register(file, args) abort
|
||||||
|
let l:cmd = s:ledger_cmd(a:file, join([
|
||||||
|
\ 'register',
|
||||||
|
\ "--format='" . g:ledger_qf_register_format . "'",
|
||||||
|
\ "--prepend-format='%(filename):%(beg_line) '",
|
||||||
|
\ a:args
|
||||||
|
\ ]))
|
||||||
|
call s:quickfix_populate(systemlist(l:cmd))
|
||||||
|
call s:quickfix_toggle('Register report')
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Reconcile the given account.
|
||||||
|
" This function accepts a file path as a third optional argument.
|
||||||
|
" The default is to use the value of g:ledger_main.
|
||||||
|
"
|
||||||
|
" Parameters:
|
||||||
|
" file The file to be processed
|
||||||
|
" account An account name (String)
|
||||||
|
" target_amount The target amount (Float)
|
||||||
|
function! ledger#reconcile(file, account, target_amount) abort
|
||||||
|
let l:cmd = s:ledger_cmd(a:file, join([
|
||||||
|
\ 'register',
|
||||||
|
\ '--uncleared',
|
||||||
|
\ "--format='" . g:ledger_qf_reconcile_format . "'",
|
||||||
|
\ "--prepend-format='%(filename):%(beg_line) %(pending ? \"P\" : \"U\") '",
|
||||||
|
\ shellescape(a:account)
|
||||||
|
\ ]))
|
||||||
|
let l:file = expand(a:file) " Needed for #show_balance() later
|
||||||
|
call s:quickfix_populate(systemlist(l:cmd))
|
||||||
|
if s:quickfix_toggle('Reconcile ' . a:account, 'Nothing to reconcile')
|
||||||
|
let g:ledger_target_amount = a:target_amount
|
||||||
|
" Show updated account balance upon saving, as long as the quickfix window is open
|
||||||
|
augroup reconcile
|
||||||
|
autocmd!
|
||||||
|
execute "autocmd BufWritePost *.ldg,*.ledger call ledger#show_balance('" . l:file . "','" . a:account . "')"
|
||||||
|
autocmd BufWipeout <buffer> call <sid>finish_reconciling()
|
||||||
|
augroup END
|
||||||
|
" Add refresh shortcut
|
||||||
|
execute "nnoremap <silent> <buffer> <c-l> :<c-u>call ledger#reconcile('"
|
||||||
|
\ . l:file . "','" . a:account . "'," . string(a:target_amount) . ')<cr>'
|
||||||
|
call ledger#show_balance(l:file, a:account)
|
||||||
|
endif
|
||||||
|
endf
|
||||||
|
|
||||||
|
function! s:finish_reconciling() abort
|
||||||
|
unlet g:ledger_target_amount
|
||||||
|
augroup reconcile
|
||||||
|
autocmd!
|
||||||
|
augroup END
|
||||||
|
augroup! reconcile
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Show the pending/cleared balance of an account.
|
||||||
|
" This function has an optional parameter:
|
||||||
|
"
|
||||||
|
" a:1 An account name
|
||||||
|
"
|
||||||
|
" If no account if given, the account in the current line is used.
|
||||||
|
function! ledger#show_balance(file, ...) abort
|
||||||
|
let l:account = a:0 > 0 && !empty(a:1) ? a:1 : matchstr(getline('.'), '\m\( \|\t\)\zs\S.\{-}\ze\( \|\t\|$\)')
|
||||||
|
if empty(l:account)
|
||||||
|
call s:error_message('No account found')
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let l:cmd = s:ledger_cmd(a:file, join([
|
||||||
|
\ 'cleared',
|
||||||
|
\ shellescape(l:account),
|
||||||
|
\ '--empty',
|
||||||
|
\ '--collapse',
|
||||||
|
\ "--format='%(scrub(get_at(display_total, 0)))|%(scrub(get_at(display_total, 1)))|%(quantity(scrub(get_at(display_total, 1))))'",
|
||||||
|
\ (empty(g:ledger_default_commodity) ? '' : '-X ' . shellescape(g:ledger_default_commodity))
|
||||||
|
\ ]))
|
||||||
|
let l:output = systemlist(l:cmd)
|
||||||
|
" Errors may occur, for example, when the account has multiple commodities
|
||||||
|
" and g:ledger_default_commodity is empty.
|
||||||
|
if v:shell_error
|
||||||
|
call s:quickfix_populate(l:output)
|
||||||
|
call s:quickfix_toggle('Errors', 'Unable to parse errors')
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let l:amounts = split(l:output[-1], '|')
|
||||||
|
redraw " Necessary in some cases to overwrite previous messages. See :h echo-redraw
|
||||||
|
if len(l:amounts) < 3
|
||||||
|
call s:error_message('Could not determine balance. Did you use a valid account?')
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
echo g:ledger_pending_string
|
||||||
|
echohl LedgerPending
|
||||||
|
echon l:amounts[0]
|
||||||
|
echohl NONE
|
||||||
|
echon ' ' g:ledger_cleared_string
|
||||||
|
echohl LedgerCleared
|
||||||
|
echon l:amounts[1]
|
||||||
|
echohl NONE
|
||||||
|
if exists('g:ledger_target_amount')
|
||||||
|
echon ' ' g:ledger_target_string
|
||||||
|
echohl LedgerTarget
|
||||||
|
echon printf('%.2f', (g:ledger_target_amount - str2float(l:amounts[2])))
|
||||||
|
echohl NONE
|
||||||
|
endif
|
||||||
|
endf
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
endif
|
||||||
244
autoload/nim.vim
Normal file
244
autoload/nim.vim
Normal file
@@ -0,0 +1,244 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'nim') == -1
|
||||||
|
|
||||||
|
let g:nim_log = []
|
||||||
|
let s:plugin_path = escape(expand('<sfile>:p:h'), '\')
|
||||||
|
|
||||||
|
if !exists("g:nim_caas_enabled")
|
||||||
|
let g:nim_caas_enabled = 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !executable('nim')
|
||||||
|
echoerr "the Nim compiler must be in your system's PATH"
|
||||||
|
endif
|
||||||
|
|
||||||
|
if has("python3")
|
||||||
|
exe 'py3file ' . fnameescape(s:plugin_path) . '/nim_vim.py'
|
||||||
|
elseif has("python")
|
||||||
|
exe 'pyfile ' . fnameescape(s:plugin_path) . '/nim_vim.py'
|
||||||
|
endif
|
||||||
|
|
||||||
|
fun! nim#init()
|
||||||
|
let cmd = printf("nim --dump.format:json --verbosity:0 dump %s", s:CurrentNimFile())
|
||||||
|
let raw_dumpdata = system(cmd)
|
||||||
|
if !v:shell_error && expand("%:e") == "nim"
|
||||||
|
let false = 0 " Needed for eval of json
|
||||||
|
let true = 1 " Needed for eval of json
|
||||||
|
let dumpdata = eval(substitute(raw_dumpdata, "\n", "", "g"))
|
||||||
|
|
||||||
|
let b:nim_project_root = dumpdata['project_path']
|
||||||
|
let b:nim_defined_symbols = dumpdata['defined_symbols']
|
||||||
|
let b:nim_caas_enabled = g:nim_caas_enabled || index(dumpdata['defined_symbols'], 'forcecaas') != -1
|
||||||
|
|
||||||
|
for path in dumpdata['lib_paths']
|
||||||
|
if finddir(path) == path
|
||||||
|
let &l:path = path . "," . &l:path
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
else
|
||||||
|
let b:nim_caas_enabled = 0
|
||||||
|
endif
|
||||||
|
endf
|
||||||
|
|
||||||
|
fun! s:UpdateNimLog()
|
||||||
|
setlocal buftype=nofile
|
||||||
|
setlocal bufhidden=hide
|
||||||
|
setlocal noswapfile
|
||||||
|
|
||||||
|
for entry in g:nim_log
|
||||||
|
call append(line('$'), split(entry, "\n"))
|
||||||
|
endfor
|
||||||
|
|
||||||
|
let g:nim_log = []
|
||||||
|
|
||||||
|
match Search /^nim\ .*/
|
||||||
|
endf
|
||||||
|
|
||||||
|
augroup NimVim
|
||||||
|
au!
|
||||||
|
au BufEnter log://nim call s:UpdateNimLog()
|
||||||
|
if has("python3") || has("python")
|
||||||
|
" au QuitPre * :py nimTerminateAll()
|
||||||
|
au VimLeavePre * :py nimTerminateAll()
|
||||||
|
endif
|
||||||
|
augroup END
|
||||||
|
|
||||||
|
command! NimLog :e log://nim
|
||||||
|
|
||||||
|
command! NimTerminateService
|
||||||
|
\ :exe printf("py nimTerminateService('%s')", b:nim_project_root)
|
||||||
|
|
||||||
|
command! NimRestartService
|
||||||
|
\ :exe printf("py nimRestartService('%s')", b:nim_project_root)
|
||||||
|
|
||||||
|
fun! s:CurrentNimFile()
|
||||||
|
let save_cur = getpos('.')
|
||||||
|
call cursor(0, 0, 0)
|
||||||
|
|
||||||
|
let PATTERN = "\\v^\\#\\s*included from \\zs.*\\ze"
|
||||||
|
let l = search(PATTERN, "n")
|
||||||
|
|
||||||
|
if l != 0
|
||||||
|
let f = matchstr(getline(l), PATTERN)
|
||||||
|
let l:to_check = expand('%:h') . "/" . f
|
||||||
|
else
|
||||||
|
let l:to_check = expand("%")
|
||||||
|
endif
|
||||||
|
|
||||||
|
call setpos('.', save_cur)
|
||||||
|
return l:to_check
|
||||||
|
endf
|
||||||
|
|
||||||
|
let g:nim_symbol_types = {
|
||||||
|
\ 'skParam': 'v',
|
||||||
|
\ 'skVar': 'v',
|
||||||
|
\ 'skLet': 'v',
|
||||||
|
\ 'skTemp': 'v',
|
||||||
|
\ 'skForVar': 'v',
|
||||||
|
\ 'skConst': 'v',
|
||||||
|
\ 'skResult': 'v',
|
||||||
|
\ 'skGenericParam': 't',
|
||||||
|
\ 'skType': 't',
|
||||||
|
\ 'skField': 'm',
|
||||||
|
\ 'skProc': 'f',
|
||||||
|
\ 'skMethod': 'f',
|
||||||
|
\ 'skIterator': 'f',
|
||||||
|
\ 'skConverter': 'f',
|
||||||
|
\ 'skMacro': 'f',
|
||||||
|
\ 'skTemplate': 'f',
|
||||||
|
\ 'skEnumField': 'v',
|
||||||
|
\ }
|
||||||
|
|
||||||
|
fun! NimExec(op)
|
||||||
|
let isDirty = getbufvar(bufnr('%'), "&modified")
|
||||||
|
if isDirty
|
||||||
|
let tmp = tempname() . bufname("%") . "_dirty.nim"
|
||||||
|
silent! exe ":w " . tmp
|
||||||
|
|
||||||
|
let cmd = printf("idetools %s --trackDirty:\"%s,%s,%d,%d\" \"%s\"",
|
||||||
|
\ a:op, tmp, expand('%:p'), line('.'), col('.')-1, s:CurrentNimFile())
|
||||||
|
else
|
||||||
|
let cmd = printf("idetools %s --track:\"%s,%d,%d\" \"%s\"",
|
||||||
|
\ a:op, expand('%:p'), line('.'), col('.')-1, s:CurrentNimFile())
|
||||||
|
endif
|
||||||
|
|
||||||
|
if b:nim_caas_enabled
|
||||||
|
exe printf("py nimExecCmd('%s', '%s', False)", b:nim_project_root, cmd)
|
||||||
|
let output = l:py_res
|
||||||
|
else
|
||||||
|
let output = system("nim " . cmd)
|
||||||
|
endif
|
||||||
|
|
||||||
|
call add(g:nim_log, "nim " . cmd . "\n" . output)
|
||||||
|
return output
|
||||||
|
endf
|
||||||
|
|
||||||
|
fun! NimExecAsync(op, Handler)
|
||||||
|
let result = NimExec(a:op)
|
||||||
|
call a:Handler(result)
|
||||||
|
endf
|
||||||
|
|
||||||
|
fun! NimComplete(findstart, base)
|
||||||
|
if b:nim_caas_enabled == 0
|
||||||
|
return -1
|
||||||
|
endif
|
||||||
|
|
||||||
|
if a:findstart
|
||||||
|
if synIDattr(synIDtrans(synID(line("."),col("."),1)), "name") == 'Comment'
|
||||||
|
return -1
|
||||||
|
endif
|
||||||
|
let line = getline('.')
|
||||||
|
let start = col('.') - 1
|
||||||
|
while start > 0 && line[start - 1] =~? '\w'
|
||||||
|
let start -= 1
|
||||||
|
endwhile
|
||||||
|
return start
|
||||||
|
else
|
||||||
|
let result = []
|
||||||
|
let sugOut = NimExec("--suggest")
|
||||||
|
for line in split(sugOut, '\n')
|
||||||
|
let lineData = split(line, '\t')
|
||||||
|
if len(lineData) > 0 && lineData[0] == "sug"
|
||||||
|
let word = split(lineData[2], '\.')[-1]
|
||||||
|
if a:base ==? '' || word =~# '^' . a:base
|
||||||
|
let kind = get(g:nim_symbol_types, lineData[1], '')
|
||||||
|
let c = { 'word': word, 'kind': kind, 'menu': lineData[3], 'dup': 1 }
|
||||||
|
call add(result, c)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
return result
|
||||||
|
endif
|
||||||
|
endf
|
||||||
|
|
||||||
|
if !exists("g:neocomplcache_omni_patterns")
|
||||||
|
let g:neocomplcache_omni_patterns = {}
|
||||||
|
endif
|
||||||
|
let g:neocomplcache_omni_patterns['nim'] = '[^. *\t]\.\w*'
|
||||||
|
|
||||||
|
if !exists('g:neocomplete#sources#omni#input_patterns')
|
||||||
|
let g:neocomplete#sources#omni#input_patterns = {}
|
||||||
|
endif
|
||||||
|
let g:neocomplete#sources#omni#input_patterns['nim'] = '[^. *\t]\.\w*'
|
||||||
|
|
||||||
|
let g:nim_completion_callbacks = {}
|
||||||
|
|
||||||
|
fun! NimAsyncCmdComplete(cmd, output)
|
||||||
|
call add(g:nim_log, a:output)
|
||||||
|
echom g:nim_completion_callbacks
|
||||||
|
if has_key(g:nim_completion_callbacks, a:cmd)
|
||||||
|
let Callback = get(g:nim_completion_callbacks, a:cmd)
|
||||||
|
call Callback(a:output)
|
||||||
|
" remove(g:nim_completion_callbacks, a:cmd)
|
||||||
|
else
|
||||||
|
echom "ERROR, Unknown Command: " . a:cmd
|
||||||
|
endif
|
||||||
|
return 1
|
||||||
|
endf
|
||||||
|
|
||||||
|
fun! GotoDefinition_nim_ready(def_output)
|
||||||
|
if v:shell_error
|
||||||
|
echo "nim was unable to locate the definition. exit code: " . v:shell_error
|
||||||
|
" echoerr a:def_output
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
let rawDef = matchstr(a:def_output, 'def\t\([^\n]*\)')
|
||||||
|
if rawDef == ""
|
||||||
|
echo "the current cursor position does not match any definitions"
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
let defBits = split(rawDef, '\t')
|
||||||
|
let file = defBits[4]
|
||||||
|
let line = defBits[5]
|
||||||
|
exe printf("e +%d %s", line, file)
|
||||||
|
return 1
|
||||||
|
endf
|
||||||
|
|
||||||
|
fun! GotoDefinition_nim()
|
||||||
|
call NimExecAsync("--def", function("GotoDefinition_nim_ready"))
|
||||||
|
endf
|
||||||
|
|
||||||
|
fun! FindReferences_nim()
|
||||||
|
setloclist()
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Syntastic syntax checking
|
||||||
|
fun! SyntaxCheckers_nim_nim_GetLocList()
|
||||||
|
let makeprg = 'nim check --hints:off --listfullpaths ' . s:CurrentNimFile()
|
||||||
|
let errorformat = &errorformat
|
||||||
|
|
||||||
|
return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
|
||||||
|
endf
|
||||||
|
|
||||||
|
function! SyntaxCheckers_nim_nim_IsAvailable()
|
||||||
|
return executable("nim")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
if exists("g:SyntasticRegistry")
|
||||||
|
call g:SyntasticRegistry.CreateAndRegisterChecker({
|
||||||
|
\ 'filetype': 'nim',
|
||||||
|
\ 'name': 'nim'})
|
||||||
|
endif
|
||||||
|
|
||||||
|
endif
|
||||||
207
autoload/polyglot.vim
Normal file
207
autoload/polyglot.vim
Normal file
@@ -0,0 +1,207 @@
|
|||||||
|
" Line continuation is used here, remove 'C' from 'cpoptions'
|
||||||
|
let s:cpo_save = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
func! polyglot#Heuristics()
|
||||||
|
" Try to detect filetype from shebang
|
||||||
|
let l:filetype = polyglot#Shebang()
|
||||||
|
if l:filetype != ""
|
||||||
|
exec "setf " . l:filetype
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
let s:interpreters = {
|
||||||
|
\ 'osascript': 'applescript',
|
||||||
|
\ 'tcc': 'c',
|
||||||
|
\ 'coffee': 'coffee',
|
||||||
|
\ 'crystal': 'crystal',
|
||||||
|
\ 'dart': 'dart',
|
||||||
|
\ 'elixir': 'elixir',
|
||||||
|
\ 'escript': 'erlang',
|
||||||
|
\ 'fish': 'fish',
|
||||||
|
\ 'gnuplot': 'gnuplot',
|
||||||
|
\ 'runhaskell': 'haskell',
|
||||||
|
\ 'chakra': 'javascript',
|
||||||
|
\ 'd8': 'javascript',
|
||||||
|
\ 'gjs': 'javascript',
|
||||||
|
\ 'js': 'javascript',
|
||||||
|
\ 'node': 'javascript',
|
||||||
|
\ 'nodejs': 'javascript',
|
||||||
|
\ 'qjs': 'javascript',
|
||||||
|
\ 'rhino': 'javascript',
|
||||||
|
\ 'v8': 'javascript',
|
||||||
|
\ 'v8-shell': 'javascript',
|
||||||
|
\ 'julia': 'julia',
|
||||||
|
\ 'lua': 'lua',
|
||||||
|
\ 'moon': 'moon',
|
||||||
|
\ 'ocaml': 'ocaml',
|
||||||
|
\ 'ocamlrun': 'ocaml',
|
||||||
|
\ 'ocamlscript': 'ocaml',
|
||||||
|
\ 'cperl': 'perl',
|
||||||
|
\ 'perl': 'perl',
|
||||||
|
\ 'php': 'php',
|
||||||
|
\ 'pwsh': 'ps1',
|
||||||
|
\ 'python': 'python',
|
||||||
|
\ 'python2': 'python',
|
||||||
|
\ 'python3': 'python',
|
||||||
|
\ 'qmake': 'qmake',
|
||||||
|
\ 'Rscript': 'r',
|
||||||
|
\ 'racket': 'racket',
|
||||||
|
\ 'perl6': 'raku',
|
||||||
|
\ 'raku': 'raku',
|
||||||
|
\ 'rakudo': 'raku',
|
||||||
|
\ 'ruby': 'ruby',
|
||||||
|
\ 'macruby': 'ruby',
|
||||||
|
\ 'rake': 'ruby',
|
||||||
|
\ 'jruby': 'ruby',
|
||||||
|
\ 'rbx': 'ruby',
|
||||||
|
\ 'scala': 'scala',
|
||||||
|
\ 'ash': 'sh',
|
||||||
|
\ 'bash': 'sh',
|
||||||
|
\ 'dash': 'sh',
|
||||||
|
\ 'ksh': 'sh',
|
||||||
|
\ 'mksh': 'sh',
|
||||||
|
\ 'pdksh': 'sh',
|
||||||
|
\ 'rc': 'sh',
|
||||||
|
\ 'sh': 'sh',
|
||||||
|
\ 'zsh': 'sh',
|
||||||
|
\ 'boolector': 'smt2',
|
||||||
|
\ 'cvc4': 'smt2',
|
||||||
|
\ 'mathsat5': 'smt2',
|
||||||
|
\ 'opensmt': 'smt2',
|
||||||
|
\ 'smtinterpol': 'smt2',
|
||||||
|
\ 'smt-rat': 'smt2',
|
||||||
|
\ 'stp': 'smt2',
|
||||||
|
\ 'verit': 'smt2',
|
||||||
|
\ 'yices2': 'smt2',
|
||||||
|
\ 'z3': 'smt2',
|
||||||
|
\ 'deno': 'typescript',
|
||||||
|
\ 'ts-node': 'typescript',
|
||||||
|
\ }
|
||||||
|
|
||||||
|
let s:r_hashbang = '^#!\s*\(\S\+\)\s*\(.*\)\s*'
|
||||||
|
let s:r_envflag = '%(\S\+=\S\+\|-[iS]\|--ignore-environment\|--split-string\)'
|
||||||
|
let s:r_env = '^\%(\' . s:r_envflag . '\s\+\)*\(\S\+\)'
|
||||||
|
|
||||||
|
func! polyglot#Shebang()
|
||||||
|
let l:line1 = getline(1)
|
||||||
|
|
||||||
|
if l:line1 !~# "^#!"
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:pathrest = matchlist(l:line1, s:r_hashbang)
|
||||||
|
|
||||||
|
if len(l:pathrest) == 0
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let [_, l:path, l:rest; __] = l:pathrest
|
||||||
|
|
||||||
|
let l:script = split(l:path, "/")[-1]
|
||||||
|
|
||||||
|
if l:script == "env"
|
||||||
|
let l:argspath = matchlist(l:rest, s:r_env)
|
||||||
|
if len(l:argspath) == 0
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:script = l:argspath[1]
|
||||||
|
endif
|
||||||
|
|
||||||
|
if has_key(s:interpreters, l:script)
|
||||||
|
return s:interpreters[l:script]
|
||||||
|
endif
|
||||||
|
|
||||||
|
for interpreter in keys(s:interpreters)
|
||||||
|
if l:script =~# '^' . interpreter
|
||||||
|
return s:interpreters[interpreter]
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func! polyglot#DetectInpFiletype()
|
||||||
|
let line = getline(1)
|
||||||
|
if line =~# '^\*'
|
||||||
|
setf abaqus | return
|
||||||
|
endif
|
||||||
|
for lnum in range(1, min([line("$"), 500]))
|
||||||
|
let line = getline(lnum)
|
||||||
|
if line =~? '^header surface data'
|
||||||
|
setf trasys | return
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func! polyglot#DetectAsaFiletype()
|
||||||
|
if exists("g:filetype_asa")
|
||||||
|
exe "setf " . g:filetype_asa | return
|
||||||
|
endif
|
||||||
|
setf aspvbs | return
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func! polyglot#DetectAspFiletype()
|
||||||
|
if exists("g:filetype_asp")
|
||||||
|
exe "setf " . g:filetype_asp | return
|
||||||
|
endif
|
||||||
|
for lnum in range(1, min([line("$"), 3]))
|
||||||
|
let line = getline(lnum)
|
||||||
|
if line =~? 'perlscript'
|
||||||
|
setf aspperl | return
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
setf aspvbs | return
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func! polyglot#DetectMFiletype()
|
||||||
|
let saw_comment = 0
|
||||||
|
for lnum in range(1, min([line("$"), 100]))
|
||||||
|
let line = getline(lnum)
|
||||||
|
if line =~# '^\s*/\*'
|
||||||
|
let saw_comment = 1
|
||||||
|
endif
|
||||||
|
if line =~# '^\s*\(@\(interface\|class\|protocol\|property\|end\|synchronised\|selector\|implementation\)\(\<\|\>\)\|#import\s\+.\+\.h[">]\)'
|
||||||
|
setf objc | return
|
||||||
|
endif
|
||||||
|
if line =~# '^\s*%'
|
||||||
|
setf octave | return
|
||||||
|
endif
|
||||||
|
if line =~# '^\s*(\*'
|
||||||
|
setf mma | return
|
||||||
|
endif
|
||||||
|
if line =~? '^\s*\(\(type\|var\)\(\<\|\>\)\|--\)'
|
||||||
|
setf murphi | return
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
if saw_comment
|
||||||
|
setf objc | return
|
||||||
|
endif
|
||||||
|
if exists("g:filetype_m")
|
||||||
|
exe "setf " . g:filetype_m | return
|
||||||
|
endif
|
||||||
|
setf octave | return
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func! polyglot#DetectFsFiletype()
|
||||||
|
for lnum in range(1, min([line("$"), 50]))
|
||||||
|
let line = getline(lnum)
|
||||||
|
if line =~# '^\(: \|new-device\)'
|
||||||
|
setf forth | return
|
||||||
|
endif
|
||||||
|
if line =~# '^\s*\(#light\|import\|let\|module\|namespace\|open\|type\)'
|
||||||
|
setf fsharp | return
|
||||||
|
endif
|
||||||
|
if line =~# '\s*\(#version\|precision\|uniform\|varying\|vec[234]\)'
|
||||||
|
setf glsl | return
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
if exists("g:filetype_fs")
|
||||||
|
exe "setf " . g:filetype_fs | return
|
||||||
|
endif
|
||||||
|
setf forth | return
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" Restore 'cpoptions'
|
||||||
|
let &cpo = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vifm') == -1
|
|
||||||
|
|
||||||
" common functions for vifm command-line editing buffer filetype plugins
|
|
||||||
" Maintainer: xaizek <xaizek@posteo.net>
|
|
||||||
" Last Change: August 18, 2013
|
|
||||||
|
|
||||||
" Prepare buffer
|
|
||||||
function! vifm#edit#Init()
|
|
||||||
" Mappings for quick leaving the buffer (behavior similar to Command line
|
|
||||||
" buffer in Vim)
|
|
||||||
nnoremap <buffer> <cr> :copy 0 \| wq<cr>
|
|
||||||
imap <buffer> <cr> <esc><cr>
|
|
||||||
|
|
||||||
" Start buffer editing in insert mode
|
|
||||||
startinsert
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
endif
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vifm') == -1
|
|
||||||
|
|
||||||
" common functions for vifm plugin related to globals
|
|
||||||
" Maintainer: xaizek <xaizek@posteo.net>
|
|
||||||
" Last Change: November 03, 2018
|
|
||||||
|
|
||||||
" Initializes global variables to defaults unless they are already set
|
|
||||||
function! vifm#globals#Init()
|
|
||||||
if !exists('g:vifm_exec')
|
|
||||||
let g:vifm_exec = 'vifm'
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists('g:vifm_exec_args')
|
|
||||||
let g:vifm_exec_args = ''
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists('g:vifm_term')
|
|
||||||
if has('win32')
|
|
||||||
if filereadable('C:\Windows\system32\cmd.exe')
|
|
||||||
let g:vifm_term = 'C:\Windows\system32\cmd.exe /C'
|
|
||||||
else
|
|
||||||
" If don't find use the integrate shell it work too
|
|
||||||
let g:vifm_term = ''
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
let g:vifm_term = 'xterm -e'
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists('g:vifm_embed_term')
|
|
||||||
let g:vifm_embed_term = has('gui_running')
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
endif
|
|
||||||
312
build
312
build
@@ -1,312 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -eo pipefail
|
|
||||||
|
|
||||||
DIRS="syntax indent compiler autoload ftplugin ctags after/syntax after/indent after/ftplugin"
|
|
||||||
# shellcheck disable=SC2034
|
|
||||||
DIRS_BASIC="syntax compiler indent after/syntax after/indent"
|
|
||||||
# shellcheck disable=SC2034
|
|
||||||
DIRS_ALL="syntax indent compiler autoload ftplugin after extras ctags"
|
|
||||||
# shellcheck disable=SC2034
|
|
||||||
DIRS_SYNTAX="syntax indent after/syntax after/indent"
|
|
||||||
# shellcheck disable=SC2034
|
|
||||||
DIRS_NOAFTER="syntax compiler indent autoload ftplugin"
|
|
||||||
DIRS_JAVASCRIPT="${DIRS} extras"
|
|
||||||
read -r -a DIRS_RM <<<"$DIRS_ALL"
|
|
||||||
|
|
||||||
OUTPUT=""
|
|
||||||
|
|
||||||
output() {
|
|
||||||
OUTPUT="$OUTPUT$1"
|
|
||||||
echo -n "$1"
|
|
||||||
}
|
|
||||||
|
|
||||||
download() {
|
|
||||||
for pack in $1; do
|
|
||||||
path="$(cut -d ':' -f 2 <<<"$pack")"
|
|
||||||
dir="tmp/$(cut -d '/' -f 2 <<<"$path")"
|
|
||||||
repo="$(awk -F\# '{print $1}' <<<"$path")"
|
|
||||||
branch="$(awk -F\# '{print $2}' <<<"$path")"
|
|
||||||
rm -rf "$dir"
|
|
||||||
(mkdir -p "$dir" && curl --silent -fL "https://codeload.github.com/$repo/tar.gz/${branch:-master}" | tar -zx -C "$dir" --strip 1 && printf '.' || echo "Failed to download: $repo") &
|
|
||||||
done
|
|
||||||
|
|
||||||
wait
|
|
||||||
}
|
|
||||||
|
|
||||||
extract() {
|
|
||||||
echo
|
|
||||||
|
|
||||||
for pack in $1; do
|
|
||||||
name="$(cut -d ':' -f 1 <<<"$pack")"
|
|
||||||
path="$(cut -d ':' -f 2 <<<"$pack")"
|
|
||||||
dir="tmp/$(cut -d '/' -f 2 <<<"$path")"
|
|
||||||
directories="DIRS$(cut -d ':' -f 3 <<<"$pack")"
|
|
||||||
subtree="$(cut -d ':' -f 4 <<<"$pack")"
|
|
||||||
output "- [$name](https://github.com/$path) ("
|
|
||||||
|
|
||||||
subdirs=""
|
|
||||||
for subdir in ${!directories}; do
|
|
||||||
if [ -d "${dir}${subtree:-/}${subdir}" ]; then
|
|
||||||
base="$(basename "$subdir")"
|
|
||||||
if [[ "$subdirs" != *"$base"* ]]; then
|
|
||||||
subdirs="$subdirs, $base"
|
|
||||||
fi
|
|
||||||
|
|
||||||
copy_dir "${dir}${subtree}" "$subdir" "$name"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# syntax for go.vim depends on autoload for go.vim, but we exclude the
|
|
||||||
# autoload always and the ftplugin because it's too complex. FML.
|
|
||||||
if [ "${pack%%:*}" = "go" ]; then
|
|
||||||
copy_file "${dir}${subtree}" "${dir}${subtree}/autoload/go/config.vim" "${name}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
output "${subdirs##, })"$'\n'
|
|
||||||
done
|
|
||||||
|
|
||||||
for pack in $1; do
|
|
||||||
name="$(cut -d ':' -f 1 <<<"$pack")"
|
|
||||||
path="$(cut -d ':' -f 2 <<<"$pack")"
|
|
||||||
dir="tmp/$(cut -d '/' -f 2 <<<"$path")"
|
|
||||||
subtree="$(cut -d ':' -f 4 <<<"$pack")"
|
|
||||||
|
|
||||||
if [ -d "$dir${subtree:-/}plugin" ]; then
|
|
||||||
echo "Possible error (plugin directory exists): $path" >&2
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
copy_dir() {
|
|
||||||
find "$1/$2" \( -name '*.vim' -o -name '*.vital' -o -name '*.ctags' \) -print0 | while read -r -d $'\0' file; do
|
|
||||||
copy_file "$1" "$file" "$3"
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
copy_file() {
|
|
||||||
## $1 is the build dir (e.g. tmp/vim-go)
|
|
||||||
## $2 is the full file path, as returned by `find` (e.g. tmp/vim-go/indent/go.vim)
|
|
||||||
## $3 is the name of the package (so that we can detect if it's disabled at runtime)
|
|
||||||
local tmp_dir="$1"
|
|
||||||
local file_in_tmp="$2"
|
|
||||||
local file_basename="${2##*/}"
|
|
||||||
local file_path="${file_in_tmp##$tmp_dir/}" # Just this file's (full) path
|
|
||||||
file_path="${file_path%/*}" # Minus the actual name of the file
|
|
||||||
local file_in_dst="${file_path}/${file_basename}" # Could also be ${file_in_tmp##$tmp_dir/}
|
|
||||||
local package_name="$3"
|
|
||||||
|
|
||||||
if [ "${file_in_tmp##$tmp_dir/}" != "${file_in_dst}" ]; then
|
|
||||||
echo "Failure in logic in build script; '${file_in_tmp##$tmp_dir/}' != '${file_in_dst}'. Bailing." >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
mkdir -p "${file_path}"
|
|
||||||
|
|
||||||
(
|
|
||||||
if [[ "${package_name}" == "jsx" ]]; then
|
|
||||||
printf "if !exists('g:polyglot_disabled') || !(index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'jsx') != -1)\n\n"
|
|
||||||
else
|
|
||||||
printf "if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, '$package_name') == -1\n\n"
|
|
||||||
fi
|
|
||||||
cat "$file_in_tmp"
|
|
||||||
printf "\nendif\n"
|
|
||||||
) >> "$file_in_dst"
|
|
||||||
}
|
|
||||||
|
|
||||||
update_readme() {
|
|
||||||
local tf of
|
|
||||||
tf="$(mktemp)"
|
|
||||||
of="$(mktemp)"
|
|
||||||
LC_ALL=C sort <<<"$OUTPUT" | grep -vxE '[[:space:]]*' > "$of"
|
|
||||||
|
|
||||||
awk 'suppress == 0 {
|
|
||||||
gsub(/<!--Package Count-->[^<]*<!--\/Package Count-->/,
|
|
||||||
"<!--Package Count-->'"$(awk 'END {print NR}' "$of")"'<!--/Package Count-->");
|
|
||||||
print;
|
|
||||||
}
|
|
||||||
/<!--Language Packs-->/ {
|
|
||||||
suppress = 1;
|
|
||||||
while ( ( getline line < "'"$of"'" ) > 0 ) {
|
|
||||||
print line;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/<!--\/Language Packs-->/ {
|
|
||||||
suppress = 0;
|
|
||||||
print;
|
|
||||||
}' "README.md" >"$tf"
|
|
||||||
mv "$tf" "README.md"
|
|
||||||
}
|
|
||||||
|
|
||||||
PACKS="
|
|
||||||
acpiasl:martinlroth/vim-acpi-asl
|
|
||||||
ansible:pearofducks/ansible-vim
|
|
||||||
apiblueprint:sheerun/apiblueprint.vim
|
|
||||||
applescript:mityu/vim-applescript:_SYNTAX
|
|
||||||
arduino:sudar/vim-arduino-syntax
|
|
||||||
asciidoc:asciidoc/vim-asciidoc
|
|
||||||
autohotkey:hnamikaw/vim-autohotkey
|
|
||||||
blade:jwalton512/vim-blade
|
|
||||||
brewfile:bfontaine/Brewfile.vim
|
|
||||||
c++11:octol/vim-cpp-enhanced-highlight
|
|
||||||
c/c++:vim-jp/vim-cpp
|
|
||||||
caddyfile:isobit/vim-caddyfile
|
|
||||||
carp:hellerve/carp-vim
|
|
||||||
cjsx:mtscout6/vim-cjsx
|
|
||||||
clojure:guns/vim-clojure-static
|
|
||||||
cmake:pboettch/vim-cmake-syntax
|
|
||||||
coffee-script:kchmck/vim-coffee-script:_NOAFTER
|
|
||||||
cql:elubow/cql-vim
|
|
||||||
cryptol:victoredwardocallaghan/cryptol.vim
|
|
||||||
crystal:rhysd/vim-crystal
|
|
||||||
csv:chrisbra/csv.vim
|
|
||||||
cucumber:tpope/vim-cucumber
|
|
||||||
cue:mgrabovsky/vim-cuesheet
|
|
||||||
dart:dart-lang/dart-vim-plugin
|
|
||||||
dhall:vmchale/dhall-vim
|
|
||||||
dlang:JesseKPhillips/d.vim
|
|
||||||
dockerfile:ekalinin/Dockerfile.vim
|
|
||||||
elixir:elixir-lang/vim-elixir
|
|
||||||
elm:andys8/vim-elm-syntax
|
|
||||||
emberscript:yalesov/vim-ember-script
|
|
||||||
emblem:yalesov/vim-emblem
|
|
||||||
erlang:vim-erlang/vim-erlang-runtime
|
|
||||||
fennel:bakpakin/fennel.vim
|
|
||||||
ferm:vim-scripts/ferm.vim
|
|
||||||
fish:georgewitteman/vim-fish
|
|
||||||
flatbuffers:dcharbon/vim-flatbuffers
|
|
||||||
fsharp:ionide/Ionide-vim:_BASIC
|
|
||||||
gdscript:calviken/vim-gdscript3:_SYNTAX
|
|
||||||
git:tpope/vim-git
|
|
||||||
glsl:tikhomirov/vim-glsl:_NOAFTER
|
|
||||||
gmpl:maelvalais/gmpl.vim
|
|
||||||
gnuplot:vim-scripts/gnuplot-syntax-highlighting
|
|
||||||
go:fatih/vim-go:_BASIC
|
|
||||||
graphql:jparise/vim-graphql:_ALL
|
|
||||||
gradle:tfnico/vim-gradle
|
|
||||||
haml:sheerun/vim-haml
|
|
||||||
handlebars:sheerun/vim-mustache-handlebars
|
|
||||||
haproxy:CH-DanReif/haproxy.vim
|
|
||||||
haskell:neovimhaskell/haskell-vim
|
|
||||||
haxe:yaymukund/vim-haxe
|
|
||||||
hcl:b4b4r07/vim-hcl
|
|
||||||
helm:towolf/vim-helm
|
|
||||||
hive:zebradil/hive.vim
|
|
||||||
html5:othree/html5.vim
|
|
||||||
i3:mboughaba/i3config.vim
|
|
||||||
icalenadr:chutzpah/icalendar.vim
|
|
||||||
idris:idris-hackers/idris-vim
|
|
||||||
ion:vmchale/ion-vim
|
|
||||||
javascript:pangloss/vim-javascript:_JAVASCRIPT
|
|
||||||
jenkins:martinda/Jenkinsfile-vim-syntax
|
|
||||||
jinja:lepture/vim-jinja
|
|
||||||
jq:vito-c/jq.vim
|
|
||||||
json5:GutenYe/json5.vim
|
|
||||||
json:elzr/vim-json
|
|
||||||
jsonnet:google/vim-jsonnet
|
|
||||||
jst:briancollins/vim-jst
|
|
||||||
jsx:MaxMEllon/vim-jsx-pretty:_ALL
|
|
||||||
julia:JuliaEditorSupport/julia-vim
|
|
||||||
kotlin:udalov/kotlin-vim
|
|
||||||
ledger:ledger/vim-ledger:_BASIC
|
|
||||||
less:groenewege/vim-less:_NOAFTER
|
|
||||||
lilypond:anowlcalledjosh/vim-lilypond
|
|
||||||
livescript:gkz/vim-ls
|
|
||||||
llvm:rhysd/vim-llvm
|
|
||||||
log:MTDL9/vim-log-highlighting
|
|
||||||
lua:tbastos/vim-lua
|
|
||||||
mako:sophacles/vim-bundle-mako
|
|
||||||
markdown:plasticboy/vim-markdown:_NOAFTER
|
|
||||||
mathematica:voldikss/vim-mma
|
|
||||||
mdx:jxnblk/vim-mdx-js
|
|
||||||
meson:mesonbuild/meson:_ALL:/data/syntax-highlighting/vim/
|
|
||||||
moonscript:leafo/moonscript-vim
|
|
||||||
nginx:chr4/nginx.vim
|
|
||||||
nim:zah/nim.vim:_BASIC
|
|
||||||
nix:LnL7/vim-nix
|
|
||||||
objc:b4winckler/vim-objc
|
|
||||||
ocaml:rgrinberg/vim-ocaml
|
|
||||||
octave:McSinyx/vim-octave
|
|
||||||
opencl:petRUShka/vim-opencl
|
|
||||||
perl:vim-perl/vim-perl
|
|
||||||
pgsql:lifepillar/pgsql.vim
|
|
||||||
php:StanAngeloff/php.vim
|
|
||||||
plantuml:aklt/plantuml-syntax
|
|
||||||
pony:jakwings/vim-pony
|
|
||||||
powershell:PProvost/vim-ps1
|
|
||||||
protobuf:uarun/vim-protobuf
|
|
||||||
pug:digitaltoad/vim-pug
|
|
||||||
puppet:rodjek/vim-puppet
|
|
||||||
purescript:purescript-contrib/purescript-vim
|
|
||||||
python-compiler:aliev/vim-compiler-python
|
|
||||||
python-indent:Vimjas/vim-python-pep8-indent
|
|
||||||
python:vim-python/python-syntax
|
|
||||||
qmake:artoj/qmake-syntax-vim
|
|
||||||
qml:peterhoeg/vim-qml
|
|
||||||
r-lang:vim-scripts/R.vim:_BASIC
|
|
||||||
racket:wlangstroth/vim-racket
|
|
||||||
ragel:jneen/ragel.vim
|
|
||||||
raku:Raku/vim-raku
|
|
||||||
raml:IN3D/vim-raml
|
|
||||||
razor:adamclerk/vim-razor
|
|
||||||
reason:reasonml-editor/vim-reason-plus
|
|
||||||
requirements:raimon49/requirements.txt.vim
|
|
||||||
rspec:keith/rspec.vim
|
|
||||||
rst:marshallward/vim-restructuredtext
|
|
||||||
ruby:vim-ruby/vim-ruby
|
|
||||||
rust:rust-lang/rust.vim
|
|
||||||
sbt:derekwyatt/vim-sbt
|
|
||||||
scala:derekwyatt/vim-scala
|
|
||||||
scss:cakebaker/scss-syntax.vim
|
|
||||||
sh:arzg/vim-sh
|
|
||||||
slim:slim-template/vim-slim
|
|
||||||
slime:slime-lang/vim-slime-syntax
|
|
||||||
smt2:bohlender/vim-smt2
|
|
||||||
solidity:tomlion/vim-solidity
|
|
||||||
sql:shmup/vim-sql-syntax
|
|
||||||
stylus:wavded/vim-stylus
|
|
||||||
svelte:evanleck/vim-svelte#main
|
|
||||||
svg-indent:jasonshell/vim-svg-indent
|
|
||||||
svg:vim-scripts/svg.vim
|
|
||||||
swift:keith/swift.vim
|
|
||||||
sxhkd:baskerville/vim-sxhkdrc
|
|
||||||
systemd:wgwoods/vim-systemd-syntax
|
|
||||||
terraform:hashivim/vim-terraform
|
|
||||||
textile:timcharper/textile.vim
|
|
||||||
thrift:solarnz/thrift.vim
|
|
||||||
tmux:ericpruitt/tmux.vim:_ALL:/vim/
|
|
||||||
tomdoc:wellbredgrapefruit/tomdoc.vim
|
|
||||||
toml:cespare/vim-toml
|
|
||||||
tptp:c-cube/vim-tptp
|
|
||||||
twig:lumiliet/vim-twig
|
|
||||||
typescript:HerringtonDarkholme/yats.vim
|
|
||||||
unison:unisonweb/unison#trunk:_ALL:/editor-support/vim/
|
|
||||||
v:ollykel/v-vim
|
|
||||||
vala:arrufat/vala.vim
|
|
||||||
vbnet:vim-scripts/vbnet.vim
|
|
||||||
vcl:smerrill/vcl-vim-plugin
|
|
||||||
vifm:vifm/vifm.vim
|
|
||||||
vm:lepture/vim-velocity
|
|
||||||
vue:posva/vim-vue
|
|
||||||
xdc:amal-khailtash/vim-xdc-syntax
|
|
||||||
xml:amadeus/vim-xml
|
|
||||||
xls:vim-scripts/XSLT-syntax
|
|
||||||
yaml:stephpy/vim-yaml
|
|
||||||
yard:sheerun/vim-yardoc
|
|
||||||
zephir:xwsoul/vim-zephir
|
|
||||||
zig:ziglang/zig.vim
|
|
||||||
zinit:zinit-zsh/zplugin-vim-syntax
|
|
||||||
"
|
|
||||||
|
|
||||||
python3 build.py
|
|
||||||
|
|
||||||
rm -rf tmp
|
|
||||||
mkdir tmp
|
|
||||||
|
|
||||||
printf "Downloading packs..."
|
|
||||||
download "$(sed '/^#/d' <<<"$PACKS")"
|
|
||||||
rm -rf "${DIRS_RM[@]}"
|
|
||||||
extract "$(sed '/^#/d' <<<"$PACKS")"
|
|
||||||
update_readme
|
|
||||||
|
|
||||||
rm -rf tmp
|
|
||||||
269
build.py
269
build.py
@@ -1,269 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
import yaml
|
|
||||||
import urllib.request as request
|
|
||||||
|
|
||||||
url = 'https://raw.githubusercontent.com/github/linguist/master/lib/linguist/languages.yml'
|
|
||||||
data = yaml.safe_load(request.urlopen(url))
|
|
||||||
|
|
||||||
lines = []
|
|
||||||
|
|
||||||
def language(name,
|
|
||||||
filetype=None,
|
|
||||||
polyglot=None,
|
|
||||||
extensions=None,
|
|
||||||
filenames=None,
|
|
||||||
syntax=None,
|
|
||||||
outer_filetype=None,
|
|
||||||
custom_set=None,
|
|
||||||
compound=False,
|
|
||||||
extra_extensions=[],
|
|
||||||
extra_filenames=[],
|
|
||||||
ignored_extensions=[]
|
|
||||||
):
|
|
||||||
language = data.get(name, {})
|
|
||||||
filetype_name = filetype or name.lower().replace(" ", "")
|
|
||||||
polyglot_name = polyglot or filetype_name
|
|
||||||
lines.append(f"if index(g:polyglot_disabled, '{polyglot_name}') == -1")
|
|
||||||
if syntax != None:
|
|
||||||
syntax = " syntax=" + syntax
|
|
||||||
else:
|
|
||||||
syntax = ""
|
|
||||||
if extensions == None:
|
|
||||||
extensions = language.get("extensions", [])
|
|
||||||
if filenames == None:
|
|
||||||
filenames = language.get("filenames", [])
|
|
||||||
if custom_set == None:
|
|
||||||
custom_set = f"set ft={filetype_name}{syntax}"
|
|
||||||
for ext in sorted(list(set(extensions + extra_extensions) - set(ignored_extensions))):
|
|
||||||
if outer_filetype != None:
|
|
||||||
lines.append(f" au BufNewFile *.*{ext} execute \"do BufNewFile filetypedetect \" . expand(\"<afile>:r\") | {outer_filetype}")
|
|
||||||
lines.append(f" au BufReadPre *.*{ext} execute \"do BufRead filetypedetect \" . expand(\"<afile>:r\") | {outer_filetype}")
|
|
||||||
lines.append(f" au BufNewFile,BufRead *{ext} {custom_set}")
|
|
||||||
for fn in sorted(filenames + extra_filenames):
|
|
||||||
if fn[0] == ".":
|
|
||||||
fn = "{.,}" + fn[1:]
|
|
||||||
lines.append(f" au BufNewFile,BufRead {fn} {custom_set}")
|
|
||||||
lines.append("endif")
|
|
||||||
lines.append("")
|
|
||||||
|
|
||||||
|
|
||||||
lines.append("""" don't spam the user when Vim is started in Vi compatibility mode
|
|
||||||
let s:cpo_save = &cpo
|
|
||||||
set cpo&vim
|
|
||||||
|
|
||||||
if !exists('g:polyglot_disabled')
|
|
||||||
let g:polyglot_disabled = []
|
|
||||||
endif
|
|
||||||
|
|
||||||
function! s:SetDefault(name, value)
|
|
||||||
if !exists(a:name)
|
|
||||||
let {a:name} = a:value
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
call s:SetDefault('g:markdown_enable_spell_checking', 0)
|
|
||||||
call s:SetDefault('g:markdown_enable_input_abbreviations', 0)
|
|
||||||
call s:SetDefault('g:markdown_enable_mappings', 0)
|
|
||||||
|
|
||||||
" Enable jsx syntax by default
|
|
||||||
call s:SetDefault('g:jsx_ext_required', 0)
|
|
||||||
|
|
||||||
" Make csv loading faster
|
|
||||||
call s:SetDefault('g:csv_start', 1)
|
|
||||||
call s:SetDefault('g:csv_end', 2)
|
|
||||||
|
|
||||||
" Disable json concealing by default
|
|
||||||
call s:SetDefault('g:vim_json_syntax_conceal', 0)
|
|
||||||
|
|
||||||
call s:SetDefault('g:filetype_euphoria', 'elixir')
|
|
||||||
|
|
||||||
if !exists('g:python_highlight_all')
|
|
||||||
call s:SetDefault('g:python_highlight_builtins', 1)
|
|
||||||
call s:SetDefault('g:python_highlight_builtin_objs', 1)
|
|
||||||
call s:SetDefault('g:python_highlight_builtin_types', 1)
|
|
||||||
call s:SetDefault('g:python_highlight_builtin_funcs', 1)
|
|
||||||
call s:SetDefault('g:python_highlight_builtin_funcs_kwarg', 1)
|
|
||||||
call s:SetDefault('g:python_highlight_exceptions', 1)
|
|
||||||
call s:SetDefault('g:python_highlight_string_formatting', 1)
|
|
||||||
call s:SetDefault('g:python_highlight_string_format', 1)
|
|
||||||
call s:SetDefault('g:python_highlight_string_templates', 1)
|
|
||||||
call s:SetDefault('g:python_highlight_indent_errors', 1)
|
|
||||||
call s:SetDefault('g:python_highlight_space_errors', 1)
|
|
||||||
call s:SetDefault('g:python_highlight_doctests', 1)
|
|
||||||
call s:SetDefault('g:python_highlight_func_calls', 1)
|
|
||||||
call s:SetDefault('g:python_highlight_class_vars', 1)
|
|
||||||
call s:SetDefault('g:python_highlight_operators', 1)
|
|
||||||
call s:SetDefault('g:python_highlight_file_headers_as_comments', 1)
|
|
||||||
call s:SetDefault('g:python_slow_sync', 1)
|
|
||||||
endif
|
|
||||||
""")
|
|
||||||
|
|
||||||
language("ASL", polyglot="acpiasl", extensions=[".asl", ".dsl"])
|
|
||||||
language("API Blueprint")
|
|
||||||
language("AppleScript")
|
|
||||||
language("Processing", filetype="arduino", extra_extensions=[".ino"])
|
|
||||||
language("AsciiDoc")
|
|
||||||
language("Blade")
|
|
||||||
language("Caddyfile", extensions=["Caddyfile"])
|
|
||||||
language("Carp", extensions=[".carp"])
|
|
||||||
language("CoffeeScript", polyglot="coffee-script", filetype="coffee", extra_extensions=[".coffeekup", '.ck'])
|
|
||||||
language("Literate CoffeeScript", polyglot="coffee-script", filetype="litcoffee", extra_extensions=[".coffee.md"])
|
|
||||||
language("Clojure")
|
|
||||||
language("CQL", extensions=[".cql"])
|
|
||||||
language("Cryptol", extensions=[".cry", ".cyl", ".lcry", ".lcyl"])
|
|
||||||
language("Crystal", extra_filenames=["Projectfile"])
|
|
||||||
language("HTML+ECR", polyglot="crystal", filetype="ecrystal")
|
|
||||||
language("CSV", extra_extensions=[".tsv", ".dat", ".tab"])
|
|
||||||
language("Gherkin", filetype="cucumber", extra_extensions=[".story"])
|
|
||||||
language("Cue", filetype="cuesheet", extensions=[".cue"], polyglot="cue")
|
|
||||||
language("Dart")
|
|
||||||
language("Dhall")
|
|
||||||
language("D", polyglot="dlang")
|
|
||||||
language("D", polyglot="dlang", filetype="dcov", extensions=[".lst"])
|
|
||||||
language("D", polyglot="dlang", filetype="dd", extensions=[".dd"])
|
|
||||||
language("D", polyglot="dlang", filetype="ddoc", extensions=[".ddoc"])
|
|
||||||
language("D", polyglot="dlang", filetype="dsdl", extensions=[".sdl"])
|
|
||||||
language("Dockerfile", extra_extensions=[".dock", ".Dockerfile"], extra_filenames=["dockerfile", "Dockerfile*"], filetype="Dockerfile", polyglot="dockerfile")
|
|
||||||
language("Dockerfile", extensions=[], filenames=["docker-compose*.yaml", "docker-compose*.yml"], filetype="yaml.docker-compose", polyglot="dockerfile")
|
|
||||||
language("Elixir")
|
|
||||||
language("HTML+EEX", polyglot="elixir", filetype="elixir", extra_extensions=[".leex"])
|
|
||||||
language("Elm")
|
|
||||||
language("EmberScript", filetype="ember-script", polyglot="emberscript")
|
|
||||||
language("Emblem", extensions=[".emblem"], filetype="emblem")
|
|
||||||
language("Erlang", extra_extensions=[".app", ".yaws"])
|
|
||||||
language("Ferm", extensions=[".ferm"], filenames=["ferm.conf"], filetype="ferm")
|
|
||||||
language("fish")
|
|
||||||
language("YAML", extra_filenames=["fish_history", "fish_read_history"])
|
|
||||||
language("Flatbuffers", extensions=[".fbs"], filetype="fbs", polyglot="flatbuffers")
|
|
||||||
language("GDScript", filetype="gdscript3", polyglot="gdscript")
|
|
||||||
language("GLSL", extra_extensions=[".comp"])
|
|
||||||
language("F#", polyglot="fsharp", filetype="fsharp")
|
|
||||||
language("Git Config", polyglot="git", filetype="gitconfig", extra_filenames=["*.git/config", "*/.config/git/config", "*.git/modules/**/config", "gitconfig"])
|
|
||||||
language("Git Rebase", polyglot="git", filetype="gitrebase", filenames=["git-rebase-todo"])
|
|
||||||
language("Git Send Email", polyglot="git", filetype="gitsendemail", filenames=[".gitsendemail.*"])
|
|
||||||
language("Git Commit", polyglot="git", filetype="gitcommit", filenames=["COMMIT_EDIT_MSG", "TAG_EDIT_MSG", "MERGE_MSG", "MSG"])
|
|
||||||
language("Gnu MathProg", polyglot="gmpl", filetype="gmpl", extensions=[".mod"])
|
|
||||||
language("Go")
|
|
||||||
language("Go Mod", filetype="gomod", filenames=["go.mod"], polyglot="go")
|
|
||||||
language("Go Template", filetype="gohtmltmpl", extensions=[".tmpl"], polyglot="go")
|
|
||||||
language("Assembly", filetype="asm", polyglot="assembly")
|
|
||||||
language("GraphQL")
|
|
||||||
language("Gradle", filetype="groovy", polyglot="gradle")
|
|
||||||
language("Haml", extra_extensions=[".hamlc", ".hamlbars"])
|
|
||||||
language("Handlebars", filetype="mustache", polyglot="handlebars", extra_extensions=[".hulk", ".hjs", ".mustache", ".njk"])
|
|
||||||
language("HTML+Django", polyglot="jinja", filetype="jinja.html", ignored_extensions=[".mustache", ".njk"], extra_extensions=[".j2"])
|
|
||||||
language("HAProxy")
|
|
||||||
language("Haskell", extra_extensions=[".bpk", ".hsig"])
|
|
||||||
language("Haxe")
|
|
||||||
language("HCL", extra_extensions=[".nomad"], extra_filenames=["Appfile"])
|
|
||||||
language("Helm", extra_filenames=["*/templates/*.yaml", "*/templates/*.tpl"])
|
|
||||||
language("HiveQL", polyglot="hive", filetype="hive")
|
|
||||||
language("I3", extensions=[".i3.config"], filenames=["i3.config"], filetype="i3config", polyglot="i3")
|
|
||||||
language("HiveQL", polyglot="hive", filetype="hive")
|
|
||||||
language("iCalendar", polyglot="icalendar", filetype="icalendar", extensions=[".ics"])
|
|
||||||
language("Idris", extra_filenames=["idris-response"])
|
|
||||||
language("Ion", extensions=[".ion"], filenames=["~/.config/ion/initrc"])
|
|
||||||
language("JavaScript")
|
|
||||||
language("Flow", polyglot="javascript", filetype="flow", extensions=[".flow"])
|
|
||||||
language("Jenkinsfile", polyglot="jenkins", extensions=[".jenkinsfile", ".Jenkinsfile"], filenames=["Jenkinsfile*"], filetype="Jenkinsfile")
|
|
||||||
language("JSON5")
|
|
||||||
language("JSON", extra_extensions=[".jsonp", ".template"])
|
|
||||||
language("EJS", filetype="jst", extra_extensions=[".jst", ".djs", ".hamljs", ".ect"])
|
|
||||||
language("JSX", filetype="javascriptreact", polyglot="jsx")
|
|
||||||
language("Julia")
|
|
||||||
language("Kotlin")
|
|
||||||
language("Ledger", extensions=[".ldg", ".ledger", ".journal"])
|
|
||||||
language("Less")
|
|
||||||
language("LilyPond")
|
|
||||||
language("LiveScript")
|
|
||||||
language("LLVM")
|
|
||||||
language("Tablegen", polyglot="llvm", extensions=[".td"], filetype="tablegen")
|
|
||||||
language("Mako", outer_filetype="let b:mako_outer_lang = &filetype")
|
|
||||||
language("Log", extensions=[".log"], filenames=["*_log"])
|
|
||||||
language("Markdown", ignored_extensions=[".mdx"])
|
|
||||||
language("Mdx", extensions=[".mdx"], polyglot="mdx", filetype="markdown.mdx")
|
|
||||||
language("Mathematica", filetype="mma")
|
|
||||||
language("Meson")
|
|
||||||
language("Dosini", extensions=[".wrap"], filetype="dosini", polyglot="meson")
|
|
||||||
language("MoonScript", filetype="moon", polyglot="moon")
|
|
||||||
language("Nginx", extra_extensions=[".nginx"], extra_filenames=["*/etc/nginx/*", "*/usr/local/nginx/conf/*", "*/nginx/*.conf", "nginx*.conf", "*nginx.conf"])
|
|
||||||
language("Nim")
|
|
||||||
language("Nix")
|
|
||||||
language("OCaml", extra_extensions=[".mlt", ".mlp", ".mlip", ".mli.cppo", ".ml.cppo"])
|
|
||||||
language("OMake", extensions=[".om"], filenames=["OMakefile", "OMakeroot", "Omakeroot.in"], polyglot="ocaml", filetype="omake")
|
|
||||||
language("OPam", extensions=[".opam", ".opam.template"], filenames=["opam"], filetype="opam", polyglot="ocaml")
|
|
||||||
language("Oasis", filenames=["_oasis"], polyglot="ocaml", filetype="oasis")
|
|
||||||
language("OpenCL")
|
|
||||||
language("Perl")
|
|
||||||
language("PLpgSQL", filetype="sql", ignored_extensions=[".sql"], custom_set="let b:sql_type_override='pgsql' | set ft=sql", polyglot="pgsql")
|
|
||||||
language("PlantUML", extra_extensions=[".uml", ".pu"])
|
|
||||||
language("Pony")
|
|
||||||
language("PowerShell", extra_extensions=[".pssc"])
|
|
||||||
language("Ps1XML", extensions=[".ps1xml"], polyglot="powershell", filetype="ps1xml")
|
|
||||||
language("Protocol Buffer", polyglot="protobuf", filetype="proto")
|
|
||||||
language("Pug")
|
|
||||||
language("Puppet")
|
|
||||||
language("Embedded Puppet", polyglot="puppet", filetype="embeddedpuppet", extensions=[".epp"])
|
|
||||||
language("PureScript")
|
|
||||||
language("QMake")
|
|
||||||
language("QML")
|
|
||||||
language("Racket")
|
|
||||||
language("Raku", extra_extensions=[".rakudoc", ".rakutest", ".raku", ".rakumod", ".pod6", ".t6"])
|
|
||||||
language("RAML")
|
|
||||||
language("HTML+Razor", filetype="razor", polyglot="razor")
|
|
||||||
language("Reason")
|
|
||||||
language("Merlin", filetype="merlin", polyglot="razor", filenames=[".merlin"])
|
|
||||||
language("Ruby", extra_extensions=[".rxml", ".rjs", ".rant", ".axlsx", ".cap", ".opal"], extra_filenames=["Rantfile", ".autotest", "Cheffile", "KitchenSink", "Routefile"])
|
|
||||||
language("HTML+ERB", polyglot="ruby", filetype="eruby", extra_extensions=[".rhtml"])
|
|
||||||
# Needs to be after ruby
|
|
||||||
language("RSpec", filenames=["*_spec.rb"], polyglot="rspec", filetype="ruby", syntax="rspec")
|
|
||||||
language("Rust")
|
|
||||||
language("Scala", ignored_extensions=[".sbt"])
|
|
||||||
language("Scala SBT", filetype="sbt.scala", extensions=[".sbt"], polyglot="scala")
|
|
||||||
language("SCSS")
|
|
||||||
language("Slim")
|
|
||||||
language("Slime", extensions=[".slime"])
|
|
||||||
language("SMT", filetype="smt2")
|
|
||||||
language("Solidity", extra_extensions=[".sol"])
|
|
||||||
language("Stylus", extra_extensions=[".stylus"])
|
|
||||||
language("Svelte")
|
|
||||||
language("Swift")
|
|
||||||
language("Sxhkd", extensions=[".sxhkdrc"], filetype="sxhkdrc", polyglot="sxhkd")
|
|
||||||
language("Systemd", extensions=[".automount", ".mount", ".path", ".service", ".socket", ".swap", ".target", ".timer"])
|
|
||||||
language("HCL", filetype="terraform", polyglot="terraform")
|
|
||||||
language("Textile")
|
|
||||||
language("Thrift")
|
|
||||||
language("Tmux", filenames=[".tmux.conf"])
|
|
||||||
language("TOML", extra_filenames=["Pipfile", "*/.cargo/config", "*/.cargo/credentials"])
|
|
||||||
language("TPTP", extensions=[".p", ".tptp", ".ax"])
|
|
||||||
language("Twig", ignored_extensions=[".xml.twig"], filetype="html.twig", polyglot="twig")
|
|
||||||
language("Twig XML", extensions=[".xml.twig"], filetype="xml.twig", polyglot="twig")
|
|
||||||
language("TypeScript")
|
|
||||||
language("TSX", filetype="typescriptreact", polyglot="typescript")
|
|
||||||
language("XML", extra_extensions=[".cdxml"], ignored_extensions=[".ts", ".tsx"])
|
|
||||||
language("V")
|
|
||||||
language("Vala", extra_extensions=[".valadoc"])
|
|
||||||
language("Visual Basic .NET", filetype="vbnet", polyglot="vbnet")
|
|
||||||
language("VCL")
|
|
||||||
language("Vifm", extensions=[".vifm"], filenames=["vifmrc", "*vifm/colors/*"])
|
|
||||||
language("Vifm Rename", filetype="vifm-rename", filenames=["vifm.rename*"], polyglot="vifm")
|
|
||||||
language("Velocity", extensions=[".vm"], filetype="velocity")
|
|
||||||
language("Vue", extra_extensions=[".wpy"])
|
|
||||||
language("XDC", extensions=[".xdc"])
|
|
||||||
language("Zig", extra_extensions=[".zir"])
|
|
||||||
language("Zir", extensions=[".zir"], polyglot="zig", filetype="zir")
|
|
||||||
language("Jsonnet")
|
|
||||||
language("Fennel", extensions=[".fnl"])
|
|
||||||
language("mcfunction")
|
|
||||||
language("JSONiq", extra_filenames=[".jqrc"], filetype="jq", polyglot="jq")
|
|
||||||
language("Requirements", extensions=[".pip"], filenames=["*requirements.{txt,in}", "*require.{txt,in}", "constraints.{txt,in}"])
|
|
||||||
|
|
||||||
lines.append('" restore Vi compatibility settings')
|
|
||||||
lines.append('let &cpo = s:cpo_save')
|
|
||||||
lines.append('unlet s:cpo_save')
|
|
||||||
|
|
||||||
f = open("ftdetect/polyglot.vim", "w")
|
|
||||||
f.write("\n".join(lines))
|
|
||||||
f.close()
|
|
||||||
|
|
||||||
42
compiler/ant.vim
Normal file
42
compiler/ant.vim
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ant') == -1
|
||||||
|
|
||||||
|
" Vim Compiler File
|
||||||
|
" Compiler: ant
|
||||||
|
" Maintainer: Johannes Zellner <johannes@zellner.org>
|
||||||
|
" Last Change: Mi, 13 Apr 2005 22:50:07 CEST
|
||||||
|
|
||||||
|
if exists("current_compiler")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let current_compiler = "ant"
|
||||||
|
|
||||||
|
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
|
||||||
|
command -nargs=* CompilerSet setlocal <args>
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:cpo_save = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
CompilerSet makeprg=ant
|
||||||
|
|
||||||
|
" first line:
|
||||||
|
" ant with jikes +E, which assumes the following
|
||||||
|
" two property lines in your 'build.xml':
|
||||||
|
"
|
||||||
|
" <property name = "build.compiler" value = "jikes"/>
|
||||||
|
" <property name = "build.compiler.emacs" value = "true"/>
|
||||||
|
"
|
||||||
|
" second line:
|
||||||
|
" ant with javac
|
||||||
|
"
|
||||||
|
" note that this will work also for tasks like [wtkbuild]
|
||||||
|
"
|
||||||
|
CompilerSet errorformat=\ %#[%.%#]\ %#%f:%l:%v:%*\\d:%*\\d:\ %t%[%^:]%#:%m,
|
||||||
|
\%A\ %#[%.%#]\ %f:%l:\ %m,%-Z\ %#[%.%#]\ %p^,%C\ %#[%.%#]\ %#%m
|
||||||
|
|
||||||
|
" ,%-C%.%#
|
||||||
|
|
||||||
|
let &cpo = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') == -1
|
|
||||||
|
|
||||||
" Vim compiler plugin
|
|
||||||
" Language: JavaScript
|
|
||||||
" Maintainer: vim-javascript community
|
|
||||||
" URL: https://github.com/pangloss/vim-javascript
|
|
||||||
|
|
||||||
if exists("current_compiler")
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
let current_compiler = "eslint"
|
|
||||||
|
|
||||||
if exists(":CompilerSet") != 2
|
|
||||||
command! -nargs=* CompilerSet setlocal <args>
|
|
||||||
endif
|
|
||||||
|
|
||||||
CompilerSet makeprg=eslint\ -f\ compact\ %
|
|
||||||
CompilerSet errorformat=%f:\ line\ %l\\,\ col\ %c\\,\ %m
|
|
||||||
|
|
||||||
endif
|
|
||||||
185
doc/clojure.txt
Normal file
185
doc/clojure.txt
Normal file
@@ -0,0 +1,185 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'clojure') == -1
|
||||||
|
|
||||||
|
*clojure.txt* Clojure runtime files
|
||||||
|
|
||||||
|
INTRODUCTION *clojure-introduction*
|
||||||
|
|
||||||
|
Meikel Brandmeyer's excellent Clojure runtime files. Includes syntax, indent,
|
||||||
|
ftdetect, and ftplugin scripts.
|
||||||
|
|
||||||
|
CLOJURE *ft-clojure-indent* *clojure-indent*
|
||||||
|
|
||||||
|
Clojure indentation differs somewhat from traditional Lisps, due in part to
|
||||||
|
the use of square and curly brackets, and otherwise by community convention.
|
||||||
|
These conventions are not universally followed, so the Clojure indent script
|
||||||
|
offers a few configurable options, listed below.
|
||||||
|
|
||||||
|
If the current vim does not include searchpairpos(), the indent script falls
|
||||||
|
back to normal 'lisp' indenting, and the following options are ignored.
|
||||||
|
|
||||||
|
*g:clojure_maxlines*
|
||||||
|
|
||||||
|
Set maximum scan distance of searchpairpos(). Larger values trade performance
|
||||||
|
for correctness when dealing with very long forms. A value of 0 will scan
|
||||||
|
without limits.
|
||||||
|
>
|
||||||
|
" Default
|
||||||
|
let g:clojure_maxlines = 100
|
||||||
|
<
|
||||||
|
*g:clojure_fuzzy_indent*
|
||||||
|
*g:clojure_fuzzy_indent_patterns*
|
||||||
|
*g:clojure_fuzzy_indent_blacklist*
|
||||||
|
|
||||||
|
The 'lispwords' option is a list of comma-separated words that mark special
|
||||||
|
forms whose subforms must be indented with two spaces.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
>
|
||||||
|
(defn bad []
|
||||||
|
"Incorrect indentation")
|
||||||
|
|
||||||
|
(defn good []
|
||||||
|
"Correct indentation")
|
||||||
|
<
|
||||||
|
If you would like to specify 'lispwords' with a |pattern| instead, you can use
|
||||||
|
the fuzzy indent feature:
|
||||||
|
>
|
||||||
|
" Default
|
||||||
|
let g:clojure_fuzzy_indent = 1
|
||||||
|
let g:clojure_fuzzy_indent_patterns = ['^with', '^def', '^let']
|
||||||
|
let g:clojure_fuzzy_indent_blacklist =
|
||||||
|
\ ['-fn$', '\v^with-%(meta|out-str|loading-context)$']
|
||||||
|
|
||||||
|
" Legacy comma-delimited string version; the list format above is
|
||||||
|
" recommended. Note that patterns are implicitly anchored with ^ and $
|
||||||
|
let g:clojure_fuzzy_indent_patterns = 'with.*,def.*,let.*'
|
||||||
|
<
|
||||||
|
|g:clojure_fuzzy_indent_patterns| and |g:clojure_fuzzy_indent_blacklist| are
|
||||||
|
|Lists| of patterns that will be matched against the unquoted, unqualified
|
||||||
|
symbol at the head of a list. This means that a pattern like "^foo" will match
|
||||||
|
all these candidates: "foobar", "my.ns/foobar", and "#'foobar".
|
||||||
|
|
||||||
|
Each candidate word is tested for special treatment in this order:
|
||||||
|
|
||||||
|
1. Return true if word is literally in 'lispwords'
|
||||||
|
2. Return false if word matches a pattern in
|
||||||
|
|g:clojure_fuzzy_indent_blacklist|
|
||||||
|
3. Return true if word matches a pattern in
|
||||||
|
|g:clojure_fuzzy_indent_patterns|
|
||||||
|
4. Return false and indent normally otherwise
|
||||||
|
|
||||||
|
*g:clojure_special_indent_words*
|
||||||
|
|
||||||
|
Some forms in Clojure are indented so that every subform is indented only two
|
||||||
|
spaces, regardless of 'lispwords'. If you have a custom construct that should
|
||||||
|
be indented in this idiosyncratic fashion, you can add your symbols to the
|
||||||
|
default list below.
|
||||||
|
>
|
||||||
|
" Default
|
||||||
|
let g:clojure_special_indent_words =
|
||||||
|
\ 'deftype,defrecord,reify,proxy,extend-type,extend-protocol,letfn'
|
||||||
|
<
|
||||||
|
*g:clojure_align_multiline_strings*
|
||||||
|
|
||||||
|
Align subsequent lines in multiline strings to the column after the opening
|
||||||
|
quote, instead of the same column.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
>
|
||||||
|
(def default
|
||||||
|
"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
|
||||||
|
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
|
||||||
|
enim ad minim veniam, quis nostrud exercitation ullamco laboris
|
||||||
|
nisi ut aliquip ex ea commodo consequat.")
|
||||||
|
|
||||||
|
(def aligned
|
||||||
|
"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
|
||||||
|
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
|
||||||
|
enim ad minim veniam, quis nostrud exercitation ullamco laboris
|
||||||
|
nisi ut aliquip ex ea commodo consequat.")
|
||||||
|
<
|
||||||
|
This option is off by default.
|
||||||
|
>
|
||||||
|
" Default
|
||||||
|
let g:clojure_align_multiline_strings = 0
|
||||||
|
<
|
||||||
|
*g:clojure_align_subforms*
|
||||||
|
|
||||||
|
By default, parenthesized compound forms that look like function calls and
|
||||||
|
whose head subform is on its own line have subsequent subforms indented by
|
||||||
|
two spaces relative to the opening paren:
|
||||||
|
>
|
||||||
|
(foo
|
||||||
|
bar
|
||||||
|
baz)
|
||||||
|
<
|
||||||
|
Setting this option changes this behavior so that all subforms are aligned to
|
||||||
|
the same column, emulating the default behavior of clojure-mode.el:
|
||||||
|
>
|
||||||
|
(foo
|
||||||
|
bar
|
||||||
|
baz)
|
||||||
|
<
|
||||||
|
This option is off by default.
|
||||||
|
>
|
||||||
|
" Default
|
||||||
|
let g:clojure_align_subforms = 0
|
||||||
|
<
|
||||||
|
|
||||||
|
CLOJURE *ft-clojure-syntax*
|
||||||
|
|
||||||
|
The default syntax groups can be augmented through the
|
||||||
|
*g:clojure_syntax_keywords* and *b:clojure_syntax_keywords* variables. The
|
||||||
|
value should be a |Dictionary| of syntax group names to a |List| of custom
|
||||||
|
identifiers:
|
||||||
|
>
|
||||||
|
let g:clojure_syntax_keywords = {
|
||||||
|
\ 'clojureMacro': ["defproject", "defcustom"],
|
||||||
|
\ 'clojureFunc': ["string/join", "string/replace"]
|
||||||
|
\ }
|
||||||
|
<
|
||||||
|
Refer to the Clojure syntax script for valid syntax group names.
|
||||||
|
|
||||||
|
If the |buffer-variable| *b:clojure_syntax_without_core_keywords* is set, only
|
||||||
|
language constants and special forms are matched.
|
||||||
|
|
||||||
|
Setting *g:clojure_fold* enables folding Clojure code via the syntax engine.
|
||||||
|
Any list, vector, or map that extends over more than one line can be folded
|
||||||
|
using the standard Vim |fold-commands|.
|
||||||
|
|
||||||
|
Please note that this option does not work with scripts that redefine the
|
||||||
|
bracket syntax regions, such as rainbow-parentheses plugins.
|
||||||
|
|
||||||
|
This option is off by default.
|
||||||
|
>
|
||||||
|
" Default
|
||||||
|
let g:clojure_fold = 0
|
||||||
|
<
|
||||||
|
|
||||||
|
ABOUT *clojure-about*
|
||||||
|
|
||||||
|
This document and associated runtime files are maintained at:
|
||||||
|
https://github.com/guns/vim-clojure-static
|
||||||
|
|
||||||
|
Distributed under the Vim license. See |license|.
|
||||||
|
|
||||||
|
syntax/clojure.vim
|
||||||
|
|
||||||
|
Copyright 2007-2008 (c) Toralf Wittner <toralf.wittner@gmail.com>
|
||||||
|
Copyright 2008-2012 (c) Meikel Brandmeyer <mb@kotka.de>
|
||||||
|
|
||||||
|
ftdetect/clojure.vim,
|
||||||
|
ftplugin/clojure.vim,
|
||||||
|
indent/clojure.vim
|
||||||
|
|
||||||
|
Copyright 2008-2012 (c) Meikel Brandmeyer <mb@kotka.de>
|
||||||
|
|
||||||
|
Modified and relicensed under the Vim License for distribution with Vim:
|
||||||
|
|
||||||
|
Copyright 2013-2014 (c) Sung Pae <self@sungpae.com>
|
||||||
|
|
||||||
|
Last Change: %%RELEASE_DATE%%
|
||||||
|
|
||||||
|
vim:tw=78:noet:sw=8:sts=8:ts=8:ft=help:norl:
|
||||||
|
|
||||||
|
endif
|
||||||
8
doc/coffee-script.txt
Normal file
8
doc/coffee-script.txt
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'coffee-script') == -1
|
||||||
|
|
||||||
|
Please see the project readme for up-to-date docs:
|
||||||
|
https://github.com/kchmck/vim-coffee-script
|
||||||
|
|
||||||
|
vim:tw=78:ts=8:ft=help:norl:
|
||||||
|
|
||||||
|
endif
|
||||||
108
doc/cryptol.txt
Normal file
108
doc/cryptol.txt
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'cryptol') == -1
|
||||||
|
|
||||||
|
*cryptol.txt* functionality for the Cryptol programming language
|
||||||
|
|
||||||
|
Copyright © 2013 Edward O'Callaghan. All Rights Reserved.
|
||||||
|
|
||||||
|
.oooooo. . oooo
|
||||||
|
d8P' `Y8b .o8 `888
|
||||||
|
888 oooo d8b oooo ooo oo.ooooo. .o888oo .ooooo. 888
|
||||||
|
888 `888""8P `88. .8' 888' `88b 888 d88' `88b 888
|
||||||
|
888 888 `88..8' 888 888 888 888 888 888
|
||||||
|
`88b ooo 888 `888' 888 888 888 . 888 888 888
|
||||||
|
`Y8bood8P' d888b .8' 888bod8P' "888" `Y8bod8P' o888o
|
||||||
|
.o..P' 888
|
||||||
|
`Y8P' o888o
|
||||||
|
|
||||||
|
Functionality for the Cryptol programming language.
|
||||||
|
Includes syntax highlighting, code folding, and more!
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
CONTENTS *CryptolContents*
|
||||||
|
|
||||||
|
1. Usage ................ |CryptolUsage|
|
||||||
|
2. Mappings ............. |CryptolMappings|
|
||||||
|
3. License .............. |CryptolLicense|
|
||||||
|
4. Bugs ................. |CryptolBugs|
|
||||||
|
5. Contributing ......... |CryptolContributing|
|
||||||
|
6. Changelog ............ |CryptolChangelog|
|
||||||
|
7. Credits .............. |CryptolCredits|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
Section 1: Usage *CryptolUsage*
|
||||||
|
|
||||||
|
This plugin will automatically provide syntax highlighting for Cryptol files
|
||||||
|
(files ending in .cry).
|
||||||
|
|
||||||
|
Cryptol is a purely functional domain specific language, developed over the
|
||||||
|
past decade by Galois for the NSA, for the design, implementation and
|
||||||
|
verification of cryptographic algorithms.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
Section 2: Mappings *CryptolMappings*
|
||||||
|
|
||||||
|
Code folding is done in the typical way, for example:
|
||||||
|
* za - When on a closed fold - open it.
|
||||||
|
* zM - Close all foldings to level 0.
|
||||||
|
* zR - Reduce folding
|
||||||
|
|
||||||
|
For more information see, for example, :help za
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
Section 3: License *CryptolLicense*
|
||||||
|
|
||||||
|
Copyright © 2013 Edward O'Callaghan. All Rights Reserved.
|
||||||
|
|
||||||
|
HOWEVER:
|
||||||
|
Be it known, The syntax file was written by
|
||||||
|
Copyright © 2005 Fergus Henderson. All Rights Reserved.
|
||||||
|
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
Section 4: Bugs *CryptolBugs*
|
||||||
|
|
||||||
|
* https://github.com/victoredwardocallaghan/cryptol.vim/issues
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
Section 5: TODOs *CryptolTODOs
|
||||||
|
|
||||||
|
* Add compiler support
|
||||||
|
- .
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
Section 6: Contributing *CryptolContributing*
|
||||||
|
|
||||||
|
* Edward O'Callaghan
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
Section 7: Changelog *CryptolChangelog*
|
||||||
|
|
||||||
|
* Initial 25 Apr 2013.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
Section 8: Credits *CryptolCredits*
|
||||||
|
|
||||||
|
* Edward O'Callaghan
|
||||||
|
* Fergus Henderson - wrote the orginal syntax file.
|
||||||
|
|
||||||
|
vim:ts=4:ft=help:tw=78:et
|
||||||
|
|
||||||
|
endif
|
||||||
90
doc/dart.txt
Normal file
90
doc/dart.txt
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'dart') == -1
|
||||||
|
|
||||||
|
*dart-vim-plugin* Dart support for Vim
|
||||||
|
|
||||||
|
INTRODUCTION *dart.vim*
|
||||||
|
|
||||||
|
dart-vim-plugin provides filetype detection, syntax highlighting, and
|
||||||
|
indentation for Dart code in Vim.
|
||||||
|
|
||||||
|
https://github.com/dart-lang/dart-vim-plugin
|
||||||
|
|
||||||
|
TOOLS *dart-tools*
|
||||||
|
|
||||||
|
An `includeexpr` is set that can read `.packages` files and resolve `package:`
|
||||||
|
uris to a file. See |gf| for an example use.
|
||||||
|
|
||||||
|
COMMANDS *dart-commands*
|
||||||
|
|
||||||
|
These commands are available in buffers with the dart filetype.
|
||||||
|
|
||||||
|
*:Dart2Js*
|
||||||
|
Runs dart2js to compile the current file. Takes the same arguments as the
|
||||||
|
dart2js binary and always passes the path to the current file as the last
|
||||||
|
argument.
|
||||||
|
If there are any errors they will be shown in the quickfix window.
|
||||||
|
|
||||||
|
*:DartFmt*
|
||||||
|
Runs dartfmt and passes the current buffer content through stdin. If the
|
||||||
|
format is successful replaces the current buffer content with the formatted
|
||||||
|
result. If the format is unsuccessful errors are shown in the quickfix window.
|
||||||
|
This command does not use the file content on disk so it is safe to run with
|
||||||
|
unwritten changes.
|
||||||
|
Passes arguments through to dartfmt.
|
||||||
|
|
||||||
|
*:DartAnalyzer*
|
||||||
|
Runs dartanalyzer to analyze the current file. Takes the same arguments as the
|
||||||
|
dartanalyzer binary and always passes the path to the current file as the last
|
||||||
|
argument.
|
||||||
|
If there are any errors they will be shown in the quickfix window.
|
||||||
|
|
||||||
|
CONFIGURATION *dart-configure*
|
||||||
|
|
||||||
|
*g:dart_html_in_string*
|
||||||
|
Set to `v:true` to highlights HTML syntax inside Strings within Dart files.
|
||||||
|
Default `v:false`
|
||||||
|
|
||||||
|
*g:dart_corelib_highlight*
|
||||||
|
Set to `v:false` to disable highlighting of code Dart classes like `Map` or
|
||||||
|
`List`.
|
||||||
|
Default `v:true`
|
||||||
|
*g:dart_style_guide*
|
||||||
|
Set to any value (set to `2` by convention) to set tab and width behavior to
|
||||||
|
match the Dart style guide - spaces only with an indent of 2. Also sets
|
||||||
|
`formatoptions += t` to auto wrap text.
|
||||||
|
|
||||||
|
Configure DartFmt options with `let g:dartfmt_options`, for example, enable
|
||||||
|
auto syntax fixes with `let g:dartfmt_options = ['--fix']`
|
||||||
|
(discover formatter options with `dartfmt -h`)
|
||||||
|
|
||||||
|
|
||||||
|
SYNTAX HIGHLIGHTING *dart-syntax*
|
||||||
|
|
||||||
|
This plugin uses narrow highlight groups to allow selectively disabling the
|
||||||
|
syntax highlights. Link any of the following groups to the `Normal` highlight
|
||||||
|
group to disable them:
|
||||||
|
|
||||||
|
`dartSdkException`: Capitalized exception or error classes defined in the SDK.
|
||||||
|
|
||||||
|
`dartCoreType`: `void`, `var`, `dynamic`
|
||||||
|
|
||||||
|
`dartSdkClass`: Capitalized classes defined in the SDK, along with `bool`,
|
||||||
|
`int`, `double`, and `num`.
|
||||||
|
|
||||||
|
`dartUserType`: Any capitalized identifier.
|
||||||
|
|
||||||
|
`dartType`: Combines `dartCoreType`, `dartSdkClass`, and `dartUserType`.
|
||||||
|
|
||||||
|
`dartSdkTypedef`: SDK defined `typdef`s.
|
||||||
|
|
||||||
|
`dartFunction`: Any lower cased identifier preceding an open parenthesis.
|
||||||
|
|
||||||
|
For example, to remove the highlighting for type and function names:
|
||||||
|
>
|
||||||
|
highlight link dartType Normal
|
||||||
|
highlight link dartFunction Normal
|
||||||
|
<
|
||||||
|
|
||||||
|
vim:tw=78:sw=4:ts=8:ft=help:norl:
|
||||||
|
|
||||||
|
endif
|
||||||
43
doc/dhall.txt
Normal file
43
doc/dhall.txt
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'dhall') == -1
|
||||||
|
|
||||||
|
*dhall* Dhall syntax highlighting for Vim
|
||||||
|
____
|
||||||
|
=====================================================================
|
||||||
|
CONTENTS *DhallContents*
|
||||||
|
|
||||||
|
1. Config ......................................... ❘DhallConfig❘
|
||||||
|
2. License ....................................... ❘DhallLicense❘
|
||||||
|
|
||||||
|
======================================================================
|
||||||
|
Section 1: Config *DhallConfig*
|
||||||
|
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
*'g:dhall_use_ctags'*
|
||||||
|
Values: 0, 1
|
||||||
|
Default: ''
|
||||||
|
|
||||||
|
Generate tags file for vim on write, using universal ctags. >
|
||||||
|
let g:dhall_use_ctags=1
|
||||||
|
<
|
||||||
|
|
||||||
|
*'g:dhall_format'*
|
||||||
|
Values: 0, 1
|
||||||
|
Default: ''
|
||||||
|
|
||||||
|
Format Dhall files on write >
|
||||||
|
let g:dhall_format=1
|
||||||
|
<
|
||||||
|
*'g:dhall_strip_whitespace'*
|
||||||
|
Values: 0, 1
|
||||||
|
Default: ''
|
||||||
|
|
||||||
|
To enable whitespace stripping >
|
||||||
|
let g:dhall_strip_whitespace=1
|
||||||
|
<
|
||||||
|
|
||||||
|
======================================================================
|
||||||
|
Section 2: License *DhallLicense*
|
||||||
|
|
||||||
|
This plugin is licensed under the BDS3 license.
|
||||||
|
|
||||||
|
endif
|
||||||
116
doc/elixir.txt
Normal file
116
doc/elixir.txt
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elixir') == -1
|
||||||
|
|
||||||
|
*elixir.txt* Vim configuration files for Elixir http://elixir-lang.org/
|
||||||
|
|
||||||
|
Author: Plataformatec
|
||||||
|
License: Apache License Version 2.0
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
CONTENTS *elixir-contents*
|
||||||
|
|
||||||
|
INTRODUCTION |elixir-introduction|
|
||||||
|
INTERFACE |elixir-interface|
|
||||||
|
FUNCTIONS |elixir-functions|
|
||||||
|
KEY MAPPINGS |elixir-key-mappings|
|
||||||
|
OPTIONS |elixir-options|
|
||||||
|
SETTINGS |elixir-settings|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
INTRODUCTION *elixir-introduction*
|
||||||
|
|
||||||
|
*elixir* provides Vim configuration files for Elixir http://elixir-lang.org/
|
||||||
|
|
||||||
|
* Syntax highlighting for Elixir and EEx files
|
||||||
|
* Filetype detection for `.ex`, `.exs`, `.eex` and `.leex` files
|
||||||
|
* Automatic indentation
|
||||||
|
* Integration between Ecto projects and |vim-dadbod| for running SQL queries
|
||||||
|
on defined Ecto repositories
|
||||||
|
|
||||||
|
|
||||||
|
Latest Version:
|
||||||
|
https://github.com/elixir-editors/vim-elixir
|
||||||
|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
INTERFACE *elixir-interface*
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
FUNCTIONS *elixir-functions*
|
||||||
|
|
||||||
|
db#adapter#ecto#canonicalize({url}) *db#adapter#ecto#canonicalize()*
|
||||||
|
TODO
|
||||||
|
|
||||||
|
db#adapter#ecto#complete_opaque({url}) *db#adapter#ecto#complete_opaque()*
|
||||||
|
TODO
|
||||||
|
|
||||||
|
elixir#indent#indent({lnum}) *elixir#indent#indent()*
|
||||||
|
TODO
|
||||||
|
|
||||||
|
elixir#indent#searchpair_back_skip() *elixir#indent#searchpair_back_skip()*
|
||||||
|
TODO
|
||||||
|
|
||||||
|
*elixir#indent#handle_top_of_file()*
|
||||||
|
elixir#indent#handle_top_of_file({context})
|
||||||
|
TODO
|
||||||
|
|
||||||
|
*elixir#indent#handle_follow_prev_nb()*
|
||||||
|
elixir#indent#handle_follow_prev_nb({context})
|
||||||
|
TODO
|
||||||
|
|
||||||
|
*elixir#indent#handle_following_trailing_binary_operator()*
|
||||||
|
elixir#indent#handle_following_trailing_binary_operator({context})
|
||||||
|
TODO
|
||||||
|
|
||||||
|
*elixir#indent#handle_starts_with_pipe()*
|
||||||
|
elixir#indent#handle_starts_with_pipe({context})
|
||||||
|
TODO
|
||||||
|
|
||||||
|
*elixir#indent#handle_starts_with_end()*
|
||||||
|
elixir#indent#handle_starts_with_end({context})
|
||||||
|
TODO
|
||||||
|
|
||||||
|
*elixir#indent#handle_starts_with_binary_operator()*
|
||||||
|
elixir#indent#handle_starts_with_binary_operator({context})
|
||||||
|
TODO
|
||||||
|
|
||||||
|
*elixir#indent#handle_inside_block()*
|
||||||
|
elixir#indent#handle_inside_block({context})
|
||||||
|
TODO
|
||||||
|
|
||||||
|
*elixir#indent#handle_inside_generic_block()*
|
||||||
|
elixir#indent#handle_inside_generic_block({context})
|
||||||
|
TODO
|
||||||
|
|
||||||
|
elixir#util#get_filename({word}) *elixir#util#get_filename({word})*
|
||||||
|
TODO
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
KEY MAPPINGS *elixir-key-mappings*
|
||||||
|
|
||||||
|
TODO
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
SETTINGS *elixir-settings*
|
||||||
|
|
||||||
|
*g:eelixir_default_subtype*
|
||||||
|
TODO
|
||||||
|
|
||||||
|
*g:elixir_indent_debug*
|
||||||
|
TODO
|
||||||
|
|
||||||
|
*g:elixir_indent_max_lookbehind*
|
||||||
|
TODO
|
||||||
|
|
||||||
|
*g:elixir_use_markdown_for_docs*
|
||||||
|
TODO
|
||||||
|
|
||||||
|
*g:path*
|
||||||
|
TODO
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
vim:tw=78:fo=tcq2mM:ts=8:ft=help:norl
|
||||||
|
|
||||||
|
endif
|
||||||
1759
doc/ft-csv.txt
Normal file
1759
doc/ft-csv.txt
Normal file
File diff suppressed because it is too large
Load Diff
25
doc/ft-gitcommit-plugin.txt
Normal file
25
doc/ft-gitcommit-plugin.txt
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'git') == -1
|
||||||
|
|
||||||
|
GIT COMMIT *ft-gitcommit-plugin*
|
||||||
|
|
||||||
|
One command, :DiffGitCached, is provided to show a diff of the current commit
|
||||||
|
in the preview window. It is equivalent to calling "git diff --cached" plus
|
||||||
|
any arguments given to the command.
|
||||||
|
|
||||||
|
GIT REBASE *ft-gitrebase-plugin*
|
||||||
|
|
||||||
|
In a gitrebase filetype buffer, the following commands are provided:
|
||||||
|
|
||||||
|
`:Pick` Changes the cursor line to a `pick` line.
|
||||||
|
`:Squash` Changes the cursor line to a `squash` line
|
||||||
|
`:Edit` Changes the cursor line to an `edit` line
|
||||||
|
`:Reword` Changes the cursor line to a `reword` line
|
||||||
|
`:Fixup` Changes the cursor line to a `fixup` line
|
||||||
|
`:Drop` Changes the cursor line to a `drop` line
|
||||||
|
`:Cycle` Cycles between the first 5 gitrebase commands
|
||||||
|
|
||||||
|
To make the `:Cycle` command more useful, it might be mapped, e.g. >
|
||||||
|
nnoremap <buffer> <silent> S :Cycle<CR>
|
||||||
|
<
|
||||||
|
|
||||||
|
endif
|
||||||
152
doc/ft-ruby-indent.txt
Normal file
152
doc/ft-ruby-indent.txt
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ruby') == -1
|
||||||
|
|
||||||
|
RUBY *ft-ruby-indent*
|
||||||
|
*vim-ruby-indent*
|
||||||
|
|
||||||
|
Ruby: Access modifier indentation |ruby-access-modifier-indentation|
|
||||||
|
Ruby: Block style indentation |ruby-block-style-indentation|
|
||||||
|
Ruby: Assignment style indentation |ruby-assignment-style-indentation|
|
||||||
|
Ruby: Hanging element indentation |ruby-hanging-element-indentation|
|
||||||
|
|
||||||
|
*ruby-access-modifier-indentation*
|
||||||
|
*g:ruby_indent_access_modifier_style*
|
||||||
|
Ruby: Access modifier indentation ~
|
||||||
|
|
||||||
|
Different access modifier indentation styles can be used by setting: >
|
||||||
|
|
||||||
|
:let g:ruby_indent_access_modifier_style = 'normal'
|
||||||
|
:let g:ruby_indent_access_modifier_style = 'indent'
|
||||||
|
:let g:ruby_indent_access_modifier_style = 'outdent'
|
||||||
|
<
|
||||||
|
By default, the "normal" access modifier style is used.
|
||||||
|
|
||||||
|
Access modifier style "normal":
|
||||||
|
>
|
||||||
|
class Indent
|
||||||
|
private :method
|
||||||
|
protected :method
|
||||||
|
private
|
||||||
|
def method; end
|
||||||
|
protected
|
||||||
|
def method; end
|
||||||
|
public
|
||||||
|
def method; end
|
||||||
|
end
|
||||||
|
<
|
||||||
|
Access modifier style "indent":
|
||||||
|
>
|
||||||
|
class Indent
|
||||||
|
private :method
|
||||||
|
protected :method
|
||||||
|
private
|
||||||
|
def method; end
|
||||||
|
protected
|
||||||
|
def method; end
|
||||||
|
public
|
||||||
|
def method; end
|
||||||
|
end
|
||||||
|
<
|
||||||
|
Access modifier style "outdent":
|
||||||
|
>
|
||||||
|
class Indent
|
||||||
|
private :method
|
||||||
|
protected :method
|
||||||
|
private
|
||||||
|
def method; end
|
||||||
|
protected
|
||||||
|
def method; end
|
||||||
|
public
|
||||||
|
def method; end
|
||||||
|
end
|
||||||
|
<
|
||||||
|
*ruby-block-style-indentation*
|
||||||
|
*g:ruby_indent_block_style*
|
||||||
|
Ruby: Block style indentation ~
|
||||||
|
|
||||||
|
Different block indentation styles can be used by setting: >
|
||||||
|
|
||||||
|
:let g:ruby_indent_block_style = 'expression'
|
||||||
|
:let g:ruby_indent_block_style = 'do'
|
||||||
|
<
|
||||||
|
By default, the "do" block indent style is used.
|
||||||
|
|
||||||
|
Block indent style "expression":
|
||||||
|
>
|
||||||
|
first
|
||||||
|
.second do |x|
|
||||||
|
something
|
||||||
|
end
|
||||||
|
<
|
||||||
|
Block indent style "do":
|
||||||
|
>
|
||||||
|
first
|
||||||
|
.second do |x|
|
||||||
|
something
|
||||||
|
end
|
||||||
|
<
|
||||||
|
|
||||||
|
*ruby-assignment-style-indentation*
|
||||||
|
*g:ruby_indent_assignment_style*
|
||||||
|
Ruby: Assignment style indentation ~
|
||||||
|
|
||||||
|
Different styles of indenting assignment for multiline expressions:
|
||||||
|
>
|
||||||
|
:let g:ruby_indent_assignment_style = 'hanging'
|
||||||
|
:let g:ruby_indent_assignment_style = 'variable'
|
||||||
|
<
|
||||||
|
By default, the "hanging" style is used.
|
||||||
|
|
||||||
|
Assignment indent style "hanging":
|
||||||
|
>
|
||||||
|
x = if condition
|
||||||
|
something
|
||||||
|
end
|
||||||
|
<
|
||||||
|
Assignment indent style "variable":
|
||||||
|
>
|
||||||
|
x = if condition
|
||||||
|
something
|
||||||
|
end
|
||||||
|
<
|
||||||
|
|
||||||
|
*ruby-hanging-element-indentation*
|
||||||
|
*g:ruby_indent_hanging_elements*
|
||||||
|
Ruby: Hanging element indentation ~
|
||||||
|
|
||||||
|
Elements of multiline collections -- such as arrays, hashes, and method
|
||||||
|
argument lists -- can have hanging indentation enabled or disabled with the
|
||||||
|
following setting.
|
||||||
|
>
|
||||||
|
:let g:ruby_indent_hanging_elements = 1
|
||||||
|
:let g:ruby_indent_hanging_elements = 0
|
||||||
|
<
|
||||||
|
By default, this setting is "1" (true) meaning that hanging indentation is
|
||||||
|
enabled in some cases.
|
||||||
|
|
||||||
|
Here is an example method call when the setting is true (non-zero):
|
||||||
|
>
|
||||||
|
render('product/show',
|
||||||
|
product: product,
|
||||||
|
on_sale: true,
|
||||||
|
)
|
||||||
|
<
|
||||||
|
And the same method call when the setting is false (zero):
|
||||||
|
>
|
||||||
|
render('product/show',
|
||||||
|
product: product,
|
||||||
|
on_sale: true,
|
||||||
|
)
|
||||||
|
<
|
||||||
|
Note that, even if the setting is turned on, you can still get non-hanging
|
||||||
|
indentation by putting each argument on a separate line:
|
||||||
|
>
|
||||||
|
render(
|
||||||
|
'product/show',
|
||||||
|
product: product,
|
||||||
|
on_sale: true,
|
||||||
|
)
|
||||||
|
<
|
||||||
|
|
||||||
|
vim:tw=78:sw=4:ts=8:ft=help:norl:
|
||||||
|
|
||||||
|
endif
|
||||||
56
doc/ft-ruby-omni.txt
Normal file
56
doc/ft-ruby-omni.txt
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ruby') == -1
|
||||||
|
|
||||||
|
RUBY *ft-ruby-omni*
|
||||||
|
*vim-ruby-omni*
|
||||||
|
|
||||||
|
Completion of Ruby code requires that Vim be built with |+ruby|.
|
||||||
|
|
||||||
|
Ruby completion will parse your buffer on demand in order to provide a list of
|
||||||
|
completions. These completions will be drawn from modules loaded by "require"
|
||||||
|
and modules defined in the current buffer.
|
||||||
|
|
||||||
|
The completions provided by CTRL-X CTRL-O are sensitive to the context:
|
||||||
|
|
||||||
|
CONTEXT COMPLETIONS PROVIDED ~
|
||||||
|
|
||||||
|
1. Not inside a class definition Classes, constants and globals
|
||||||
|
|
||||||
|
2. Inside a class definition Methods or constants defined in the class
|
||||||
|
|
||||||
|
3. After '.', '::' or ':' Methods applicable to the object being
|
||||||
|
dereferenced
|
||||||
|
|
||||||
|
4. After ':' or ':foo' Symbol name (beginning with "foo")
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
- Vim will load/evaluate code in order to provide completions. This may
|
||||||
|
cause some code execution, which may be a concern. This is no longer
|
||||||
|
enabled by default, to enable this feature add >
|
||||||
|
let g:rubycomplete_buffer_loading = 1
|
||||||
|
< - In context 1 above, Vim can parse the entire buffer to add a list of
|
||||||
|
classes to the completion results. This feature is turned off by default,
|
||||||
|
to enable it add >
|
||||||
|
let g:rubycomplete_classes_in_global = 1
|
||||||
|
< to your vimrc
|
||||||
|
- In context 2 above, anonymous classes are not supported.
|
||||||
|
- In context 3 above, Vim will attempt to determine the methods supported by
|
||||||
|
the object.
|
||||||
|
- Vim can detect and load the Rails environment for files within a rails
|
||||||
|
project. The feature is disabled by default, to enable it add >
|
||||||
|
let g:rubycomplete_rails = 1
|
||||||
|
< to your vimrc
|
||||||
|
- Vim can parse a Gemfile, in case gems are being implicitly required. To
|
||||||
|
activate the feature: >
|
||||||
|
let g:rubycomplete_load_gemfile = 1
|
||||||
|
< To specify an alternative path, use: >
|
||||||
|
let g:rubycomplete_gemfile_path = 'Gemfile.aux'
|
||||||
|
< To use Bundler.require instead of parsing the Gemfile, set: >
|
||||||
|
let g:rubycomplete_use_bundler = 1
|
||||||
|
< To use custom paths that should be added to $LOAD_PATH to correctly
|
||||||
|
resolve requires, set: >
|
||||||
|
let g:rubycomplete_load_paths = ["/path/to/code", "./lib/example"]
|
||||||
|
|
||||||
|
|
||||||
|
vim:tw=78:sw=4:ts=8:ft=help:norl:
|
||||||
|
|
||||||
|
endif
|
||||||
85
doc/ft-ruby-plugin.txt
Normal file
85
doc/ft-ruby-plugin.txt
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ruby') == -1
|
||||||
|
|
||||||
|
RUBY *ft-ruby-plugin*
|
||||||
|
*vim-ruby-plugin*
|
||||||
|
|
||||||
|
|
||||||
|
Ruby: Recommended settings |ruby-recommended|
|
||||||
|
Ruby: Motion commands |ruby-motion|
|
||||||
|
Ruby: Text objects |ruby-text-objects|
|
||||||
|
|
||||||
|
*ruby-recommended*
|
||||||
|
*g:ruby_recommended_style*
|
||||||
|
Ruby: Recommended settings ~
|
||||||
|
|
||||||
|
The `g:ruby_recommended_style` variable activates indentation settings
|
||||||
|
according to the most common ruby convention: two spaces for indentation. It's
|
||||||
|
turned on by default to ensure an unsurprising default experience for most
|
||||||
|
ruby developers.
|
||||||
|
|
||||||
|
If you'd like to enforce your own style, it's possible to apply your own
|
||||||
|
preferences in your own configuration in `after/ftplugin/ruby.vim`. You can
|
||||||
|
also disable the setting by setting the variable to 0:
|
||||||
|
>
|
||||||
|
let g:ruby_recommended_style = 0
|
||||||
|
<
|
||||||
|
|
||||||
|
*ruby-motion*
|
||||||
|
Ruby: Motion commands ~
|
||||||
|
|
||||||
|
Vim provides motions such as |[m| and |]m| for jumping to the start or end of
|
||||||
|
a method definition. Out of the box, these work for curly-bracket languages,
|
||||||
|
but not for Ruby. The vim-ruby plugin enhances these motions, by making them
|
||||||
|
also work on Ruby files.
|
||||||
|
|
||||||
|
*ruby-]m*
|
||||||
|
]m Go to start of next method definition.
|
||||||
|
|
||||||
|
*ruby-]M*
|
||||||
|
]M Go to end of next method definition.
|
||||||
|
|
||||||
|
*ruby-[m*
|
||||||
|
[m Go to start of previous method definition.
|
||||||
|
|
||||||
|
*ruby-[M*
|
||||||
|
[M Go to end of previous method definition.
|
||||||
|
|
||||||
|
*ruby-]]*
|
||||||
|
]] Go to start of next module or class definition.
|
||||||
|
|
||||||
|
*ruby-][*
|
||||||
|
][ Go to end of next module or class definition.
|
||||||
|
|
||||||
|
*ruby-[[*
|
||||||
|
[[ Go to start of previous module or class definition.
|
||||||
|
|
||||||
|
*ruby-[]*
|
||||||
|
[] Go to end of previous module or class definition.
|
||||||
|
|
||||||
|
*ruby-text-objects*
|
||||||
|
Ruby: Text objects ~
|
||||||
|
|
||||||
|
Vim's |text-objects| can be used to select or operate upon regions of text
|
||||||
|
that are defined by structure. The vim-ruby plugin adds text objects for
|
||||||
|
operating on methods and classes.
|
||||||
|
|
||||||
|
*ruby-v_am* *ruby-am*
|
||||||
|
am "a method", select from "def" until matching "end"
|
||||||
|
keyword.
|
||||||
|
|
||||||
|
*ruby-v_im* *ruby-im*
|
||||||
|
im "inner method", select contents of "def"/"end" block,
|
||||||
|
excluding the "def" and "end" themselves.
|
||||||
|
|
||||||
|
*ruby-v_aM* *ruby-aM*
|
||||||
|
aM "a class", select from "class" until matching "end"
|
||||||
|
keyword.
|
||||||
|
|
||||||
|
*ruby-v_iM* *ruby-iM*
|
||||||
|
iM "inner class", select contents of "class"/"end"
|
||||||
|
block, excluding the "class" and "end" themselves.
|
||||||
|
|
||||||
|
|
||||||
|
vim:tw=78:sw=4:ts=8:ft=help:norl:
|
||||||
|
|
||||||
|
endif
|
||||||
123
doc/ft-ruby-syntax.txt
Normal file
123
doc/ft-ruby-syntax.txt
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ruby') == -1
|
||||||
|
|
||||||
|
RUBY *ruby.vim* *ft-ruby-syntax*
|
||||||
|
*vim-ruby-syntax*
|
||||||
|
|
||||||
|
Ruby: Operator highlighting |ruby_operators|
|
||||||
|
Ruby: Whitespace errors |ruby_space_errors|
|
||||||
|
Ruby: Syntax errors |ruby_syntax_errors|
|
||||||
|
Ruby: Folding |ruby_fold| |ruby_foldable_groups|
|
||||||
|
Ruby: Reducing expensive operations |ruby_no_expensive| |ruby_minlines|
|
||||||
|
Ruby: Spellchecking strings |ruby_spellcheck_strings|
|
||||||
|
|
||||||
|
*ruby_operators*
|
||||||
|
Ruby: Operator highlighting ~
|
||||||
|
|
||||||
|
Operators, and pseudo operators, can be highlighted by defining: >
|
||||||
|
|
||||||
|
:let ruby_operators = 1
|
||||||
|
:let ruby_pseudo_operators = 1
|
||||||
|
<
|
||||||
|
The supported pseudo operators are ., &., ::, *, **, &, <, << and ->.
|
||||||
|
|
||||||
|
*ruby_space_errors*
|
||||||
|
Ruby: Whitespace errors ~
|
||||||
|
|
||||||
|
Whitespace errors can be highlighted by defining "ruby_space_errors": >
|
||||||
|
|
||||||
|
:let ruby_space_errors = 1
|
||||||
|
<
|
||||||
|
This will highlight trailing whitespace and tabs preceded by a space character
|
||||||
|
as errors. This can be refined by defining "ruby_no_trail_space_error" and
|
||||||
|
"ruby_no_tab_space_error" which will ignore trailing whitespace and tabs after
|
||||||
|
spaces respectively.
|
||||||
|
|
||||||
|
*ruby_syntax_errors*
|
||||||
|
Ruby: Syntax errors ~
|
||||||
|
|
||||||
|
Redundant line continuations and predefined global variable look-alikes (such
|
||||||
|
as $# and $-z) can be highlighted as errors by defining:
|
||||||
|
>
|
||||||
|
:let ruby_line_continuation_error = 1
|
||||||
|
:let ruby_global_variable_error = 1
|
||||||
|
<
|
||||||
|
*ruby_fold*
|
||||||
|
Ruby: Folding ~
|
||||||
|
|
||||||
|
Folding can be enabled by defining "ruby_fold": >
|
||||||
|
|
||||||
|
:let ruby_fold = 1
|
||||||
|
<
|
||||||
|
This will set the value of 'foldmethod' to "syntax" locally to the current
|
||||||
|
buffer or window, which will enable syntax-based folding when editing Ruby
|
||||||
|
filetypes.
|
||||||
|
|
||||||
|
*ruby_foldable_groups*
|
||||||
|
Default folding is rather detailed, i.e., small syntax units like "if", "do",
|
||||||
|
"%w[]" may create corresponding fold levels.
|
||||||
|
|
||||||
|
You can set "ruby_foldable_groups" to restrict which groups are foldable: >
|
||||||
|
|
||||||
|
:let ruby_foldable_groups = 'if case %'
|
||||||
|
<
|
||||||
|
The value is a space-separated list of keywords:
|
||||||
|
|
||||||
|
keyword meaning ~
|
||||||
|
-------- ------------------------------------- ~
|
||||||
|
ALL Most block syntax (default)
|
||||||
|
NONE Nothing
|
||||||
|
if "if" or "unless" block
|
||||||
|
def "def" block
|
||||||
|
class "class" block
|
||||||
|
module "module" block
|
||||||
|
do "do" block
|
||||||
|
begin "begin" block
|
||||||
|
case "case" block
|
||||||
|
for "for", "while", "until" loops
|
||||||
|
{ Curly bracket block or hash literal
|
||||||
|
[ Array literal
|
||||||
|
% Literal with "%" notation, e.g.: %w(STRING), %!STRING!
|
||||||
|
/ Regexp
|
||||||
|
string String and shell command output (surrounded by ', ", `)
|
||||||
|
: Symbol
|
||||||
|
# Multiline comment
|
||||||
|
<< Here documents
|
||||||
|
__END__ Source code after "__END__" directive
|
||||||
|
|
||||||
|
NONE and ALL have priority, in that order, over all other folding groups.
|
||||||
|
|
||||||
|
*ruby_no_expensive*
|
||||||
|
Ruby: Reducing expensive operations ~
|
||||||
|
|
||||||
|
By default, the "end" keyword is colorized according to the opening statement
|
||||||
|
of the block it closes. While useful, this feature can be expensive; if you
|
||||||
|
experience slow redrawing (or you are on a terminal with poor color support)
|
||||||
|
you may want to turn it off by defining the "ruby_no_expensive" variable: >
|
||||||
|
|
||||||
|
:let ruby_no_expensive = 1
|
||||||
|
<
|
||||||
|
In this case the same color will be used for all control keywords.
|
||||||
|
|
||||||
|
*ruby_minlines*
|
||||||
|
|
||||||
|
If you do want this feature enabled, but notice highlighting errors while
|
||||||
|
scrolling backwards, which are fixed when redrawing with CTRL-L, try setting
|
||||||
|
the "ruby_minlines" variable to a value larger than 50: >
|
||||||
|
|
||||||
|
:let ruby_minlines = 100
|
||||||
|
<
|
||||||
|
Ideally, this value should be a number of lines large enough to embrace your
|
||||||
|
largest class or module.
|
||||||
|
|
||||||
|
*ruby_spellcheck_strings*
|
||||||
|
Ruby: Spellchecking strings ~
|
||||||
|
|
||||||
|
Ruby syntax will perform spellchecking of strings if you define
|
||||||
|
"ruby_spellcheck_strings": >
|
||||||
|
|
||||||
|
:let ruby_spellcheck_strings = 1
|
||||||
|
<
|
||||||
|
|
||||||
|
vim:tw=78:sw=4:ts=8:ft=help:norl:
|
||||||
|
|
||||||
|
endif
|
||||||
55
doc/graphql.txt
Normal file
55
doc/graphql.txt
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
|
||||||
|
|
||||||
|
*graphql.txt* GraphQL plug-in for Vim *graphql*
|
||||||
|
|
||||||
|
CONTENTS *graphql-contents*
|
||||||
|
|
||||||
|
1. Introduction |graphql-intro|
|
||||||
|
2. JavaScript Support |graphql-javascript|
|
||||||
|
3. TypeScript Support |graphql-typescript|
|
||||||
|
|
||||||
|
|
||||||
|
INTRODUCTION *graphql-intro*
|
||||||
|
|
||||||
|
This plugin provides GraphQL (http://graphql.org/) file detection, syntax
|
||||||
|
highlighting, and indentation.
|
||||||
|
|
||||||
|
|
||||||
|
JAVASCRIPT *graphql-javascript*
|
||||||
|
|
||||||
|
GraphQL syntax support in ES2015 template literals is provided. It works "out
|
||||||
|
of the box" with Vim 8.2's JavaScript support. The extended syntax provided by
|
||||||
|
the vim-javascript (https://github.com/pangloss/vim-javascript) plugin is also
|
||||||
|
supported.
|
||||||
|
|
||||||
|
*graphql-javascript-options*
|
||||||
|
|
||||||
|
*g:graphql_javascript_tags*
|
||||||
|
|g:graphql_javascript_tags| list of strings
|
||||||
|
|
||||||
|
Default: `["gql", "graphql", "Relay.QL"]`
|
||||||
|
|
||||||
|
This variable lists the ES2015 template tag names that will be recognized as
|
||||||
|
containing GraphQL template literal strings.
|
||||||
|
|
||||||
|
|
||||||
|
TYPESCRIPT *graphql-typescript*
|
||||||
|
|
||||||
|
Like |graphql-javascript|, GraphQL syntax support in ES2015 template literals
|
||||||
|
is provided. It also works "out of the box" with Vim 8.2's TypeScript support,
|
||||||
|
which is based on the yats (https://github.com/HerringtonDarkholme/yats.vim)
|
||||||
|
plugin. For older versions, you can install yats directly.
|
||||||
|
|
||||||
|
TypeScript syntax support also uses |graphql-javascript-options| to customize
|
||||||
|
the list of recognized template tag names.
|
||||||
|
|
||||||
|
REASONML *graphql-reasonml*
|
||||||
|
|
||||||
|
GraphQL syntax support inside of ReasonML template strings using graphql-ppx
|
||||||
|
is available when vim-reasonml (https://github.com/jordwalke/vim-reasonml) is
|
||||||
|
also installed.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
vim:tw=78:ft=help:norl:
|
||||||
|
|
||||||
|
endif
|
||||||
163
doc/haskell-vim.txt
Normal file
163
doc/haskell-vim.txt
Normal file
@@ -0,0 +1,163 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'haskell') == -1
|
||||||
|
|
||||||
|
*haskell-vim.txt* Last Change 2016 March 14
|
||||||
|
===============================================================================
|
||||||
|
===============================================================================
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
CONTENTS *haskell-vim-contents*
|
||||||
|
|
||||||
|
1. Features |haskell-vim-features|
|
||||||
|
2. Configuration |haskell-vim-configuration|
|
||||||
|
3. Highlighting |haskell-vim-indentation|
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
FEATURES *haskell-vim-features*
|
||||||
|
|
||||||
|
* Covers a broader spectrum of keywords
|
||||||
|
* Highlighting for new features like type families, pattern synonyms,
|
||||||
|
arrow syntax, recursive do, role annotations, QuasiQuotation
|
||||||
|
* More contextual highlighting
|
||||||
|
(e.g. highlight "as" or "family" only in appropriate places)
|
||||||
|
* Smarter indentation
|
||||||
|
* Better Cabal support
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
CONFIGURATION *haskell-vim-configuration*
|
||||||
|
|
||||||
|
To enable the features you would like to use, just add the according line to
|
||||||
|
your `.vimrc`.
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
HIGHLIGHTING *haskell-vim-highlighting*
|
||||||
|
|
||||||
|
`haskell-vim` can highlight additional keywords. This is enabled by setting
|
||||||
|
the according variable to 1 in the `.vimrc`.
|
||||||
|
|
||||||
|
* |haskell-vim-enable-quantification|
|
||||||
|
* |haskell-vim-enable-recursivedo|
|
||||||
|
* |haskell-vim-enable-arrowsyntax|
|
||||||
|
* |haskell-vim-enable-pattern-synonyms|
|
||||||
|
* |haskell-vim-enable-typeroles|
|
||||||
|
* |haskell-vim-enable-static-pointers|
|
||||||
|
* |haskell-vim-classic-highlighting|
|
||||||
|
* |haskell-vim-disable-TH|
|
||||||
|
|
||||||
|
*haskell-vim-enable-quantification*
|
||||||
|
`g:haskell_enable_quantification` Enables highlighting of `forall`.
|
||||||
|
|
||||||
|
*haskell-vim-enable-recursivedo*
|
||||||
|
`g:haskell_enable_recursivedo` Enables highlighting of `mdo` and `rec`.
|
||||||
|
|
||||||
|
*haskell-vim-enable-arrowsyntax*
|
||||||
|
`g:haskell_enable_arrowsyntax` Enables highlighting of `proc`.
|
||||||
|
|
||||||
|
*haskell-vim-enable-pattern-synonyms*
|
||||||
|
`g:haskell_enable_pattern_synonyms` Enables highlighting of the `pattern` keyword.
|
||||||
|
|
||||||
|
*haskell-vim-enable-typeroles*
|
||||||
|
`g:haskell_enable_typeroles` Enables highlighting of the `role` keyword, as
|
||||||
|
well as `phantom`, `norminal` and
|
||||||
|
`representational`.
|
||||||
|
|
||||||
|
*haskell-vim-enable-static-pointers*
|
||||||
|
`g:haskell_enable_static_pointers` Enables highlighting of the `static` keyword.
|
||||||
|
|
||||||
|
*haskell-vim-classic-highlighting*
|
||||||
|
`haskell-vim` has an opinionated highlighting. If you do not like that you can
|
||||||
|
switch to a more traditional mode by setting `g:haskell_classic_highlighting`
|
||||||
|
to 1.
|
||||||
|
|
||||||
|
*haskell-vim-disable-TH*
|
||||||
|
Disabling Template Haskell and Quasiquoting syntax is possible by setting
|
||||||
|
`g:haskell_disable_TH` to `1`.
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
INDENTATION *haskell-vim-indentation*
|
||||||
|
|
||||||
|
To configure indentation in `haskell-vim` you can use the following variables to
|
||||||
|
change indentation depth, just add the according line to your `.vimrc`.
|
||||||
|
|
||||||
|
You can disable the indentation by setting `g:haskell_indent_disable` to `1`.
|
||||||
|
|
||||||
|
Haskell~
|
||||||
|
|
||||||
|
* |haskell-vim-indent-if|
|
||||||
|
* |haskell-vim-indent-case|
|
||||||
|
* |haskell-vim-indent-let|
|
||||||
|
* |haskell-vim-indent-where|
|
||||||
|
* |haskell-vim-indent-before-where|
|
||||||
|
* |haskell-vim-indent-after-bare-where|
|
||||||
|
* |haskell-vim-indent-do|
|
||||||
|
* |haskell-vim-indent-in|
|
||||||
|
* |haskell-vim-indent-guard|
|
||||||
|
*haskell-vim-indent-if*
|
||||||
|
* let g:haskell_indent_if = 3 >
|
||||||
|
|
||||||
|
if bool
|
||||||
|
>>>then ...
|
||||||
|
>>>else ...
|
||||||
|
<
|
||||||
|
|
||||||
|
*haskell-vim-indent-case*
|
||||||
|
* let g:haskell_indent_case = 2 >
|
||||||
|
|
||||||
|
case xs of
|
||||||
|
>>[] -> ...
|
||||||
|
>>(y:ys) -> ...
|
||||||
|
<
|
||||||
|
*haskell-vim-indent-let*
|
||||||
|
* let g:haskell_indent_let = 4 >
|
||||||
|
|
||||||
|
let x = 0 in
|
||||||
|
>>>>x
|
||||||
|
<
|
||||||
|
*haskell-vim-indent-where*
|
||||||
|
* let g:haskell_indent_where = 6 >
|
||||||
|
|
||||||
|
where f :: Int -> Int
|
||||||
|
>>>>>>f x = x
|
||||||
|
<
|
||||||
|
*haskell-vim-indent-before-where*
|
||||||
|
* let g:haskell_indent_before_where = 2 >
|
||||||
|
|
||||||
|
foo
|
||||||
|
>>where
|
||||||
|
<
|
||||||
|
*haskell-vim-indent-after-bare-where*
|
||||||
|
* let g:haskell_indent_after_bare_where = 2 >
|
||||||
|
|
||||||
|
where
|
||||||
|
>>foo
|
||||||
|
<
|
||||||
|
*haskell-vim-indent-do*
|
||||||
|
* let g:haskell_indent_do = 3 >
|
||||||
|
|
||||||
|
do x <- a
|
||||||
|
>>>y <- b
|
||||||
|
<
|
||||||
|
*haskell-vim-indent-in*
|
||||||
|
* let g:haskell_indent_in = 1 >
|
||||||
|
|
||||||
|
let x = 1
|
||||||
|
>in x
|
||||||
|
<
|
||||||
|
*haskell-vim-indent-guard*
|
||||||
|
* let g:haskell_indent_guard = 2 >
|
||||||
|
|
||||||
|
f x y
|
||||||
|
>>|
|
||||||
|
<
|
||||||
|
|
||||||
|
Cabal~
|
||||||
|
|
||||||
|
* |cabal-vim-indent-section|
|
||||||
|
|
||||||
|
*cabal-vim-indent-section*
|
||||||
|
* let g:cabal_indent_section = 2 (limited to max. 4 spaces) >
|
||||||
|
|
||||||
|
executable name
|
||||||
|
>>main-is: Main.hs
|
||||||
|
<
|
||||||
|
|
||||||
|
endif
|
||||||
158
doc/idris-vim.txt
Normal file
158
doc/idris-vim.txt
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'idris') == -1
|
||||||
|
|
||||||
|
*idris-vim.txt* Last change 2014 April 24
|
||||||
|
===============================================================================
|
||||||
|
===============================================================================
|
||||||
|
@@@@ @@@@@@@@ @@@@@@@@ @@@@ @@@@@@ @@ @@ @@@@ @@ @@
|
||||||
|
@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@@ @@@
|
||||||
|
@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@@@ @@@@
|
||||||
|
@@ @@ @@ @@@@@@@@ @@ @@@@@@ @@@@@@@ @@ @@ @@ @@ @@@ @@
|
||||||
|
@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@
|
||||||
|
@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@
|
||||||
|
@@@@ @@@@@@@@ @@ @@ @@@@ @@@@@@ @@@ @@@@ @@ @@
|
||||||
|
===============================================================================
|
||||||
|
CONTENTS *idris-vim-contents*
|
||||||
|
|
||||||
|
1. Features: |idris-vim-features|
|
||||||
|
2. Requirements: |idris-vim-requirements|
|
||||||
|
3. Functions: |idris-vim-functions|
|
||||||
|
4. Troubleshooting |idris-vim-troubleshooting|
|
||||||
|
5. Examples: |idris-vim-examples|
|
||||||
|
6. Information: |idris-vim-information|
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
FEATURES *idris-vim-features*
|
||||||
|
|
||||||
|
* Syntax Highlighting
|
||||||
|
* Indentation
|
||||||
|
* Unicode Concealing
|
||||||
|
* Syntax Checking (via Syntastic(https://github.com/scrooloose/syntastic))
|
||||||
|
* Interactive Editing via the REPL
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
REQUIREMENTS *idris-vim-requirements*
|
||||||
|
|
||||||
|
* Idris (http://www.idris-lang.org/)
|
||||||
|
|
||||||
|
OPTIONAL:
|
||||||
|
|
||||||
|
* Syntastic(https://github.com/scrooloose/syntastic) for syntax checking
|
||||||
|
* Vimshell(https://github.com/Shougo/vimshell.vim) for a REPL
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
FUNCTIONS *idris-vim-functions*
|
||||||
|
|
||||||
|
All of the functions in idris-vim are essentially just calls back to the REPL,
|
||||||
|
so documentation for each of them is also available there.
|
||||||
|
|
||||||
|
IdrisDocumentation *IdrisDocumentation*
|
||||||
|
Shows internal documentation of the primitive under the cursor.
|
||||||
|
|
||||||
|
Mapped to '<LocalLeader>_h' by default.
|
||||||
|
|
||||||
|
IdrisResponseWin *IdrisResponseWin*
|
||||||
|
This opens an idris response window in a new pane.
|
||||||
|
|
||||||
|
Mapped to '<LocalLeader>_i' by default.
|
||||||
|
|
||||||
|
IdrisShowType *IdrisShowType*
|
||||||
|
This shows the type of the name under the cursor (or, if the cursor happens
|
||||||
|
to be over a metavariable, a bit more information about its context).
|
||||||
|
|
||||||
|
Mapped to '<LocalLeader>_t' by default.
|
||||||
|
|
||||||
|
IdrisReload *IdrisReload*
|
||||||
|
This reloads the file and type-checks the file in the current buffer.
|
||||||
|
|
||||||
|
Mapped to '<LocalLeader>_r' by default.
|
||||||
|
|
||||||
|
IdrisEval *IdrisEval*
|
||||||
|
This prompts for an expression and then evaluates it in the REPL, then
|
||||||
|
returns the result.
|
||||||
|
|
||||||
|
Mapped to '<LocalLeader>_e' by default.
|
||||||
|
|
||||||
|
IdrisCaseSplit *IdrisCaseSplit*
|
||||||
|
When the cursor is over a variable in a pattern match clause or case
|
||||||
|
expression, this splits the variable into all well-typed patterns.
|
||||||
|
|
||||||
|
Mapped to '<LocalLeader>_c' by default
|
||||||
|
|
||||||
|
IdrisAddClause *IdrisAddClause*
|
||||||
|
When the cursor is at a type declaration this creates a new clause for that
|
||||||
|
signature.
|
||||||
|
|
||||||
|
By default mapped to '<LocalLeader>_d' for an ordinary top-level definition,
|
||||||
|
'<LocalLeader>_b' for a typeclass instance definition, and
|
||||||
|
'<LocalLeader>_md' to add a pattern-matching proof clause.
|
||||||
|
|
||||||
|
IdrisAddMissing: *IdrisAddMissing*
|
||||||
|
When the cursor is over a function, this adds all clauses necessary to make
|
||||||
|
that function cover all inputs. This also eliminates clauses which would
|
||||||
|
lead to unification errors from appearing.
|
||||||
|
|
||||||
|
Mapped to '<LocalLeader>_m' by default
|
||||||
|
|
||||||
|
IdrisRefine: *IdrisRefine*
|
||||||
|
Refines the item the cursor is over (applies the name and fills in any
|
||||||
|
arguments which can be filled in via unification)
|
||||||
|
|
||||||
|
Mapped to '<LocalLeader>_f' by default
|
||||||
|
|
||||||
|
IdrisProofSearch: *IdrisProofSearch*
|
||||||
|
This attempts to find a value for the metavariable it was called on by
|
||||||
|
looking at the rest of the code. It can also be called with hints, which
|
||||||
|
are functions that can apply to help solve for the metavariable.
|
||||||
|
|
||||||
|
Mapped to '<LocalLeader>_o' without hints and '<LocalLeader>p' with hints by
|
||||||
|
default
|
||||||
|
|
||||||
|
IdrisMakeWith: *IdrisMakeWith*
|
||||||
|
When the cursor is over a pattern clause and this is called, it creates a
|
||||||
|
new with clause.
|
||||||
|
|
||||||
|
Mapped to '<LocalLeader>_w' by default
|
||||||
|
|
||||||
|
IdrisMakeLemma: *IdrisMakeLemma*
|
||||||
|
When the cursor is over a metavariable and this is called, it creates a new
|
||||||
|
top-level definition to solve the metavariable.
|
||||||
|
|
||||||
|
Mapped to '<LocalLeader>_l' by default
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
TROUBLESHOOTING *idris-vim-troubleshooting*
|
||||||
|
|
||||||
|
If this isn't working for you, make sure that:
|
||||||
|
|
||||||
|
* There is an Idris REPL running
|
||||||
|
* For syntax checking, you have syntastic installed
|
||||||
|
* The plugins mappings exists and don't conflict with anything else installed
|
||||||
|
(You can use ':map' to check. There should be mappings similar to
|
||||||
|
'\h * :call IdrisShowDoc()'.)
|
||||||
|
* Vim recognizes you're in an idris file (you can use ':verb set ft' to check)
|
||||||
|
|
||||||
|
If none of this works, check to issue tracker on github and if nothing is
|
||||||
|
there create an issue with a detailed description of the problem.
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
EXAMPLES *idris-vim-examples*
|
||||||
|
|
||||||
|
Some excellent tutorials/examples for interactive editing using the above
|
||||||
|
functions can be found at:
|
||||||
|
http://edwinb.wordpress.com/2013/10/28/interactive-idris-editing-with-vim/
|
||||||
|
and
|
||||||
|
http://www.scribd.com/doc/214031954/60/Interactive-Editing-in-Vim
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
INFORMATION *idris-vim-information*
|
||||||
|
|
||||||
|
Author: edwinb
|
||||||
|
Repo: https://github.com/idris-hackers/idris-vim
|
||||||
|
|
||||||
|
Documentation by japesinator
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
===============================================================================
|
||||||
|
" vim:ft=help:et:ts=2:sw=2:sts=2:norl:
|
||||||
|
|
||||||
|
endif
|
||||||
3282
doc/julia-vim-L2U-table.txt
Normal file
3282
doc/julia-vim-L2U-table.txt
Normal file
File diff suppressed because it is too large
Load Diff
405
doc/julia-vim-L2U.txt
Normal file
405
doc/julia-vim-L2U.txt
Normal file
@@ -0,0 +1,405 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'julia') == -1
|
||||||
|
|
||||||
|
*julia-vim-L2U.txt* Support for LaTeX-to-Unicode substitutions
|
||||||
|
|
||||||
|
Author: Carlo Baldassi <carlobaldassi@gmail.com>
|
||||||
|
License: MIT license {{{
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
The above copyright notice and this permission notice shall be included
|
||||||
|
in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
}}}
|
||||||
|
CONTENTS *julia-vim-L2U*
|
||||||
|
|
||||||
|
LaTeX-to-Unicode substitutions |julia-vim-L2U-introdction|
|
||||||
|
Via Tab key |julia-vim-L2U-tab|
|
||||||
|
As you type |julia-vim-L2U-as-you-type|
|
||||||
|
Via Keymap |julia-vim-L2U-keymap|
|
||||||
|
On different file types |julia-vim-L2U-file-types|
|
||||||
|
Enabling and disabling |julia-vim-L2U-enable-disable|
|
||||||
|
Variables |julia-vim-L2U-variables|
|
||||||
|
Functions |julia-vim-L2U-functions|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
LATEX TO UNICODE *julia-vim-L2U-introduction*
|
||||||
|
|
||||||
|
In the Julia REPL, entering a LaTeX-like sequence such as `\alpha` and pressing
|
||||||
|
the <Tab> key substitutes it with a Unicode character such as `α`. The Julia
|
||||||
|
REPL also provides partial completions, and suggestions for possible
|
||||||
|
completions upon repeated pressing of the <Tab> key. Emojis are also
|
||||||
|
available, with their names written between colons, e.g. `\:interrobang:`
|
||||||
|
produces `⁉`.
|
||||||
|
|
||||||
|
See |julia-vim-L2U-reference| for the complete table of substitutions.
|
||||||
|
|
||||||
|
This Vim plug-in also provides the functionality needed to convert LaTeX
|
||||||
|
input sequences into Unicode characters. There are 3 different methods
|
||||||
|
available:
|
||||||
|
|
||||||
|
1. The default one is the most similar to the Julia one: substitutions are
|
||||||
|
triggered by pressing the <Tab> key; if a partial match is found a list
|
||||||
|
of suggested completions is presented in a menu together with their
|
||||||
|
Unicode counterpart. The exact behaviour of this feature can be
|
||||||
|
customized, see |julia-vim-L2U-tab|.
|
||||||
|
|
||||||
|
2. The second one substitutes symbols on the fly as you type, but only in
|
||||||
|
|Insert| mode. See |julia-vim-L2U-as-you-type|.
|
||||||
|
|
||||||
|
3. The third is based on |keymap|. It also substitutes as-you-type, but it
|
||||||
|
doesn't show you the full LaTeX sequence as you're typing it, and there
|
||||||
|
is a time-out. Its main advantage over the previous one is that can be
|
||||||
|
used in more circumstances, e.g. in |Command-line| mode or when searching
|
||||||
|
for a character with |f| or |t|, as explained in |language-mapping|. See
|
||||||
|
|julia-vim-L2U-keymap|.
|
||||||
|
|
||||||
|
All of these methods are independent and can be used together without issues.
|
||||||
|
|
||||||
|
The default configuration is to use the first method, and it's only active
|
||||||
|
when editing Julia files. It only works in |Insert| and |Command-line| modes.
|
||||||
|
|
||||||
|
It is possible to enable it with other file types, see
|
||||||
|
|julia-vim-L2U-file-types|, and it can be even turned on/off on the fly
|
||||||
|
regardless of the file type, see |julia-vim-L2U-enable-disable|.
|
||||||
|
|
||||||
|
In |Command-line| mode, e.g. when searching with the |/| or |?| commands, the
|
||||||
|
default behavior is very similar to the default |Insert| mode behavior, but
|
||||||
|
slightly more limited, see |julia-vim-L2U-cmdmode|.
|
||||||
|
|
||||||
|
These features only work as described with Vim version 7.4 or higher. Tab
|
||||||
|
completion can still be made available on lower Vim versions, see
|
||||||
|
|julia-vim-L2U-workaround|. The keymap mode might work but it hasn't been
|
||||||
|
tested.
|
||||||
|
|
||||||
|
See |julia-vim| for the general reference about the other features of the
|
||||||
|
julia-vim plug-in.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
LATEX TO UNICODE VIA TAB KEY *julia-vim-L2U-tab*
|
||||||
|
|
||||||
|
Substitution of LaTeX sequences when pressing the <Tab> key (in |Insert| mode or
|
||||||
|
in |Command-line| modes) is active by default. Use |g:latex_to_unicode_tab| to
|
||||||
|
control it.
|
||||||
|
|
||||||
|
When this feature is active, the julia-vim plug-in creates a mapping for the
|
||||||
|
<Tab> key (in |Insert| mode) which takes precedence on any previously defined
|
||||||
|
mapping assigned to it, such that when the <Tab> key is pressed the plug-in
|
||||||
|
looks for potential LaTeX symbol matches before the cursor, and if it fails to
|
||||||
|
find anything of interest it will fall-back to the previous mapping for <Tab>
|
||||||
|
(with default Vim settings, this means it will insert a literal <Tab>; but if
|
||||||
|
you have defined some other behavior for that key, e.g. by installing another
|
||||||
|
plug-in such as supertab (https://github.com/ervandew/supertab) than that will
|
||||||
|
be used).
|
||||||
|
|
||||||
|
For example, entering this text in a file:
|
||||||
|
>
|
||||||
|
1 + \alpha
|
||||||
|
<
|
||||||
|
and then pressing <Tab>, results in:
|
||||||
|
>
|
||||||
|
1 + α
|
||||||
|
<
|
||||||
|
|
||||||
|
This feature is associated with 'omnifunc' completion, and therefore can
|
||||||
|
always be accessed via CTRL-X CTRL-O, even when |g:latex_to_unicode_tab| is 0.
|
||||||
|
|
||||||
|
A literal <Tab> key can always be entered by using CTRL-V before <Tab> (see
|
||||||
|
|i_CTRL-V|).
|
||||||
|
|
||||||
|
Partial sequence recognition triggers auto-completion (performed as if the
|
||||||
|
`longest` setting was used in 'completeopt') and shows a menu of suggestions
|
||||||
|
together with their corresponding Unicode symbol (provided the `menu` setting
|
||||||
|
is included in 'completeopt', and more then one match is found). So for
|
||||||
|
example, entering `\al` and pressing <Tab> will result in the following list:
|
||||||
|
>
|
||||||
|
+-------------+
|
||||||
|
| \aleph ℵ |
|
||||||
|
| \allequal ≌ |
|
||||||
|
| \alpha α |
|
||||||
|
+-------------+
|
||||||
|
>
|
||||||
|
Then, pressing `p` will reduce the list to `\alpha`, pressing <Tab> will
|
||||||
|
complete it and pressing <Tab> again will perform the substitution.
|
||||||
|
|
||||||
|
The completion menu can be disbled, and this will happen automatically if a
|
||||||
|
plug-in which is known to be incompatible with this feature is detected: see
|
||||||
|
|g:latex_to_unicode_suggestions|.
|
||||||
|
|
||||||
|
Some LaTeX sequences can be valid both as they are and as partial matches for
|
||||||
|
other sequences, e.g. `\ne` is associated with `≠`, but it is also a partial
|
||||||
|
match for `\nequiv` (`≢`). By default, if <Tab> finds an exact match performs
|
||||||
|
the substitution, but this can be controlled by the |g:latex_to_unicode_eager|
|
||||||
|
setting.
|
||||||
|
|
||||||
|
Command-line mode *julia-vim-L2U-cmdmode*
|
||||||
|
|
||||||
|
In |Command-line| mode, the behavior is largely the same except that both
|
||||||
|
<Tab> and <S-Tab> are mapped by default, and the functionality is slightly
|
||||||
|
more limited. No suggestions are shown for partial completions. Pre-existing
|
||||||
|
user-defined mappings of <Tab> are overridden. In order to avoid that, the
|
||||||
|
completion can be mapped onto a defferent key combination, see
|
||||||
|
|g:latex_to_unicode_cmd_mapping|. When using <Tab>, if no matches are found
|
||||||
|
the behavior falls back to the standard Vim command-line completion.
|
||||||
|
|
||||||
|
Vim versions lower than 7.4 *julia-vim-L2U-workaround*
|
||||||
|
|
||||||
|
The <Tab> key remapping is not performed by default with Vim versions lower
|
||||||
|
than 7.4. However, the functionality is still available via onmicompletion,
|
||||||
|
which is accessible by the CTRL-X CTRL-O key combination. You can map some
|
||||||
|
other key combination to this by adding something like
|
||||||
|
>
|
||||||
|
inoremap <C-Tab> <C-X><C-O>
|
||||||
|
<
|
||||||
|
in your |.vimrc| file. If you'd map <Tab> directly, then you'd need to use
|
||||||
|
CTRL-V <Tab> to insert a literal <Tab>.
|
||||||
|
|
||||||
|
The settings |g:latex_to_unicode_eager| and |g:latex_to_unicode_suggestions|
|
||||||
|
are still meaningful in this case.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
LATEX TO UNICODE AS YOU TYPE *julia-vim-L2U-as-you-type*
|
||||||
|
|
||||||
|
This feature is disabled by default, see |g:latex_to_unicode_auto|, and it is
|
||||||
|
only available with Vim version 7.4 or higher. It consists in substituting
|
||||||
|
valid LaTeX sequences with Unicode symbols automatically as the typing
|
||||||
|
progresses, as soon as the sequences is unambiguously complete. For example,
|
||||||
|
when typing:
|
||||||
|
>
|
||||||
|
\chi\^2 = 1
|
||||||
|
<
|
||||||
|
The result is
|
||||||
|
>
|
||||||
|
χ² = 1
|
||||||
|
<
|
||||||
|
The `\chi` is substituted right when the second backslash is entered, and the
|
||||||
|
`\^2` is substituted when the following space is entered, before the equal
|
||||||
|
sign.
|
||||||
|
|
||||||
|
This feature does not currently work with emojis.
|
||||||
|
|
||||||
|
This feature does not interfere with the <Tab> based substitution.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
LATEX TO UNICODE VIA KEYMAP *julia-vim-L2U-keymap*
|
||||||
|
|
||||||
|
This method is somewhat similar to the as-you-type one described above, but it
|
||||||
|
uses |keymap| to generate the mappings. This has the advantage that it works
|
||||||
|
in more circumstances, e.g. in |Command-line| mode or when searching within a
|
||||||
|
line with |f| or |t| (since it uses |language-mapping| underneath). It can
|
||||||
|
also be easily turned on or off like any other keymap (see |i_CTRL-^| and
|
||||||
|
|c_CTRL-^|). Like the as-you-type fature, it doesn't work with emojis.
|
||||||
|
The disadvantage is that you don't see the whole sequence as you're typing
|
||||||
|
it, and you can't fix mistakes with backspace, for example.
|
||||||
|
Another difference is that there is a |timeout| like for any other mapping.
|
||||||
|
|
||||||
|
In order to use this method, set |g:latex_to_unicode_keymap| to `1`.
|
||||||
|
You can use it in parallel with the other methods, they don't interfere. For
|
||||||
|
example, typing a partial sequence and pressing <Tab> still triggers
|
||||||
|
completions and suggestions if |g:latex_to_unicode_tab| is active.
|
||||||
|
|
||||||
|
If you use this feature, it's also useful to set |lCursor|.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
LATEX TO UNICODE ON DIFFERENT FILE TYPES *julia-vim-L2U-file-types*
|
||||||
|
|
||||||
|
By default, the LaTeX-to-Unicode substitutions are only active when editing
|
||||||
|
Julia files. However, you can use the variable |g:latex_to_unicode_file_types|
|
||||||
|
to specify for which file types this feature is active by default. The
|
||||||
|
variable must be set to a string containing a |pattern| (a regular expression)
|
||||||
|
which matches the desired file types, or to a list of such patterns. For
|
||||||
|
example, to activate the feature on all file types by default, you could put
|
||||||
|
this in your |.vimrc| file:
|
||||||
|
>
|
||||||
|
let g:latex_to_unicode_file_types = ".*"
|
||||||
|
<
|
||||||
|
To make it active only on, say, Julia and Lisp files, you could use:
|
||||||
|
>
|
||||||
|
let g:latex_to_unicode_file_types = ["julia", "lisp"]
|
||||||
|
<
|
||||||
|
|
||||||
|
Another option, |g:latex_to_unicode_file_types_blacklist|, can be used to
|
||||||
|
exclude certain file types. For example, if you'd wish to enable the feature
|
||||||
|
in all cases except for Python and untyped files, you would use:
|
||||||
|
>
|
||||||
|
let g:latex_to_unicode_file_types = ".*"
|
||||||
|
let g:latex_to_unicode_file_types_blacklist = ["python", ""]
|
||||||
|
<
|
||||||
|
|
||||||
|
NOTE: enabling the functionality will override the |'omnifunc'| setting, which
|
||||||
|
can be undesirable, and interfere with plug-ins for different file types. In
|
||||||
|
any case, the previous |'omnifunc'| setting is restored when the functionality
|
||||||
|
is disabled, see |julia-vim-L2U-enable-disable|.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
ENABLING AND DISABLING LATEX TO UNICODE *julia-vim-L2U-enable-disable*
|
||||||
|
|
||||||
|
The LaTeX-to-Unicode functionality can be enabled or disabled at any time,
|
||||||
|
regardless of the |'filetype'| of the file you're editing, using the functions
|
||||||
|
|LaTeXtoUnicode#Enable()|, |LaTeXtoUnicode#Disable()|, |LaTeXtoUnicode#Toggle()|.
|
||||||
|
For example, you could use a mapping like:
|
||||||
|
>
|
||||||
|
noremap <expr> <F7> LaTeXtoUnicode#Toggle()
|
||||||
|
noremap! <expr> <F7> LaTeXtoUnicode#Toggle()
|
||||||
|
<
|
||||||
|
and then use the <F7> key to quickly switch the functionality on and off as
|
||||||
|
needed (see |noremap| and |noremap!|).
|
||||||
|
|
||||||
|
NOTE: these functions are different from the variables |g:latex_to_unicode_tab|,
|
||||||
|
|g:latex_to_unicode_auto| and |g:latex_to_unicode_keymap|: the functions
|
||||||
|
enable/disable the functionality as a whole, while the variables control
|
||||||
|
individual features (tab, auto and keymap substitution).
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
VARIABLES *julia-vim-L2U-variables*
|
||||||
|
|
||||||
|
*g:latex_to_unicode_tab*
|
||||||
|
g:latex_to_unicode_tab
|
||||||
|
|
||||||
|
Determines whether to map LaTeX-to-Unicode substitution to the
|
||||||
|
<Tab> key while in |Insert| and |Command-line| modes, see
|
||||||
|
|julia-vim-L2U-tab|. If unspecified, it is on. You can disable
|
||||||
|
the feature by default by inserting the line
|
||||||
|
>
|
||||||
|
let g:latex_to_unicode_tab = 0
|
||||||
|
<
|
||||||
|
in your |.vimrc| file. You can change this setting at any moment
|
||||||
|
while editing, but you need to invoke |LaTeXtoUnicode#Init()|
|
||||||
|
for the change to take effect.
|
||||||
|
|
||||||
|
*g:latex_to_unicode_suggestions*
|
||||||
|
g:latex_to_unicode_suggestions
|
||||||
|
|
||||||
|
Determines whether the <Tab> key mapping produces suggestions
|
||||||
|
for partial matches. By default, this is set to 1 (active),
|
||||||
|
unless a plug-in which is known to be incompatible with it is
|
||||||
|
detected. Currently, known incompatible plug-ins are
|
||||||
|
YouCompleteMe (https://github.com/Valloric/YouCompleteMe),
|
||||||
|
neocomplcache (https://github.com/Shougo/neocomplcache.vim),
|
||||||
|
neocomplete (https://github.com/Shougo/neocomplete.vim) and
|
||||||
|
deoplete (https://github.com/Shougo/deoplete.nvim),
|
||||||
|
|
||||||
|
This variable can be set at any time, changes will immediately
|
||||||
|
take effect.
|
||||||
|
|
||||||
|
*g:latex_to_unicode_eager*
|
||||||
|
g:latex_to_unicode_eager
|
||||||
|
|
||||||
|
Determines whether the <Tab> key mapping performs the
|
||||||
|
substitution immediately upon finding an exact match. By
|
||||||
|
default this setting is set to 1 (active), so that e.g. typing
|
||||||
|
`\ne` and pressing the <Tab> key triggers the substitution. If
|
||||||
|
this variable is set to 0, an exact match which is also a
|
||||||
|
possible partial match to some other sequence triggers the
|
||||||
|
suggestions menu first, but another <Tab> forces the
|
||||||
|
substitution, so that e.g. typing `\ne` and then <Tab>
|
||||||
|
produces a list with `\ne`, `\neg`, `\nequiv` etc., and
|
||||||
|
pressing <Tab> again performs the substitution.
|
||||||
|
|
||||||
|
This variable can be set at any time, changes will immediately
|
||||||
|
take effect. When |g:latex_to_unicode_suggestions| is `0`,
|
||||||
|
this setting has no effect (it's like if it was always on).
|
||||||
|
|
||||||
|
*g:latex_to_unicode_auto*
|
||||||
|
g:latex_to_unicode_auto
|
||||||
|
|
||||||
|
Determines whether to activate LaTeX-to-Unicode substitution
|
||||||
|
on the fly as you type (in |Insert| mode), see
|
||||||
|
|julia-vim-L2U-as-you-type|. If unspecified, it is `0` (off).
|
||||||
|
You can enable the feature by default by inserting the line
|
||||||
|
>
|
||||||
|
let g:latex_to_unicode_auto = 1
|
||||||
|
<
|
||||||
|
in your |.vimrc| file. You can change this setting at any
|
||||||
|
moment while editing, but you need to invoke
|
||||||
|
|LaTeXtoUnicode#Init()| for the change to take effect.
|
||||||
|
|
||||||
|
|
||||||
|
*g:latex_to_unicode_keymap*
|
||||||
|
g:latex_to_unicode_keymap
|
||||||
|
|
||||||
|
Determines whether to activate the |keymap|-based
|
||||||
|
LaTeX-to-Unicode substitutions, see |julia-vim-L2U-keymap|.
|
||||||
|
If unspecified, it is `0` (off). You can enable the feature by
|
||||||
|
default by inserting the line
|
||||||
|
>
|
||||||
|
let g:latex_to_unicode_keymap = 1
|
||||||
|
<
|
||||||
|
in your |.vimrc| file. You can change this setting at any
|
||||||
|
moment while editing, but you need to invoke
|
||||||
|
|LaTeXtoUnicode#Init()| for the change to take effect.
|
||||||
|
|
||||||
|
*g:latex_to_unicode_file_types*
|
||||||
|
g:latex_to_unicode_file_types
|
||||||
|
|
||||||
|
Contains a |pattern|, or a list of patterns, which are matched
|
||||||
|
against the |'filetype'| to determine when to enable the
|
||||||
|
LaTeX-to-Unicode functionality, see |julia-vim-L2U-file-types|.
|
||||||
|
By default, its value is `"julia"`. The patterns provided must
|
||||||
|
match the whole filetype name. See also
|
||||||
|
|g:latex_to_unicode_file_types_blacklist|.
|
||||||
|
|
||||||
|
*g:latex_to_unicode_file_types_blacklist*
|
||||||
|
g:latex_to_unicode_file_types_blacklist
|
||||||
|
|
||||||
|
Same as |g:latex_to_unicode_file_types|, but acts in reverse:
|
||||||
|
it disables the LaTeX-to-Unicode functionality when the
|
||||||
|
|'filetype'| matches the provided pattern (or any of the
|
||||||
|
patterns if a list is provided). By default, it contains an
|
||||||
|
unmatchable pattern, i.e. it is effectively disabled.
|
||||||
|
|
||||||
|
*g:latex_to_unicode_cmd_mapping*
|
||||||
|
g:latex_to_unicode_cmd_mapping
|
||||||
|
|
||||||
|
Specifies the mapping (or list of mappings) for the
|
||||||
|
substitution in |Command-line| mode. By default, it is
|
||||||
|
`['<Tab>', '<S-Tab>']`, but it can be changed to avoid
|
||||||
|
overriding other user-defined mapping, e.g. to `'<S-Tab>'`
|
||||||
|
(if your terminal suppoorts it) or `'<C-\><Tab>'`.
|
||||||
|
The `'<Tab>'` (or to be more precise the |wildchar| key) and
|
||||||
|
`'<S-Tab>'` mappings are special in that they fall back to
|
||||||
|
performing default Vim completions in case no suitable
|
||||||
|
substitutions are found.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
FUNCTIONS *julia-vim-L2U-functions*
|
||||||
|
|
||||||
|
*LaTeXtoUnicode#Init()*
|
||||||
|
LaTeXtoUnicode#Init()
|
||||||
|
|
||||||
|
Initialize or re-initialize the LaTeX-to-Unicode substitutions
|
||||||
|
(see |julia-vim-L2U-introduction|). Must be invoked after
|
||||||
|
changing |g:latex_to_unicode_tab| or |g:latex_to_unicode_auto|
|
||||||
|
to make the changes take effect.
|
||||||
|
|
||||||
|
*LaTeXtoUnicode#Enable()*
|
||||||
|
*LaTeXtoUnicode#Disable()*
|
||||||
|
*LaTeXtoUnicode#Toggle()*
|
||||||
|
LaTeXtoUnicode#Enable()
|
||||||
|
LaTeXtoUnicode#Disable()
|
||||||
|
LaTeXtoUnicode#Toggle()
|
||||||
|
|
||||||
|
These functions enable/disable/toggle the LaTeX-to-Unicode
|
||||||
|
functionality, regardless of the |'filetype'| specified in
|
||||||
|
|g:latex_to_unicode_file_types| and
|
||||||
|
|g:latex_to_unicode_file_types_blacklist|. See
|
||||||
|
|julia-vim-L2U-enable-disable|. Note that LaTeXtoUnicode#Enable()
|
||||||
|
will override the |'omnifunc'| definition, if present. However,
|
||||||
|
LaTeXtoUnicode#Disable() will restore it.
|
||||||
|
These functions implicitly invoke |LaTeXtoUnicode#Init()|.
|
||||||
|
|
||||||
|
|
||||||
|
vim:tw=78:et:ft=help:norl:
|
||||||
|
|
||||||
|
endif
|
||||||
399
doc/julia-vim.txt
Normal file
399
doc/julia-vim.txt
Normal file
@@ -0,0 +1,399 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'julia') == -1
|
||||||
|
|
||||||
|
*julia-vim.txt* Support for Julia in Vim
|
||||||
|
|
||||||
|
Author: Carlo Baldassi <carlobaldassi@gmail.com>
|
||||||
|
License: MIT license {{{
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
The above copyright notice and this permission notice shall be included
|
||||||
|
in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
}}}
|
||||||
|
|
||||||
|
CONTENTS *julia-vim*
|
||||||
|
|
||||||
|
Introduction |julia-vim-introduction|
|
||||||
|
Block-wise movements/objects |julia-vim-blocks|
|
||||||
|
Keyword-oriented movements |julia-vim-blocks-move|
|
||||||
|
Block-oriented movements |julia-vim-blocks-moveblock|
|
||||||
|
Block text objects |julia-vim-blocks-objects|
|
||||||
|
Variables |julia-vim-blocks-variables|
|
||||||
|
Referring to documents |julia-vim-doc|
|
||||||
|
Extras |julia-vim-extras|
|
||||||
|
Customizations |julia-vim-options|
|
||||||
|
About |julia-vim-about|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
INTRODUCTION *julia-vim-introduction*
|
||||||
|
|
||||||
|
The julia-vim plug-in provides:
|
||||||
|
- basic support for editing Julia files (automatic filetype detection,
|
||||||
|
indentation, syntax highlighting)
|
||||||
|
- support for the |matchit| plugin
|
||||||
|
- support for Julia block-wise movements (i.e. jumping around between
|
||||||
|
Julia blocks like if/end, function/end etc.) and block text-objects
|
||||||
|
- facilities for conversion of LaTeX entries to Unicode symbols which mimic
|
||||||
|
and extend what the Julia REPL and the IJulia notebook interface do.
|
||||||
|
Optionally, this functionality can be used with all file types, not
|
||||||
|
just Julia files. See |julia-vim-L2U|.
|
||||||
|
- a keymapping |K| to refer julia documents.
|
||||||
|
|
||||||
|
This help file documents: 1) the block-wise movements and objects, how they
|
||||||
|
work and what variables can be used to enable/disable/tweak them; 2) The
|
||||||
|
documentation lookup facility; 3) Some extra functions and customization
|
||||||
|
options.
|
||||||
|
The LaTeX-to-Unicode facilities are documented in |julia-vim-L2U|.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
BLOCK-WISE MOVEMENTS AND BLOCK TEXT OBJECTS *julia-vim-blocks*
|
||||||
|
|
||||||
|
In Julia, all blocks start with a keyword (`module`, `function`, `if`, `for`,
|
||||||
|
`while`, `type`, etc.) and end with the `end` keyword.
|
||||||
|
|
||||||
|
This plug-in adds support for the |matchit| plugin, such that pressing |%| while
|
||||||
|
on a block keyword will jump to the other keywords pertaining to the same
|
||||||
|
block. For example, if the cursor is at the beginning of the following code:
|
||||||
|
>
|
||||||
|
if a == 1
|
||||||
|
if b > 0
|
||||||
|
println("yes")
|
||||||
|
end
|
||||||
|
else
|
||||||
|
println("no")
|
||||||
|
end
|
||||||
|
<
|
||||||
|
then pressing |%| will jump to the `else` keyword, pressing it again will jump
|
||||||
|
to `end`, and pressing it again will go back to the first `if`.
|
||||||
|
|
||||||
|
Note that the matchit plugin is normally distributed with ViM, but it is
|
||||||
|
disabled by default. To enable it, add this line to your |.vimrc| file:
|
||||||
|
>
|
||||||
|
runtime macros/matchit.vim
|
||||||
|
<
|
||||||
|
The julia-vim plug-in also adds commands to jump around block keywords in
|
||||||
|
normal, operator-pending and visual modes (see |vim-modes|). These are somehow
|
||||||
|
similar to the |]]| and |]m| mappings when used in C and Java files,
|
||||||
|
respectively, but are more powerful. These commands also require that the
|
||||||
|
matchit plugin is enabled.
|
||||||
|
|
||||||
|
There are two families of block movements, keyword-oriented (see
|
||||||
|
|julia-vim-blocks-move|) and block-oriented (see
|
||||||
|
|julia-vim-blocks-blockmove|).
|
||||||
|
|
||||||
|
Finally, this plug-in also adds block |text-objects| special mappings, so that
|
||||||
|
whole blocks can be manipulated as a whole when in visual mode or
|
||||||
|
operator-pending mode, see |julia-vim-block-objects|.
|
||||||
|
|
||||||
|
The block movements and block objects mappings can be collectively disabled,
|
||||||
|
see |g:julia_blocks|, and customized, see |g:julia_blocks_mappings|.
|
||||||
|
|
||||||
|
NOTE: in all cases, macros at the beginning of a block are considered as part
|
||||||
|
of the block itself. For example, in this code:
|
||||||
|
>
|
||||||
|
@inbounds for i = 1:5
|
||||||
|
s += v[i]
|
||||||
|
end
|
||||||
|
<
|
||||||
|
the block begins at `@inbounds`.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
KEYWORD-ORIENTED MOVEMENTS *julia-vim-blocks-move*
|
||||||
|
|
||||||
|
These movements jump to the following/preceding block keyword, and they
|
||||||
|
differentiate between begin keywords and end keywords. Some block keywords can
|
||||||
|
also be used outside blocks (e.g. `for` in comprehensions, or `end` within
|
||||||
|
indexing expressions): these instances are ignored by these commands.
|
||||||
|
|
||||||
|
The following movements are provided:
|
||||||
|
|
||||||
|
*julia_]j* *julia_]J* *julia_[j* *julia_[J*
|
||||||
|
move_n : jumps to the next begin keyword. By default, it is mapped to `]j`.
|
||||||
|
move_N : jumps to the next end keyword. By default, it is mapped to `]J`.
|
||||||
|
move_p : jumps to the preceding begin keyword. By default, it is mapped to `[j`.
|
||||||
|
move_P : jumps to the preceding end keyword. By default, it is mapped to `[J`.
|
||||||
|
|
||||||
|
Use |g:julia_blocks_mappings| to customize the mappings.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
BLOCK-ORIENTED MOVEMENTS *julia-vim-blocks-moveblock*
|
||||||
|
|
||||||
|
These movements are like keyword-oriented movements (|julia-vim-blocks-move|),
|
||||||
|
except that they ignore nested blocks within the block where the cursor is.
|
||||||
|
For example, given the following code (with line annotations):
|
||||||
|
>
|
||||||
|
1 while true
|
||||||
|
2 a += 1
|
||||||
|
3 if a > 5
|
||||||
|
4 break
|
||||||
|
5 end
|
||||||
|
6 end
|
||||||
|
7 if b == 2
|
||||||
|
8 return
|
||||||
|
9 end
|
||||||
|
<
|
||||||
|
if the cursor is on line 2, these movements will ignore the inner
|
||||||
|
`if/end` block (lines 3 to 5). You would then be able to jump directly
|
||||||
|
to lines 1 (with `[[`), 6 (with `][`), 7 (with `]]`), or 9 (with `2][`).
|
||||||
|
|
||||||
|
The following movements are provided:
|
||||||
|
|
||||||
|
*julia_]]* *julia_][* *julia_[[* *julia_[]*
|
||||||
|
moveblock_n : gets out from the current block (if any) and jumps to the next
|
||||||
|
begin keyword. (Similar to |w| for word movements.) By default,
|
||||||
|
it is mapped to `]]`.
|
||||||
|
moveblock_N : jumps to the end of the current block, if any. If the cursor is
|
||||||
|
already at the end of a block, jumps to the end of the following
|
||||||
|
block at the same level of the current one, or at the end of the
|
||||||
|
enclosing block. (Similar to |e| for word movements.) By
|
||||||
|
default, it is mapped to `][`.
|
||||||
|
moveblock_p : jumps to the beginning of the current block, if any. If the
|
||||||
|
cursor is already at the beginning of a block, jumps to the
|
||||||
|
beginning of the preceding block at the same level of the
|
||||||
|
current one, or at the beginning of the enclosing block.
|
||||||
|
(Similar to |b| for word movements.) By default, it is mapped to
|
||||||
|
`[[`.
|
||||||
|
moveblock_P : gets out from the current block (if any) and jumps to the
|
||||||
|
preceding end keyword. (Similar to |ge| for word movements.)
|
||||||
|
By default, it is mapped to `[]`.
|
||||||
|
|
||||||
|
Use |g:julia_blocks_mappings| to customize the mappings.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
BLOCK TEXT OBJECTS *julia-vim-blocks-objects*
|
||||||
|
|
||||||
|
The julia-vim plug-in extends the ViM |text-objects| by defining special
|
||||||
|
mappings which allow to operate on blocks as a whole when in visual mode
|
||||||
|
or operator-pending mode. The default mappings use `aj` and `ij` to refer to
|
||||||
|
these objects.
|
||||||
|
For example, given the following code (with line annotations):
|
||||||
|
>
|
||||||
|
1 while true
|
||||||
|
2 a += 1
|
||||||
|
3 if a > 5
|
||||||
|
4 break
|
||||||
|
5 end
|
||||||
|
6 end
|
||||||
|
<
|
||||||
|
if the cursor is on `break` on line 4, pressing `vaj` will select the whole
|
||||||
|
inner `if` block (lines 3 to 5), and pressing `aj` again will select the whole
|
||||||
|
`while` block (lines 1 to 6). The same effect could have been obtained with a
|
||||||
|
counter, i.e. using `v2aj`. If the cursor were initially on line 2, the whole
|
||||||
|
`while` block would have been selected with the first `vaj`. Using `daj` would
|
||||||
|
delete a block, `caj` would delete it and leave ViM in insert mode, `=aj`
|
||||||
|
would indent it, etc.
|
||||||
|
Starting from line 2, pressing `vij` wuold only select the inner part of the
|
||||||
|
`while` block (lines 2 to 5).
|
||||||
|
|
||||||
|
The following mappings are provided:
|
||||||
|
|
||||||
|
*julia_aj* *julia_ij*
|
||||||
|
select_a : the block which contains the cursor, including its delimiters.
|
||||||
|
By default, this is mapped to `aj`. Repeated application (e.g.
|
||||||
|
`vajaj`) selects the enclosing blocks. A counter can be used to
|
||||||
|
the same effect as repetition (e.g. `v2aj`).
|
||||||
|
select_i : same as select_a, but only selects the lines included between the
|
||||||
|
delimiters. Thus, this does not work with single-line blocks.
|
||||||
|
By default, this is mapped to `ij`. Repeated application (e.g.
|
||||||
|
`vijij`) has no effect, but using a counter has the same effect as
|
||||||
|
using "select_a" and then selecting the inner part of the outermost
|
||||||
|
block. For example, with the default mappings, `v3ij` is the same as
|
||||||
|
`v3ajij`, or `vajajajij`.
|
||||||
|
|
||||||
|
Use |g:julia_blocks_mappings| to customize the mappings.
|
||||||
|
|
||||||
|
The following auxiliary function is only mapped to normal mode:
|
||||||
|
|
||||||
|
*julia_whereami*
|
||||||
|
whereami : this mapping prints the first line of the current block on the
|
||||||
|
command line. If invoked repeatedly, or if given a count, it prints
|
||||||
|
the first line of the enclosing blocks, like `select_a`. If followed
|
||||||
|
by `select_a`, the selection, or operation, will refer to the last
|
||||||
|
block printed. By default, it is not mapped to any key, but a
|
||||||
|
mapping can be easily provided in |g:julia_blocks_mappings|. It is
|
||||||
|
possible to obtain the string, instead of having it printed, by
|
||||||
|
calling the function `julia_blocks#whereami()`. In such case, use
|
||||||
|
the function `julia_blocks#select_reset()` to reset the block
|
||||||
|
nesting level.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
VARIABLES *julia-vim-blocks-variables*
|
||||||
|
|
||||||
|
*g:julia_blocks*
|
||||||
|
g:julia_blocks
|
||||||
|
|
||||||
|
Determines whether to map block-wise movements and objects. If
|
||||||
|
unspecified, it is on. You can disable the feature by default
|
||||||
|
by inserting the line
|
||||||
|
>
|
||||||
|
let g:julia_blocks = 0
|
||||||
|
<
|
||||||
|
in your |.vimrc| file.
|
||||||
|
|
||||||
|
*g:julia_blocks_mappings*
|
||||||
|
g:julia_blocks_mappings
|
||||||
|
|
||||||
|
Custom mapping for block-wise movements. This must be a |dict|
|
||||||
|
associating movements to key combinations. Use empty strings
|
||||||
|
to disable individual mappings. The following is equivalent
|
||||||
|
to the default mappings (see |julia-vim-blocks-moveblock|,
|
||||||
|
|julia-vim-blocks-move| and |julia-vim-blocks-objects|):
|
||||||
|
>
|
||||||
|
let g:julia_blocks_mappings = {
|
||||||
|
\ "move_n" : "]j",
|
||||||
|
\ "move_N" : "]J",
|
||||||
|
\ "move_p" : "[j",
|
||||||
|
\ "move_P" : "[J",
|
||||||
|
\
|
||||||
|
\ "moveblock_n" : "]]",
|
||||||
|
\ "moveblock_N" : "][",
|
||||||
|
\ "moveblock_p" : "[[",
|
||||||
|
\ "moveblock_P" : "[]",
|
||||||
|
\
|
||||||
|
\ "select_a" : "aj",
|
||||||
|
\ "select_i" : "ij",
|
||||||
|
\
|
||||||
|
\ "whereami" : "",
|
||||||
|
\ }
|
||||||
|
<
|
||||||
|
You can change individual mappings by writing something like
|
||||||
|
this in your |.vimrc| file:
|
||||||
|
>
|
||||||
|
let g:julia_blocks_mappings = {
|
||||||
|
\ "move_N" : "]n",
|
||||||
|
\ "move_P" : "[n",
|
||||||
|
\ "whereami" : "<Leader>j",
|
||||||
|
\ }
|
||||||
|
<
|
||||||
|
Or you can disable individual mappings by writing something like
|
||||||
|
this in your |.vimrc| file:
|
||||||
|
>
|
||||||
|
let g:julia_blocks_mappings = {
|
||||||
|
\ "moveblock_n" : "",
|
||||||
|
\ "moveblock_p" : "",
|
||||||
|
\ }
|
||||||
|
<
|
||||||
|
All unspecified entries keep their default value.
|
||||||
|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
REFERRING TO DOCUMENTATION *julia-vim-doc*
|
||||||
|
|
||||||
|
*julia-vim-K*
|
||||||
|
K
|
||||||
|
Look up documentation for the keyword under the cursor. If found,
|
||||||
|
a preview window with the documentation is opened.
|
||||||
|
|
||||||
|
This also works for keywords within the opened preview window,
|
||||||
|
allowing effortless browsing of the documentation.
|
||||||
|
|
||||||
|
(This is not really a key mapping, but uses the built-in
|
||||||
|
|keywordprg|-mechanism in vim; see |K| if you're curious).
|
||||||
|
|
||||||
|
|
||||||
|
*<Plug>(JuliaDocPrompt)*
|
||||||
|
<Plug>(JuliaDocPrompt)
|
||||||
|
Open a prompt for keyword documentation lookup. If you don't use |?|
|
||||||
|
for backward search, you can use the following to make `?` work like
|
||||||
|
in the Julia REPL:
|
||||||
|
>
|
||||||
|
autocmd FileType julia nmap <buffer> ? <Plug>(JuliaDocPrompt)
|
||||||
|
<
|
||||||
|
Apply |:augroup| as needed.
|
||||||
|
|
||||||
|
|
||||||
|
*:JuliaDoc*
|
||||||
|
:JuliaDoc {keyword}
|
||||||
|
Look up documentation for {keyword}.
|
||||||
|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
EXTRAS *julia-vim-extras*
|
||||||
|
|
||||||
|
|
||||||
|
*julia#toggle_function_blockassign*
|
||||||
|
*julia#function_block2assign*
|
||||||
|
*julia#function_assign2block*
|
||||||
|
julia#toggle_function_blockassign()
|
||||||
|
julia#function_block2assign()
|
||||||
|
julia#function_assign2block()
|
||||||
|
|
||||||
|
These functions allow to transform function definitions
|
||||||
|
between block format and assignment format. For example,
|
||||||
|
these two definitions are equivalent:
|
||||||
|
>
|
||||||
|
function test(x, y)
|
||||||
|
x + 2y
|
||||||
|
end
|
||||||
|
|
||||||
|
test(x, y) = x + 2y
|
||||||
|
<
|
||||||
|
You can use the function `julia#toggle_function_blockassign()`
|
||||||
|
to switch between the two forms (the cursor needs to be on the
|
||||||
|
first line of the block form). This functionality requires
|
||||||
|
that the |matchit| plugin is loaded. Only three-line function
|
||||||
|
blocks like the one in the example are recognized. When
|
||||||
|
changing the block form into the assignment form, `return`
|
||||||
|
statements are removed; if the result is empty, `nothing` is
|
||||||
|
substituted. Leading macros (e.g. `@inline` or `@compat`) are
|
||||||
|
recognized and preserved by the transformation.
|
||||||
|
|
||||||
|
In order to make this functionality practical, it is advisable
|
||||||
|
to map it to some key combination, e.g.:
|
||||||
|
>
|
||||||
|
noremap <Leader>fb :call julia#toggle_function_blockassign()<CR>
|
||||||
|
<
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
CUSTOMIZATIONS *julia-vim-options*
|
||||||
|
|
||||||
|
The following options allows customizing some aspects of the plugin.
|
||||||
|
|
||||||
|
*g:julia_spellcheck_docstrings*
|
||||||
|
g:julia_spellcheck_docstrings
|
||||||
|
|
||||||
|
Determines whether to enable spell-checking for docstrings,
|
||||||
|
i.e. triple quoted strings that start in the first column. See
|
||||||
|
|spell|. Default: on (set to `1`).
|
||||||
|
|
||||||
|
*g:julia_spellcheck_strings*
|
||||||
|
g:julia_spellcheck_strings
|
||||||
|
|
||||||
|
Determines whether to enable spell-checking for all strings.
|
||||||
|
See |spell|. Default: off (set to `0`).
|
||||||
|
|
||||||
|
*g:julia_spellcheck_comments*
|
||||||
|
g:julia_spellcheck_comments
|
||||||
|
|
||||||
|
Determines whether to enable spell-checking for comments. See
|
||||||
|
|spell|. Default: on (set to `1`).
|
||||||
|
|
||||||
|
*g:julia_highlight_operators*
|
||||||
|
g:julia_highlight_operators
|
||||||
|
|
||||||
|
Determines whether to apply syntax highlighting to operators.
|
||||||
|
Default: on (set to `1`).
|
||||||
|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
ABOUT *julia-vim-about*
|
||||||
|
|
||||||
|
Grab the latest version or report a bug on GitHub:
|
||||||
|
|
||||||
|
http://github.com/JuliaEditorSupport/julia-vim
|
||||||
|
|
||||||
|
vim:tw=78:et:ft=help:norl:
|
||||||
|
|
||||||
|
endif
|
||||||
443
doc/ledger.txt
Normal file
443
doc/ledger.txt
Normal file
@@ -0,0 +1,443 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ledger') == -1
|
||||||
|
|
||||||
|
*ledger.txt* Plugin for the ledger filetype.
|
||||||
|
|
||||||
|
|
||||||
|
*ledger* *ledger-plugin*
|
||||||
|
|
||||||
|
Contents:
|
||||||
|
|
||||||
|
Commands............|ledger-invoking|
|
||||||
|
Source................|ledger-source|
|
||||||
|
Usage..................|ledger-usage|
|
||||||
|
Tips....................|ledger-tips|
|
||||||
|
Reports..............|ledger-reports|
|
||||||
|
Settings............|ledger-settings|
|
||||||
|
Completion........|ledger-completion|
|
||||||
|
License..............|ledger-license|
|
||||||
|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
USAGE *ledger-usage*
|
||||||
|
|
||||||
|
Copy each file to the corresponding directory in your ~/.vim directory or
|
||||||
|
install using Pathogen.
|
||||||
|
|
||||||
|
You can also use a modeline like this in every ledger file:
|
||||||
|
|
||||||
|
vim:filetype=ledger
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
TIPS *ledger-tips*
|
||||||
|
|
||||||
|
Tips and useful commands
|
||||||
|
|
||||||
|
* vim-ledger can do syntax-sensitive folding when you set `foldmethod=syntax`
|
||||||
|
in the |modeline| of your ledger file. This way transactions can shrink down
|
||||||
|
to just one line.
|
||||||
|
|
||||||
|
* Try account-completion (as explained below). If you use YouCompleteMe, you
|
||||||
|
should disable it for Ledger files. Put this in your .vimrc:
|
||||||
|
|
||||||
|
if exists('g:ycm_filetype_blacklist')
|
||||||
|
call extend(g:ycm_filetype_blacklist, { 'ledger': 1 })
|
||||||
|
endif
|
||||||
|
|
||||||
|
* You may use `:make` for syntax checking. It may be convenient to define a
|
||||||
|
mapping for the following command:
|
||||||
|
|
||||||
|
:silent make | redraw! | cwindow
|
||||||
|
|
||||||
|
It is recommended to set the value of `g:ledger_extra_options` (see below)
|
||||||
|
as follows:
|
||||||
|
|
||||||
|
let g:ledger_extra_options = '--pedantic --explicit --check-payees'
|
||||||
|
|
||||||
|
to catch most potential problems in your source file.
|
||||||
|
|
||||||
|
* Remap vim paragraph motion to move by transaction.
|
||||||
|
|
||||||
|
In vim, the "{" and "}" keystrokes move the cursor up and down by whole
|
||||||
|
paragraphs. They can be redefined in ledger files to move by transaction
|
||||||
|
instead. Add these lines to .vimrc:
|
||||||
|
|
||||||
|
au FileType ledger noremap { ?^\d<CR>
|
||||||
|
au FileType ledger noremap } /^\d<CR>
|
||||||
|
|
||||||
|
The default definitions already work in ledger files that separate
|
||||||
|
transactions with blank lines.
|
||||||
|
|
||||||
|
* `:call ledger#transaction_date_set(line('.'), "auxiliary")`
|
||||||
|
|
||||||
|
will set today's date as the auxiliary date of the current transaction. You
|
||||||
|
can use also "primary" or "unshift" in place of "auxiliary". When you pass
|
||||||
|
"unshift" the old primary date will be set as the auxiliary date and today's
|
||||||
|
date will be set as the new primary date.
|
||||||
|
To use a different date pass a date measured in seconds since 1st Jan 1970
|
||||||
|
as the third argument.
|
||||||
|
|
||||||
|
* `:call ledger#transaction_state_set(line('.'), '*')`
|
||||||
|
|
||||||
|
sets the state of the current transaction to '*'. You can use this in custom
|
||||||
|
mappings.
|
||||||
|
|
||||||
|
* `:call ledger#transaction_state_toggle(line('.'), ' *?!')`
|
||||||
|
|
||||||
|
will toggle through the provided transaction states. You can map this to
|
||||||
|
double-clicking for example:
|
||||||
|
|
||||||
|
noremap <silent><buffer> <2-LeftMouse>\
|
||||||
|
:call ledger#transaction_state_toggle(line('.'), ' *?!')<CR>
|
||||||
|
|
||||||
|
* `:LedgerAlign`
|
||||||
|
|
||||||
|
moves the amount expression of a posting so that the decimal separator is
|
||||||
|
aligned at the column specified by g:ledger_align_at. If an amount has no
|
||||||
|
decimal point, the imaginary decimal point to the right of the least
|
||||||
|
significant digit will align. The command acts on a range, with the default
|
||||||
|
being the current line.
|
||||||
|
|
||||||
|
The decimal separator can be set using `g:ledger_decimal_sep`. The default
|
||||||
|
value of `g:ledger_decimal_sep` is `'.'`.
|
||||||
|
|
||||||
|
See below for the recommended mappings.
|
||||||
|
|
||||||
|
* `:call ledger#align_amount_at_cursor()`
|
||||||
|
|
||||||
|
aligns the amount under the cursor and append/prepend the default currency.
|
||||||
|
The default currency can be set using `g:ledger_default_commodity`. Whether
|
||||||
|
the commodity should be inserted before the amount or appended to it can be
|
||||||
|
configured with the boolean flag `g:ledger_commodity_before` (the default
|
||||||
|
value is 1). A separator between the commodity and the amount may be set
|
||||||
|
using `g:ledger_commodity_sep`.
|
||||||
|
|
||||||
|
See below for the recommended mappings.
|
||||||
|
|
||||||
|
* `:call ledger#autocomplete_and_align()`
|
||||||
|
|
||||||
|
when the cursor is on a number or immediately after it, invokes
|
||||||
|
`ledger#align_amount_at_cursor()` to align it and add the default currency;
|
||||||
|
otherwise, performs autocompletion. If you define the following mappings in
|
||||||
|
your `.vimrc` then you may perform both autocompletion and alignment using
|
||||||
|
the <Tab> key:
|
||||||
|
|
||||||
|
au FileType ledger inoremap <silent> <Tab> \
|
||||||
|
<C-r>=ledger#autocomplete_and_align()<CR>
|
||||||
|
au FileType ledger vnoremap <silent> <Tab> :LedgerAlign<CR>
|
||||||
|
|
||||||
|
Alternatively, you may create a file `.vim/after/ftplugin/ledger.vim`
|
||||||
|
containing the following definitions:
|
||||||
|
|
||||||
|
inoremap <silent> <buffer> <Tab> \
|
||||||
|
<C-r>=ledger#autocomplete_and_align()<CR>
|
||||||
|
vnoremap <silent> <buffer> <Tab> :LedgerAlign<CR>
|
||||||
|
|
||||||
|
Now, you may type `asset:check<Tab><Space>123.45<Tab>`, and have the
|
||||||
|
account name autocompleted and `$123.45` properly aligned (assuming your
|
||||||
|
default commodity is set to `'$'`). Or you may press <Tab> in Visual mode
|
||||||
|
to align a number of transactions at once.
|
||||||
|
|
||||||
|
* `:call ledger#entry()`
|
||||||
|
|
||||||
|
enters a new transaction based on the text in the current line.
|
||||||
|
The text in the current line is replaced by the new transaction.
|
||||||
|
This is a front end to `ledger entry`.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
REPORTS *ledger-reports*
|
||||||
|
|
||||||
|
* `:Ledger`
|
||||||
|
|
||||||
|
Executes an arbitrary Ledger command and sends the output to a new buffer.
|
||||||
|
For example:
|
||||||
|
|
||||||
|
:Ledger bal ^assets ^liab
|
||||||
|
|
||||||
|
Errors are displayed in a quickfix window. The command offers account and
|
||||||
|
payee autocompletion (by pressing <Tab>): every name starting with `@` is
|
||||||
|
autocompleted as a payee; any other name is autocompleted as an account.
|
||||||
|
|
||||||
|
In a report buffer or in the quickfix window, you may press <Tab> to switch
|
||||||
|
back to your source file, and you may press `q` to dismiss the current window.
|
||||||
|
|
||||||
|
There are three highlight groups that are used to color the report:
|
||||||
|
|
||||||
|
* `LedgerNumber`
|
||||||
|
|
||||||
|
This is used to color nonnegative numbers.
|
||||||
|
|
||||||
|
* `LedgerNegativeNumber`
|
||||||
|
|
||||||
|
This is used to color negative numbers.
|
||||||
|
|
||||||
|
* `LedgerImproperPerc`
|
||||||
|
|
||||||
|
This is used to color improper percentages.
|
||||||
|
|
||||||
|
* `:Balance`
|
||||||
|
|
||||||
|
Show the pending and cleared balance of a given account below the status
|
||||||
|
line. For example:
|
||||||
|
|
||||||
|
:Balance checking:savings
|
||||||
|
|
||||||
|
The command offers payee and account autocompletion (see `:Ledger`). The
|
||||||
|
account argument is optional: if no argument is given, the first account
|
||||||
|
name found in the current line is used.
|
||||||
|
|
||||||
|
Two highlight groups can be used to customize the colors of the line:
|
||||||
|
|
||||||
|
* `LedgerCleared`
|
||||||
|
|
||||||
|
This is used to color the cleared balance.
|
||||||
|
|
||||||
|
* `LedgerPending`
|
||||||
|
|
||||||
|
This is used to color the pending balance.
|
||||||
|
|
||||||
|
* `:Register`
|
||||||
|
|
||||||
|
Opens an arbitrary register report in the quickfix window. For example:
|
||||||
|
|
||||||
|
:Register groceries -p 'this month'
|
||||||
|
|
||||||
|
The command offers account and payee autocompletion (see |:Ledger|). You
|
||||||
|
may use the standard quickfix commands to jump from an entry in the register
|
||||||
|
report to the corresponding location in the source file. If you use GUI Vim
|
||||||
|
or if your terminal has support for the mouse (e.g., iTerm2, or even
|
||||||
|
Terminal.app in OS X 10.11 or later), you may also double-click on a line
|
||||||
|
number in the quickfix window to jump to the corresponding posting.
|
||||||
|
|
||||||
|
It is strongly recommended that you add mappings for common quickfix
|
||||||
|
commands like `:cprev` and `:cnext`, or that you use T. Pope's Unimpaired
|
||||||
|
plugin.
|
||||||
|
|
||||||
|
* :`Reconcile`
|
||||||
|
|
||||||
|
Reconcile an account. For example:
|
||||||
|
|
||||||
|
:Reconcile checking
|
||||||
|
|
||||||
|
After you press Enter, you will be asked to enter a target amount (use
|
||||||
|
Vim's syntax for numbers, not your ledger's format). For example, for a
|
||||||
|
checking account, the target amount may be the balance of your latest bank
|
||||||
|
statement. The list of uncleared postings appears in the quickfix window.
|
||||||
|
The current balance of the account, together with the difference between the
|
||||||
|
target amount and the cleared balance, is shown at the bottom of the screen.
|
||||||
|
You may use standard quickfix commands to navigate through the postings. You
|
||||||
|
may use |ledger#transaction_state_set()| to update a transaction's state.
|
||||||
|
Every time you save your file, the balance and the difference from the
|
||||||
|
target amount are updated at the bottom of the screen. The goal, of course,
|
||||||
|
is to get such difference to zero. You may press `<C-l>` to refresh the
|
||||||
|
Reconcile buffer. To finish reconciling an account, simply close the
|
||||||
|
quickfix window.
|
||||||
|
|
||||||
|
There is a highlight group to customize the color of the difference from
|
||||||
|
target:
|
||||||
|
|
||||||
|
* `LedgerTarget`
|
||||||
|
|
||||||
|
This is used to color the difference between the target amount and the
|
||||||
|
cleared balance.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
SETTINGS *ledger-settings*
|
||||||
|
|
||||||
|
Configuration
|
||||||
|
|
||||||
|
Include the following let-statements somewhere in your `.vimrc` to modify the
|
||||||
|
behaviour of the ledger filetype.
|
||||||
|
|
||||||
|
* Path to the `ledger` executable:
|
||||||
|
|
||||||
|
let g:ledger_bin = 'ledger'
|
||||||
|
|
||||||
|
* Additional default options for the `ledger` executable:
|
||||||
|
|
||||||
|
let g:ledger_extra_options = ''
|
||||||
|
|
||||||
|
* To use a custom external system command to generate a list of account names
|
||||||
|
for completion, set the following. If g:ledger_bin is set, this will default
|
||||||
|
to running that command with arguments to parse the current file using the
|
||||||
|
accounts subcommand (works with ledger or hledger), otherwise it will parse
|
||||||
|
the postings in the current file itself.
|
||||||
|
|
||||||
|
let g:ledger_accounts_cmd = 'your_command args'
|
||||||
|
|
||||||
|
* To use a custom external system command to generate a list of descriptions
|
||||||
|
for completion, set the following. If g:ledger_bin is set, this will default
|
||||||
|
to running that command with arguments to parse the current file using the
|
||||||
|
descriptions subcommand (works with ledger or hledger), otherwise it will
|
||||||
|
parse the transactions in the current file itself.
|
||||||
|
|
||||||
|
let g:ledger_descriptions_cmd = 'your_command args'
|
||||||
|
|
||||||
|
* Number of columns that will be used to display the foldtext. Set this when
|
||||||
|
you think that the amount is too far off to the right.
|
||||||
|
|
||||||
|
let g:ledger_maxwidth = 80
|
||||||
|
|
||||||
|
* String that will be used to fill the space between account name and amount in
|
||||||
|
the foldtext. Set this to get some kind of lines or visual aid.
|
||||||
|
|
||||||
|
let g:ledger_fillstring = ' -'
|
||||||
|
|
||||||
|
* If you want the account completion to be sorted by level of detail/depth
|
||||||
|
instead of alphabetical, include the following line:
|
||||||
|
|
||||||
|
let g:ledger_detailed_first = 1
|
||||||
|
|
||||||
|
* By default vim will fold ledger transactions, leaving surrounding blank lines
|
||||||
|
unfolded. You can use 'g:ledger_fold_blanks' to hide blank lines following a
|
||||||
|
transaction.
|
||||||
|
|
||||||
|
let g:ledger_fold_blanks = 0
|
||||||
|
|
||||||
|
A value of 0 will disable folding of blank lines, 1 will allow folding of a
|
||||||
|
single blank line between transactions; any larger value will enable folding
|
||||||
|
unconditionally.
|
||||||
|
|
||||||
|
Note that only lines containing no trailing spaces are considered for
|
||||||
|
folding. You can take advantage of this to disable this feature on a
|
||||||
|
case-by-case basis.
|
||||||
|
|
||||||
|
* Decimal separator:
|
||||||
|
|
||||||
|
let g:ledger_decimal_sep = '.'
|
||||||
|
|
||||||
|
* Specify at which column decimal separators should be aligned:
|
||||||
|
|
||||||
|
let g:ledger_align_at = 60
|
||||||
|
|
||||||
|
* Default commodity used by `ledger#align_amount_at_cursor()`:
|
||||||
|
|
||||||
|
let g:ledger_default_commodity = ''
|
||||||
|
|
||||||
|
* Flag that tells whether the commodity should be prepended or appended to the
|
||||||
|
amount:
|
||||||
|
|
||||||
|
let g:ledger_commodity_before = 1
|
||||||
|
|
||||||
|
* String to be put between the commodity and the amount:
|
||||||
|
|
||||||
|
let g:ledger_commodity_sep = ''
|
||||||
|
|
||||||
|
* Flag that enable the spelling of the amount:
|
||||||
|
|
||||||
|
let g:ledger_commodity_spell = 1
|
||||||
|
|
||||||
|
* Format of transaction date:
|
||||||
|
|
||||||
|
let g:ledger_date_format = '%Y/%m/%d'
|
||||||
|
|
||||||
|
* The file to be used to generate reports:
|
||||||
|
|
||||||
|
let g:ledger_main = '%'
|
||||||
|
|
||||||
|
The default is to use the current file.
|
||||||
|
|
||||||
|
* Position of a report buffer:
|
||||||
|
|
||||||
|
let g:ledger_winpos = 'B'
|
||||||
|
|
||||||
|
Use `b` for bottom, `t` for top, `l` for left, `r` for right. Use uppercase letters
|
||||||
|
if you want the window to always occupy the full width or height.
|
||||||
|
|
||||||
|
* Format of quickfix register reports (see |:Register|):
|
||||||
|
|
||||||
|
let g:ledger_qf_register_format = \
|
||||||
|
'%(date) %-50(payee) %-30(account) %15(amount) %15(total)\n'
|
||||||
|
|
||||||
|
The format is specified using the standard Ledger syntax for --format.
|
||||||
|
|
||||||
|
* Format of the reconcile quickfix window (see |:Reconcile|):
|
||||||
|
|
||||||
|
let g:ledger_qf_reconcile_format = \
|
||||||
|
'%(date) %-4(code) %-50(payee) %-30(account) %15(amount)\n'
|
||||||
|
|
||||||
|
The format is specified using the standard Ledger syntax for --format.
|
||||||
|
|
||||||
|
* Flag that tells whether a location list or a quickfix list should be used:
|
||||||
|
|
||||||
|
let g:ledger_use_location_list = 0
|
||||||
|
|
||||||
|
The default is to use the quickfix window. Set to 1 to use a location list.
|
||||||
|
|
||||||
|
* Position of the quickfix/location list:
|
||||||
|
|
||||||
|
let g:ledger_qf_vertical = 0
|
||||||
|
|
||||||
|
Set to 1 to open the quickfix window in a vertical split.
|
||||||
|
|
||||||
|
* Size of the quickfix window:
|
||||||
|
|
||||||
|
let g:ledger_qf_size = 10
|
||||||
|
|
||||||
|
This is the number of lines of a horizontal quickfix window, or the number
|
||||||
|
of columns of a vertical quickfix window.
|
||||||
|
|
||||||
|
* Flag to show or hide filenames in the quickfix window:
|
||||||
|
|
||||||
|
let g:ledger_qf_hide_file = 1
|
||||||
|
|
||||||
|
Filenames in the quickfix window are hidden by default. Set this to 1 is
|
||||||
|
you want filenames to be visible.
|
||||||
|
|
||||||
|
* Text of the output of the |:Balance| command:
|
||||||
|
|
||||||
|
let g:ledger_cleared_string = 'Cleared: '
|
||||||
|
let g:ledger_pending_string = 'Cleared or pending: '
|
||||||
|
let g:ledger_target_string = 'Difference from target: '
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
COMPLETION *ledger-completion*
|
||||||
|
|
||||||
|
Omni completion is currently implemented for account names only.
|
||||||
|
|
||||||
|
### Accounts
|
||||||
|
|
||||||
|
Account names are matched by the start of every sub-level. When you
|
||||||
|
insert an account name like this:
|
||||||
|
|
||||||
|
Asse<C-X><C-O>
|
||||||
|
|
||||||
|
You will get a list of top-level accounts that start like this.
|
||||||
|
|
||||||
|
Go ahead and try something like:
|
||||||
|
|
||||||
|
As:Ban:Che<C-X><C-O>
|
||||||
|
|
||||||
|
When you have an account like this, 'Assets:Bank:Checking' should show up.
|
||||||
|
|
||||||
|
When you want to complete on a virtual transaction, it's currently best
|
||||||
|
to keep the cursor in front of the closing bracket. Of course you can
|
||||||
|
insert the closing bracket after calling the completion, too.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
LICENSE *ledger-license*
|
||||||
|
|
||||||
|
https://github.com/ledger/vim-ledger
|
||||||
|
|
||||||
|
Copyright 2019 Caleb Maclennan
|
||||||
|
Copyright 2009–2017 Johann Klähn
|
||||||
|
Copyright 2009 Stefan Karrmann
|
||||||
|
Copyright 2005 Wolfgang Oertl
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by the
|
||||||
|
Free Software Foundation, either version 2 of the License, or (at your
|
||||||
|
option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||||
|
Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along
|
||||||
|
with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
|
||||||
|
vim:ts=8 sw=8 noexpandtab tw=78 ft=help:
|
||||||
|
|
||||||
|
|
||||||
|
endif
|
||||||
16
doc/ocaml.txt
Normal file
16
doc/ocaml.txt
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ocaml') == -1
|
||||||
|
|
||||||
|
*ocaml.txt* Filetype plugin for OCaml
|
||||||
|
|
||||||
|
CONFIGURATION *ocaml-configuration*
|
||||||
|
|
||||||
|
*g:ocaml_highlight_operators*
|
||||||
|
|
||||||
|
By default operators are not linked to the Operator group and thus not
|
||||||
|
highlighted. You can turn on highlighting of operators by defining:
|
||||||
|
|
||||||
|
let g:ocaml_highlight_operators = 1
|
||||||
|
|
||||||
|
vim:tw=78:et:ft=help:norl:
|
||||||
|
|
||||||
|
endif
|
||||||
22
doc/opam.txt
Normal file
22
doc/opam.txt
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ocaml') == -1
|
||||||
|
|
||||||
|
*opam.txt* Switch OCaml versions from inside Vim using OPAM
|
||||||
|
|
||||||
|
Author: Rudi Grinberg <http://rgrinberg.com>
|
||||||
|
License: Same terms as Vim itself (see |license|)
|
||||||
|
|
||||||
|
This plugin is only available if 'compatible' is not set.
|
||||||
|
|
||||||
|
COMMANDS *:opam*
|
||||||
|
|
||||||
|
:Opam {version} Set the current OCaml version to {version}.
|
||||||
|
|
||||||
|
ABOUT *opam-about*
|
||||||
|
|
||||||
|
Grab the latest version or report a bug on GitHub:
|
||||||
|
|
||||||
|
https://github.com/ocaml/vim-ocaml
|
||||||
|
|
||||||
|
vim:tw=78:et:ft=help:norl:
|
||||||
|
|
||||||
|
endif
|
||||||
143
doc/pgsql.txt
Normal file
143
doc/pgsql.txt
Normal file
@@ -0,0 +1,143 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'pgsql') == -1
|
||||||
|
|
||||||
|
*pgsql.txt* Syntax highlighting for PostgreSQL files
|
||||||
|
_ ~
|
||||||
|
| | ~
|
||||||
|
____ ____ ___ ____| | ~
|
||||||
|
| _ \ / _ |/___)/ _ | | ~
|
||||||
|
| |_| ( (_| |___ | |_| | | ~
|
||||||
|
| __/ \___ (___/ \__ |\_) ~
|
||||||
|
|_| (_____| |_| ~
|
||||||
|
|
||||||
|
The best PostgreSQL plugin for Vim!
|
||||||
|
|
||||||
|
Author: Lifepillar <https://github.com/lifepillar>
|
||||||
|
License: Public Domain
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
CONTENTS *pgsql-contents*
|
||||||
|
|
||||||
|
1. Syntax highlighting ................... |pgsql-syntax|
|
||||||
|
2. Customization ......................... |pgsql-customization|
|
||||||
|
3. Autocompletion ........................ |pgsql-autocompletion|
|
||||||
|
4. Contributing .......................... |pgsql-contributing|
|
||||||
|
5. Credits ............................... |pgsql-credits|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
Syntax highlighting *pgsql-syntax*
|
||||||
|
|
||||||
|
Files with a .`pgsql` suffix are highlighted out of the box. If you want to
|
||||||
|
highlight `.sql` files using this plugin by default, add this to your `.vimrc`
|
||||||
|
(see |ft_sql.txt| for more details):
|
||||||
|
>
|
||||||
|
let g:sql_type_default = 'pgsql'
|
||||||
|
<
|
||||||
|
Alternatively, after loading a `.sql` file use this command:
|
||||||
|
>
|
||||||
|
SQLSetType pgsql.vim
|
||||||
|
<
|
||||||
|
To set the file type in new buffers use:
|
||||||
|
>
|
||||||
|
let b:sql_type_override='pgsql' | set ft=sql
|
||||||
|
<
|
||||||
|
Identifiers starting with an underscore are highlighted as variables. It is
|
||||||
|
recommended to adopt the convention of prefixing function parameters and local
|
||||||
|
variables with `_`.
|
||||||
|
|
||||||
|
Code between `$pgsql$`, `$body$`, or `$$` pairs is interpreted as PL/pgSQL and
|
||||||
|
highlighted accordingly (the delimiters are case-insensitive). If you prefer
|
||||||
|
to use `$$` to highlight strings instead, you may set |g:pgsql_dollar_strings|
|
||||||
|
to 1.
|
||||||
|
|
||||||
|
Text enclosed between `$anyword$` pairs, where `anyword` is any non-empty
|
||||||
|
sequence of word characters different from those with a special meaning (such
|
||||||
|
as `$pgsql$`) is treated as a multi-line string.
|
||||||
|
|
||||||
|
Finally, the plugin supports syntax highlighting of arbitrary languages within
|
||||||
|
procedure and function blocks. This feature needs to be configured: see
|
||||||
|
|g:pgsql_pl|.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
Customization *pgsql-customization*
|
||||||
|
|
||||||
|
*'g:pgsql_backslash_quote'*
|
||||||
|
Set to 1 to recognize `\'` as an escape sequence in all strings. By default,
|
||||||
|
`\'` is treated as an escape sequence only in "escape" strings constants,
|
||||||
|
i.e., strings enclosed in `E''`.
|
||||||
|
>
|
||||||
|
let g:pgsql_backslash_quote = 0
|
||||||
|
<
|
||||||
|
*'g:pgsql_disabled_extensions'*
|
||||||
|
Support for the most common PostgreSQL extensions is enabled by default. Set
|
||||||
|
this to a List of names of extensions whose keywords you do not want to be
|
||||||
|
highlighted.
|
||||||
|
>
|
||||||
|
let g:pgsql_disabled_extensions = []
|
||||||
|
<
|
||||||
|
*'g:pgsql_dollar_strings'*
|
||||||
|
Set to 1 if you want double-dollar enclosed text highlighted as a SQL string.
|
||||||
|
By default, text quoted with `$$` is highlighted as PL/pgSQL.
|
||||||
|
>
|
||||||
|
let g:pgsql_dollar_strings = 0
|
||||||
|
<
|
||||||
|
*'g:pgsql_pl'*
|
||||||
|
*'b:pgsql_pl'*
|
||||||
|
A List of the filetypes that should be highlighted inside the body of
|
||||||
|
user-defined functions and procedures.
|
||||||
|
>
|
||||||
|
let g:pgsql_pl = []
|
||||||
|
<
|
||||||
|
For example, to use PL/Python and PL/R, you should define:
|
||||||
|
>
|
||||||
|
let g:pgsql_pl = ['python', 'r']
|
||||||
|
<
|
||||||
|
Then, code between `$python$` pairs will be highlighted as Python, and code
|
||||||
|
between `$r$` pairs will be highlighted as R.
|
||||||
|
|
||||||
|
The buffer-local version of this setting can be used to override the global
|
||||||
|
setting in a single buffer.
|
||||||
|
|
||||||
|
Note: changes to any of these variables take effect after the SQL filetype is
|
||||||
|
reloaded.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
Autocompletion *pgsql-autocompletion*
|
||||||
|
|
||||||
|
This plugin just defines a new dialect for Vim's SQL plugin. As such, it
|
||||||
|
inherits the static and dynamic completion methods already offered by Vim (see
|
||||||
|
|sql-completion|). So, for example, by default you may use `<C-c>f` to
|
||||||
|
complete function names, `<C-c>T` to complete types, and so on. See
|
||||||
|
|ft_sql.txt| for thorough documentation about SQL support in Vim.
|
||||||
|
|
||||||
|
As far as I know, YouCompleteMe does not support SQL. If you use YouCompleteMe
|
||||||
|
you may want to disable it for SQL buffers. Add this to
|
||||||
|
`.vim/after/ftplugin/sql.vim`:
|
||||||
|
>
|
||||||
|
if exists('g:ycm_filetype_blacklist')
|
||||||
|
call extend(g:ycm_filetype_blacklist, { 'sql': 1 })
|
||||||
|
endif
|
||||||
|
<
|
||||||
|
Of course, I recommend using my own MUcomplete plugin over YCM ;)
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
Contributing *pgsql-contributing*
|
||||||
|
|
||||||
|
For bug reports and feature requests please use:
|
||||||
|
|
||||||
|
https://github.com/lifepillar/pgsql.vim/issues
|
||||||
|
|
||||||
|
Pull requests are welcome, too!
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
Credits *pgsql-credits*
|
||||||
|
|
||||||
|
This plugin was originally a fork of space::tekk's
|
||||||
|
|
||||||
|
https://github.com/spacetekk/pgsql.vim
|
||||||
|
|
||||||
|
and completely rewritten.
|
||||||
|
|
||||||
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
|
||||||
|
|
||||||
|
endif
|
||||||
68
doc/ps1.txt
Normal file
68
doc/ps1.txt
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'powershell') == -1
|
||||||
|
|
||||||
|
*ps1.txt* A Windows PowerShell syntax plugin for Vim
|
||||||
|
|
||||||
|
Maintainer: Peter Provost <https://www.github.com/PProvost>
|
||||||
|
License: Apache 2.0
|
||||||
|
Version: 2.10
|
||||||
|
|
||||||
|
INTRODUCTION *ps1-syntax*
|
||||||
|
|
||||||
|
This plugin provides Vim syntax, indent and filetype detection for Windows
|
||||||
|
PowerShell scripts, modules, and XML configuration files.
|
||||||
|
|
||||||
|
|
||||||
|
ABOUT *ps1-about*
|
||||||
|
|
||||||
|
Grab the latest version or report a bug on GitHub:
|
||||||
|
|
||||||
|
https://github.com/PProvost/vim-ps1
|
||||||
|
|
||||||
|
|
||||||
|
FOLDING *ps1-folding*
|
||||||
|
|
||||||
|
The ps1 syntax file provides syntax folding (see |:syn-fold|) for script blocks
|
||||||
|
and digital signatures in scripts.
|
||||||
|
|
||||||
|
When 'foldmethod' is set to "syntax" then function script blocks will be
|
||||||
|
folded unless you use the following in your .vimrc or before opening a script: >
|
||||||
|
|
||||||
|
:let g:ps1_nofold_blocks = 1
|
||||||
|
<
|
||||||
|
Digital signatures in scripts will also be folded unless you use: >
|
||||||
|
|
||||||
|
:let g:ps1_nofold_sig = 1
|
||||||
|
<
|
||||||
|
Note: syntax folding might slow down syntax highlighting significantly,
|
||||||
|
especially for large files.
|
||||||
|
|
||||||
|
|
||||||
|
COMPILER *ps1-compiler*
|
||||||
|
|
||||||
|
The powershell |compiler| script configures |:make| to execute the script in
|
||||||
|
PowerShell.
|
||||||
|
|
||||||
|
It tries to pick a smart default PowerShell command: `pwsh` if available and
|
||||||
|
`powershell` otherwise, but you can customize the command: >
|
||||||
|
|
||||||
|
:let g:ps1_makeprg_cmd = '/path/to/pwsh'
|
||||||
|
<
|
||||||
|
To configure whether to show the exception type information: >
|
||||||
|
|
||||||
|
:let g:ps1_efm_show_error_categories = 1
|
||||||
|
<
|
||||||
|
|
||||||
|
KEYWORD LOOKUP *ps1-keyword*
|
||||||
|
|
||||||
|
To look up keywords using PowerShell's Get-Help, press the |K| key. For more
|
||||||
|
convenient paging, the pager `less` should be installed, which is included in
|
||||||
|
many Linux distributions and in macOS.
|
||||||
|
|
||||||
|
Many other distributions are available for Windows like
|
||||||
|
https://chocolatey.org/packages/less/. Make sure `less` is in a directory
|
||||||
|
listed in the `PATH` environment variable, which chocolatey above does.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
vim:ft=help:
|
||||||
|
|
||||||
|
endif
|
||||||
124
doc/python-syntax.txt
Normal file
124
doc/python-syntax.txt
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'python') == -1
|
||||||
|
|
||||||
|
*python-syntax.txt* Python syntax highlighting
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
Introduction *python-syntax* *ft-python-syntax* *python.vim*
|
||||||
|
|
||||||
|
This is an enhanced version of the original Vim 6.1 Python syntax highlighting
|
||||||
|
`python.vim` by Neil Schemenauer.
|
||||||
|
|
||||||
|
Features
|
||||||
|
--------
|
||||||
|
|
||||||
|
* Enhanced highlighting for:
|
||||||
|
* Strings
|
||||||
|
* Special symbols inside strings
|
||||||
|
* Numeric constants
|
||||||
|
* Added support for:
|
||||||
|
* Python 3
|
||||||
|
* Numbers with underscores
|
||||||
|
* String %-formatting and f-strings
|
||||||
|
* Magic comments: source code encoding and shebangs
|
||||||
|
* New exceptions and builtins
|
||||||
|
* Doctests
|
||||||
|
* `@decorator` syntax
|
||||||
|
* Class variables such as `self` and `cls`
|
||||||
|
* Operators
|
||||||
|
* Highlighting of the following errors:
|
||||||
|
* Invalid symbols in source file
|
||||||
|
* Invalid numeric constants
|
||||||
|
* Invalid %-formatting inside strings
|
||||||
|
* Invalid variable names
|
||||||
|
* Invalid operators
|
||||||
|
* Mixing spaces and tabs
|
||||||
|
* Trailing spaces (Enabled with `g:python_highlight_space_errors`)
|
||||||
|
* Commands for easy switching between versions
|
||||||
|
|
||||||
|
Folding is done by the plugin SimpylFold
|
||||||
|
(https://github.com/tmhedberg/SimpylFold).
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
Configuration *python-syntax-configuration*
|
||||||
|
|
||||||
|
Option variables
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Set variable to `1` to enable or `0` to disable.
|
||||||
|
|
||||||
|
For example to enable all syntax highlighting features you can add the
|
||||||
|
following command to your `~/.config/nvim/init.vim` or `~/.vimrc`: >
|
||||||
|
|
||||||
|
let g:python_highlight_all = 1
|
||||||
|
<
|
||||||
|
|
||||||
|
`g:python_version_2` (default `0`)
|
||||||
|
Python 2 mode
|
||||||
|
|
||||||
|
`b:python_version_2` (default `0`)
|
||||||
|
Python 2 mode (buffer local)
|
||||||
|
|
||||||
|
`g:python_highlight_builtins` (default `0`)
|
||||||
|
Highlight builtin objects, types, and functions
|
||||||
|
|
||||||
|
`g:python_highlight_builtin_objs` (default `0`)
|
||||||
|
Highlight builtin objects only
|
||||||
|
|
||||||
|
`g:python_highlight_builtin_types` (default `0`)
|
||||||
|
Highlight builtin types only
|
||||||
|
|
||||||
|
`g:python_highlight_builtin_funcs` (default `0`)
|
||||||
|
Highlight builtin functions only
|
||||||
|
|
||||||
|
`g:python_highlight_builtin_funcs_kwarg` (default `1`)
|
||||||
|
Highlight builtin functions when used as kwarg
|
||||||
|
|
||||||
|
`g:python_highlight_exceptions` (default `0`)
|
||||||
|
Highlight standard exceptions
|
||||||
|
|
||||||
|
`g:python_highlight_string_formatting` (default `0`)
|
||||||
|
Highlight `%` string formatting
|
||||||
|
|
||||||
|
`g:python_highlight_string_format` (default `0`)
|
||||||
|
Highlight syntax of `str.format` syntax
|
||||||
|
|
||||||
|
`g:python_highlight_string_templates` (default `0`)
|
||||||
|
Highlight syntax of `string.Template`
|
||||||
|
|
||||||
|
`g:python_highlight_indent_errors` (default `0`)
|
||||||
|
Highlight indentation errors
|
||||||
|
|
||||||
|
`g:python_highlight_space_errors` (default `0`)
|
||||||
|
Highlight trailing spaces
|
||||||
|
|
||||||
|
`g:python_highlight_doctests` (default `0`)
|
||||||
|
Highlight doc-tests
|
||||||
|
|
||||||
|
`g:python_highlight_func_calls` (default `0`)
|
||||||
|
Highlight functions calls
|
||||||
|
|
||||||
|
`g:python_highlight_class_vars` (default `0`)
|
||||||
|
Highlight class variables `self` and `cls`
|
||||||
|
|
||||||
|
`g:python_highlight_operators` (default `0`)
|
||||||
|
Highlight all operators
|
||||||
|
|
||||||
|
`g:python_highlight_all` (default `0`)
|
||||||
|
Enable all highlight options above, except for previously set.
|
||||||
|
|
||||||
|
`g:python_highlight_file_headers_as_comments` (default `0`)
|
||||||
|
Highlight shebang and coding headers as comments
|
||||||
|
|
||||||
|
`g:python_slow_sync` (default `1`)
|
||||||
|
Disable for slow machines
|
||||||
|
|
||||||
|
Commands
|
||||||
|
--------
|
||||||
|
|
||||||
|
`Python2Syntax`
|
||||||
|
Switch to Python 2
|
||||||
|
|
||||||
|
`Python3Syntax`
|
||||||
|
Switch to Python 3
|
||||||
|
|
||||||
|
endif
|
||||||
24
doc/reason.txt
Normal file
24
doc/reason.txt
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'reason') == -1
|
||||||
|
|
||||||
|
*reason.txt* Filetype plugin for Reason
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
CONTENTS *reason* *ft-reason*
|
||||||
|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
INTRODUCTION *reason-intro*
|
||||||
|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
SETTINGS *reason-settings*
|
||||||
|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
MAPPINGS *reason-mappings*
|
||||||
|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
vim:tw=78:sw=4:noet:ts=8:ft=help:norl:
|
||||||
|
|
||||||
|
endif
|
||||||
490
doc/rust.txt
Normal file
490
doc/rust.txt
Normal file
@@ -0,0 +1,490 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
|
||||||
|
|
||||||
|
*ft_rust.txt* Filetype plugin for Rust
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
CONTENTS *rust*
|
||||||
|
|
||||||
|
1. Introduction |rust-intro|
|
||||||
|
2. Settings |rust-settings|
|
||||||
|
3. Commands |rust-commands|
|
||||||
|
4. Mappings |rust-mappings|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
INTRODUCTION *rust-intro*
|
||||||
|
|
||||||
|
This plugin provides syntax and supporting functionality for the Rust
|
||||||
|
filetype. It requires Vim 8 or higher for full functionality. Some commands
|
||||||
|
will not work on earlier versions.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
SETTINGS *rust-settings*
|
||||||
|
|
||||||
|
This plugin has a few variables you can define in your vimrc that change the
|
||||||
|
behavior of the plugin.
|
||||||
|
|
||||||
|
Some variables can be set buffer local (`:b` prefix), and the buffer local
|
||||||
|
will take precedence over the global `g:` counterpart.
|
||||||
|
|
||||||
|
*g:rustc_path*
|
||||||
|
g:rustc_path~
|
||||||
|
Set this option to the path to rustc for use in the |:RustRun| and
|
||||||
|
|:RustExpand| commands. If unset, "rustc" will be located in $PATH: >
|
||||||
|
let g:rustc_path = $HOME."/bin/rustc"
|
||||||
|
<
|
||||||
|
|
||||||
|
*g:rustc_makeprg_no_percent*
|
||||||
|
g:rustc_makeprg_no_percent~
|
||||||
|
Set this option to 1 to have 'makeprg' default to "rustc" instead of
|
||||||
|
"rustc %": >
|
||||||
|
let g:rustc_makeprg_no_percent = 1
|
||||||
|
<
|
||||||
|
|
||||||
|
*g:rust_conceal*
|
||||||
|
g:rust_conceal~
|
||||||
|
Set this option to turn on the basic |conceal| support: >
|
||||||
|
let g:rust_conceal = 1
|
||||||
|
<
|
||||||
|
|
||||||
|
*g:rust_conceal_mod_path*
|
||||||
|
g:rust_conceal_mod_path~
|
||||||
|
Set this option to turn on |conceal| for the path connecting token
|
||||||
|
"::": >
|
||||||
|
let g:rust_conceal_mod_path = 1
|
||||||
|
<
|
||||||
|
|
||||||
|
*g:rust_conceal_pub*
|
||||||
|
g:rust_conceal_pub~
|
||||||
|
Set this option to turn on |conceal| for the "pub" token: >
|
||||||
|
let g:rust_conceal_pub = 1
|
||||||
|
<
|
||||||
|
|
||||||
|
*g:rust_recommended_style*
|
||||||
|
g:rust_recommended_style~
|
||||||
|
Set this option to enable vim indentation and textwidth settings to
|
||||||
|
conform to style conventions of the rust standard library (i.e. use 4
|
||||||
|
spaces for indents and sets 'textwidth' to 99). This option is enabled
|
||||||
|
by default. To disable it: >
|
||||||
|
let g:rust_recommended_style = 0
|
||||||
|
<
|
||||||
|
|
||||||
|
*g:rust_fold*
|
||||||
|
g:rust_fold~
|
||||||
|
Set this option to turn on |folding|: >
|
||||||
|
let g:rust_fold = 1
|
||||||
|
<
|
||||||
|
Value Effect ~
|
||||||
|
0 No folding
|
||||||
|
1 Braced blocks are folded. All folds are open by
|
||||||
|
default.
|
||||||
|
2 Braced blocks are folded. 'foldlevel' is left at the
|
||||||
|
global value (all folds are closed by default).
|
||||||
|
|
||||||
|
*g:rust_bang_comment_leader*
|
||||||
|
g:rust_bang_comment_leader~
|
||||||
|
Set this option to 1 to preserve the leader on multi-line doc comments
|
||||||
|
using the /*! syntax: >
|
||||||
|
let g:rust_bang_comment_leader = 1
|
||||||
|
<
|
||||||
|
|
||||||
|
*g:rust_use_custom_ctags_defs*
|
||||||
|
g:rust_use_custom_ctags_defs~
|
||||||
|
Set this option to 1 if you have customized ctags definitions for Rust
|
||||||
|
and do not wish for those included with rust.vim to be used: >
|
||||||
|
let g:rust_use_custom_ctags_defs = 1
|
||||||
|
<
|
||||||
|
|
||||||
|
NOTE: rust.vim's built-in definitions are only used for the Tagbar Vim
|
||||||
|
plugin, if you have it installed, AND if Universal Ctags is not
|
||||||
|
detected. This is because Universal Ctags already has built-in
|
||||||
|
support for Rust when used with Tagbar.
|
||||||
|
|
||||||
|
Also, note that when using ctags other than Universal Ctags, it is not
|
||||||
|
automatically used when generating |tags| files that Vim can use to
|
||||||
|
navigate to definitions across different source files. Feel free to
|
||||||
|
copy `rust.vim/ctags/rust.ctags` into your own `~/.ctags` if you wish
|
||||||
|
to generate |tags| files.
|
||||||
|
|
||||||
|
|
||||||
|
*g:ftplugin_rust_source_path*
|
||||||
|
g:ftplugin_rust_source_path~
|
||||||
|
Set this option to a path that should be prepended to 'path' for Rust
|
||||||
|
source files: >
|
||||||
|
let g:ftplugin_rust_source_path = $HOME.'/dev/rust'
|
||||||
|
<
|
||||||
|
|
||||||
|
*g:rustfmt_command*
|
||||||
|
g:rustfmt_command~
|
||||||
|
Set this option to the name of the 'rustfmt' executable in your $PATH. If
|
||||||
|
not specified it defaults to 'rustfmt' : >
|
||||||
|
let g:rustfmt_command = 'rustfmt'
|
||||||
|
<
|
||||||
|
*g:rustfmt_autosave*
|
||||||
|
g:rustfmt_autosave~
|
||||||
|
Set this option to 1 to run |:RustFmt| automatically when saving a
|
||||||
|
buffer. If not specified it defaults to 0 : >
|
||||||
|
let g:rustfmt_autosave = 0
|
||||||
|
<
|
||||||
|
There is also a buffer-local b:rustfmt_autosave that can be set for
|
||||||
|
the same purpose, and can override the global setting.
|
||||||
|
|
||||||
|
*g:rustfmt_autosave_if_config_present*
|
||||||
|
g:rustfmt_autosave_if_config_present~
|
||||||
|
Set this option to 1 to have *b:rustfmt_autosave* be set automatically
|
||||||
|
if a `rustfmt.toml` file is present in any parent directly leading to
|
||||||
|
the file being edited. If not set, default to 0: >
|
||||||
|
let g:rustfmt_autosave_if_config_present = 0
|
||||||
|
<
|
||||||
|
This is useful to have `rustfmt` only execute on save, on projects
|
||||||
|
that have `rustfmt.toml` configuration.
|
||||||
|
|
||||||
|
There is also a buffer-local b:rustfmt_autosave_if_config_present
|
||||||
|
that can be set for the same purpose, which can overrides the global
|
||||||
|
setting.
|
||||||
|
*g:rustfmt_fail_silently*
|
||||||
|
g:rustfmt_fail_silently~
|
||||||
|
Set this option to 1 to prevent 'rustfmt' from populating the
|
||||||
|
|location-list| with errors. If not specified it defaults to 0: >
|
||||||
|
let g:rustfmt_fail_silently = 0
|
||||||
|
<
|
||||||
|
*g:rustfmt_options*
|
||||||
|
g:rustfmt_options~
|
||||||
|
Set this option to a string of options to pass to 'rustfmt'. The
|
||||||
|
write-mode is already set to 'overwrite'. If not specified it
|
||||||
|
defaults to '' : >
|
||||||
|
let g:rustfmt_options = ''
|
||||||
|
<
|
||||||
|
*g:rustfmt_emit_files*
|
||||||
|
g:rustfmt_emit_files~
|
||||||
|
If not specified rust.vim tries to detect the right parameter to
|
||||||
|
pass to rustfmt based on its reported version. Otherwise, it
|
||||||
|
determines whether to run rustfmt with '--emit=files' (when 1 is
|
||||||
|
provided) instead of '--write-mode=overwrite'. >
|
||||||
|
let g:rustfmt_emit_files = 0
|
||||||
|
|
||||||
|
|
||||||
|
*g:rust_playpen_url*
|
||||||
|
g:rust_playpen_url~
|
||||||
|
Set this option to override the url for the playpen to use: >
|
||||||
|
let g:rust_playpen_url = 'https://play.rust-lang.org/'
|
||||||
|
<
|
||||||
|
|
||||||
|
*g:rust_shortener_url*
|
||||||
|
g:rust_shortener_url~
|
||||||
|
Set this option to override the url for the url shortener: >
|
||||||
|
let g:rust_shortener_url = 'https://is.gd/'
|
||||||
|
<
|
||||||
|
|
||||||
|
*g:rust_clip_command*
|
||||||
|
g:rust_clip_command~
|
||||||
|
Set this option to the command used in your OS to copy the Rust Play
|
||||||
|
url to the clipboard: >
|
||||||
|
let g:rust_clip_command = 'xclip -selection clipboard'
|
||||||
|
<
|
||||||
|
|
||||||
|
*g:cargo_makeprg_params*
|
||||||
|
g:cargo_makeprg_params~
|
||||||
|
Set this option to the string of parameters to pass to cargo. If not
|
||||||
|
specified it defaults to '$*' : >
|
||||||
|
let g:cargo_makeprg_params = 'build'
|
||||||
|
<
|
||||||
|
|
||||||
|
*g:cargo_shell_command_runner*
|
||||||
|
g:cargo_shell_command_runner~
|
||||||
|
Set this option to change how to run shell commands for cargo commands
|
||||||
|
|:Cargo|, |:Cbuild|, |:Crun|, ...
|
||||||
|
By default, |:terminal| is used to run shell command in terminal window
|
||||||
|
asynchronously. But if you prefer |:!| for running the commands, it can
|
||||||
|
be specified: >
|
||||||
|
let g:cargo_shell_command_runner = '!'
|
||||||
|
<
|
||||||
|
|
||||||
|
|
||||||
|
Integration with Syntastic *rust-syntastic*
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
This plugin automatically integrates with the Syntastic checker. There are two
|
||||||
|
checkers provided: 'rustc', and 'cargo'. The latter invokes 'Cargo' in order to
|
||||||
|
build code, and the former delivers a single edited '.rs' file as a compilation
|
||||||
|
target directly to the Rust compiler, `rustc`.
|
||||||
|
|
||||||
|
Because Cargo is almost exclusively being used for building Rust code these
|
||||||
|
days, 'cargo' is the default checker. >
|
||||||
|
|
||||||
|
let g:syntastic_rust_checkers = ['cargo']
|
||||||
|
<
|
||||||
|
If you would like to change it, you can set `g:syntastic_rust_checkers` to a
|
||||||
|
different value.
|
||||||
|
*g:rust_cargo_avoid_whole_workspace*
|
||||||
|
*b:rust_cargo_avoid_whole_workspace*
|
||||||
|
g:rust_cargo_avoid_whole_workspace~
|
||||||
|
When editing a crate that is part of a Cargo workspace, and this
|
||||||
|
option is set to 1 (the default), then 'cargo' will be executed
|
||||||
|
directly in that crate directory instead of in the workspace
|
||||||
|
directory. Setting 0 prevents this behavior - however be aware that if
|
||||||
|
you are working in large workspace, Cargo commands may take more time,
|
||||||
|
plus the Syntastic error list may include all the crates in the
|
||||||
|
workspace. >
|
||||||
|
let g:rust_cargo_avoid_whole_workspace = 0
|
||||||
|
<
|
||||||
|
*g:rust_cargo_check_all_targets*
|
||||||
|
*b:rust_cargo_check_all_targets*
|
||||||
|
g:rust_cargo_check_all_targets~
|
||||||
|
When set to 1, the `--all-targets` option will be passed to cargo when
|
||||||
|
Syntastic executes it, allowing the linting of all targets under the
|
||||||
|
package.
|
||||||
|
The default is 0.
|
||||||
|
|
||||||
|
*g:rust_cargo_check_all_features*
|
||||||
|
*b:rust_cargo_check_all_features*
|
||||||
|
g:rust_cargo_check_all_features~
|
||||||
|
When set to 1, the `--all-features` option will be passed to cargo when
|
||||||
|
Syntastic executes it, allowing the linting of all features of the
|
||||||
|
package.
|
||||||
|
The default is 0.
|
||||||
|
|
||||||
|
*g:rust_cargo_check_examples*
|
||||||
|
*b:rust_cargo_check_examples*
|
||||||
|
g:rust_cargo_check_examples~
|
||||||
|
When set to 1, the `--examples` option will be passed to cargo when
|
||||||
|
Syntastic executes it, to prevent the exclusion of examples from
|
||||||
|
linting. The examples are normally under the `examples/` directory of
|
||||||
|
the crate.
|
||||||
|
The default is 0.
|
||||||
|
|
||||||
|
*g:rust_cargo_check_tests*
|
||||||
|
*b:rust_cargo_check_tests*
|
||||||
|
g:rust_cargo_check_tests~
|
||||||
|
When set to 1, the `--tests` option will be passed to cargo when
|
||||||
|
Syntastic executes it, to prevent the exclusion of tests from linting.
|
||||||
|
The tests are normally under the `tests/` directory of the crate.
|
||||||
|
The default is 0.
|
||||||
|
|
||||||
|
*g:rust_cargo_check_benches*
|
||||||
|
*b:rust_cargo_check_benches*
|
||||||
|
g:rust_cargo_check_benches~
|
||||||
|
When set to 1, the `--benches` option will be passed to cargo when
|
||||||
|
Syntastic executes it. The benches are normally under the `benches/`
|
||||||
|
directory of the crate.
|
||||||
|
The default is 0.
|
||||||
|
|
||||||
|
Integration with auto-pairs *rust-auto-pairs*
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
This plugin automatically configures the auto-pairs plugin not to duplicate
|
||||||
|
single quotes, which are used more often for lifetime annotations than for
|
||||||
|
single character literals.
|
||||||
|
|
||||||
|
*g:rust_keep_autopairs_default*
|
||||||
|
g:rust_keep_autopairs_default~
|
||||||
|
|
||||||
|
Don't override auto-pairs default for the Rust filetype. The default
|
||||||
|
is 0.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
COMMANDS *rust-commands*
|
||||||
|
|
||||||
|
Invoking Cargo
|
||||||
|
--------------
|
||||||
|
|
||||||
|
This plug defines very simple shortcuts for invoking Cargo from with Vim.
|
||||||
|
|
||||||
|
:Cargo <args> *:Cargo*
|
||||||
|
Runs 'cargo' with the provided arguments.
|
||||||
|
|
||||||
|
:Cbuild <args> *:Cbuild*
|
||||||
|
Shortcut for 'cargo build`.
|
||||||
|
|
||||||
|
:Cclean <args> *:Cclean*
|
||||||
|
Shortcut for 'cargo clean`.
|
||||||
|
|
||||||
|
:Cdoc <args> *:Cdoc*
|
||||||
|
Shortcut for 'cargo doc`.
|
||||||
|
|
||||||
|
:Cinit <args> *:Cinit*
|
||||||
|
Shortcut for 'cargo init`.
|
||||||
|
|
||||||
|
:Crun <args> *:Crun*
|
||||||
|
Shortcut for 'cargo run`.
|
||||||
|
|
||||||
|
:Ctest <args> *:Ctest*
|
||||||
|
Shortcut for 'cargo test`.
|
||||||
|
|
||||||
|
:Cupdate <args> *:Cupdate*
|
||||||
|
Shortcut for 'cargo update`.
|
||||||
|
|
||||||
|
:Cbench <args> *:Cbench*
|
||||||
|
Shortcut for 'cargo bench`.
|
||||||
|
|
||||||
|
:Csearch <args> *:Csearch*
|
||||||
|
Shortcut for 'cargo search`.
|
||||||
|
|
||||||
|
:Cpublish <args> *:Cpublish*
|
||||||
|
Shortcut for 'cargo publish`.
|
||||||
|
|
||||||
|
:Cinstall <args> *:Cinstall*
|
||||||
|
Shortcut for 'cargo install`.
|
||||||
|
|
||||||
|
:Cruntarget <args> *:Cruntarget*
|
||||||
|
Shortcut for 'cargo run --bin' or 'cargo run --example',
|
||||||
|
depending on the currently open buffer.
|
||||||
|
|
||||||
|
Formatting
|
||||||
|
----------
|
||||||
|
|
||||||
|
:RustFmt *:RustFmt*
|
||||||
|
Runs |g:rustfmt_command| on the current buffer. If
|
||||||
|
|g:rustfmt_options| is set then those will be passed to the
|
||||||
|
executable.
|
||||||
|
|
||||||
|
If |g:rustfmt_fail_silently| is 0 (the default) then it
|
||||||
|
will populate the |location-list| with the errors from
|
||||||
|
|g:rustfmt_command|. If |g:rustfmt_fail_silently| is set to 1
|
||||||
|
then it will not populate the |location-list|.
|
||||||
|
|
||||||
|
:RustFmtRange *:RustFmtRange*
|
||||||
|
Runs |g:rustfmt_command| with selected range. See
|
||||||
|
|:RustFmt| for any other information.
|
||||||
|
|
||||||
|
|
||||||
|
Playpen integration
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
:RustPlay *:RustPlay*
|
||||||
|
This command will only work if you have web-api.vim installed
|
||||||
|
(available at https://github.com/mattn/webapi-vim). It sends the
|
||||||
|
current selection, or if nothing is selected, the entirety of the
|
||||||
|
current buffer to the Rust playpen, and emits a message with the
|
||||||
|
shortened URL to the playpen.
|
||||||
|
|
||||||
|
|g:rust_playpen_url| is the base URL to the playpen, by default
|
||||||
|
"https://play.rust-lang.org/".
|
||||||
|
|
||||||
|
|g:rust_shortener_url| is the base url for the shorterner, by
|
||||||
|
default "https://is.gd/"
|
||||||
|
|
||||||
|
|g:rust_clip_command| is the command to run to copy the
|
||||||
|
playpen url to the clipboard of your system.
|
||||||
|
|
||||||
|
|
||||||
|
Evaluation of a single Rust file
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
NOTE: These commands are useful only when working with standalone Rust files,
|
||||||
|
which is usually not the case for common Rust development. If you wish to
|
||||||
|
building Rust crates from with Vim can should use Vim's make, Syntastic, or
|
||||||
|
functionality from other plugins.
|
||||||
|
|
||||||
|
|
||||||
|
:RustRun [args] *:RustRun*
|
||||||
|
:RustRun! [rustc-args] [--] [args]
|
||||||
|
Compiles and runs the current file. If it has unsaved changes,
|
||||||
|
it will be saved first using |:update|. If the current file is
|
||||||
|
an unnamed buffer, it will be written to a temporary file
|
||||||
|
first. The compiled binary is always placed in a temporary
|
||||||
|
directory, but is run from the current directory.
|
||||||
|
|
||||||
|
The arguments given to |:RustRun| will be passed to the
|
||||||
|
compiled binary.
|
||||||
|
|
||||||
|
If ! is specified, the arguments are passed to rustc instead.
|
||||||
|
A "--" argument will separate the rustc arguments from the
|
||||||
|
arguments passed to the binary.
|
||||||
|
|
||||||
|
If |g:rustc_path| is defined, it is used as the path to rustc.
|
||||||
|
Otherwise it is assumed rustc can be found in $PATH.
|
||||||
|
|
||||||
|
:RustExpand [args] *:RustExpand*
|
||||||
|
:RustExpand! [TYPE] [args]
|
||||||
|
Expands the current file using --pretty and displays the
|
||||||
|
results in a new split. If the current file has unsaved
|
||||||
|
changes, it will be saved first using |:update|. If the
|
||||||
|
current file is an unnamed buffer, it will be written to a
|
||||||
|
temporary file first.
|
||||||
|
|
||||||
|
The arguments given to |:RustExpand| will be passed to rustc.
|
||||||
|
This is largely intended for specifying various --cfg
|
||||||
|
configurations.
|
||||||
|
|
||||||
|
If ! is specified, the first argument is the expansion type to
|
||||||
|
pass to rustc --pretty. Otherwise it will default to
|
||||||
|
"expanded".
|
||||||
|
|
||||||
|
If |g:rustc_path| is defined, it is used as the path to rustc.
|
||||||
|
Otherwise it is assumed rustc can be found in $PATH.
|
||||||
|
|
||||||
|
:RustEmitIr [args] *:RustEmitIr*
|
||||||
|
Compiles the current file to LLVM IR and displays the results
|
||||||
|
in a new split. If the current file has unsaved changes, it
|
||||||
|
will be saved first using |:update|. If the current file is an
|
||||||
|
unnamed buffer, it will be written to a temporary file first.
|
||||||
|
|
||||||
|
The arguments given to |:RustEmitIr| will be passed to rustc.
|
||||||
|
|
||||||
|
If |g:rustc_path| is defined, it is used as the path to rustc.
|
||||||
|
Otherwise it is assumed rustc can be found in $PATH.
|
||||||
|
|
||||||
|
:RustEmitAsm [args] *:RustEmitAsm*
|
||||||
|
Compiles the current file to assembly and displays the results
|
||||||
|
in a new split. If the current file has unsaved changes, it
|
||||||
|
will be saved first using |:update|. If the current file is an
|
||||||
|
unnamed buffer, it will be written to a temporary file first.
|
||||||
|
|
||||||
|
The arguments given to |:RustEmitAsm| will be passed to rustc.
|
||||||
|
|
||||||
|
If |g:rustc_path| is defined, it is used as the path to rustc.
|
||||||
|
Otherwise it is assumed rustc can be found in $PATH.
|
||||||
|
|
||||||
|
|
||||||
|
Running test(s)
|
||||||
|
---------------
|
||||||
|
|
||||||
|
:[N]RustTest[!] [options] *:RustTest*
|
||||||
|
Runs a test under the cursor when the current buffer is in a
|
||||||
|
cargo project with "cargo test" command. If the command did
|
||||||
|
not find any test function under the cursor, it stops with an
|
||||||
|
error message.
|
||||||
|
|
||||||
|
When N is given, adjust the size of the new window to N lines
|
||||||
|
or columns.
|
||||||
|
|
||||||
|
When ! is given, runs all tests regardless of current cursor
|
||||||
|
position.
|
||||||
|
|
||||||
|
When [options] is given, it is passed to "cargo" command
|
||||||
|
arguments.
|
||||||
|
|
||||||
|
When the current buffer is outside cargo project, the command
|
||||||
|
runs "rustc --test" command instead of "cargo test" as
|
||||||
|
fallback. All tests are run regardless of adding ! since there
|
||||||
|
is no way to run specific test function with rustc. [options]
|
||||||
|
is passed to "rustc" command arguments in the case.
|
||||||
|
|
||||||
|
Takes optional modifiers (see |<mods>|): >
|
||||||
|
:tab RustTest
|
||||||
|
:belowright 16RustTest
|
||||||
|
:leftabove vert 80RustTest
|
||||||
|
<
|
||||||
|
rust.vim Debugging
|
||||||
|
------------------
|
||||||
|
|
||||||
|
:RustInfo *:RustInfo*
|
||||||
|
Emits debugging info of the Vim Rust plugin.
|
||||||
|
|
||||||
|
:RustInfoToClipboard *:RustInfoClipboard*
|
||||||
|
Saves debugging info of the Vim Rust plugin to the default
|
||||||
|
register.
|
||||||
|
|
||||||
|
:RustInfoToFile [filename] *:RustInfoToFile*
|
||||||
|
Saves debugging info of the Vim Rust plugin to the the given
|
||||||
|
file, overwritting it.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
MAPPINGS *rust-mappings*
|
||||||
|
|
||||||
|
This plugin defines mappings for |[[| and |]]| to support hanging indents.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
vim:tw=78:sw=4:noet:ts=8:ft=help:norl:
|
||||||
|
|
||||||
|
endif
|
||||||
137
doc/scala.txt
Normal file
137
doc/scala.txt
Normal file
@@ -0,0 +1,137 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'scala') == -1
|
||||||
|
|
||||||
|
*scala.txt* Syntax highlighting and helper functions for the Scala language.
|
||||||
|
|
||||||
|
This plugin is only available if 'compatible' is not set.
|
||||||
|
{Vi does not have any of this}
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
INTRODUCTION *scala*
|
||||||
|
|
||||||
|
Syntax highlighting and helper functions for the scala language. Extras
|
||||||
|
include:
|
||||||
|
|
||||||
|
- Sorting of import statements, configurable to your conventions.
|
||||||
|
- Tagbar support to navigate definitions within a file in the plugin's
|
||||||
|
sidebar window.
|
||||||
|
- ...and probably more that we've forgotten to update in this doc.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
OPTIONS *scala-options*
|
||||||
|
|
||||||
|
Use these options to control behavior of the plugin. Default values are
|
||||||
|
indicated in the examples.
|
||||||
|
|
||||||
|
*'g:scala_use_builtin_tagbar_defs'*
|
||||||
|
If you are using the Tagbar Vim plugin, vim-scala includes a Tagbar type
|
||||||
|
definition and ctags definition for Scala, so you can use Tagbar immediately.
|
||||||
|
If you have your own ctags definition in `~/.ctags` and prefer to use it, set
|
||||||
|
this option to 0 (we would appreciate contributions if you've improved the
|
||||||
|
ctags definition!).
|
||||||
|
|
||||||
|
Note that Tagbar's ctags definition for Scala is not used to generate a
|
||||||
|
|tags| file that Vim can use to navigate to definitions in other files, only
|
||||||
|
for the plugin sidebar. Feel free to copy `vim-scala/ctags/scala.ctags` into
|
||||||
|
your own `~/.ctags` if you wish to generate |tags| files.
|
||||||
|
>
|
||||||
|
let g:scala_use_builtin_tagbar_defs = 1
|
||||||
|
<
|
||||||
|
*'g:scala_use_default_keymappings'*
|
||||||
|
Set this option to disable definition of all mappings provided by vim-scala.
|
||||||
|
See |scala-mappings|.
|
||||||
|
>
|
||||||
|
let g:scala_use_default_keymappings = 1
|
||||||
|
<
|
||||||
|
|
||||||
|
*'g:scala_scaladoc_indent'*
|
||||||
|
By default, the plugin indents documentation comments according to the
|
||||||
|
standard Javadoc format.
|
||||||
|
/**
|
||||||
|
* This is a doc comment using Javadoc-style indentation.
|
||||||
|
*/
|
||||||
|
Set this option to enable the indentation standard as recommended for Scaladoc
|
||||||
|
comments.
|
||||||
|
/** This is a Scaladoc comment using
|
||||||
|
* the recommended indentation.
|
||||||
|
*/
|
||||||
|
>
|
||||||
|
let g:scala_scaladoc_indent = 1
|
||||||
|
<
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
COMMANDS *scala-commands*
|
||||||
|
|
||||||
|
*:SortScalaImports*
|
||||||
|
:SortScalaImports There are two modes in which this command can operate.
|
||||||
|
By default it walks all import groups at the top of
|
||||||
|
the Scala file and orders their lines alphabetically.
|
||||||
|
A group is a series of lines starting with the
|
||||||
|
import keyword separated by one or more blank lines.
|
||||||
|
|
||||||
|
The second, more advanced mode, can be activated by
|
||||||
|
setting
|
||||||
|
|
||||||
|
let g:scala_sort_across_groups=1
|
||||||
|
|
||||||
|
This makes this command include all imports in the
|
||||||
|
sorting regardless of blank lines in between them and
|
||||||
|
puts them in three predefined groups instead.
|
||||||
|
The three groups in which the imports can fall are:
|
||||||
|
|
||||||
|
1. Scala and Java core
|
||||||
|
2. Third party libraries
|
||||||
|
3. First party code (ie. your own)
|
||||||
|
|
||||||
|
Java and Scala core imports are identified by the
|
||||||
|
java(x) and scala namespaces.
|
||||||
|
Everything else that isn't a first party namespace
|
||||||
|
will be a third party import.
|
||||||
|
You can define a regex that matches first party
|
||||||
|
namespaces by setting
|
||||||
|
|
||||||
|
g:scala_first_party_namespaces
|
||||||
|
|
||||||
|
For example in a standard Play app this would be
|
||||||
|
set to
|
||||||
|
g:scala_first_party_namespaces=
|
||||||
|
\ '\(controllers\|views\|models\)'
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
MAPPINGS *scala-mappings*
|
||||||
|
|
||||||
|
Currently the only mappings defined are for FuzzyFinder users--these will
|
||||||
|
only be enabled if FuzzyFinder is detected.
|
||||||
|
|
||||||
|
*scala-leader-fs*
|
||||||
|
<Leader>fs "Find src". Primes |:FufFile| with `src/main/scala`,
|
||||||
|
and goes deeper still if only a single directory
|
||||||
|
exists below that. Helpful for package namespacing
|
||||||
|
like `src/main/scala/com/myorg`.
|
||||||
|
|
||||||
|
*scala-leader-ft*
|
||||||
|
<Leader>ft "Find test". Like |scala-leader-fs|, but with
|
||||||
|
`src/test/scala`.
|
||||||
|
|
||||||
|
*scala-leader-fr*
|
||||||
|
<Leader>fr "Find from root". For the rarer cases when you want to
|
||||||
|
start FuzzyFinder at project root (parent of `src/`).
|
||||||
|
|
||||||
|
Disabling Mappings~
|
||||||
|
|
||||||
|
If you wish to disable the default key mappings, write the following line in
|
||||||
|
your ~/.vimrc: >
|
||||||
|
|
||||||
|
let g:scala_use_default_keymappings = 0
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
CREDITS *scala-credits*
|
||||||
|
|
||||||
|
Developed by Derek Wyatt, building on initial work by Stefan Matthias Aust.
|
||||||
|
Distributed under the Apache 2 license.
|
||||||
|
|
||||||
|
Project's home and Git repository: https://github.com/derekwyatt/vim-scala
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
vim:tw=78:ts=8:ft=help:norl:
|
||||||
|
|
||||||
|
endif
|
||||||
18
doc/terraform.txt
Normal file
18
doc/terraform.txt
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'terraform') == -1
|
||||||
|
|
||||||
|
*terraform.txt* basic vim/terraform integration
|
||||||
|
|
||||||
|
Author: HashiVim <https://github.com/hashivim>
|
||||||
|
License: ISC license
|
||||||
|
Repo: https://github.com/hashivim/vim-terraform
|
||||||
|
|
||||||
|
COMMANDS *terraform*
|
||||||
|
|
||||||
|
This command is only available if terraform is in your PATH.
|
||||||
|
|
||||||
|
*terraform-:terraform*
|
||||||
|
:Terraform [args] Invoke an arbitrary terraform command.
|
||||||
|
|
||||||
|
vim:tw=78:et:ft=help:norl:
|
||||||
|
|
||||||
|
endif
|
||||||
70
doc/textile.txt
Normal file
70
doc/textile.txt
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'textile') == -1
|
||||||
|
|
||||||
|
*textile.txt* Textile for Vim Last Change: November 3, 2008
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
REQUIREMENTS *textile-requirements*
|
||||||
|
|
||||||
|
- ruby - http://ruby-lang.org/ (seperate executable, not compiled in)
|
||||||
|
- RedCloth - http://redcloth.org/
|
||||||
|
|
||||||
|
Files with the extension *.textile will auto-detected. If editing a new file,
|
||||||
|
or otherwise, run ":setf textile" to enable textile commands.
|
||||||
|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
CHANGELOG *textile-changelog*
|
||||||
|
|
||||||
|
0.3 - Fixed keymappings in the documentation
|
||||||
|
0.2 - Added multiple colors for headers, and alternating colors for list
|
||||||
|
items
|
||||||
|
- Fixed error in the vim script for TextileRenderBufferToFile
|
||||||
|
- Changed shortcut keys from \tp to \rp (render preview instead of
|
||||||
|
textile preview, since it's file-type specific anyways)
|
||||||
|
0.1 - Initial Release
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
COMMANDS *textile-commands*
|
||||||
|
|
||||||
|
:TextilePreview - Render the current buffer to a temp file, and open it in
|
||||||
|
your web browser (OSX only)
|
||||||
|
|
||||||
|
<Leader>rp
|
||||||
|
|
||||||
|
:TextileRenderTab - ... to a new tab
|
||||||
|
|
||||||
|
<Leader>rt
|
||||||
|
|
||||||
|
:TextileRenderFile - ... to a file
|
||||||
|
|
||||||
|
<Leader>rf
|
||||||
|
|
||||||
|
<Leader> is \ by default, so <Leader>rp == \rp
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
CONFIG *textile-config*
|
||||||
|
|
||||||
|
MAC OS X:
|
||||||
|
|
||||||
|
Optional:
|
||||||
|
let g:TextileBrowser="Google Chrome" - Open preview in "Google Chrome"
|
||||||
|
rather than Safari (optional)
|
||||||
|
|
||||||
|
Other:
|
||||||
|
|
||||||
|
Mandatory:
|
||||||
|
let g:TextileOS="Linux"
|
||||||
|
let g:TextileBrowser="/path/to/browser_bin"
|
||||||
|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
CREDITS *textile-credits*
|
||||||
|
|
||||||
|
- "Dominic Mitchell":http://happygiraffe.net/: initial syntax highlighting
|
||||||
|
- "Aaron Bieber":http://blog.aaronbieber.com/: improved syntax highlighting
|
||||||
|
- "Tim Harper":http://tim.theenchanter.com/ : improved syntax highlighting,
|
||||||
|
plugin
|
||||||
|
|
||||||
|
vim:tw=78:noet:wrap:ts=2:expandtab:ft=help:norl:
|
||||||
|
|
||||||
|
endif
|
||||||
210
doc/vim-fsharp.txt
Normal file
210
doc/vim-fsharp.txt
Normal file
@@ -0,0 +1,210 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'fsharp') == -1
|
||||||
|
|
||||||
|
*vim-fsharp.txt* F# support for Vim
|
||||||
|
*FSharp* *F#* *fsharp* *vim-fsharp*
|
||||||
|
===============================================================================
|
||||||
|
# #
|
||||||
|
# ███████╗███████╗██╗ ██╗ █████╗ ██████╗ ██████╗ #
|
||||||
|
# ██╔════╝██╔════╝██║ ██║██╔══██╗██╔══██╗██╔══██╗ #
|
||||||
|
# █████╗ ███████╗███████║███████║██████╔╝██████╔╝ #
|
||||||
|
# ██╔══╝ ╚════██║██╔══██║██╔══██║██╔══██╗██╔═══╝ #
|
||||||
|
# ██║ ███████║██║ ██║██║ ██║██║ ██║██║ #
|
||||||
|
# ╚═╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ #
|
||||||
|
# #
|
||||||
|
===============================================================================
|
||||||
|
CONTENTS *fsharp-contents*
|
||||||
|
|
||||||
|
1. Dependencies.................................|fsharp-dependencies|
|
||||||
|
2. Usage........................................|fsharp-usage|
|
||||||
|
3. Options......................................|fsharp-options|
|
||||||
|
4. Commands.....................................|fsharp-commands|
|
||||||
|
5. Mappings.....................................|fsharp-mappings|
|
||||||
|
6. Credits......................................|fsharp-credits|
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
DEPENDENCIES *fsharp-dependencies*
|
||||||
|
|
||||||
|
Required:~
|
||||||
|
- Vim 7.3 or higher with Python 2 or 3 support
|
||||||
|
- Mono OR .NET Framework
|
||||||
|
- F#
|
||||||
|
|
||||||
|
Optional:~
|
||||||
|
- Syntastic plugin (for syntax and type checking)
|
||||||
|
NOTE: Must be enabled (see |'g:syntastic_fsharp_checkers'|)
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
USAGE *fsharp-usage*
|
||||||
|
|
||||||
|
Syntax highlighting and linting will trigger upon opening a `*.fs`, `*.fsi`,
|
||||||
|
or `*.fsx` file. Using omni completion will begin the fsautocomplete process.
|
||||||
|
|
||||||
|
Suggestion: Install a completer such as NeoComplete or SuperTab
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
OPTIONS *fsharp-options*
|
||||||
|
|
||||||
|
*'g:syntastic_fsharp_checkers'*
|
||||||
|
Use this option to enable syntastic integration >
|
||||||
|
let g:syntastic_fsharp_checkers=['syntax']
|
||||||
|
<
|
||||||
|
*'g:fsharp_only_check_errors_on_write'*
|
||||||
|
Use this option to disable "on the fly" syntax checking >
|
||||||
|
let g:fsharp_only_check_errors_on_write = 1
|
||||||
|
<
|
||||||
|
*'g:fsharpbinding_debug'*
|
||||||
|
Use this option to enable debug-mode and inspect fsautocomplete behavior: >
|
||||||
|
let g:fsharpbinding_debug = 1
|
||||||
|
<
|
||||||
|
This will create two log files `log.txt` and `log2.txt` in your temporary folder
|
||||||
|
(i.e. `/tmp/`)
|
||||||
|
|
||||||
|
*'g:fsharp_xbuild_path'*
|
||||||
|
Use this option set the msbuild/xbuild path >
|
||||||
|
let g:fsharp_xbuild_path = "/path/to/xbuild/or/msbuild"
|
||||||
|
<
|
||||||
|
|
||||||
|
*'g:fsharp_test_runner'*
|
||||||
|
Use this option to point to a suitable test runner (such as nunit-console.exe) >
|
||||||
|
let g:fsharp_test_runner = "/path/to/test/runner"
|
||||||
|
<
|
||||||
|
|
||||||
|
*'g:fsharp_completion_helptext'*
|
||||||
|
Use this option to disable helptext during auto completion. Turn off if
|
||||||
|
completion is too slow >
|
||||||
|
let g:fsharp_completion_helptext = 0
|
||||||
|
<
|
||||||
|
|
||||||
|
*'g:fsharp_map_keys'*
|
||||||
|
Use this option to disable default bindings >
|
||||||
|
let g:fsharp_map_keys = 0
|
||||||
|
<
|
||||||
|
|
||||||
|
*'g:fsharp_map_prefix'*
|
||||||
|
Use this option to override the default prefix of `<leader>` >
|
||||||
|
let g:fsharp_map_prefix = 'cp'
|
||||||
|
<
|
||||||
|
Set to `cp` in this example
|
||||||
|
|
||||||
|
*'g:fsharp_map_fsisendline'*
|
||||||
|
Use this option to override the default mapping to send the current line to
|
||||||
|
fsharp interactive >
|
||||||
|
let g:fsharp_map_fsisendline = 'p'
|
||||||
|
<
|
||||||
|
Set to `p` in this example
|
||||||
|
|
||||||
|
*'g:fsharp_map_fsisendsel'*
|
||||||
|
Use this option to override the default mapping to send the current selection
|
||||||
|
to fsharp interactive >
|
||||||
|
let g:fsharp_map_fsisendsel = 'p'
|
||||||
|
<
|
||||||
|
Set to `p` in this example
|
||||||
|
|
||||||
|
*'g:fsharp_map_gotodecl'*
|
||||||
|
Use this option to override the default mapping to go to declaration in the
|
||||||
|
current window >
|
||||||
|
let g:fsharp_map_gotodecl = 'g'
|
||||||
|
<
|
||||||
|
Set to `g` in this example
|
||||||
|
|
||||||
|
*'g:fsharp_map_gobackfromdecl'*
|
||||||
|
Use this option to override the default mapping to go back to where go to
|
||||||
|
declaration was triggered >
|
||||||
|
let g:fsharp_map_gobackfromdecl = 'b'
|
||||||
|
<
|
||||||
|
Set to `b` in this example
|
||||||
|
|
||||||
|
*'g:fsharp_map_fsiinput'*
|
||||||
|
Override the default mapping to evaluate an fsharp expression in the fsi >
|
||||||
|
let g:fsharp_map_fsiinput = 'i'
|
||||||
|
<
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
COMMANDS *fsharp-commands*
|
||||||
|
|
||||||
|
General commands:~
|
||||||
|
*:make*
|
||||||
|
:make
|
||||||
|
Calls xbuild on the fsproj for the current file (if any).
|
||||||
|
|
||||||
|
*:FSharpParseProject*
|
||||||
|
:FSharpParseProject
|
||||||
|
Reparses all the project files and dependencies (this is done automatically
|
||||||
|
when opening a .fs or .fsi file).
|
||||||
|
|
||||||
|
*:FSharpBuildProject*
|
||||||
|
:FSharpBuildProject
|
||||||
|
Calls xbuild on the fsproj for the current file (if any). Can also take a
|
||||||
|
path to the proj file to build.
|
||||||
|
|
||||||
|
*:FSharpRunProject*
|
||||||
|
:FSharpRunProject
|
||||||
|
Runs the project for the current file (if any).
|
||||||
|
|
||||||
|
*:FSharpRunTests*
|
||||||
|
:FSharpRunTests
|
||||||
|
If `g:fsharp_test_runner` is set it will build the current project and run
|
||||||
|
any tests. (Currently only tested with nunit-console.exe)
|
||||||
|
|
||||||
|
*:FSharpToggleHelptext*
|
||||||
|
:FSharpToggleHelptext
|
||||||
|
toggles g:fsharp_completion_helptext. (See below for details)
|
||||||
|
|
||||||
|
FSharp interaction commands:~
|
||||||
|
|
||||||
|
`:FsiEval`
|
||||||
|
:FsiEval
|
||||||
|
Evaluates an fsharp expression in the fsi
|
||||||
|
|
||||||
|
`:FsiEvalBuffer`
|
||||||
|
:FsiEvalBuffer
|
||||||
|
Evaluates the entire buffer in the fsi
|
||||||
|
|
||||||
|
`:FsiReset`
|
||||||
|
:FsiReset
|
||||||
|
Resets the current fsharp interactive
|
||||||
|
|
||||||
|
`:FsiRead`
|
||||||
|
:FsiRead
|
||||||
|
Outputs any lines written by the fsi but not yet output as vim messages
|
||||||
|
|
||||||
|
`:FsiClear`
|
||||||
|
:FsiClear
|
||||||
|
Deletes all text from the fsi output buffer but doesn't reset the fsi
|
||||||
|
session.
|
||||||
|
|
||||||
|
`:FsiShow`
|
||||||
|
:FsiShow
|
||||||
|
Opens the _fsi-out_ buffer in a split window
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
MAPPINGS *fsharp-mappings*
|
||||||
|
|
||||||
|
General:~
|
||||||
|
|
||||||
|
<leader>t
|
||||||
|
Echoes the type of the expression currently pointed to by the cursor
|
||||||
|
<leader>d
|
||||||
|
Go to declaration in current window
|
||||||
|
<leader>s
|
||||||
|
Takes you back from where go to declaration was triggered. Experimental
|
||||||
|
|
||||||
|
FSharp Interactive:~
|
||||||
|
<A-CR> OR
|
||||||
|
<leader>i
|
||||||
|
Send either the current selection or the current line to the fsharp
|
||||||
|
interactive and echoes the output the first line of the output. All
|
||||||
|
output will be written to the fsi-out buffer.
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
CREDITS *fsharp-credits*
|
||||||
|
|
||||||
|
Syntax and indent files by kongo2002 <github.com/kongo2002>:
|
||||||
|
http://github.com/kongo2002/fsharp-vim
|
||||||
|
|
||||||
|
Adapted from Tim Robinson <github.com/timrobinson>:
|
||||||
|
http://github.com/timrobinson/fsharp-vim
|
||||||
|
>
|
||||||
|
===============================================================================
|
||||||
|
|
||||||
|
endif
|
||||||
2734
doc/vim-go.txt
Normal file
2734
doc/vim-go.txt
Normal file
File diff suppressed because it is too large
Load Diff
104
doc/vim-jsonnet.txt
Normal file
104
doc/vim-jsonnet.txt
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'jsonnet') == -1
|
||||||
|
|
||||||
|
*vim-jsonnet.txt* Jsonnet development plugin
|
||||||
|
*vim-jsonnet*
|
||||||
|
|
||||||
|
====================================================================================
|
||||||
|
# # ### # # # ##### ####### # # # # ####### #######
|
||||||
|
# # # ## ## # # # # # ## # ## # # #
|
||||||
|
# # # # # # # # # # # # # # # # # # #
|
||||||
|
# # # # # # ##### # ##### # # # # # # # # ##### #
|
||||||
|
# # # # # # # # # # # # # # # # # #
|
||||||
|
# # # # # # # # # # # # ## # ## # #
|
||||||
|
# ### # # ##### ##### ####### # # # # ####### #
|
||||||
|
====================================================================================
|
||||||
|
CONTENTS *jsonnet-contents*
|
||||||
|
|
||||||
|
1. Intro........................................|jsonnet-intro|
|
||||||
|
2. Install......................................|jsonnet-install|
|
||||||
|
3. Commands.....................................|jsonnet-commands|
|
||||||
|
4. Mappings.....................................|jsonnet-mappings|
|
||||||
|
6. Functions....................................|jsonnet-functions|
|
||||||
|
7. Settings.....................................|jsonnet-settings|
|
||||||
|
8. Troubleshooting..............................|jsonnet-troubleshooting|
|
||||||
|
9. Credits......................................|jsonnet-credits|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
INTRO *jsonnet-intro*
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
INSTALL *jsonnet-install*
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
COMMANDS *jsonnet-commands*
|
||||||
|
|
||||||
|
*:JsonnetFmt*
|
||||||
|
:JsonnetFmt
|
||||||
|
|
||||||
|
Filter the current Jsonnet buffer through `jsonnetfmt`. It tries to
|
||||||
|
preserve cursor position and avoids replacing the buffer with stderr
|
||||||
|
output.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
MAPPINGS *jsonnet-mappings*
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
FUNCTIONS *jsonnet-functions*
|
||||||
|
|
||||||
|
*jsonnet#Format()*
|
||||||
|
|
||||||
|
Filter the current Jsonnet buffer through `jsonnetfmt`. It tries to
|
||||||
|
preserve cursor position and avoids replacing the buffer with stderr
|
||||||
|
output.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
SETTINGS *jsonnet-settings*
|
||||||
|
|
||||||
|
*'g:jsonnet_fmt_on_save'*
|
||||||
|
|
||||||
|
Use this option to auto |:JsonnetFmt| on save. By default it's enabled >
|
||||||
|
|
||||||
|
let g:jsonnet_fmt_on_save = 1
|
||||||
|
<
|
||||||
|
*'g:jsonnet_command'*
|
||||||
|
|
||||||
|
Use this option to define which tool is used to fotmat. By default `jsonnet` is
|
||||||
|
used >
|
||||||
|
|
||||||
|
let g:jsonnet_command = "jsonnet"
|
||||||
|
<
|
||||||
|
*'g:jsonnet_fmt_command'*
|
||||||
|
|
||||||
|
Use this option to define which <cmd> parameter is used with *g:jsonnet_command* tool.
|
||||||
|
By default `fmt` is used >
|
||||||
|
|
||||||
|
let g:jsonnet_fmt_command = "fmt"
|
||||||
|
<
|
||||||
|
*'g:jsonnet_fmt_options'*
|
||||||
|
|
||||||
|
Use this option to add additional options to the
|
||||||
|
|'g:jsonnet_command'| + |'g:jsonnet_fmt_command'|. Default is empty. >
|
||||||
|
|
||||||
|
let g:jsonnet_fmt_options = ''
|
||||||
|
<
|
||||||
|
*'g:jsonnet_fmt_fail_silently'*
|
||||||
|
|
||||||
|
Use this option to enable processing of
|
||||||
|
|'g:jsonnet_command'| + |'g:jsonnet_fmt_command'| command if it fails. By default
|
||||||
|
it is turned off. By default the error output from the
|
||||||
|
|'g:jsonnet_command'| + |'g:jsonnet_fmt_command'| command is ignored.
|
||||||
|
FixMe: The processing of the |'g:jsonnet_command'| + |'g:jsonnet_fmt_command'|
|
||||||
|
is not implemented yet. So clearing this option would not do anything at this time. >
|
||||||
|
|
||||||
|
let g:jsonnet_fmt_fail_silently = 1
|
||||||
|
<
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
TROUBLESHOOTING *jsonnet-troubleshooting*
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
CREDITS *jsonnet-credits*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
endif
|
||||||
128
doc/vim-jsx-pretty-doc.txt
Normal file
128
doc/vim-jsx-pretty-doc.txt
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || !(index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'jsx') != -1)
|
||||||
|
|
||||||
|
vim-jsx-pretty is syntax highlight for JSX (React.js).
|
||||||
|
(https://github.com/MaxMEllon/vim-jsx-pretty)
|
||||||
|
|
||||||
|
version 1.0.6
|
||||||
|
Author: maxmellon<maxmellon1994@gmail.com>
|
||||||
|
License: MIT
|
||||||
|
|
||||||
|
About |vim-jsx-pretty-about|
|
||||||
|
Usage |vim-jsx-pretty-usage|
|
||||||
|
Install |vim-jsx-pretty-install|
|
||||||
|
Config |vim-jsx-pretty-config|
|
||||||
|
Detail |vim-jsx-pretty-detail|
|
||||||
|
License |vim-jsx-pretty-license|
|
||||||
|
Thanks |vim-jsx-retty-thanks|
|
||||||
|
Inspiration |vim-jsx-pretty-inspiration|
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
ABOUT *vim-jsx-pretty-about*
|
||||||
|
|
||||||
|
*vim-jsx-pretty* is highlight and indentation JSX (React.js) syntax.
|
||||||
|
|
||||||
|
Dependency Plugin:
|
||||||
|
- pangloss/vim-javascript
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
USAGE *vim-jsx-pretty-usage*
|
||||||
|
|
||||||
|
Just Install it.
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
INSTALL *vim-jsx-pretty-install*
|
||||||
|
|
||||||
|
If you used plugin manager `vim-plug`, As follows. >
|
||||||
|
|
||||||
|
Plug 'pangloss/vim-javascript' " dependency plugin
|
||||||
|
Plug 'maxmellon/vim-jsx-pretty'
|
||||||
|
<
|
||||||
|
===============================================================================
|
||||||
|
CONFIG *vim-jsx-pretty-config*
|
||||||
|
|
||||||
|
- config list
|
||||||
|
>
|
||||||
|
| name | default | detail |
|
||||||
|
|---------------------------------------|---------|----------------------|
|
||||||
|
| g:vim_jsx_pretty_enable_jsx_highlight | 1 | jsx highlight flag |
|
||||||
|
| g:vim_jsx_pretty_colorful_config | 0 | colorful config flag |
|
||||||
|
<
|
||||||
|
|
||||||
|
- *g:vim_jsx_pretty_enable_jsx_highlight*
|
||||||
|
|
||||||
|
If you set 'g:vim_jsx_pretty_enable_jsx_highlight', Disable jsx highlight.
|
||||||
|
But highlight group is set to jsx syntax. So you should set manual
|
||||||
|
highlight setting.
|
||||||
|
|
||||||
|
- Example: >
|
||||||
|
|
||||||
|
let g:vim_jsx_pretty_enable_jsx_highlight = 0
|
||||||
|
|
||||||
|
highlight def link jsxTag Function
|
||||||
|
highlight def link jsxTagName Function
|
||||||
|
highlight def link jsxString String
|
||||||
|
highlight def link jsxNameSpace Function
|
||||||
|
highlight def link jsxComment Error
|
||||||
|
highlight def link jsxAttrib Type
|
||||||
|
highlight def link jsxCloseTag Identifier
|
||||||
|
highlight def link jsxCloseString Identifier
|
||||||
|
|
||||||
|
- *g:vim_jsx_pretty_colorful_config*
|
||||||
|
|
||||||
|
If you set 'g:vim_jsx_pretty_colorful_config', Enable colorful config.
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
DETAIL *vim-jsx-pretty-detail*
|
||||||
|
|
||||||
|
- Syntax group list
|
||||||
|
>
|
||||||
|
| name | match | | |
|
||||||
|
|--------------|--------------------|--------------|--------------------|
|
||||||
|
| jsxTag | `<tag id="sample">`| jsxjsxAttrib | `<tag id="sample">`|
|
||||||
|
| | `~~~~~~~~~~~~~~~~~`| | `_____~~__________`|
|
||||||
|
|--------------|--------------------|--------------|--------------------|
|
||||||
|
| jsxTagName | `<tag id="sample">`| jsxEqual | `<tag id="sample">`|
|
||||||
|
| | `_~~~_____________`| | `_______~_________`|
|
||||||
|
|--------------|--------------------|--------------|--------------------|
|
||||||
|
| jsxString | `<tag id="sample">`| jsxCloseTag | `</tag> | <tag />`|
|
||||||
|
| | `________~~~~~~~~_`| | `~~~~~~ | _____~~|
|
||||||
|
|--------------|--------------------|--------------|--------------------|
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
LICENSE *vim-jsx-pretty-license*
|
||||||
|
|
||||||
|
Copyright (c) 2016-2017 MaxMEllon
|
||||||
|
MIT License
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
THANKS *vim-jsx-pretty-thanks*
|
||||||
|
|
||||||
|
- yuezk
|
||||||
|
- y0za
|
||||||
|
- cormacrelf
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
INSPIREATION *vim-jsx-pretty-inspiration*
|
||||||
|
|
||||||
|
- vim-jsx
|
||||||
|
See: https://github.com/mxw/vim-jsx
|
||||||
|
|
||||||
|
vim:tw=78:ts=8:ft=help:norl:
|
||||||
|
|
||||||
|
endif
|
||||||
667
doc/vim-markdown.txt
Normal file
667
doc/vim-markdown.txt
Normal file
@@ -0,0 +1,667 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'markdown') == -1
|
||||||
|
|
||||||
|
*vim-markdown* Vim Markdown
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
Contents ~
|
||||||
|
|
||||||
|
1. Introduction |vim-markdown-introduction|
|
||||||
|
2. Installation |vim-markdown-installation|
|
||||||
|
3. Basic usage |vim-markdown-basic-usage|
|
||||||
|
1. Folding |vim-markdown-folding|
|
||||||
|
2. Concealing |vim-markdown-concealing|
|
||||||
|
4. Options |vim-markdown-options|
|
||||||
|
1. Disable Folding |vim-markdown-disable-folding|
|
||||||
|
2. Change fold style |vim-markdown-change-fold-style|
|
||||||
|
3. Set header folding level |vim-markdown-set-header-folding-level|
|
||||||
|
4. Disable Default Key Mappings |vim-markdown-disable-default-key-mappings|
|
||||||
|
5. Enable TOC window auto-fit |vim-markdown-enable-toc-window-auto-fit|
|
||||||
|
6. Text emphasis restriction to single-lines
|
||||||
|
|vim-markdown-text-emphasis-restriction-to-single-lines|
|
||||||
|
7. Syntax Concealing |vim-markdown-syntax-concealing|
|
||||||
|
8. Fenced code block languages |vim-markdown-fenced-code-block-languages|
|
||||||
|
9. Follow named anchors |vim-markdown-follow-named-anchors|
|
||||||
|
10. Syntax extensions |vim-markdown-syntax-extensions|
|
||||||
|
1. LaTeX math |vim-markdown-latex-math|
|
||||||
|
2. YAML Front Matter |vim-markdown-yaml-front-matter|
|
||||||
|
3. TOML Front Matter |vim-markdown-toml-front-matter|
|
||||||
|
4. JSON Front Matter |vim-markdown-json-front-matter|
|
||||||
|
5. Strikethrough |vim-markdown-strikethrough|
|
||||||
|
11. Adjust new list item indent |vim-markdown-adjust-new-list-item-indent|
|
||||||
|
12. Do not require .md extensions for Markdown links
|
||||||
|
|vim-markdown-do-not-require-.md-extensions-for-markdown-links|
|
||||||
|
13. Auto-write when following link
|
||||||
|
|vim-markdown-auto-write-when-following-link|
|
||||||
|
14. Change default file extension
|
||||||
|
|vim-markdown-change-default-file-extension|
|
||||||
|
15. Do not automatically insert bulletpoints
|
||||||
|
|vim-markdown-do-not-automatically-insert-bulletpoints|
|
||||||
|
16. Change how to open new files |vim-markdown-change-how-to-open-new-files|
|
||||||
|
5. Mappings |vim-markdown-mappings|
|
||||||
|
6. Commands |vim-markdown-commands|
|
||||||
|
7. Credits |vim-markdown-credits|
|
||||||
|
8. License |vim-markdown-license|
|
||||||
|
9. References |vim-markdown-references|
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
*vim-markdown-introduction*
|
||||||
|
Introduction ~
|
||||||
|
|
||||||
|
Syntax highlighting, matching rules and mappings for the original Markdown [1]
|
||||||
|
and extensions.
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
*vim-markdown-installation*
|
||||||
|
Installation ~
|
||||||
|
|
||||||
|
If you use Vundle [2], add the following lines to your '~/.vimrc':
|
||||||
|
>
|
||||||
|
Plugin 'godlygeek/tabular'
|
||||||
|
Plugin 'plasticboy/vim-markdown'
|
||||||
|
<
|
||||||
|
The 'tabular' plugin must come _before_ 'vim-markdown'.
|
||||||
|
|
||||||
|
Then run inside Vim:
|
||||||
|
>
|
||||||
|
:so ~/.vimrc
|
||||||
|
:PluginInstall
|
||||||
|
<
|
||||||
|
If you use Pathogen [3], do this:
|
||||||
|
>
|
||||||
|
cd ~/.vim/bundle
|
||||||
|
git clone https://github.com/plasticboy/vim-markdown.git
|
||||||
|
<
|
||||||
|
To install without Pathogen using the Debian vim-addon-manager [4], do this:
|
||||||
|
>
|
||||||
|
git clone https://github.com/plasticboy/vim-markdown.git
|
||||||
|
cd vim-markdown
|
||||||
|
sudo make install
|
||||||
|
vim-addon-manager install markdown
|
||||||
|
<
|
||||||
|
If you are not using any package manager, download the tarball [5] and do this:
|
||||||
|
>
|
||||||
|
cd ~/.vim
|
||||||
|
tar --strip=1 -zxf vim-markdown-master.tar.gz
|
||||||
|
<
|
||||||
|
===============================================================================
|
||||||
|
*vim-markdown-basic-usage*
|
||||||
|
Basic usage ~
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
*vim-markdown-folding*
|
||||||
|
Folding ~
|
||||||
|
|
||||||
|
Folding is enabled for headers by default.
|
||||||
|
|
||||||
|
The following commands are useful to open and close folds:
|
||||||
|
|
||||||
|
*vim-markdown-zr*
|
||||||
|
- 'zr': reduces fold level throughout the buffer
|
||||||
|
*vim-markdown-zR*
|
||||||
|
- 'zR': opens all folds
|
||||||
|
*vim-markdown-zm*
|
||||||
|
- 'zm': increases fold level throughout the buffer
|
||||||
|
*vim-markdown-zM*
|
||||||
|
- 'zM': folds everything all the way
|
||||||
|
*vim-markdown-za*
|
||||||
|
- 'za': open a fold your cursor is on
|
||||||
|
*vim-markdown-zA*
|
||||||
|
- 'zA': open a fold your cursor is on recursively
|
||||||
|
*vim-markdown-zc*
|
||||||
|
- 'zc': close a fold your cursor is on
|
||||||
|
*vim-markdown-zC*
|
||||||
|
- 'zC': close a fold your cursor is on recursively
|
||||||
|
|
||||||
|
Options are available to disable folding or change folding style.
|
||||||
|
|
||||||
|
Try ':help fold-expr' and ':help fold-commands' for details.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
*vim-markdown-concealing*
|
||||||
|
Concealing ~
|
||||||
|
|
||||||
|
Concealing is set for some syntax such as bold, italic, code block and link.
|
||||||
|
|
||||||
|
Concealing lets you conceal text with other text. The actual source text is not
|
||||||
|
modified. If you put your cursor on the concealed line, the conceal goes away.
|
||||||
|
|
||||||
|
Options are available to disable or change concealing.
|
||||||
|
|
||||||
|
Try ':help concealcursor' and ':help conceallevel' for details.
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
*vim-markdown-options*
|
||||||
|
Options ~
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
*vim-markdown-disable-folding*
|
||||||
|
Disable Folding ~
|
||||||
|
|
||||||
|
*g:vim_markdown_folding_disabled*
|
||||||
|
- 'g:vim_markdown_folding_disabled'
|
||||||
|
|
||||||
|
Add the following line to your '.vimrc' to disable the folding
|
||||||
|
configuration:
|
||||||
|
>
|
||||||
|
let g:vim_markdown_folding_disabled = 1
|
||||||
|
<
|
||||||
|
This option only controls Vim Markdown specific folding configuration.
|
||||||
|
|
||||||
|
To enable/disable folding use Vim's standard folding configuration.
|
||||||
|
>
|
||||||
|
set [no]foldenable
|
||||||
|
<
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
*vim-markdown-change-fold-style*
|
||||||
|
Change fold style ~
|
||||||
|
|
||||||
|
*g:vim_markdown_folding_style_pythonic*
|
||||||
|
- 'g:vim_markdown_folding_style_pythonic'
|
||||||
|
|
||||||
|
To fold in a style like python-mode [6], add the following to your
|
||||||
|
'.vimrc':
|
||||||
|
>
|
||||||
|
let g:vim_markdown_folding_style_pythonic = 1
|
||||||
|
<
|
||||||
|
'g:vim_markdown_folding_level' setting (default 1) is set to 'foldlevel'.
|
||||||
|
Thus level 1 heading which is served as a document title is expanded by
|
||||||
|
default.
|
||||||
|
|
||||||
|
*g:vim_markdown_override_foldtext*
|
||||||
|
- 'g:vim_markdown_override_foldtext'
|
||||||
|
|
||||||
|
To prevent foldtext from being set add the following to your '.vimrc':
|
||||||
|
>
|
||||||
|
let g:vim_markdown_override_foldtext = 0
|
||||||
|
<
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
*vim-markdown-set-header-folding-level*
|
||||||
|
Set header folding level ~
|
||||||
|
|
||||||
|
*g:vim_markdown_folding_level*
|
||||||
|
- 'g:vim_markdown_folding_level'
|
||||||
|
|
||||||
|
Folding level is a number between 1 and 6. By default, if not specified, it
|
||||||
|
is set to 1.
|
||||||
|
>
|
||||||
|
let g:vim_markdown_folding_level = 6
|
||||||
|
<
|
||||||
|
Tip: it can be changed on the fly with:
|
||||||
|
>
|
||||||
|
:let g:vim_markdown_folding_level = 1
|
||||||
|
:edit
|
||||||
|
<
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
*vim-markdown-disable-default-key-mappings*
|
||||||
|
Disable Default Key Mappings ~
|
||||||
|
|
||||||
|
*g:vim_markdown_no_default_key_mappings*
|
||||||
|
- 'g:vim_markdown_no_default_key_mappings'
|
||||||
|
|
||||||
|
Add the following line to your '.vimrc' to disable default key mappings:
|
||||||
|
>
|
||||||
|
let g:vim_markdown_no_default_key_mappings = 1
|
||||||
|
<
|
||||||
|
You can also map them by yourself with '<Plug>' mappings.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
*vim-markdown-enable-toc-window-auto-fit*
|
||||||
|
Enable TOC window auto-fit ~
|
||||||
|
|
||||||
|
*g:vim_markdown_toc_autofit*
|
||||||
|
- 'g:vim_markdown_toc_autofit'
|
||||||
|
|
||||||
|
Allow for the TOC window to auto-fit when it's possible for it to shrink.
|
||||||
|
It never increases its default size (half screen), it only shrinks.
|
||||||
|
>
|
||||||
|
let g:vim_markdown_toc_autofit = 1
|
||||||
|
<
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
*vim-markdown-text-emphasis-restriction-to-single-lines*
|
||||||
|
Text emphasis restriction to single-lines ~
|
||||||
|
|
||||||
|
*g:vim_markdown_emphasis_multiline*
|
||||||
|
- 'g:vim_markdown_emphasis_multiline'
|
||||||
|
|
||||||
|
By default text emphasis works across multiple lines until a closing token
|
||||||
|
is found. However, it's possible to restrict text emphasis to a single line
|
||||||
|
(i.e., for it to be applied a closing token must be found on the same
|
||||||
|
line). To do so:
|
||||||
|
>
|
||||||
|
let g:vim_markdown_emphasis_multiline = 0
|
||||||
|
<
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
*vim-markdown-syntax-concealing*
|
||||||
|
Syntax Concealing ~
|
||||||
|
|
||||||
|
*g:vim_markdown_conceal*
|
||||||
|
- 'g:vim_markdown_conceal'
|
||||||
|
|
||||||
|
Concealing is set for some syntax.
|
||||||
|
|
||||||
|
For example, conceal '[link text](link url)' as just 'link text'. Also,
|
||||||
|
'_italic_' and '*italic*' will conceal to just _italic_. Similarly
|
||||||
|
'__bold__', '**bold**', '___italic bold___', and '***italic bold***' will
|
||||||
|
conceal to just **bold**, **bold**, **_italic bold_**, and **_italic
|
||||||
|
bold_** respectively.
|
||||||
|
|
||||||
|
To enable conceal use Vim's standard conceal configuration.
|
||||||
|
>
|
||||||
|
set conceallevel=2
|
||||||
|
<
|
||||||
|
To disable conceal regardless of 'conceallevel' setting, add the following
|
||||||
|
to your '.vimrc':
|
||||||
|
>
|
||||||
|
let g:vim_markdown_conceal = 0
|
||||||
|
<
|
||||||
|
To disable math conceal with LaTeX math syntax enabled, add the following
|
||||||
|
to your '.vimrc':
|
||||||
|
>
|
||||||
|
let g:tex_conceal = ""
|
||||||
|
let g:vim_markdown_math = 1
|
||||||
|
<
|
||||||
|
*g:vim_markdown_conceal_code_blocks*
|
||||||
|
- 'g:vim_markdown_conceal_code_blocks'
|
||||||
|
|
||||||
|
Disabling conceal for code fences requires an additional setting:
|
||||||
|
>
|
||||||
|
let g:vim_markdown_conceal_code_blocks = 0
|
||||||
|
<
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
*vim-markdown-fenced-code-block-languages*
|
||||||
|
Fenced code block languages ~
|
||||||
|
|
||||||
|
*g:vim_markdown_fenced_languages*
|
||||||
|
- 'g:vim_markdown_fenced_languages'
|
||||||
|
|
||||||
|
You can use filetype name as fenced code block languages for syntax
|
||||||
|
highlighting. If you want to use different name from filetype, you can add
|
||||||
|
it in your '.vimrc' like so:
|
||||||
|
>
|
||||||
|
let g:vim_markdown_fenced_languages = ['csharp=cs']
|
||||||
|
<
|
||||||
|
This will cause the following to be highlighted using the 'cs' filetype
|
||||||
|
syntax.
|
||||||
|
>
|
||||||
|
```csharp
|
||||||
|
...
|
||||||
|
```
|
||||||
|
<
|
||||||
|
Default is "['c++=cpp', 'viml=vim', 'bash=sh', 'ini=dosini']".
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
*vim-markdown-follow-named-anchors*
|
||||||
|
Follow named anchors ~
|
||||||
|
|
||||||
|
*g:vim_markdown_follow_anchor*
|
||||||
|
- 'g:vim_markdown_follow_anchor'
|
||||||
|
|
||||||
|
This feature allows the 'ge' command to follow named anchors in links of
|
||||||
|
the form 'file#anchor' or just '#anchor', where file may omit the '.md'
|
||||||
|
extension as usual. Two variables control its operation:
|
||||||
|
>
|
||||||
|
let g:vim_markdown_follow_anchor = 1
|
||||||
|
<
|
||||||
|
This tells vim-markdown whether to attempt to follow a named anchor in a
|
||||||
|
link or not. When it is 1, and only if a link can be split in two parts by
|
||||||
|
the pattern '#', then the first part is interpreted as the file and the
|
||||||
|
second one as the named anchor. This also includes urls of the form
|
||||||
|
'#anchor', for which the first part is considered empty, meaning that the
|
||||||
|
target file is the current one. After the file is opened, the anchor will
|
||||||
|
be searched.
|
||||||
|
|
||||||
|
Default is '0'.
|
||||||
|
|
||||||
|
*g:vim_markdown_anchorexpr*
|
||||||
|
- 'g:vim_markdown_anchorexpr'
|
||||||
|
>
|
||||||
|
let g:vim_markdown_anchorexpr = "'<<'.v:anchor.'>>'"
|
||||||
|
<
|
||||||
|
This expression will be evaluated substituting 'v:anchor' with a quoted
|
||||||
|
string that contains the anchor to visit. The result of the evaluation will
|
||||||
|
become the real anchor to search in the target file. This is useful in
|
||||||
|
order to convert anchors of the form, say, 'my-section-title' to searches
|
||||||
|
of the form 'My Section Title' or '<<my-section-title>>'.
|
||||||
|
|
||||||
|
Default is "''".
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
*vim-markdown-syntax-extensions*
|
||||||
|
Syntax extensions ~
|
||||||
|
|
||||||
|
The following options control which syntax extensions will be turned on. They
|
||||||
|
are off by default.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
*vim-markdown-latex-math*
|
||||||
|
LaTeX math ~
|
||||||
|
|
||||||
|
*g:vim_markdown_math*
|
||||||
|
- 'g:vim_markdown_math'
|
||||||
|
|
||||||
|
Used as '$x^2$', '$$x^2$$', escapable as '\$x\$' and '\$\$x\$\$'.
|
||||||
|
>
|
||||||
|
let g:vim_markdown_math = 1
|
||||||
|
<
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
*vim-markdown-yaml-front-matter*
|
||||||
|
YAML Front Matter ~
|
||||||
|
|
||||||
|
*g:vim_markdown_frontmatter*
|
||||||
|
- 'g:vim_markdown_frontmatter'
|
||||||
|
|
||||||
|
Highlight YAML front matter as used by Jekyll or Hugo [7].
|
||||||
|
>
|
||||||
|
let g:vim_markdown_frontmatter = 1
|
||||||
|
<
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
*vim-markdown-toml-front-matter*
|
||||||
|
TOML Front Matter ~
|
||||||
|
|
||||||
|
*g:vim_markdown_toml_frontmatter*
|
||||||
|
- 'g:vim_markdown_toml_frontmatter'
|
||||||
|
|
||||||
|
Highlight TOML front matter as used by Hugo [7].
|
||||||
|
|
||||||
|
TOML syntax highlight requires vim-toml [8].
|
||||||
|
>
|
||||||
|
let g:vim_markdown_toml_frontmatter = 1
|
||||||
|
<
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
*vim-markdown-json-front-matter*
|
||||||
|
JSON Front Matter ~
|
||||||
|
|
||||||
|
*g:vim_markdown_json_frontmatter*
|
||||||
|
- 'g:vim_markdown_json_frontmatter'
|
||||||
|
|
||||||
|
Highlight JSON front matter as used by Hugo [7].
|
||||||
|
|
||||||
|
JSON syntax highlight requires vim-json [9].
|
||||||
|
>
|
||||||
|
let g:vim_markdown_json_frontmatter = 1
|
||||||
|
<
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
*vim-markdown-strikethrough*
|
||||||
|
Strikethrough ~
|
||||||
|
|
||||||
|
*g:vim_markdown_strikethrough*
|
||||||
|
- 'g:vim_markdown_strikethrough'
|
||||||
|
|
||||||
|
Strikethrough uses two tildes. '~~Scratch this.~~'
|
||||||
|
>
|
||||||
|
let g:vim_markdown_strikethrough = 1
|
||||||
|
<
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
*vim-markdown-adjust-new-list-item-indent*
|
||||||
|
Adjust new list item indent ~
|
||||||
|
|
||||||
|
*g:vim_markdown_new_list_item_indent*
|
||||||
|
- 'g:vim_markdown_new_list_item_indent'
|
||||||
|
|
||||||
|
You can adjust a new list indent. For example, you insert a single line
|
||||||
|
like below:
|
||||||
|
>
|
||||||
|
* item1
|
||||||
|
<
|
||||||
|
Then if you type 'o' to insert new line in vim and type '* item2', the
|
||||||
|
result will be:
|
||||||
|
>
|
||||||
|
* item1
|
||||||
|
* item2
|
||||||
|
<
|
||||||
|
vim-markdown automatically insert the indent. By default, the number of
|
||||||
|
spaces of indent is 4. If you'd like to change the number as 2, just write:
|
||||||
|
>
|
||||||
|
let g:vim_markdown_new_list_item_indent = 2
|
||||||
|
<
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
*vim-markdown-do-not-require-.md-extensions-for-markdown-links*
|
||||||
|
Do not require .md extensions for Markdown links ~
|
||||||
|
|
||||||
|
*g:vim_markdown_no_extensions_in_markdown*
|
||||||
|
- 'g:vim_markdown_no_extensions_in_markdown'
|
||||||
|
|
||||||
|
If you want to have a link like this '[link text](link-url)' and follow it
|
||||||
|
for editing in vim using the 'ge' command, but have it open the file "link-
|
||||||
|
url.md" instead of the file "link-url", then use this option:
|
||||||
|
>
|
||||||
|
let g:vim_markdown_no_extensions_in_markdown = 1
|
||||||
|
<
|
||||||
|
This is super useful for GitLab and GitHub wiki repositories.
|
||||||
|
|
||||||
|
Normal behaviour would be that vim-markup required you to do this '[link
|
||||||
|
text](link-url.md)', but this is not how the Gitlab and GitHub wiki
|
||||||
|
repositories work. So this option adds some consistency between the two.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
*vim-markdown-auto-write-when-following-link*
|
||||||
|
Auto-write when following link ~
|
||||||
|
|
||||||
|
*g:vim_markdown_autowrite*
|
||||||
|
- 'g:vim_markdown_autowrite'
|
||||||
|
|
||||||
|
If you follow a link like this '[link text](link-url)' using the 'ge'
|
||||||
|
shortcut, this option will automatically save any edits you made before
|
||||||
|
moving you:
|
||||||
|
>
|
||||||
|
let g:vim_markdown_autowrite = 1
|
||||||
|
<
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
*vim-markdown-change-default-file-extension*
|
||||||
|
Change default file extension ~
|
||||||
|
|
||||||
|
*g:vim_markdown_auto_extension_ext*
|
||||||
|
- 'g:vim_markdown_auto_extension_ext'
|
||||||
|
|
||||||
|
If you would like to use a file extension other than '.md' you may do so
|
||||||
|
using the 'vim_markdown_auto_extension_ext' variable:
|
||||||
|
>
|
||||||
|
let g:vim_markdown_auto_extension_ext = 'txt'
|
||||||
|
<
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
*vim-markdown-do-not-automatically-insert-bulletpoints*
|
||||||
|
Do not automatically insert bulletpoints ~
|
||||||
|
|
||||||
|
*g:vim_markdown_auto_insert_bullets*
|
||||||
|
- 'g:vim_markdown_auto_insert_bullets'
|
||||||
|
|
||||||
|
Automatically inserting bulletpoints can lead to problems when wrapping
|
||||||
|
text (see issue #232 for details), so it can be disabled:
|
||||||
|
>
|
||||||
|
let g:vim_markdown_auto_insert_bullets = 0
|
||||||
|
<
|
||||||
|
In that case, you probably also want to set the new list item indent to 0
|
||||||
|
as well, or you will have to remove an indent each time you add a new list
|
||||||
|
item:
|
||||||
|
>
|
||||||
|
let g:vim_markdown_new_list_item_indent = 0
|
||||||
|
<
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
*vim-markdown-change-how-to-open-new-files*
|
||||||
|
Change how to open new files ~
|
||||||
|
|
||||||
|
*g:vim_markdown_edit_url_in*
|
||||||
|
- 'g:vim_markdown_edit_url_in'
|
||||||
|
|
||||||
|
By default when following a link the target file will be opened in your
|
||||||
|
current buffer. This behavior can change if you prefer using splits or tabs
|
||||||
|
by using the 'vim_markdown_edit_url_in' variable. Possible values are
|
||||||
|
'tab', 'vsplit', 'hsplit', 'current' opening in a new tab, vertical split,
|
||||||
|
horizontal split, and current buffer respectively. Defaults to current
|
||||||
|
buffer if not set:
|
||||||
|
>
|
||||||
|
let g:vim_markdown_edit_url_in = 'tab'
|
||||||
|
<
|
||||||
|
===============================================================================
|
||||||
|
*vim-markdown-mappings*
|
||||||
|
Mappings ~
|
||||||
|
|
||||||
|
The following work on normal and visual modes:
|
||||||
|
|
||||||
|
*vim-markdown-gx*
|
||||||
|
- 'gx': open the link under the cursor in the same browser as the standard
|
||||||
|
'gx' command. '<Plug>Markdown_OpenUrlUnderCursor'
|
||||||
|
|
||||||
|
The standard 'gx' is extended by allowing you to put your cursor anywhere
|
||||||
|
inside a link.
|
||||||
|
|
||||||
|
For example, all the following cursor positions will work:
|
||||||
|
>
|
||||||
|
[Example](http://example.com)
|
||||||
|
^ ^ ^^ ^ ^
|
||||||
|
1 2 34 5 6
|
||||||
|
|
||||||
|
<http://example.com>
|
||||||
|
^ ^ ^
|
||||||
|
1 2 3
|
||||||
|
<
|
||||||
|
Known limitation: does not work for links that span multiple lines.
|
||||||
|
|
||||||
|
*vim-markdown-ge*
|
||||||
|
- 'ge': open the link under the cursor in Vim for editing. Useful for
|
||||||
|
relative markdown links. '<Plug>Markdown_EditUrlUnderCursor'
|
||||||
|
|
||||||
|
The rules for the cursor position are the same as the 'gx' command.
|
||||||
|
|
||||||
|
*vim-markdown-]]*
|
||||||
|
- ']]': go to next header. '<Plug>Markdown_MoveToNextHeader'
|
||||||
|
|
||||||
|
*vim-markdown-[[*
|
||||||
|
- '[[': go to previous header. Contrast with ']c'.
|
||||||
|
'<Plug>Markdown_MoveToPreviousHeader'
|
||||||
|
|
||||||
|
*vim-markdown-][*
|
||||||
|
- '][': go to next sibling header if any.
|
||||||
|
'<Plug>Markdown_MoveToNextSiblingHeader'
|
||||||
|
|
||||||
|
*vim-markdown-[]*
|
||||||
|
- '[]': go to previous sibling header if any.
|
||||||
|
'<Plug>Markdown_MoveToPreviousSiblingHeader'
|
||||||
|
|
||||||
|
*vim-markdown-]c*
|
||||||
|
- ']c': go to Current header. '<Plug>Markdown_MoveToCurHeader'
|
||||||
|
|
||||||
|
*vim-markdown-]u*
|
||||||
|
- ']u': go to parent header (Up). '<Plug>Markdown_MoveToParentHeader'
|
||||||
|
|
||||||
|
This plugin follows the recommended Vim plugin mapping interface, so to change
|
||||||
|
the map ']u' to 'asdf', add to your '.vimrc':
|
||||||
|
>
|
||||||
|
map asdf <Plug>Markdown_MoveToParentHeader
|
||||||
|
<
|
||||||
|
To disable a map use:
|
||||||
|
>
|
||||||
|
map <Plug> <Plug>Markdown_MoveToParentHeader
|
||||||
|
<
|
||||||
|
===============================================================================
|
||||||
|
*vim-markdown-commands*
|
||||||
|
Commands ~
|
||||||
|
|
||||||
|
The following requires ':filetype plugin on'.
|
||||||
|
|
||||||
|
*:HeaderDecrease*
|
||||||
|
- ':HeaderDecrease':
|
||||||
|
|
||||||
|
Decrease level of all headers in buffer: 'h2' to 'h1', 'h3' to 'h2', etc.
|
||||||
|
|
||||||
|
If range is given, only operate in the range.
|
||||||
|
|
||||||
|
If an 'h1' would be decreased, abort.
|
||||||
|
|
||||||
|
For simplicity of implementation, Setex headers are converted to Atx.
|
||||||
|
|
||||||
|
*:HeaderIncrease*
|
||||||
|
- ':HeaderIncrease': Analogous to ':HeaderDecrease', but increase levels
|
||||||
|
instead.
|
||||||
|
|
||||||
|
*:SetexToAtx*
|
||||||
|
- ':SetexToAtx':
|
||||||
|
|
||||||
|
Convert all Setex style headers in buffer to Atx.
|
||||||
|
|
||||||
|
If a range is given, e.g. hit ':' from visual mode, only operate on the
|
||||||
|
range.
|
||||||
|
|
||||||
|
*:TableFormat*
|
||||||
|
- ':TableFormat': Format the table under the cursor like this [10].
|
||||||
|
|
||||||
|
Requires Tabular [11].
|
||||||
|
|
||||||
|
The input table _must_ already have a separator line as the second line of
|
||||||
|
the table. That line only needs to contain the correct pipes '|', nothing
|
||||||
|
else is required.
|
||||||
|
|
||||||
|
*:Toc*
|
||||||
|
- ':Toc': create a quickfix vertical window navigable table of contents with
|
||||||
|
the headers.
|
||||||
|
|
||||||
|
Hit '<Enter>' on a line to jump to the corresponding line of the markdown
|
||||||
|
file.
|
||||||
|
|
||||||
|
*:Toch*
|
||||||
|
- ':Toch': Same as ':Toc' but in an horizontal window.
|
||||||
|
|
||||||
|
*:Toct*
|
||||||
|
- ':Toct': Same as ':Toc' but in a new tab.
|
||||||
|
|
||||||
|
*:Tocv*
|
||||||
|
- ':Tocv': Same as ':Toc' for symmetry with ':Toch' and ':Tocv'.
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
*vim-markdown-credits*
|
||||||
|
Credits ~
|
||||||
|
|
||||||
|
The main contributors of vim-markdown are:
|
||||||
|
|
||||||
|
- **Ben Williams** (A.K.A. **plasticboy**). The original developer of vim-
|
||||||
|
markdown. Homepage [12].
|
||||||
|
|
||||||
|
If you feel that your name should be on this list, please make a pull request
|
||||||
|
listing your contributions.
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
*vim-markdown-license*
|
||||||
|
License ~
|
||||||
|
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2012 Benjamin D. Williams
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
*vim-markdown-references*
|
||||||
|
References ~
|
||||||
|
|
||||||
|
[1] http://daringfireball.net/projects/markdown/
|
||||||
|
[2] https://github.com/gmarik/vundle
|
||||||
|
[3] https://github.com/tpope/vim-pathogen
|
||||||
|
[4] http://packages.qa.debian.org/v/vim-addon-manager.html
|
||||||
|
[5] https://github.com/plasticboy/vim-markdown/archive/master.tar.gz
|
||||||
|
[6] https://github.com/klen/python-mode
|
||||||
|
[7] https://gohugo.io/content/front-matter/
|
||||||
|
[8] https://github.com/cespare/vim-toml
|
||||||
|
[9] https://github.com/elzr/vim-json
|
||||||
|
[10] http://www.cirosantilli.com/markdown-style-guide/#tables
|
||||||
|
[11] https://github.com/godlygeek/tabular
|
||||||
|
[12] http://plasticboy.com/
|
||||||
|
|
||||||
|
vim: ft=help
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
*vim-polyglot* Vim Polyglot
|
|
||||||
|
|
||||||
===============================================================================
|
|
||||||
*vim-polyglot-introduction*
|
|
||||||
Introduction ~
|
|
||||||
|
|
||||||
Vim Polyglot is a solid language pack for vim. No configuration needed.
|
|
||||||
|
|
||||||
Please make sure you have `syntax on` in your `.vimrc`
|
|
||||||
|
|
||||||
|
|
||||||
===============================================================================
|
|
||||||
DISABLING LANGUAGE PACKS *vim-polyglot-disabled*
|
|
||||||
|
|
||||||
|
|
||||||
Individual language packs can be disabled by setting `g:polyglot_disabled`:
|
|
||||||
|
|
||||||
>
|
|
||||||
" ~/.vimrc, declare this variable before polyglot is loaded let
|
|
||||||
g:polyglot_disabled = ['css']
|
|
||||||
<
|
|
||||||
|
|
||||||
Note that disabling languages won't make in general your vim startup any faster
|
|
||||||
/ slower (only for specific file type). Vim-polyglot is selection of language
|
|
||||||
plugins that are loaded only on demand.
|
|
||||||
64
doc/vim-raml.txt
Normal file
64
doc/vim-raml.txt
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'raml') == -1
|
||||||
|
|
||||||
|
# vim-raml
|
||||||
|
Vim syntax and language settings for RAML
|
||||||
|
|
||||||
|
About
|
||||||
|
---
|
||||||
|
vim-raml is a superset of Vim's own syntax settings for YAML, as RAML itself
|
||||||
|
is a superset of YAML. Obviously, filetype detection is provided for RAML
|
||||||
|
files as well to make use of the expanded syntax, as well language formatting
|
||||||
|
defaults.
|
||||||
|
|
||||||
|
You'll notice several changes over using the default YAML syntax file:
|
||||||
|
- The RAML version header, manditory in RAML now stands out brightly,
|
||||||
|
rather than looking like a comment.
|
||||||
|
- Parameter interpolation i.e. ```<<thing>>``` is highlighted inside of blocks
|
||||||
|
and values.
|
||||||
|
- Delimiters and blocks i.e. ```-, |, etc``` are consistently highlighted
|
||||||
|
(flaky in YAML).
|
||||||
|
- HTTP verbs, response codes, data types, and route definitions are all
|
||||||
|
colored separately from regular keys to help immediately distingush
|
||||||
|
different levels of the data structure.
|
||||||
|
- HTTP verbs include all that are supported by RAML: get, post, put, delete,
|
||||||
|
head, patch, and options
|
||||||
|
- Response codes e.g. 200, 201, 404, 401, etc are colored like numbers
|
||||||
|
(for obvious reasons)
|
||||||
|
- Data types e.g. ```type: integer```. Supports all RAML datatypes. string,
|
||||||
|
number, integer, date, boolean, and file.
|
||||||
|
- Route definitions: these include ```/posts:``` or ```/{id}:```
|
||||||
|
|
||||||
|
Installation
|
||||||
|
---
|
||||||
|
vim-raml doesn't have any strange or esoteric requirements.
|
||||||
|
Provided you're using Vundle, Pathogen or any of the other standard Vim
|
||||||
|
plugin managers. You can install vim-raml exactly how you'd expect.
|
||||||
|
|
||||||
|
For completeness, to install via Vundle just add the following into your
|
||||||
|
.vimrc with your other plugins
|
||||||
|
|
||||||
|
Plugin '.../.../'
|
||||||
|
Plugin 'IN3D/vim-raml'
|
||||||
|
Plugin '.../.../'
|
||||||
|
|
||||||
|
Then run:
|
||||||
|
|
||||||
|
:source %
|
||||||
|
:PluginInstall
|
||||||
|
|
||||||
|
|
||||||
|
Or for Pathogen:
|
||||||
|
|
||||||
|
cd ~/.vim/bundle
|
||||||
|
git clone https://github.com/IN3D/vim-raml.git
|
||||||
|
|
||||||
|
And Pathogen should pick it up the next time Vim is started.
|
||||||
|
|
||||||
|
|
||||||
|
Questions, suggestions, and issues
|
||||||
|
---
|
||||||
|
If you have a question, suggestion, or have found an issue with vim-raml.
|
||||||
|
The best way to bring it to my attention is to open an issue at
|
||||||
|
https://github.com/IN3D/vim-raml/issues
|
||||||
|
|
||||||
|
endif
|
||||||
File diff suppressed because it is too large
Load Diff
29
ftplugin/8th.vim
Normal file
29
ftplugin/8th.vim
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, '8th') == -1
|
||||||
|
|
||||||
|
" Vim ftplugin file
|
||||||
|
" Language: 8th
|
||||||
|
" Version: any
|
||||||
|
" Last Change: 2015/11/08
|
||||||
|
" Maintainer: Ron Aaron <ron@aaron-tech.com>
|
||||||
|
" URL: https://8th-dev.com/
|
||||||
|
" Filetypes: *.8th
|
||||||
|
" NOTE: 8th allows any non-whitespace in a name, so you need to do:
|
||||||
|
" setlocal iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255
|
||||||
|
" This goes with the syntax/8th.vim file.
|
||||||
|
|
||||||
|
" Only do this when not done yet for this buffer
|
||||||
|
if exists("b:did_8thplugin")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Don't load another plugin for this buffer
|
||||||
|
let b:did_8thplugin = 1
|
||||||
|
|
||||||
|
setlocal ts=2 sts=2 sw=2 et
|
||||||
|
setlocal com=s1:/*,mb:*,ex:*/,:\|,:\\
|
||||||
|
setlocal fo=tcrqol
|
||||||
|
setlocal matchpairs+=\::;
|
||||||
|
setlocal iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255
|
||||||
|
setlocal suffixesadd=.8th
|
||||||
|
|
||||||
|
endif
|
||||||
24
ftplugin/a2ps.vim
Normal file
24
ftplugin/a2ps.vim
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'a2ps') == -1
|
||||||
|
|
||||||
|
" Vim filetype plugin file
|
||||||
|
" Language: a2ps(1) configuration file
|
||||||
|
" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
|
||||||
|
" Latest Revision: 2008-07-09
|
||||||
|
|
||||||
|
if exists("b:did_ftplugin")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let b:did_ftplugin = 1
|
||||||
|
|
||||||
|
let s:cpo_save = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
let b:undo_ftplugin = "setl com< cms< inc< fo<"
|
||||||
|
|
||||||
|
setlocal comments=:# commentstring=#\ %s include=^\\s*Include:
|
||||||
|
setlocal formatoptions-=t formatoptions+=croql
|
||||||
|
|
||||||
|
let &cpo = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
|
|
||||||
|
endif
|
||||||
29
ftplugin/aap.vim
Normal file
29
ftplugin/aap.vim
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'aap') == -1
|
||||||
|
|
||||||
|
" Vim filetype plugin file
|
||||||
|
" Language: Aap recipe
|
||||||
|
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||||
|
" Last Change: 2013 Apr 05
|
||||||
|
|
||||||
|
" Only do this when not done yet for this buffer
|
||||||
|
if exists("b:did_ftplugin")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Don't load another plugin for this buffer
|
||||||
|
let b:did_ftplugin = 1
|
||||||
|
|
||||||
|
" Reset 'formatoptions', 'comments' and 'expandtab' to undo this plugin.
|
||||||
|
let b:undo_ftplugin = "setl fo< com< et<"
|
||||||
|
|
||||||
|
" Set 'formatoptions' to break comment lines but not other lines,
|
||||||
|
" and insert the comment leader when hitting <CR> or using "o".
|
||||||
|
setlocal fo-=t fo+=croql
|
||||||
|
|
||||||
|
" Set 'comments' to format dashed lists in comments.
|
||||||
|
setlocal comments=s:#\ -,m:#\ \ ,e:#,n:#,fb:-
|
||||||
|
|
||||||
|
" Expand tabs to spaces to avoid trouble.
|
||||||
|
setlocal expandtab
|
||||||
|
|
||||||
|
endif
|
||||||
33
ftplugin/abap.vim
Normal file
33
ftplugin/abap.vim
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'abap') == -1
|
||||||
|
|
||||||
|
" Vim filetype plugin file
|
||||||
|
" Language: ABAP
|
||||||
|
" Author: Steven Oliver <oliver.steven@gmail.com>
|
||||||
|
" Copyright: Copyright (c) 2013 Steven Oliver
|
||||||
|
" License: You may redistribute this under the same terms as Vim itself
|
||||||
|
" --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
" Only do this when not done yet for this buffer
|
||||||
|
if (exists("b:did_ftplugin"))
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let b:did_ftplugin = 1
|
||||||
|
|
||||||
|
let s:cpo_save = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
setlocal softtabstop=2 shiftwidth=2
|
||||||
|
setlocal suffixesadd=.abap
|
||||||
|
|
||||||
|
" Windows allows you to filter the open file dialog
|
||||||
|
if has("gui_win32") && !exists("b:browsefilter")
|
||||||
|
let b:browsefilter = "ABAP Source Files (*.abap)\t*.abap\n" .
|
||||||
|
\ "All Files (*.*)\t*.*\n"
|
||||||
|
endif
|
||||||
|
|
||||||
|
let &cpo = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
|
|
||||||
|
" vim: set sw=4 sts=4 et tw=80 :
|
||||||
|
|
||||||
|
endif
|
||||||
101
ftplugin/abaqus.vim
Normal file
101
ftplugin/abaqus.vim
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'abaqus') == -1
|
||||||
|
|
||||||
|
" Vim filetype plugin file
|
||||||
|
" Language: Abaqus finite element input file (www.abaqus.com)
|
||||||
|
" Maintainer: Carl Osterwisch <osterwischc@asme.org>
|
||||||
|
" Last Change: 2012 Apr 30
|
||||||
|
|
||||||
|
" Only do this when not done yet for this buffer
|
||||||
|
if exists("b:did_ftplugin") | finish | endif
|
||||||
|
|
||||||
|
" Don't load another plugin for this buffer
|
||||||
|
let b:did_ftplugin = 1
|
||||||
|
|
||||||
|
" Save the compatibility options and temporarily switch to vim defaults
|
||||||
|
let s:cpo_save = &cpoptions
|
||||||
|
set cpoptions&vim
|
||||||
|
|
||||||
|
" Set the format of the include file specification for Abaqus
|
||||||
|
" Used in :check gf ^wf [i and other commands
|
||||||
|
setlocal include=\\<\\cINPUT\\s*=
|
||||||
|
|
||||||
|
" Remove characters up to the first = when evaluating filenames
|
||||||
|
setlocal includeexpr=substitute(v:fname,'.\\{-}=','','')
|
||||||
|
|
||||||
|
" Remove comma from valid filename characters since it is used to
|
||||||
|
" separate keyword parameters
|
||||||
|
setlocal isfname-=,
|
||||||
|
|
||||||
|
" Define format of comment lines (see 'formatoptions' for uses)
|
||||||
|
setlocal comments=:**
|
||||||
|
setlocal commentstring=**%s
|
||||||
|
|
||||||
|
" Definitions start with a * and assign a NAME, NSET, or ELSET
|
||||||
|
" Used in [d ^wd and other commands
|
||||||
|
setlocal define=^\\*\\a.*\\c\\(NAME\\\|NSET\\\|ELSET\\)\\s*=
|
||||||
|
|
||||||
|
" Abaqus keywords and identifiers may include a - character
|
||||||
|
setlocal iskeyword+=-
|
||||||
|
|
||||||
|
let b:undo_ftplugin = "setlocal include< includeexpr< isfname<"
|
||||||
|
\ . " comments< commentstring< define< iskeyword<"
|
||||||
|
|
||||||
|
if has("folding")
|
||||||
|
" Fold all lines that do not begin with *
|
||||||
|
setlocal foldexpr=getline(v:lnum)[0]!=\"\*\"
|
||||||
|
setlocal foldmethod=expr
|
||||||
|
let b:undo_ftplugin .= " foldexpr< foldmethod<"
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Set the file browse filter (currently only supported under Win32 gui)
|
||||||
|
if has("gui_win32") && !exists("b:browsefilter")
|
||||||
|
let b:browsefilter = "Abaqus Input Files (*.inp *.inc)\t*.inp;*.inc\n" .
|
||||||
|
\ "Abaqus Results (*.dat)\t*.dat\n" .
|
||||||
|
\ "Abaqus Messages (*.pre *.msg *.sta)\t*.pre;*.msg;*.sta\n" .
|
||||||
|
\ "All Files (*.*)\t*.*\n"
|
||||||
|
let b:undo_ftplugin .= "|unlet! b:browsefilter"
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Define patterns for the matchit plugin
|
||||||
|
if exists("loaded_matchit") && !exists("b:match_words")
|
||||||
|
let b:match_ignorecase = 1
|
||||||
|
let b:match_words =
|
||||||
|
\ '\*part:\*end\s*part,' .
|
||||||
|
\ '\*assembly:\*end\s*assembly,' .
|
||||||
|
\ '\*instance:\*end\s*instance,' .
|
||||||
|
\ '\*step:\*end\s*step'
|
||||||
|
let b:undo_ftplugin .= "|unlet! b:match_ignorecase b:match_words"
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Define keys used to move [count] keywords backward or forward.
|
||||||
|
noremap <silent><buffer> [[ ?^\*\a<CR>:nohlsearch<CR>
|
||||||
|
noremap <silent><buffer> ]] /^\*\a<CR>:nohlsearch<CR>
|
||||||
|
|
||||||
|
" Define key to toggle commenting of the current line or range
|
||||||
|
noremap <silent><buffer> <LocalLeader><LocalLeader>
|
||||||
|
\ :call <SID>Abaqus_ToggleComment()<CR>j
|
||||||
|
function! <SID>Abaqus_ToggleComment() range
|
||||||
|
if strpart(getline(a:firstline), 0, 2) == "**"
|
||||||
|
" Un-comment all lines in range
|
||||||
|
silent execute a:firstline . ',' . a:lastline . 's/^\*\*//'
|
||||||
|
else
|
||||||
|
" Comment all lines in range
|
||||||
|
silent execute a:firstline . ',' . a:lastline . 's/^/**/'
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
let b:undo_ftplugin .= "|unmap <buffer> [[|unmap <buffer> ]]"
|
||||||
|
\ . "|unmap <buffer> <LocalLeader><LocalLeader>"
|
||||||
|
|
||||||
|
" Undo must be done in nocompatible mode for <LocalLeader>.
|
||||||
|
let b:undo_ftplugin = "let s:cpo_save = &cpoptions|"
|
||||||
|
\ . "set cpoptions&vim|"
|
||||||
|
\ . b:undo_ftplugin
|
||||||
|
\ . "|let &cpoptions = s:cpo_save"
|
||||||
|
\ . "|unlet s:cpo_save"
|
||||||
|
|
||||||
|
" Restore saved compatibility options
|
||||||
|
let &cpoptions = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
|
|
||||||
|
endif
|
||||||
214
ftplugin/ada.vim
Normal file
214
ftplugin/ada.vim
Normal file
@@ -0,0 +1,214 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ada') == -1
|
||||||
|
|
||||||
|
"------------------------------------------------------------------------------
|
||||||
|
" Description: Perform Ada specific completion & tagging.
|
||||||
|
" Language: Ada (2005)
|
||||||
|
" $Id: ada.vim 887 2008-07-08 14:29:01Z krischik $
|
||||||
|
" Maintainer: Martin Krischik <krischik@users.sourceforge.net>
|
||||||
|
" Taylor Venable <taylor@metasyntax.net>
|
||||||
|
" Neil Bird <neil@fnxweb.com>
|
||||||
|
" $Author: krischik $
|
||||||
|
" $Date: 2008-07-08 16:29:01 +0200 (Di, 08 Jul 2008) $
|
||||||
|
" Version: 4.6 with patch from David Bürgin
|
||||||
|
" $Revision: 887 $
|
||||||
|
" $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/ftplugin/ada.vim $
|
||||||
|
" History: 24.05.2006 MK Unified Headers
|
||||||
|
" 26.05.2006 MK ' should not be in iskeyword.
|
||||||
|
" 16.07.2006 MK Ada-Mode as vim-ball
|
||||||
|
" 02.10.2006 MK Better folding.
|
||||||
|
" 15.10.2006 MK Bram's suggestion for runtime integration
|
||||||
|
" 05.11.2006 MK Bram suggested not to use include protection for
|
||||||
|
" autoload
|
||||||
|
" 05.11.2006 MK Bram suggested to save on spaces
|
||||||
|
" 08.07.2007 TV fix default compiler problems.
|
||||||
|
" Help Page: ft-ada-plugin
|
||||||
|
"------------------------------------------------------------------------------
|
||||||
|
" Provides mapping overrides for tag jumping that figure out the current
|
||||||
|
" Ada object and tag jump to that, not the 'simple' vim word.
|
||||||
|
" Similarly allows <Ctrl-N> matching of full-length ada entities from tags.
|
||||||
|
"------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
" Only do this when not done yet for this buffer
|
||||||
|
if exists ("b:did_ftplugin") || version < 700
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Don't load another plugin for this buffer
|
||||||
|
let b:did_ftplugin = 45
|
||||||
|
|
||||||
|
"
|
||||||
|
" Temporarily set cpoptions to ensure the script loads OK
|
||||||
|
"
|
||||||
|
let s:cpoptions = &cpoptions
|
||||||
|
set cpoptions-=C
|
||||||
|
|
||||||
|
" Section: Comments {{{1
|
||||||
|
"
|
||||||
|
setlocal comments=O:--,:--\ \
|
||||||
|
setlocal commentstring=--\ \ %s
|
||||||
|
setlocal complete=.,w,b,u,t,i
|
||||||
|
|
||||||
|
" Section: case {{{1
|
||||||
|
"
|
||||||
|
setlocal nosmartcase
|
||||||
|
setlocal ignorecase
|
||||||
|
|
||||||
|
" Section: formatoptions {{{1
|
||||||
|
"
|
||||||
|
setlocal formatoptions+=ron
|
||||||
|
|
||||||
|
" Section: Tagging {{{1
|
||||||
|
"
|
||||||
|
if exists ("g:ada_extended_tagging")
|
||||||
|
" Make local tag mappings for this buffer (if not already set)
|
||||||
|
if g:ada_extended_tagging == 'jump'
|
||||||
|
if mapcheck('<C-]>','n') == ''
|
||||||
|
nnoremap <unique> <buffer> <C-]> :call ada#Jump_Tag ('', 'tjump')<cr>
|
||||||
|
endif
|
||||||
|
if mapcheck('g<C-]>','n') == ''
|
||||||
|
nnoremap <unique> <buffer> g<C-]> :call ada#Jump_Tag ('','stjump')<cr>
|
||||||
|
endif
|
||||||
|
elseif g:ada_extended_tagging == 'list'
|
||||||
|
if mapcheck('<C-]>','n') == ''
|
||||||
|
nnoremap <unique> <buffer> <C-]> :call ada#List_Tag ()<cr>
|
||||||
|
endif
|
||||||
|
if mapcheck('g<C-]>','n') == ''
|
||||||
|
nnoremap <unique> <buffer> g<C-]> :call ada#List_Tag ()<cr>
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Section: Completion {{{1
|
||||||
|
"
|
||||||
|
setlocal completefunc=ada#User_Complete
|
||||||
|
setlocal omnifunc=adacomplete#Complete
|
||||||
|
|
||||||
|
if exists ("g:ada_extended_completion")
|
||||||
|
if mapcheck ('<C-N>','i') == ''
|
||||||
|
inoremap <unique> <buffer> <C-N> <C-R>=ada#Completion("\<lt>C-N>")<cr>
|
||||||
|
endif
|
||||||
|
if mapcheck ('<C-P>','i') == ''
|
||||||
|
inoremap <unique> <buffer> <C-P> <C-R>=ada#Completion("\<lt>C-P>")<cr>
|
||||||
|
endif
|
||||||
|
if mapcheck ('<C-X><C-]>','i') == ''
|
||||||
|
inoremap <unique> <buffer> <C-X><C-]> <C-R>=<SID>ada#Completion("\<lt>C-X>\<lt>C-]>")<cr>
|
||||||
|
endif
|
||||||
|
if mapcheck ('<bs>','i') == ''
|
||||||
|
inoremap <silent> <unique> <buffer> <bs> <C-R>=ada#Insert_Backspace ()<cr>
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Section: Matchit {{{1
|
||||||
|
"
|
||||||
|
" Only do this when not done yet for this buffer & matchit is used
|
||||||
|
"
|
||||||
|
if !exists ("b:match_words") &&
|
||||||
|
\ exists ("loaded_matchit")
|
||||||
|
"
|
||||||
|
" The following lines enable the macros/matchit.vim plugin for
|
||||||
|
" Ada-specific extended matching with the % key.
|
||||||
|
"
|
||||||
|
let s:notend = '\%(\<end\s\+\)\@<!'
|
||||||
|
let b:match_words =
|
||||||
|
\ s:notend . '\<if\>:\<elsif\>:\<else\>:\<end\>\s\+\<if\>,' .
|
||||||
|
\ s:notend . '\<case\>:\<when\>:\<end\>\s\+\<case\>,' .
|
||||||
|
\ '\%(\<while\>.*\|\<for\>.*\|'.s:notend.'\)\<loop\>:\<end\>\s\+\<loop\>,' .
|
||||||
|
\ '\%(\<do\>\|\<begin\>\):\<exception\>:\<end\>\s*\%($\|[;A-Z]\),' .
|
||||||
|
\ s:notend . '\<record\>:\<end\>\s\+\<record\>'
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
" Section: Compiler {{{1
|
||||||
|
"
|
||||||
|
if ! exists("g:ada_default_compiler")
|
||||||
|
if has("vms")
|
||||||
|
let g:ada_default_compiler = 'decada'
|
||||||
|
else
|
||||||
|
let g:ada_default_compiler = 'gnat'
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
if ! exists("current_compiler") ||
|
||||||
|
\ current_compiler != g:ada_default_compiler
|
||||||
|
execute "compiler " . g:ada_default_compiler
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Section: Folding {{{1
|
||||||
|
"
|
||||||
|
if exists("g:ada_folding")
|
||||||
|
if g:ada_folding[0] == 'i'
|
||||||
|
setlocal foldmethod=indent
|
||||||
|
setlocal foldignore=--
|
||||||
|
setlocal foldnestmax=5
|
||||||
|
elseif g:ada_folding[0] == 'g'
|
||||||
|
setlocal foldmethod=expr
|
||||||
|
setlocal foldexpr=ada#Pretty_Print_Folding(v:lnum)
|
||||||
|
elseif g:ada_folding[0] == 's'
|
||||||
|
setlocal foldmethod=syntax
|
||||||
|
endif
|
||||||
|
setlocal tabstop=8
|
||||||
|
setlocal softtabstop=3
|
||||||
|
setlocal shiftwidth=3
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Section: Abbrev {{{1
|
||||||
|
"
|
||||||
|
if exists("g:ada_abbrev")
|
||||||
|
iabbrev ret return
|
||||||
|
iabbrev proc procedure
|
||||||
|
iabbrev pack package
|
||||||
|
iabbrev func function
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Section: Commands, Mapping, Menus {{{1
|
||||||
|
"
|
||||||
|
call ada#Map_Popup (
|
||||||
|
\ 'Tag.List',
|
||||||
|
\ 'l',
|
||||||
|
\ 'call ada#List_Tag ()')
|
||||||
|
call ada#Map_Popup (
|
||||||
|
\'Tag.Jump',
|
||||||
|
\'j',
|
||||||
|
\'call ada#Jump_Tag ()')
|
||||||
|
call ada#Map_Menu (
|
||||||
|
\'Tag.Create File',
|
||||||
|
\':AdaTagFile',
|
||||||
|
\'call ada#Create_Tags (''file'')')
|
||||||
|
call ada#Map_Menu (
|
||||||
|
\'Tag.Create Dir',
|
||||||
|
\':AdaTagDir',
|
||||||
|
\'call ada#Create_Tags (''dir'')')
|
||||||
|
|
||||||
|
call ada#Map_Menu (
|
||||||
|
\'Highlight.Toggle Space Errors',
|
||||||
|
\ ':AdaSpaces',
|
||||||
|
\'call ada#Switch_Syntax_Option (''space_errors'')')
|
||||||
|
call ada#Map_Menu (
|
||||||
|
\'Highlight.Toggle Lines Errors',
|
||||||
|
\ ':AdaLines',
|
||||||
|
\'call ada#Switch_Syntax_Option (''line_errors'')')
|
||||||
|
call ada#Map_Menu (
|
||||||
|
\'Highlight.Toggle Rainbow Color',
|
||||||
|
\ ':AdaRainbow',
|
||||||
|
\'call ada#Switch_Syntax_Option (''rainbow_color'')')
|
||||||
|
call ada#Map_Menu (
|
||||||
|
\'Highlight.Toggle Standard Types',
|
||||||
|
\ ':AdaTypes',
|
||||||
|
\'call ada#Switch_Syntax_Option (''standard_types'')')
|
||||||
|
|
||||||
|
" 1}}}
|
||||||
|
" Reset cpoptions
|
||||||
|
let &cpoptions = s:cpoptions
|
||||||
|
unlet s:cpoptions
|
||||||
|
|
||||||
|
finish " 1}}}
|
||||||
|
|
||||||
|
"------------------------------------------------------------------------------
|
||||||
|
" Copyright (C) 2006 Martin Krischik
|
||||||
|
"
|
||||||
|
" Vim is Charityware - see ":help license" or uganda.txt for licence details.
|
||||||
|
"------------------------------------------------------------------------------
|
||||||
|
" vim: textwidth=78 nowrap tabstop=8 shiftwidth=3 softtabstop=3 noexpandtab
|
||||||
|
" vim: foldmethod=marker
|
||||||
|
|
||||||
|
endif
|
||||||
23
ftplugin/alsaconf.vim
Normal file
23
ftplugin/alsaconf.vim
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'alsaconf') == -1
|
||||||
|
|
||||||
|
" Vim filetype plugin file
|
||||||
|
" Language: alsaconf(8) configuration file
|
||||||
|
" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
|
||||||
|
" Latest Revision: 2008-07-09
|
||||||
|
|
||||||
|
if exists("b:did_ftplugin")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let b:did_ftplugin = 1
|
||||||
|
|
||||||
|
let s:cpo_save = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
let b:undo_ftplugin = "setl com< cms< fo<"
|
||||||
|
|
||||||
|
setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
|
||||||
|
|
||||||
|
let &cpo = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
|
|
||||||
|
endif
|
||||||
48
ftplugin/ant.vim
Normal file
48
ftplugin/ant.vim
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ant') == -1
|
||||||
|
|
||||||
|
" Vim filetype plugin file
|
||||||
|
" Language: ant
|
||||||
|
" Maintainer: Dan Sharp <dwsharp at users dot sourceforge dot net>
|
||||||
|
" Last Changed: 20 Jan 2009
|
||||||
|
" URL: http://dwsharp.users.sourceforge.net/vim/ftplugin
|
||||||
|
|
||||||
|
if exists("b:did_ftplugin") | finish | endif
|
||||||
|
|
||||||
|
" Make sure the continuation lines below do not cause problems in
|
||||||
|
" compatibility mode.
|
||||||
|
let s:save_cpo = &cpo
|
||||||
|
set cpo-=C
|
||||||
|
|
||||||
|
" Define some defaults in case the included ftplugins don't set them.
|
||||||
|
let s:undo_ftplugin = ""
|
||||||
|
let s:browsefilter = "XML Files (*.xml)\t*.xml\n" .
|
||||||
|
\ "All Files (*.*)\t*.*\n"
|
||||||
|
|
||||||
|
runtime! ftplugin/xml.vim ftplugin/xml_*.vim ftplugin/xml/*.vim
|
||||||
|
let b:did_ftplugin = 1
|
||||||
|
|
||||||
|
" Override our defaults if these were set by an included ftplugin.
|
||||||
|
if exists("b:undo_ftplugin")
|
||||||
|
let s:undo_ftplugin = b:undo_ftplugin
|
||||||
|
endif
|
||||||
|
if exists("b:browsefilter")
|
||||||
|
let s:browsefilter = b:browsefilter
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Change the :browse e filter to primarily show Ant-related files.
|
||||||
|
if has("gui_win32")
|
||||||
|
let b:browsefilter = "Build Files (build.xml)\tbuild.xml\n" .
|
||||||
|
\ "Java Files (*.java)\t*.java\n" .
|
||||||
|
\ "Properties Files (*.prop*)\t*.prop*\n" .
|
||||||
|
\ "Manifest Files (*.mf)\t*.mf\n" .
|
||||||
|
\ s:browsefilter
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Undo the stuff we changed.
|
||||||
|
let b:undo_ftplugin = "unlet! b:browsefilter | " . s:undo_ftplugin
|
||||||
|
|
||||||
|
" Restore the saved compatibility options.
|
||||||
|
let &cpo = s:save_cpo
|
||||||
|
unlet s:save_cpo
|
||||||
|
|
||||||
|
endif
|
||||||
23
ftplugin/arch.vim
Normal file
23
ftplugin/arch.vim
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'arch') == -1
|
||||||
|
|
||||||
|
" Vim filetype plugin file
|
||||||
|
" Language: GNU Arch inventory file
|
||||||
|
" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
|
||||||
|
" Latest Revision: 2008-07-09
|
||||||
|
|
||||||
|
if exists("b:did_ftplugin")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let b:did_ftplugin = 1
|
||||||
|
|
||||||
|
let s:cpo_save = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
let b:undo_ftplugin = "setl com< cms< fo<"
|
||||||
|
|
||||||
|
setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
|
||||||
|
|
||||||
|
let &cpo = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
|
|
||||||
|
endif
|
||||||
19
ftplugin/art.vim
Normal file
19
ftplugin/art.vim
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'art') == -1
|
||||||
|
|
||||||
|
" Vim filetype plugin
|
||||||
|
" Language: ART-IM and ART*Enterprise
|
||||||
|
" Maintainer: Dorai Sitaram <ds26@gte.com>
|
||||||
|
" URL: http://www.ccs.neu.edu/~dorai/vimplugins/vimplugins.html
|
||||||
|
" Last Change: Apr 2, 2003
|
||||||
|
|
||||||
|
" Only do this when not done yet for this buffer
|
||||||
|
if exists("b:did_ftplugin")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
run ftplugin/lisp.vim
|
||||||
|
|
||||||
|
setl lw-=if
|
||||||
|
setl lw+=def-art-fun,deffacts,defglobal,defrule,defschema,for,schema,while
|
||||||
|
|
||||||
|
endif
|
||||||
20
ftplugin/automake.vim
Normal file
20
ftplugin/automake.vim
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'automake') == -1
|
||||||
|
|
||||||
|
" Vim filetype plugin file
|
||||||
|
" Language: Automake
|
||||||
|
" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
|
||||||
|
" Latest Revision: 2008-07-09
|
||||||
|
|
||||||
|
if exists("b:did_ftplugin")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:cpo_save = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
runtime! ftplugin/make.vim ftplugin/make_*.vim ftplugin/make/*.vim
|
||||||
|
|
||||||
|
let &cpo = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
|
|
||||||
|
endif
|
||||||
22
ftplugin/awk.vim
Normal file
22
ftplugin/awk.vim
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'awk') == -1
|
||||||
|
|
||||||
|
" Vim filetype plugin
|
||||||
|
" Language: awk, nawk, gawk, mawk
|
||||||
|
" Maintainer: Antonio Colombo <azc100@gmail.com>
|
||||||
|
" Last Change: 2017 Feb 17
|
||||||
|
|
||||||
|
" This plugin was prepared by Mark Sikora
|
||||||
|
|
||||||
|
" Only do this when not done yet for this buffer
|
||||||
|
if exists("b:did_ftplugin")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Don't load another plugin for this buffer
|
||||||
|
let b:did_ftplugin = 1
|
||||||
|
|
||||||
|
let b:undo_ftplugin = "setl commentstring<"
|
||||||
|
|
||||||
|
setlocal commentstring=#\ %s
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -37,8 +37,10 @@ nnoremap <buffer><Plug>(crystal-spec-run-all) :<C-u>CrystalSpecRunAll<CR>
|
|||||||
nnoremap <buffer><Plug>(crystal-spec-run-current) :<C-u>CrystalSpecRunCurrent<CR>
|
nnoremap <buffer><Plug>(crystal-spec-run-current) :<C-u>CrystalSpecRunCurrent<CR>
|
||||||
nnoremap <buffer><Plug>(crystal-format) :<C-u>CrystalFormat<CR>
|
nnoremap <buffer><Plug>(crystal-format) :<C-u>CrystalFormat<CR>
|
||||||
|
|
||||||
|
" autocmd is setup per buffer. Please do not use :autocmd!. It refreshes
|
||||||
|
" augroup hence removes autocmds for other buffers (#105)
|
||||||
augroup plugin-ft-crystal
|
augroup plugin-ft-crystal
|
||||||
autocmd BufWritePre <buffer> if g:crystal_auto_format | call crystal_lang#format('', 1) | endif
|
autocmd BufWritePre <buffer> if g:crystal_auto_format && &filetype ==# 'crystal' | call crystal_lang#format('', 1) | endif
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
if get(g:, 'crystal_define_mappings', 1)
|
if get(g:, 'crystal_define_mappings', 1)
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'crystal') == -1
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'crystal') == -1
|
||||||
|
|
||||||
|
" Filetype plugin for https://crystal-lang.org/api/0.35.1/ECR.html
|
||||||
if exists('b:did_ftplugin')
|
if exists('b:did_ftplugin')
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|||||||
23
ftplugin/grub.vim
Normal file
23
ftplugin/grub.vim
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'grub') == -1
|
||||||
|
|
||||||
|
" Vim filetype plugin file
|
||||||
|
" Language: grub(8) configuration file
|
||||||
|
" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
|
||||||
|
" Latest Revision: 2008-07-09
|
||||||
|
|
||||||
|
if exists("b:did_ftplugin")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let b:did_ftplugin = 1
|
||||||
|
|
||||||
|
let s:cpo_save = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
let b:undo_ftplugin = "setl com< cms< fo<"
|
||||||
|
|
||||||
|
setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
|
||||||
|
|
||||||
|
let &cpo = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
|
|
||||||
|
endif
|
||||||
26
ftplugin/help.vim
Normal file
26
ftplugin/help.vim
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'help') == -1
|
||||||
|
|
||||||
|
" Vim filetype plugin file
|
||||||
|
" Language: Vim help file
|
||||||
|
" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
|
||||||
|
" Latest Revision: 2018-12-29
|
||||||
|
|
||||||
|
if exists("b:did_ftplugin")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let b:did_ftplugin = 1
|
||||||
|
|
||||||
|
let s:cpo_save = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
let b:undo_ftplugin = "setl fo< tw< cole< cocu< keywordprg<"
|
||||||
|
|
||||||
|
setlocal formatoptions+=tcroql textwidth=78 keywordprg=:help
|
||||||
|
if has("conceal")
|
||||||
|
setlocal cole=2 cocu=nc
|
||||||
|
endif
|
||||||
|
|
||||||
|
let &cpo = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
|
|
||||||
|
endif
|
||||||
24
ftplugin/m4.vim
Normal file
24
ftplugin/m4.vim
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'm4') == -1
|
||||||
|
|
||||||
|
" Vim filetype plugin file
|
||||||
|
" Language: m4
|
||||||
|
" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
|
||||||
|
" Latest Revision: 2008-07-09
|
||||||
|
|
||||||
|
if exists("b:did_ftplugin")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let b:did_ftplugin = 1
|
||||||
|
|
||||||
|
let s:cpo_save = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
let b:undo_ftplugin = "setl com< cms< fo<"
|
||||||
|
|
||||||
|
setlocal comments=:#,:dnl commentstring=dnl\ %s
|
||||||
|
setlocal formatoptions-=t formatoptions+=croql
|
||||||
|
|
||||||
|
let &cpo = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vifm') == -1
|
|
||||||
|
|
||||||
" Mail file type extension to pick files for attachments via vifm
|
|
||||||
" Maintainer: xaizek <xaizek@posteo.net>
|
|
||||||
" Last Change: June 22, 2020
|
|
||||||
|
|
||||||
" Insert attachment picked via vifm after 'Subject' header
|
|
||||||
function! s:AddMailAttachments()
|
|
||||||
call vifm#globals#Init()
|
|
||||||
|
|
||||||
" XXX: similar code is in plugins/vifm.vim, but it's different in details
|
|
||||||
let l:listf = tempname()
|
|
||||||
|
|
||||||
if !has('nvim')
|
|
||||||
if has('gui_running')
|
|
||||||
execute 'silent !' g:vifm_term g:vifm_exec
|
|
||||||
\ '--choose-files' shellescape(l:listf, 1)
|
|
||||||
\ g:vifm_exec_args
|
|
||||||
else
|
|
||||||
execute 'silent !' g:vifm_exec
|
|
||||||
\ '--choose-files' shellescape(l:listf, 1)
|
|
||||||
\ g:vifm_exec_args
|
|
||||||
endif
|
|
||||||
|
|
||||||
redraw!
|
|
||||||
|
|
||||||
call s:HandleRunResults(v:shell_error, l:listf)
|
|
||||||
else
|
|
||||||
" Work around handicapped neovim...
|
|
||||||
let callback = { 'listf': l:listf }
|
|
||||||
function! callback.on_exit(id, code, event)
|
|
||||||
buffer #
|
|
||||||
silent! bdelete! #
|
|
||||||
call s:HandleRunResults(a:code, self.listf)
|
|
||||||
endfunction
|
|
||||||
enew
|
|
||||||
call termopen(g:vifm_exec . ' --choose-files ' . shellescape(l:listf, 1)
|
|
||||||
\. ' ' . g:vifm_exec_args, callback)
|
|
||||||
|
|
||||||
startinsert
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:HandleRunResults(exitcode, listf)
|
|
||||||
if a:exitcode != 0
|
|
||||||
echoerr 'Got non-zero code from vifm: ' . a:exitcode
|
|
||||||
call delete(a:listf)
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
let l:insert_pos = search('^Subject:', 'nw')
|
|
||||||
|
|
||||||
if filereadable(a:listf) && l:insert_pos != 0
|
|
||||||
for line in readfile(a:listf)
|
|
||||||
call append(l:insert_pos, 'Attach: '.escape(line, " "))
|
|
||||||
let l:insert_pos += 1
|
|
||||||
endfor
|
|
||||||
endif
|
|
||||||
call delete(a:listf)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
nnoremap <buffer> <silent> <localleader>a :call <sid>AddMailAttachments()<cr>
|
|
||||||
|
|
||||||
" vim: set tabstop=2 softtabstop=2 shiftwidth=2 noexpandtab cinoptions-=(0 :
|
|
||||||
|
|
||||||
endif
|
|
||||||
@@ -11,6 +11,9 @@ if exists("b:did_ftplugin")
|
|||||||
endif
|
endif
|
||||||
let b:did_ftplugin = 1
|
let b:did_ftplugin = 1
|
||||||
|
|
||||||
|
let b:undo_ftplugin = "setlocal comments< commentstring<"
|
||||||
|
|
||||||
|
setlocal comments=:#
|
||||||
setlocal commentstring=#\ %s
|
setlocal commentstring=#\ %s
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -1,23 +0,0 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vifm') == -1
|
|
||||||
|
|
||||||
" vifm command-line editing buffer filetype plugin
|
|
||||||
" Maintainer: xaizek <xaizek@posteo.net>
|
|
||||||
" Last Change: August 18, 2013
|
|
||||||
|
|
||||||
if exists("b:did_ftplugin")
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
|
|
||||||
let b:did_ftplugin = 1
|
|
||||||
|
|
||||||
" Behave as vifm script file
|
|
||||||
runtime! ftplugin/vifm.vim
|
|
||||||
|
|
||||||
" Use vifm script highlighting
|
|
||||||
set syntax=vifm
|
|
||||||
|
|
||||||
call vifm#edit#Init()
|
|
||||||
|
|
||||||
" vim: set tabstop=2 softtabstop=2 shiftwidth=2 noexpandtab cinoptions-=(0 :
|
|
||||||
|
|
||||||
endif
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vifm') == -1
|
|
||||||
|
|
||||||
" vifm command-line editing buffer filetype plugin
|
|
||||||
" Maintainer: xaizek <xaizek@posteo.net>
|
|
||||||
" Last Change: August 18, 2013
|
|
||||||
|
|
||||||
if exists("b:did_ftplugin")
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
|
|
||||||
let b:did_ftplugin = 1
|
|
||||||
|
|
||||||
call vifm#edit#Init()
|
|
||||||
|
|
||||||
" vim: set tabstop=2 softtabstop=2 shiftwidth=2 noexpandtab cinoptions-=(0 :
|
|
||||||
|
|
||||||
endif
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vifm') == -1
|
|
||||||
|
|
||||||
" Filetype plugin for vifm rename buffer
|
|
||||||
" Maintainer: xaizek <xaizek@posteo.net>
|
|
||||||
" Last Change: October 05, 2014
|
|
||||||
|
|
||||||
if exists("b:did_ftplugin")
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
|
|
||||||
let b:did_ftplugin = 1
|
|
||||||
|
|
||||||
" Copy list of original file names
|
|
||||||
let s:files = getline(1, '$')
|
|
||||||
|
|
||||||
" Closes window/tab/Vim when buffer is left alone in there
|
|
||||||
function! s:QuitIfOnlyWindow()
|
|
||||||
" Boil out if there is more than one window
|
|
||||||
if winbufnr(2) != -1
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Just close tab with this single window or quit Vim with last tab
|
|
||||||
if tabpagenr('$') == 1
|
|
||||||
bdelete
|
|
||||||
quit
|
|
||||||
else
|
|
||||||
close
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" Create a vertical split window for original file names and configure it
|
|
||||||
belowright vsplit __VifmRenameOrig__
|
|
||||||
enew
|
|
||||||
call setline(1, s:files)
|
|
||||||
setlocal buftype=nofile
|
|
||||||
setlocal bufhidden=hide
|
|
||||||
setlocal noswapfile
|
|
||||||
setlocal nobuflisted
|
|
||||||
setlocal cursorbind
|
|
||||||
setlocal scrollbind
|
|
||||||
setlocal nocursorline
|
|
||||||
|
|
||||||
" Free now useless list of file names
|
|
||||||
unlet s:files
|
|
||||||
|
|
||||||
" Setup a hook in auxiliary local window to do not leave it alone, when it's
|
|
||||||
" useless
|
|
||||||
augroup VifmRenameAutoCmds
|
|
||||||
autocmd! * <buffer>
|
|
||||||
autocmd BufEnter <buffer> call s:QuitIfOnlyWindow()
|
|
||||||
augroup END
|
|
||||||
|
|
||||||
" Go back to the original window and ensure it will remain synchronized with
|
|
||||||
" the auxiliary one
|
|
||||||
wincmd w
|
|
||||||
setlocal cursorbind
|
|
||||||
setlocal scrollbind
|
|
||||||
|
|
||||||
" vim: set tabstop=2 softtabstop=2 shiftwidth=2 noexpandtab cinoptions-=(0 :
|
|
||||||
|
|
||||||
endif
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vifm') == -1
|
|
||||||
|
|
||||||
" vifmrc filetype plugin
|
|
||||||
" Maintainer: xaizek <xaizek@posteo.net>
|
|
||||||
" Last Change: July 08, 2016
|
|
||||||
" Based On: Vim file type file by Bram Moolenaar
|
|
||||||
|
|
||||||
if exists("b:did_ftplugin")
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
|
|
||||||
let b:did_ftplugin = 1
|
|
||||||
|
|
||||||
let s:cpo_save = &cpo
|
|
||||||
set cpo-=C
|
|
||||||
|
|
||||||
let b:undo_ftplugin = "setlocal formatoptions< comments< textwidth< commentstring<"
|
|
||||||
|
|
||||||
" Break comment lines but not other lines
|
|
||||||
setlocal formatoptions-=t formatoptions+=croql
|
|
||||||
|
|
||||||
" Set comment character
|
|
||||||
setlocal comments=:\"
|
|
||||||
|
|
||||||
" Format comments to be up to 78 characters long
|
|
||||||
if &textwidth == 0
|
|
||||||
setlocal textwidth=78
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Comments start with a double quote
|
|
||||||
setlocal commentstring=\"%s
|
|
||||||
|
|
||||||
" Move around comments
|
|
||||||
nnoremap <silent><buffer> ]" :call search('^\(\s*".*\n\)\@<!\(\s*"\)', "W")<CR>
|
|
||||||
vnoremap <silent><buffer> ]" :<C-U>exe "normal! gv"<Bar>call search('^\(\s*".*\n\)\@<!\(\s*"\)', "W")<CR>
|
|
||||||
nnoremap <silent><buffer> [" :call search('\%(^\s*".*\n\)\%(^\s*"\)\@!', "bW")<CR>
|
|
||||||
vnoremap <silent><buffer> [" :<C-U>exe "normal! gv"<Bar>call search('\%(^\s*".*\n\)\%(^\s*"\)\@!', "bW")<CR>
|
|
||||||
|
|
||||||
" Let the matchit plugin know what items can be matched.
|
|
||||||
if exists("loaded_matchit")
|
|
||||||
let b:match_ignorecase = 0
|
|
||||||
let b:match_words = '\<if\>:\<el\%[seif]\>:\<en\%[dif]\>'
|
|
||||||
endif
|
|
||||||
|
|
||||||
let &cpo = s:cpo_save
|
|
||||||
unlet s:cpo_save
|
|
||||||
|
|
||||||
" vim: set tabstop=2 softtabstop=2 shiftwidth=2 noexpandtab cinoptions-=(0 :
|
|
||||||
|
|
||||||
endif
|
|
||||||
@@ -1,24 +1,34 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'zig') == -1
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'zig') == -1
|
||||||
|
|
||||||
" Only do this when not done yet for this buffer
|
" Only do this when not done yet for this buffer
|
||||||
if (exists("b:did_ftplugin"))
|
if exists("b:did_ftplugin")
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let b:did_ftplugin = 1
|
let b:did_ftplugin = 1
|
||||||
|
|
||||||
|
let s:cpo_orig = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
" Recomended code style, no tabs and 4-space indentation
|
||||||
setlocal expandtab
|
setlocal expandtab
|
||||||
setlocal tabstop=4
|
setlocal tabstop=8
|
||||||
|
setlocal softtabstop=4
|
||||||
setlocal shiftwidth=4
|
setlocal shiftwidth=4
|
||||||
|
|
||||||
setlocal suffixesadd=.zig
|
setlocal formatoptions-=t formatoptions+=croql
|
||||||
setlocal suffixesadd=.zir
|
|
||||||
setlocal commentstring=//\ %s
|
setlocal suffixesadd=.zig,.zir
|
||||||
setlocal makeprg=zig\ build
|
setlocal makeprg=zig\ build
|
||||||
|
|
||||||
if (has("comments"))
|
if has("comments")
|
||||||
set comments=:///,://,:\\\\
|
setlocal comments=:///,://!,://,:\\\\
|
||||||
set formatoptions=tcqor
|
setlocal commentstring=//\ %s
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
let b:undo_ftplugin = "setl et< ts< sts< sw< fo< sua< mp< com< cms<"
|
||||||
|
|
||||||
|
let &cpo = s:cpo_orig
|
||||||
|
unlet s:cpo_orig
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
57
heuristics.yaml
Normal file
57
heuristics.yaml
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
---
|
||||||
|
extensions: [inp]
|
||||||
|
rules:
|
||||||
|
- lines: 1
|
||||||
|
pattern: '^\*'
|
||||||
|
filetype: abaqus
|
||||||
|
- lines: 500
|
||||||
|
pattern: '^header surface data'
|
||||||
|
ignore_case: true
|
||||||
|
filetype: trasys
|
||||||
|
---
|
||||||
|
extensions: [asa]
|
||||||
|
rules:
|
||||||
|
- override: "g:filetype_asa"
|
||||||
|
- filetype: aspvbs
|
||||||
|
---
|
||||||
|
extensions: [asp]
|
||||||
|
rules:
|
||||||
|
- override: "g:filetype_asp"
|
||||||
|
- lines: 3
|
||||||
|
pattern: 'perlscript'
|
||||||
|
ignore_case: true
|
||||||
|
filetype: aspperl
|
||||||
|
- filetype: aspvbs
|
||||||
|
---
|
||||||
|
extensions: [m]
|
||||||
|
rules:
|
||||||
|
- lines: 100
|
||||||
|
rules:
|
||||||
|
- pattern: '^\s*/\*'
|
||||||
|
set: 'saw_comment'
|
||||||
|
- pattern: '^\s*(@(interface|class|protocol|property|end|synchronised|selector|implementation)\b|#import\s+.+\.h[">])'
|
||||||
|
filetype: objc
|
||||||
|
- pattern: '^\s*%'
|
||||||
|
filetype: octave
|
||||||
|
- pattern: '^\s*\(\*'
|
||||||
|
filetype: mma
|
||||||
|
- pattern: '^\s*((type|var)\b|--)'
|
||||||
|
ignore_case: true
|
||||||
|
filetype: murphi
|
||||||
|
- if_set: "saw_comment"
|
||||||
|
filetype: objc
|
||||||
|
- override: "g:filetype_m"
|
||||||
|
- filetype: octave
|
||||||
|
---
|
||||||
|
extensions: [fs]
|
||||||
|
rules:
|
||||||
|
- lines: 50
|
||||||
|
rules:
|
||||||
|
- pattern: '^(: |new-device)'
|
||||||
|
filetype: forth
|
||||||
|
- pattern: '^\s*(#light|import|let|module|namespace|open|type)'
|
||||||
|
filetype: fsharp
|
||||||
|
- pattern: '\s*(#version|precision|uniform|varying|vec[234])'
|
||||||
|
filetype: glsl
|
||||||
|
- override: "g:filetype_fs"
|
||||||
|
- filetype: forth
|
||||||
16
indent/aap.vim
Normal file
16
indent/aap.vim
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'aap') == -1
|
||||||
|
|
||||||
|
" Vim indent file
|
||||||
|
" Language: Aap recipe
|
||||||
|
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||||
|
" Last Change: 2005 Jun 24
|
||||||
|
|
||||||
|
" Only load this indent file when no other was loaded.
|
||||||
|
if exists("b:did_indent")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Works mostly like Python.
|
||||||
|
runtime! indent/python.vim
|
||||||
|
|
||||||
|
endif
|
||||||
312
indent/ada.vim
Normal file
312
indent/ada.vim
Normal file
@@ -0,0 +1,312 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ada') == -1
|
||||||
|
|
||||||
|
"------------------------------------------------------------------------------
|
||||||
|
" Description: Vim Ada indent file
|
||||||
|
" Language: Ada (2005)
|
||||||
|
" $Id: ada.vim 887 2008-07-08 14:29:01Z krischik $
|
||||||
|
" Copyright: Copyright (C) 2006 Martin Krischik
|
||||||
|
" Maintainer: Martin Krischik <krischik@users.sourceforge.net>
|
||||||
|
" Neil Bird <neil@fnxweb.com>
|
||||||
|
" Ned Okie <nokie@radford.edu>
|
||||||
|
" $Author: krischik $
|
||||||
|
" $Date: 2008-07-08 16:29:01 +0200 (Di, 08 Jul 2008) $
|
||||||
|
" Version: 4.6
|
||||||
|
" $Revision: 887 $
|
||||||
|
" $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/indent/ada.vim $
|
||||||
|
" History: 24.05.2006 MK Unified Headers
|
||||||
|
" 16.07.2006 MK Ada-Mode as vim-ball
|
||||||
|
" 15.10.2006 MK Bram's suggestion for runtime integration
|
||||||
|
" 05.11.2006 MK Bram suggested to save on spaces
|
||||||
|
" 19.09.2007 NO g: missing before ada#Comment
|
||||||
|
" Help Page: ft-vim-indent
|
||||||
|
"------------------------------------------------------------------------------
|
||||||
|
" ToDo:
|
||||||
|
" Verify handling of multi-line exprs. and recovery upon the final ';'.
|
||||||
|
" Correctly find comments given '"' and "" ==> " syntax.
|
||||||
|
" Combine the two large block-indent functions into one?
|
||||||
|
"------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
" Only load this indent file when no other was loaded.
|
||||||
|
if exists("b:did_indent") || version < 700
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
let b:did_indent = 45
|
||||||
|
|
||||||
|
setlocal indentexpr=GetAdaIndent()
|
||||||
|
setlocal indentkeys-=0{,0}
|
||||||
|
setlocal indentkeys+=0=~then,0=~end,0=~elsif,0=~when,0=~exception,0=~begin,0=~is,0=~record
|
||||||
|
|
||||||
|
" Only define the functions once.
|
||||||
|
if exists("*GetAdaIndent")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let s:keepcpo= &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
if exists("g:ada_with_gnat_project_files")
|
||||||
|
let s:AdaBlockStart = '^\s*\(if\>\|while\>\|else\>\|elsif\>\|loop\>\|for\>.*\<\(loop\|use\)\>\|declare\>\|begin\>\|type\>.*\<is\>[^;]*$\|\(type\>.*\)\=\<record\>\|procedure\>\|function\>\|accept\>\|do\>\|task\>\|package\>\|project\>\|then\>\|when\>\|is\>\)'
|
||||||
|
else
|
||||||
|
let s:AdaBlockStart = '^\s*\(if\>\|while\>\|else\>\|elsif\>\|loop\>\|for\>.*\<\(loop\|use\)\>\|declare\>\|begin\>\|type\>.*\<is\>[^;]*$\|\(type\>.*\)\=\<record\>\|procedure\>\|function\>\|accept\>\|do\>\|task\>\|package\>\|then\>\|when\>\|is\>\)'
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Section: s:MainBlockIndent {{{1
|
||||||
|
"
|
||||||
|
" Try to find indent of the block we're in
|
||||||
|
" prev_indent = the previous line's indent
|
||||||
|
" prev_lnum = previous line (to start looking on)
|
||||||
|
" blockstart = expr. that indicates a possible start of this block
|
||||||
|
" stop_at = if non-null, if a matching line is found, gives up!
|
||||||
|
" No recursive previous block analysis: simply look for a valid line
|
||||||
|
" with a lesser or equal indent than we currently (on prev_lnum) have.
|
||||||
|
" This shouldn't work as well as it appears to with lines that are currently
|
||||||
|
" nowhere near the correct indent (e.g., start of line)!
|
||||||
|
" Seems to work OK as it 'starts' with the indent of the /previous/ line.
|
||||||
|
function s:MainBlockIndent (prev_indent, prev_lnum, blockstart, stop_at)
|
||||||
|
let lnum = a:prev_lnum
|
||||||
|
let line = substitute( getline(lnum), g:ada#Comment, '', '' )
|
||||||
|
while lnum > 1
|
||||||
|
if a:stop_at != '' && line =~ '^\s*' . a:stop_at && indent(lnum) < a:prev_indent
|
||||||
|
return a:prev_indent
|
||||||
|
elseif line =~ '^\s*' . a:blockstart
|
||||||
|
let ind = indent(lnum)
|
||||||
|
if ind < a:prev_indent
|
||||||
|
return ind
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
let lnum = prevnonblank(lnum - 1)
|
||||||
|
" Get previous non-blank/non-comment-only line
|
||||||
|
while 1
|
||||||
|
let line = substitute( getline(lnum), g:ada#Comment, '', '' )
|
||||||
|
if line !~ '^\s*$' && line !~ '^\s*#'
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
let lnum = prevnonblank(lnum - 1)
|
||||||
|
if lnum <= 0
|
||||||
|
return a:prev_indent
|
||||||
|
endif
|
||||||
|
endwhile
|
||||||
|
endwhile
|
||||||
|
" Fallback - just move back one
|
||||||
|
return a:prev_indent - shiftwidth()
|
||||||
|
endfunction MainBlockIndent
|
||||||
|
|
||||||
|
" Section: s:EndBlockIndent {{{1
|
||||||
|
"
|
||||||
|
" Try to find indent of the block we're in (and about to complete),
|
||||||
|
" including handling of nested blocks. Works on the 'end' of a block.
|
||||||
|
" prev_indent = the previous line's indent
|
||||||
|
" prev_lnum = previous line (to start looking on)
|
||||||
|
" blockstart = expr. that indicates a possible start of this block
|
||||||
|
" blockend = expr. that indicates a possible end of this block
|
||||||
|
function s:EndBlockIndent( prev_indent, prev_lnum, blockstart, blockend )
|
||||||
|
let lnum = a:prev_lnum
|
||||||
|
let line = getline(lnum)
|
||||||
|
let ends = 0
|
||||||
|
while lnum > 1
|
||||||
|
if getline(lnum) =~ '^\s*' . a:blockstart
|
||||||
|
let ind = indent(lnum)
|
||||||
|
if ends <= 0
|
||||||
|
if ind < a:prev_indent
|
||||||
|
return ind
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
let ends = ends - 1
|
||||||
|
endif
|
||||||
|
elseif getline(lnum) =~ '^\s*' . a:blockend
|
||||||
|
let ends = ends + 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
let lnum = prevnonblank(lnum - 1)
|
||||||
|
" Get previous non-blank/non-comment-only line
|
||||||
|
while 1
|
||||||
|
let line = getline(lnum)
|
||||||
|
let line = substitute( line, g:ada#Comment, '', '' )
|
||||||
|
if line !~ '^\s*$'
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
let lnum = prevnonblank(lnum - 1)
|
||||||
|
if lnum <= 0
|
||||||
|
return a:prev_indent
|
||||||
|
endif
|
||||||
|
endwhile
|
||||||
|
endwhile
|
||||||
|
" Fallback - just move back one
|
||||||
|
return a:prev_indent - shiftwidth()
|
||||||
|
endfunction EndBlockIndent
|
||||||
|
|
||||||
|
" Section: s:StatementIndent {{{1
|
||||||
|
"
|
||||||
|
" Return indent of previous statement-start
|
||||||
|
" (after we've indented due to multi-line statements).
|
||||||
|
" This time, we start searching on the line *before* the one given (which is
|
||||||
|
" the end of a statement - we want the previous beginning).
|
||||||
|
function s:StatementIndent( current_indent, prev_lnum )
|
||||||
|
let lnum = a:prev_lnum
|
||||||
|
while lnum > 0
|
||||||
|
let prev_lnum = lnum
|
||||||
|
let lnum = prevnonblank(lnum - 1)
|
||||||
|
" Get previous non-blank/non-comment-only line
|
||||||
|
while 1
|
||||||
|
let line = substitute( getline(lnum), g:ada#Comment, '', '' )
|
||||||
|
|
||||||
|
if line !~ '^\s*$' && line !~ '^\s*#'
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
let lnum = prevnonblank(lnum - 1)
|
||||||
|
if lnum <= 0
|
||||||
|
return a:current_indent
|
||||||
|
endif
|
||||||
|
endwhile
|
||||||
|
" Leave indent alone if our ';' line is part of a ';'-delineated
|
||||||
|
" aggregate (e.g., procedure args.) or first line after a block start.
|
||||||
|
if line =~ s:AdaBlockStart || line =~ '(\s*$'
|
||||||
|
return a:current_indent
|
||||||
|
endif
|
||||||
|
if line !~ '[.=(]\s*$'
|
||||||
|
let ind = indent(prev_lnum)
|
||||||
|
if ind < a:current_indent
|
||||||
|
return ind
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endwhile
|
||||||
|
" Fallback - just use current one
|
||||||
|
return a:current_indent
|
||||||
|
endfunction StatementIndent
|
||||||
|
|
||||||
|
|
||||||
|
" Section: GetAdaIndent {{{1
|
||||||
|
"
|
||||||
|
" Find correct indent of a new line based upon what went before
|
||||||
|
"
|
||||||
|
function GetAdaIndent()
|
||||||
|
" Find a non-blank line above the current line.
|
||||||
|
let lnum = prevnonblank(v:lnum - 1)
|
||||||
|
let ind = indent(lnum)
|
||||||
|
let package_line = 0
|
||||||
|
|
||||||
|
" Get previous non-blank/non-comment-only/non-cpp line
|
||||||
|
while 1
|
||||||
|
let line = substitute( getline(lnum), g:ada#Comment, '', '' )
|
||||||
|
if line !~ '^\s*$' && line !~ '^\s*#'
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
let lnum = prevnonblank(lnum - 1)
|
||||||
|
if lnum <= 0
|
||||||
|
return ind
|
||||||
|
endif
|
||||||
|
endwhile
|
||||||
|
|
||||||
|
" Get default indent (from prev. line)
|
||||||
|
let ind = indent(lnum)
|
||||||
|
let initind = ind
|
||||||
|
|
||||||
|
" Now check what's on the previous line
|
||||||
|
if line =~ s:AdaBlockStart || line =~ '(\s*$'
|
||||||
|
" Check for false matches to AdaBlockStart
|
||||||
|
let false_match = 0
|
||||||
|
if line =~ '^\s*\(procedure\|function\|package\)\>.*\<is\s*new\>'
|
||||||
|
" Generic instantiation
|
||||||
|
let false_match = 1
|
||||||
|
elseif line =~ ')\s*;\s*$' || line =~ '^\([^(]*([^)]*)\)*[^(]*;\s*$'
|
||||||
|
" forward declaration
|
||||||
|
let false_match = 1
|
||||||
|
endif
|
||||||
|
" Move indent in
|
||||||
|
if ! false_match
|
||||||
|
let ind = ind + shiftwidth()
|
||||||
|
endif
|
||||||
|
elseif line =~ '^\s*\(case\|exception\)\>'
|
||||||
|
" Move indent in twice (next 'when' will move back)
|
||||||
|
let ind = ind + 2 * shiftwidth()
|
||||||
|
elseif line =~ '^\s*end\s*record\>'
|
||||||
|
" Move indent back to tallying 'type' preceeding the 'record'.
|
||||||
|
" Allow indent to be equal to 'end record's.
|
||||||
|
let ind = s:MainBlockIndent( ind+shiftwidth(), lnum, 'type\>', '' )
|
||||||
|
elseif line =~ '\(^\s*new\>.*\)\@<!)\s*[;,]\s*$'
|
||||||
|
" Revert to indent of line that started this parenthesis pair
|
||||||
|
exe lnum
|
||||||
|
exe 'normal! $F)%'
|
||||||
|
if getline('.') =~ '^\s*('
|
||||||
|
" Dire layout - use previous indent (could check for g:ada#Comment here)
|
||||||
|
let ind = indent( prevnonblank( line('.')-1 ) )
|
||||||
|
else
|
||||||
|
let ind = indent('.')
|
||||||
|
endif
|
||||||
|
exe v:lnum
|
||||||
|
elseif line =~ '[.=(]\s*$'
|
||||||
|
" A statement continuation - move in one
|
||||||
|
let ind = ind + shiftwidth()
|
||||||
|
elseif line =~ '^\s*new\>'
|
||||||
|
" Multiple line generic instantiation ('package blah is\nnew thingy')
|
||||||
|
let ind = s:StatementIndent( ind - shiftwidth(), lnum )
|
||||||
|
elseif line =~ ';\s*$'
|
||||||
|
" Statement end (but not 'end' ) - try to find current statement-start indent
|
||||||
|
let ind = s:StatementIndent( ind, lnum )
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Check for potential argument list on next line
|
||||||
|
let continuation = (line =~ '[A-Za-z0-9_]\s*$')
|
||||||
|
|
||||||
|
|
||||||
|
" Check current line; search for simplistic matching start-of-block
|
||||||
|
let line = getline(v:lnum)
|
||||||
|
if line =~ '^\s*#'
|
||||||
|
" Start of line for ada-pp
|
||||||
|
let ind = 0
|
||||||
|
elseif continuation && line =~ '^\s*('
|
||||||
|
" Don't do this if we've already indented due to the previous line
|
||||||
|
if ind == initind
|
||||||
|
let ind = ind + shiftwidth()
|
||||||
|
endif
|
||||||
|
elseif line =~ '^\s*\(begin\|is\)\>'
|
||||||
|
let ind = s:MainBlockIndent( ind, lnum, '\(procedure\|function\|declare\|package\|task\)\>', 'begin\>' )
|
||||||
|
elseif line =~ '^\s*record\>'
|
||||||
|
let ind = s:MainBlockIndent( ind, lnum, 'type\>\|for\>.*\<use\>', '' ) + shiftwidth()
|
||||||
|
elseif line =~ '^\s*\(else\|elsif\)\>'
|
||||||
|
let ind = s:MainBlockIndent( ind, lnum, 'if\>', '' )
|
||||||
|
elseif line =~ '^\s*when\>'
|
||||||
|
" Align 'when' one /in/ from matching block start
|
||||||
|
let ind = s:MainBlockIndent( ind, lnum, '\(case\|exception\)\>', '' ) + shiftwidth()
|
||||||
|
elseif line =~ '^\s*end\>\s*\<if\>'
|
||||||
|
" End of if statements
|
||||||
|
let ind = s:EndBlockIndent( ind, lnum, 'if\>', 'end\>\s*\<if\>' )
|
||||||
|
elseif line =~ '^\s*end\>\s*\<loop\>'
|
||||||
|
" End of loops
|
||||||
|
let ind = s:EndBlockIndent( ind, lnum, '\(\(while\|for\)\>.*\)\?\<loop\>', 'end\>\s*\<loop\>' )
|
||||||
|
elseif line =~ '^\s*end\>\s*\<record\>'
|
||||||
|
" End of records
|
||||||
|
let ind = s:EndBlockIndent( ind, lnum, '\(type\>.*\)\=\<record\>', 'end\>\s*\<record\>' )
|
||||||
|
elseif line =~ '^\s*end\>\s*\<procedure\>'
|
||||||
|
" End of procedures
|
||||||
|
let ind = s:EndBlockIndent( ind, lnum, 'procedure\>.*\<is\>', 'end\>\s*\<procedure\>' )
|
||||||
|
elseif line =~ '^\s*end\>\s*\<case\>'
|
||||||
|
" End of case statement
|
||||||
|
let ind = s:EndBlockIndent( ind, lnum, 'case\>.*\<is\>', 'end\>\s*\<case\>' )
|
||||||
|
elseif line =~ '^\s*end\>'
|
||||||
|
" General case for end
|
||||||
|
let ind = s:MainBlockIndent( ind, lnum, '\(if\|while\|for\|loop\|accept\|begin\|record\|case\|exception\|package\)\>', '' )
|
||||||
|
elseif line =~ '^\s*exception\>'
|
||||||
|
let ind = s:MainBlockIndent( ind, lnum, 'begin\>', '' )
|
||||||
|
elseif line =~ '^\s*then\>'
|
||||||
|
let ind = s:MainBlockIndent( ind, lnum, 'if\>', '' )
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ind
|
||||||
|
endfunction GetAdaIndent
|
||||||
|
|
||||||
|
let &cpo = s:keepcpo
|
||||||
|
unlet s:keepcpo
|
||||||
|
|
||||||
|
finish " 1}}}
|
||||||
|
|
||||||
|
"------------------------------------------------------------------------------
|
||||||
|
" Copyright (C) 2006 Martin Krischik
|
||||||
|
"
|
||||||
|
" Vim is Charityware - see ":help license" or uganda.txt for licence details.
|
||||||
|
"------------------------------------------------------------------------------
|
||||||
|
" vim: textwidth=78 wrap tabstop=8 shiftwidth=3 softtabstop=3 noexpandtab
|
||||||
|
" vim: foldmethod=marker
|
||||||
|
|
||||||
|
endif
|
||||||
16
indent/ant.vim
Normal file
16
indent/ant.vim
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ant') == -1
|
||||||
|
|
||||||
|
" Vim indent file
|
||||||
|
" Language: ANT files
|
||||||
|
" Maintainer: David Fishburn <fishburn@ianywhere.com>
|
||||||
|
" Last Change: Thu May 15 2003 10:02:54 PM
|
||||||
|
|
||||||
|
" Only load this indent file when no other was loaded.
|
||||||
|
if exists("b:did_indent")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Use XML formatting rules
|
||||||
|
runtime! indent/xml.vim
|
||||||
|
|
||||||
|
endif
|
||||||
15
indent/automake.vim
Normal file
15
indent/automake.vim
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'automake') == -1
|
||||||
|
|
||||||
|
" Vim indent file
|
||||||
|
" Language: automake
|
||||||
|
" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
|
||||||
|
" Latest Revision: 2006-04-19
|
||||||
|
|
||||||
|
if exists("b:did_indent")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
" same as makefile indenting for now.
|
||||||
|
runtime! indent/make.vim
|
||||||
|
|
||||||
|
endif
|
||||||
236
indent/awk.vim
Normal file
236
indent/awk.vim
Normal file
@@ -0,0 +1,236 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'awk') == -1
|
||||||
|
|
||||||
|
" vim: set sw=3 sts=3:
|
||||||
|
|
||||||
|
" Awk indent script. It can handle multi-line statements and expressions.
|
||||||
|
" It works up to the point where the distinction between correct/incorrect
|
||||||
|
" and personal taste gets fuzzy. Drop me an e-mail for bug reports and
|
||||||
|
" reasonable style suggestions.
|
||||||
|
"
|
||||||
|
" Bugs:
|
||||||
|
" =====
|
||||||
|
" - Some syntax errors may cause erratic indentation.
|
||||||
|
" - Same for very unusual but syntacticly correct use of { }
|
||||||
|
" - In some cases it's confused by the use of ( and { in strings constants
|
||||||
|
" - This version likes the closing brace of a multiline pattern-action be on
|
||||||
|
" character position 1 before the following pattern-action combination is
|
||||||
|
" formatted
|
||||||
|
|
||||||
|
" Author:
|
||||||
|
" =======
|
||||||
|
" Erik Janssen, ejanssen@itmatters.nl
|
||||||
|
"
|
||||||
|
" History:
|
||||||
|
" ========
|
||||||
|
" 26-04-2002 Got initial version working reasonably well
|
||||||
|
" 29-04-2002 Fixed problems in function headers and max line width
|
||||||
|
" Added support for two-line if's without curly braces
|
||||||
|
" Fixed hang: 2011 Aug 31
|
||||||
|
|
||||||
|
" Only load this indent file when no other was loaded.
|
||||||
|
if exists("b:did_indent")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
let b:did_indent = 1
|
||||||
|
|
||||||
|
setlocal indentexpr=GetAwkIndent()
|
||||||
|
" Mmm, copied from the tcl indent program. Is this okay?
|
||||||
|
setlocal indentkeys-=:,0#
|
||||||
|
|
||||||
|
" Only define the function once.
|
||||||
|
if exists("*GetAwkIndent")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
" This function contains a lot of exit points. It checks for simple cases
|
||||||
|
" first to get out of the function as soon as possible, thereby reducing the
|
||||||
|
" number of possibilities later on in the difficult parts
|
||||||
|
|
||||||
|
function! GetAwkIndent()
|
||||||
|
|
||||||
|
" Find previous line and get its indentation
|
||||||
|
let prev_lineno = s:Get_prev_line( v:lnum )
|
||||||
|
if prev_lineno == 0
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
let prev_data = getline( prev_lineno )
|
||||||
|
let ind = indent( prev_lineno )
|
||||||
|
|
||||||
|
" Increase indent if the previous line contains an opening brace. Search
|
||||||
|
" for this brace the hard way to prevent errors if the previous line is a
|
||||||
|
" 'pattern { action }' (simple check match on /{/ increases the indent then)
|
||||||
|
|
||||||
|
if s:Get_brace_balance( prev_data, '{', '}' ) > 0
|
||||||
|
return ind + shiftwidth()
|
||||||
|
endif
|
||||||
|
|
||||||
|
let brace_balance = s:Get_brace_balance( prev_data, '(', ')' )
|
||||||
|
|
||||||
|
" If prev line has positive brace_balance and starts with a word (keyword
|
||||||
|
" or function name), align the current line on the first '(' of the prev
|
||||||
|
" line
|
||||||
|
|
||||||
|
if brace_balance > 0 && s:Starts_with_word( prev_data )
|
||||||
|
return s:Safe_indent( ind, s:First_word_len(prev_data), getline(v:lnum))
|
||||||
|
endif
|
||||||
|
|
||||||
|
" If this line starts with an open brace bail out now before the line
|
||||||
|
" continuation checks.
|
||||||
|
|
||||||
|
if getline( v:lnum ) =~ '^\s*{'
|
||||||
|
return ind
|
||||||
|
endif
|
||||||
|
|
||||||
|
" If prev line seems to be part of multiline statement:
|
||||||
|
" 1. Prev line is first line of a multiline statement
|
||||||
|
" -> attempt to indent on first ' ' or '(' of prev line, just like we
|
||||||
|
" indented the positive brace balance case above
|
||||||
|
" 2. Prev line is not first line of a multiline statement
|
||||||
|
" -> copy indent of prev line
|
||||||
|
|
||||||
|
let continue_mode = s:Seems_continuing( prev_data )
|
||||||
|
if continue_mode > 0
|
||||||
|
if s:Seems_continuing( getline(s:Get_prev_line( prev_lineno )) )
|
||||||
|
" Case 2
|
||||||
|
return ind
|
||||||
|
else
|
||||||
|
" Case 1
|
||||||
|
if continue_mode == 1
|
||||||
|
" Need continuation due to comma, backslash, etc
|
||||||
|
return s:Safe_indent( ind, s:First_word_len(prev_data), getline(v:lnum))
|
||||||
|
else
|
||||||
|
" if/for/while without '{'
|
||||||
|
return ind + shiftwidth()
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
" If the previous line doesn't need continuation on the current line we are
|
||||||
|
" on the start of a new statement. We have to make sure we align with the
|
||||||
|
" previous statement instead of just the previous line. This is a bit
|
||||||
|
" complicated because the previous statement might be multi-line.
|
||||||
|
"
|
||||||
|
" The start of a multiline statement can be found by:
|
||||||
|
"
|
||||||
|
" 1 If the previous line contains closing braces and has negative brace
|
||||||
|
" balance, search backwards until cumulative brace balance becomes zero,
|
||||||
|
" take indent of that line
|
||||||
|
" 2 If the line before the previous needs continuation search backward
|
||||||
|
" until that's not the case anymore. Take indent of one line down.
|
||||||
|
|
||||||
|
" Case 1
|
||||||
|
if prev_data =~ ')' && brace_balance < 0
|
||||||
|
while brace_balance != 0 && prev_lineno > 0
|
||||||
|
let prev_lineno = s:Get_prev_line( prev_lineno )
|
||||||
|
let prev_data = getline( prev_lineno )
|
||||||
|
let brace_balance=brace_balance+s:Get_brace_balance(prev_data,'(',')' )
|
||||||
|
endwhile
|
||||||
|
let ind = indent( prev_lineno )
|
||||||
|
else
|
||||||
|
" Case 2
|
||||||
|
if s:Seems_continuing( getline( prev_lineno - 1 ) )
|
||||||
|
let prev_lineno = prev_lineno - 2
|
||||||
|
let prev_data = getline( prev_lineno )
|
||||||
|
while prev_lineno > 0 && (s:Seems_continuing( prev_data ) > 0)
|
||||||
|
let prev_lineno = s:Get_prev_line( prev_lineno )
|
||||||
|
let prev_data = getline( prev_lineno )
|
||||||
|
endwhile
|
||||||
|
let ind = indent( prev_lineno + 1 )
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Decrease indent if this line contains a '}'.
|
||||||
|
if getline(v:lnum) =~ '^\s*}'
|
||||||
|
let ind = ind - shiftwidth()
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ind
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Find the open and close braces in this line and return how many more open-
|
||||||
|
" than close braces there are. It's also used to determine cumulative balance
|
||||||
|
" across multiple lines.
|
||||||
|
|
||||||
|
function! s:Get_brace_balance( line, b_open, b_close )
|
||||||
|
let line2 = substitute( a:line, a:b_open, "", "g" )
|
||||||
|
let openb = strlen( a:line ) - strlen( line2 )
|
||||||
|
let line3 = substitute( line2, a:b_close, "", "g" )
|
||||||
|
let closeb = strlen( line2 ) - strlen( line3 )
|
||||||
|
return openb - closeb
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Find out whether the line starts with a word (i.e. keyword or function
|
||||||
|
" call). Might need enhancements here.
|
||||||
|
|
||||||
|
function! s:Starts_with_word( line )
|
||||||
|
if a:line =~ '^\s*[a-zA-Z_0-9]\+\s*('
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
return 0
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Find the length of the first word in a line. This is used to be able to
|
||||||
|
" align a line relative to the 'print ' or 'if (' on the previous line in case
|
||||||
|
" such a statement spans multiple lines.
|
||||||
|
" Precondition: only to be used on lines where 'Starts_with_word' returns 1.
|
||||||
|
|
||||||
|
function! s:First_word_len( line )
|
||||||
|
let white_end = matchend( a:line, '^\s*' )
|
||||||
|
if match( a:line, '^\s*func' ) != -1
|
||||||
|
let word_end = matchend( a:line, '[a-z]\+\s\+[a-zA-Z_0-9]\+[ (]*' )
|
||||||
|
else
|
||||||
|
let word_end = matchend( a:line, '[a-zA-Z_0-9]\+[ (]*' )
|
||||||
|
endif
|
||||||
|
return word_end - white_end
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Determine if 'line' completes a statement or is continued on the next line.
|
||||||
|
" This one is far from complete and accepts illegal code. Not important for
|
||||||
|
" indenting, however.
|
||||||
|
|
||||||
|
function! s:Seems_continuing( line )
|
||||||
|
" Unfinished lines
|
||||||
|
if a:line =~ '\(--\|++\)\s*$'
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
if a:line =~ '[\\,\|\&\+\-\*\%\^]\s*$'
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
" if/for/while (cond) eol
|
||||||
|
if a:line =~ '^\s*\(if\|while\|for\)\s*(.*)\s*$' || a:line =~ '^\s*else\s*'
|
||||||
|
return 2
|
||||||
|
endif
|
||||||
|
return 0
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Get previous relevant line. Search back until a line is that is no
|
||||||
|
" comment or blank and return the line number
|
||||||
|
|
||||||
|
function! s:Get_prev_line( lineno )
|
||||||
|
let lnum = a:lineno - 1
|
||||||
|
let data = getline( lnum )
|
||||||
|
while lnum > 0 && (data =~ '^\s*#' || data =~ '^\s*$')
|
||||||
|
let lnum = lnum - 1
|
||||||
|
let data = getline( lnum )
|
||||||
|
endwhile
|
||||||
|
return lnum
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" This function checks whether an indented line exceeds a maximum linewidth
|
||||||
|
" (hardcoded 80). If so and it is possible to stay within 80 positions (or
|
||||||
|
" limit num of characters beyond linewidth) by decreasing the indent (keeping
|
||||||
|
" it > base_indent), do so.
|
||||||
|
|
||||||
|
function! s:Safe_indent( base, wordlen, this_line )
|
||||||
|
let line_base = matchend( a:this_line, '^\s*' )
|
||||||
|
let line_len = strlen( a:this_line ) - line_base
|
||||||
|
let indent = a:base
|
||||||
|
if (indent + a:wordlen + line_len) > 80
|
||||||
|
" Simple implementation good enough for the time being
|
||||||
|
let indent = indent + 3
|
||||||
|
endif
|
||||||
|
return indent + a:wordlen
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -23,18 +23,19 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
|
|||||||
" Language: GraphQL
|
" Language: GraphQL
|
||||||
" Maintainer: Jon Parise <jon@indelible.org>
|
" Maintainer: Jon Parise <jon@indelible.org>
|
||||||
|
|
||||||
if exists('b:did_indent')
|
" Set our local options if indentation hasn't already been set up.
|
||||||
finish
|
" This generally means we've been detected as the primary filetype.
|
||||||
|
if !exists('b:did_indent')
|
||||||
|
setlocal autoindent
|
||||||
|
setlocal nocindent
|
||||||
|
setlocal nolisp
|
||||||
|
setlocal nosmartindent
|
||||||
|
|
||||||
|
setlocal indentexpr=GetGraphQLIndent()
|
||||||
|
setlocal indentkeys=0{,0},0),0[,0],0#,!^F,o,O
|
||||||
|
|
||||||
|
let b:did_indent = 1
|
||||||
endif
|
endif
|
||||||
let b:did_indent = 1
|
|
||||||
|
|
||||||
setlocal autoindent
|
|
||||||
setlocal nocindent
|
|
||||||
setlocal nolisp
|
|
||||||
setlocal nosmartindent
|
|
||||||
|
|
||||||
setlocal indentexpr=GetGraphQLIndent()
|
|
||||||
setlocal indentkeys=0{,0},0),0[,0],0#,!^F,o,O
|
|
||||||
|
|
||||||
" If our indentation function already exists, we have nothing more to do.
|
" If our indentation function already exists, we have nothing more to do.
|
||||||
if exists('*GetGraphQLIndent')
|
if exists('*GetGraphQLIndent')
|
||||||
@@ -46,7 +47,7 @@ set cpoptions&vim
|
|||||||
|
|
||||||
" Check if the character at lnum:col is inside a string.
|
" Check if the character at lnum:col is inside a string.
|
||||||
function s:InString(lnum, col)
|
function s:InString(lnum, col)
|
||||||
return synIDattr(synID(a:lnum, a:col, 1), 'name') is# 'graphqlString'
|
return synIDattr(synID(a:lnum, a:col, 1), 'name') ==# 'graphqlString'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function GetGraphQLIndent()
|
function GetGraphQLIndent()
|
||||||
|
|||||||
@@ -843,12 +843,11 @@ func! HtmlIndent_FindTagStart(lnum)
|
|||||||
" - a flag indicating whether we found the end of a tag.
|
" - a flag indicating whether we found the end of a tag.
|
||||||
" This method is global so that HTML-like indenters can use it.
|
" This method is global so that HTML-like indenters can use it.
|
||||||
" To avoid matching " > " or " < " inside a string require that the opening
|
" To avoid matching " > " or " < " inside a string require that the opening
|
||||||
" "<" is followed by a word character and the closing ">" comes after a
|
" "<" is followed by a word character
|
||||||
" non-white character.
|
|
||||||
let idx = match(getline(a:lnum), '\S>\s*$')
|
let idx = match(getline(a:lnum), '\S>\s*$')
|
||||||
if idx > 0
|
if idx > 0
|
||||||
call cursor(a:lnum, idx)
|
call cursor(a:lnum, idx)
|
||||||
let lnum = searchpair('<\w', '' , '\S>', 'bW', '', max([a:lnum - b:html_indent_line_limit, 0]))
|
let lnum = searchpair('<\w', '' , '>', 'bW', '', max([a:lnum - b:html_indent_line_limit, 0]))
|
||||||
if lnum > 0
|
if lnum > 0
|
||||||
return [lnum, 1]
|
return [lnum, 1]
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vm') == -1
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'velocity') == -1
|
||||||
|
|
||||||
if exists("b:did_indent")
|
if exists("b:did_indent")
|
||||||
finish
|
finish
|
||||||
|
|||||||
1708
packages.yaml
Normal file
1708
packages.yaml
Normal file
File diff suppressed because it is too large
Load Diff
723
scripts/build
Executable file
723
scripts/build
Executable file
@@ -0,0 +1,723 @@
|
|||||||
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
|
require 'open-uri'
|
||||||
|
require 'open3'
|
||||||
|
require 'yaml'
|
||||||
|
require 'fileutils'
|
||||||
|
require 'set'
|
||||||
|
require 'json'
|
||||||
|
require 'tsort'
|
||||||
|
|
||||||
|
Dir.chdir(File.dirname(__dir__))
|
||||||
|
|
||||||
|
BASE_URL = 'https://raw.githubusercontent.com/github/linguist/master'
|
||||||
|
|
||||||
|
def camelize(str)
|
||||||
|
str.split(/[-_\.]/).map { |a| a.capitalize }.join("")
|
||||||
|
end
|
||||||
|
|
||||||
|
def except(hash, *keys)
|
||||||
|
h = hash.dup
|
||||||
|
keys.each { |k| h.delete(k) }
|
||||||
|
h
|
||||||
|
end
|
||||||
|
|
||||||
|
def load_data()
|
||||||
|
packages = Hash[YAML.load_stream(File.read('packages.yaml'))
|
||||||
|
.group_by { |a| a.fetch("name") }
|
||||||
|
.map { |a, b| [a, b.first] }]
|
||||||
|
|
||||||
|
deps = Hash.new { |h, k| h[k] = [] }
|
||||||
|
|
||||||
|
for package in packages.values
|
||||||
|
for name in [package.fetch("after", [])].flatten
|
||||||
|
packages[name] or raise "#{package["name"]} depends on unknown package: #{name}"
|
||||||
|
deps[name] << package["name"]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
each_node = lambda {|&b| packages.keys.each(&b) }
|
||||||
|
each_child = lambda {|n, &b| deps[n].each(&b) }
|
||||||
|
|
||||||
|
languages = load_languages
|
||||||
|
|
||||||
|
# Reason can have ocaml as interpreter but let's not depend on it...
|
||||||
|
languages["Reason"]["interpreters"] -= ["ocaml"]
|
||||||
|
|
||||||
|
packages = TSort.tsort(each_node, each_child).map { |a| packages[a] }
|
||||||
|
|
||||||
|
for package in packages
|
||||||
|
for filetype in package["filetypes"]
|
||||||
|
if filetype["linguist"]
|
||||||
|
if filetype["extensions"]
|
||||||
|
raise "#{package["name"]} #{filetype["name"]}: extensions can't be set when linguist is defined"
|
||||||
|
end
|
||||||
|
|
||||||
|
if filetype["filenames"]
|
||||||
|
raise "#{package["name"]} #{filetype["name"]}: filenames can't be set when linguist is defined"
|
||||||
|
end
|
||||||
|
|
||||||
|
linguist = languages.fetch(filetype["linguist"])
|
||||||
|
|
||||||
|
filetype["extensions"] = (linguist["extensions"] || []).map { |e| e[1..-1] } |
|
||||||
|
filetype.fetch("extra_extensions", []) -
|
||||||
|
filetype.fetch("ignored_extensions", []).uniq
|
||||||
|
|
||||||
|
filetype["filenames"] = (linguist["filenames"] || []) |
|
||||||
|
filetype.fetch("extra_filenames", []) -
|
||||||
|
filetype.fetch("ignored_filenames", []).uniq
|
||||||
|
|
||||||
|
filetype["interpreters"] = (linguist["interpreters"] || []) |
|
||||||
|
filetype.fetch("extra_interpreters", []) -
|
||||||
|
filetype.fetch("ignored_interpreters", []).uniq
|
||||||
|
else
|
||||||
|
filetype["extensions"] ||= []
|
||||||
|
filetype["filenames"] ||= []
|
||||||
|
filetype["interpreters"] ||= []
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
heuristics = YAML.load_stream(File.read('heuristics.yaml'))
|
||||||
|
|
||||||
|
[packages, transform_patterns(heuristics)]
|
||||||
|
end
|
||||||
|
|
||||||
|
def parallel(*procs)
|
||||||
|
threads = procs.map { |p| Thread.new { method(p).call } }
|
||||||
|
threads.map(&:join).map(&:value)
|
||||||
|
end
|
||||||
|
|
||||||
|
def read_strings(data, keys, print=false)
|
||||||
|
if data.is_a?(Hash)
|
||||||
|
data.flat_map do |key, val|
|
||||||
|
read_strings(val, keys, keys.include?(key))
|
||||||
|
end
|
||||||
|
elsif data.is_a?(Array)
|
||||||
|
data.flat_map { |d| read_strings(d, keys, print) }
|
||||||
|
elsif data.is_a?(String)
|
||||||
|
print ? [data] : []
|
||||||
|
else
|
||||||
|
[]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def patterns_to_vim_patterns(patterns)
|
||||||
|
stdin, stdout, stderr = Open3.popen3('vim', '-V', '--clean', '/dev/stdin', '-es', '-c', "echo expand('%:p:h') | source #{__dir__}/eregex.vim", '-c', "for line in range(0, line('$')) | call setline(line, ExtendedRegex2VimRegex(getline(line))) | endfor", '-c', ':wq! /dev/stdout', chdir: __dir__)
|
||||||
|
stdin.write(patterns.join("\n"))
|
||||||
|
stdin.close
|
||||||
|
stdout.readlines.map(&:chomp).map do |r|
|
||||||
|
r.gsub('\b', '\(\<\|\>\)')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def each_hash(data, &block)
|
||||||
|
if data.is_a?(Hash)
|
||||||
|
yield data
|
||||||
|
data.each do |key, val|
|
||||||
|
each_hash(val, &block)
|
||||||
|
end
|
||||||
|
elsif data.is_a?(Array)
|
||||||
|
data.map { |d| each_hash(d, &block) }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def transform_patterns(heuristics)
|
||||||
|
patterns = []
|
||||||
|
each_hash(heuristics) do |h|
|
||||||
|
if h.has_key?("pattern")
|
||||||
|
patterns << h["pattern"]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
patterns_mapping = Hash[patterns.zip(patterns_to_vim_patterns(patterns))]
|
||||||
|
each_hash(heuristics) do |h|
|
||||||
|
if h.has_key?("pattern")
|
||||||
|
h["pattern"] = patterns_mapping.fetch(h["pattern"])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
heuristics
|
||||||
|
end
|
||||||
|
|
||||||
|
def load_languages
|
||||||
|
url = "#{BASE_URL}/lib/linguist/languages.yml"
|
||||||
|
data = URI.open(url) { |io| YAML.load(io.read) }
|
||||||
|
end
|
||||||
|
|
||||||
|
def parse_remote(remote)
|
||||||
|
match = remote.match(/(?<repo>[^@:]+)(?:@(?<branch>[^:]+))?(?::(?<path>.*))?/)
|
||||||
|
[match[:repo], match[:branch] || "master", match[:path]]
|
||||||
|
end
|
||||||
|
|
||||||
|
def copy_file(package, src, dest)
|
||||||
|
FileUtils.mkdir_p(File.dirname(dest))
|
||||||
|
name = package.fetch("name")
|
||||||
|
|
||||||
|
open(src, "r") do |input|
|
||||||
|
open(dest, "a+") do |output|
|
||||||
|
if name == "jsx"
|
||||||
|
output << "if !exists('g:polyglot_disabled') || !(index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'jsx') != -1)\n\n"
|
||||||
|
else
|
||||||
|
output << "if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, '#{name}') == -1\n\n"
|
||||||
|
end
|
||||||
|
IO.copy_stream(input, output)
|
||||||
|
output << "\nendif\n"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def download(packages)
|
||||||
|
packages.map { |p| p["remote"] or raise "No remote for: " + p["name"] }.uniq.each_slice(20) do |remotes|
|
||||||
|
remotes.map do |remote|
|
||||||
|
Thread.new do
|
||||||
|
repo, branch, path = parse_remote(remote)
|
||||||
|
dir = "tmp/" + repo
|
||||||
|
unless File.exist?(dir)
|
||||||
|
FileUtils.mkdir_p(dir)
|
||||||
|
url = "https://codeload.github.com/#{repo}/tar.gz/#{branch}"
|
||||||
|
`curl --silent -fL #{url} | tar -zx -C "#{dir}" --strip 1`
|
||||||
|
end
|
||||||
|
progress
|
||||||
|
end
|
||||||
|
end.map(&:join)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
$i = 0
|
||||||
|
LYRICS = "Never gonna give you up. Never gonna let you down. " +
|
||||||
|
"Never gonna run around and desert you. " +
|
||||||
|
"Never gonna make you cry. Never gonna say goodbye. " +
|
||||||
|
"Never gonna tell a lie and hurt you."
|
||||||
|
|
||||||
|
$mutex = Mutex.new
|
||||||
|
def progress
|
||||||
|
$mutex.synchronize do
|
||||||
|
$stdout.write(LYRICS[$i] || ".")
|
||||||
|
$i += 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def indent(str, amount)
|
||||||
|
str.gsub(/^(?!$)/, " " * amount).gsub(/\s+$/, "").gsub(/^ +\n/, "")
|
||||||
|
end
|
||||||
|
|
||||||
|
def pattern_to_condition(rule)
|
||||||
|
operator = (rule["negative"] ? "!" : "=") + "~" + (rule["ignore_case"] ? "?" : "#")
|
||||||
|
|
||||||
|
"line #{operator} '#{rule["pattern"]}'"
|
||||||
|
end
|
||||||
|
|
||||||
|
def rules_to_code(rules)
|
||||||
|
output = ""
|
||||||
|
|
||||||
|
vars = []
|
||||||
|
each_hash(rules) do |h|
|
||||||
|
if h.has_key?("set")
|
||||||
|
vars << h["set"]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
if vars.size > 0
|
||||||
|
output << vars.uniq.sort.map do |var|
|
||||||
|
"let #{var} = 0"
|
||||||
|
end.join("\n") + "\n"
|
||||||
|
end
|
||||||
|
|
||||||
|
output << rule_to_code(rules)
|
||||||
|
end
|
||||||
|
|
||||||
|
def rule_to_code(rule)
|
||||||
|
if rule.has_key?("lines")
|
||||||
|
if rule["lines"] == 1
|
||||||
|
return <<~EOS
|
||||||
|
let line = getline(1)
|
||||||
|
|
||||||
|
#{indent(rule_to_code(except(rule, "lines")), 0)}
|
||||||
|
EOS
|
||||||
|
else
|
||||||
|
return <<~EOS
|
||||||
|
for lnum in range(1, min([line("$"), #{rule["lines"]}]))
|
||||||
|
let line = getline(lnum)
|
||||||
|
|
||||||
|
#{indent(rule_to_code(except(rule, "lines")), 2)}
|
||||||
|
endfor
|
||||||
|
EOS
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if rule.has_key?("rules")
|
||||||
|
return rule["rules"].map { |r| indent(rule_to_code(r), 0) }.join("\n")
|
||||||
|
end
|
||||||
|
|
||||||
|
if rule.has_key?("pattern")
|
||||||
|
return <<~EOS
|
||||||
|
if #{pattern_to_condition(rule)}
|
||||||
|
#{indent(rule_to_code(except(rule, "pattern", "ignore_case", "negative")), 2)}
|
||||||
|
endif
|
||||||
|
EOS
|
||||||
|
end
|
||||||
|
|
||||||
|
if rule.has_key?("if_set")
|
||||||
|
return <<~EOS
|
||||||
|
if #{rule["negative"] ? "!" : ""}#{rule["if_set"]}
|
||||||
|
#{indent(rule_to_code(except(rule, "if_set", "negative")), 2)}
|
||||||
|
endif
|
||||||
|
EOS
|
||||||
|
end
|
||||||
|
|
||||||
|
if rule.has_key?("set")
|
||||||
|
return <<~EOS
|
||||||
|
let #{rule["set"]} = 1
|
||||||
|
#{indent(rule_to_code(except(rule, "set")), 0)}
|
||||||
|
EOS
|
||||||
|
end
|
||||||
|
|
||||||
|
if (rule.keys - ["filetype", "override", "set"]).size > 0
|
||||||
|
raise "Unknown rule: #{JSON.generate(rule)}"
|
||||||
|
end
|
||||||
|
|
||||||
|
if rule.has_key?("override")
|
||||||
|
return <<~EOS
|
||||||
|
if exists("#{rule["override"]}")
|
||||||
|
exe "setf " . #{rule["override"]} | return
|
||||||
|
endif
|
||||||
|
EOS
|
||||||
|
end
|
||||||
|
|
||||||
|
if rule.has_key?("filetype")
|
||||||
|
return "setf #{rule["filetype"]} | return"
|
||||||
|
end
|
||||||
|
|
||||||
|
return ""
|
||||||
|
end
|
||||||
|
|
||||||
|
def extract(packages)
|
||||||
|
all_dirs = %w(syntax indent doc compiler autoload ftplugin ctags extras after)
|
||||||
|
|
||||||
|
default_dirs = %w(
|
||||||
|
syntax indent doc compiler autoload ftplugin ctags extras
|
||||||
|
after/syntax after/indent after/ftplugin
|
||||||
|
)
|
||||||
|
|
||||||
|
FileUtils.rm_rf(all_dirs)
|
||||||
|
|
||||||
|
output = []
|
||||||
|
packages.map do |package|
|
||||||
|
repo, branch, path = parse_remote(package["remote"])
|
||||||
|
dir = "tmp/" + repo
|
||||||
|
dirs = package.fetch("dirs", default_dirs)
|
||||||
|
ignored_dirs = package.fetch("ignored_dirs", [])
|
||||||
|
if ignored_dirs.size > 0
|
||||||
|
dirs = dirs.reject { |d| ignored_dirs.any? { |id| d.start_with?(id) } }
|
||||||
|
end
|
||||||
|
dirs |= package.fetch("extra_dirs", [])
|
||||||
|
for subdir in dirs
|
||||||
|
subtree = "#{dir}/#{path ? path + "/" : ""}"
|
||||||
|
subpath = "#{subtree}#{subdir}"
|
||||||
|
if FileTest.directory?(subpath)
|
||||||
|
if repo == "vim/vim" && (["glob", "globs"] & package.keys).size == 0
|
||||||
|
raise "Package from vim/vim should define glob or globs: #{package["name"]}"
|
||||||
|
end
|
||||||
|
glob = package.fetch("glob", package.fetch('globs', '**/*.{vim,ctags,vital,txt}'))
|
||||||
|
Dir.glob("#{subdir}/#{glob}", base: subtree).each do |p|
|
||||||
|
next unless File.file?("#{subtree}/#{p}")
|
||||||
|
if p.include?("samba")
|
||||||
|
raise package["name"]
|
||||||
|
end
|
||||||
|
copy_file(package, "#{subtree}/#{p}", p)
|
||||||
|
end
|
||||||
|
elsif File.exist?(subpath)
|
||||||
|
copy_file(package, subpath, subdir)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if branch != "master" || path
|
||||||
|
if path
|
||||||
|
output << "- [#{package["name"]}](https://github.com/#{repo}/tree/#{branch}/#{path})"
|
||||||
|
else
|
||||||
|
output << "- [#{package["name"]}](https://github.com/#{repo}/tree/#{branch})"
|
||||||
|
end
|
||||||
|
else
|
||||||
|
output << "- [#{package["name"]}](https://github.com/#{repo})"
|
||||||
|
end
|
||||||
|
progress
|
||||||
|
end
|
||||||
|
|
||||||
|
readme = File.read('README.md')
|
||||||
|
|
||||||
|
readme.gsub!(
|
||||||
|
%r{(?<=<!--Package Count-->).*?(?=<!--/Package Count-->)},
|
||||||
|
output.size.to_s
|
||||||
|
)
|
||||||
|
|
||||||
|
readme.gsub!(
|
||||||
|
%r{(?<=<!--Language Packs-->).*?(?=<!--/Language Packs-->)}m,
|
||||||
|
"\n" + output.sort.join("\n") + "\n"
|
||||||
|
)
|
||||||
|
|
||||||
|
File.write('README.md', readme)
|
||||||
|
end
|
||||||
|
|
||||||
|
def generate_ftdetect(packages, heuristics)
|
||||||
|
output = <<~EOS
|
||||||
|
" don't spam the user when Vim is started in Vi compatibility mode
|
||||||
|
let s:cpo_save = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
" Disable all native vim ftdetect
|
||||||
|
if exists('g:polyglot_test')
|
||||||
|
autocmd!
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:disabled_packages = {}
|
||||||
|
|
||||||
|
if exists('g:polyglot_disabled')
|
||||||
|
for pkg in g:polyglot_disabled
|
||||||
|
let s:disabled_packages[pkg] = 1
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
|
||||||
|
function! s:SetDefault(name, value)
|
||||||
|
if !exists(a:name)
|
||||||
|
let {a:name} = a:value
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call s:SetDefault('g:markdown_enable_spell_checking', 0)
|
||||||
|
call s:SetDefault('g:markdown_enable_input_abbreviations', 0)
|
||||||
|
call s:SetDefault('g:markdown_enable_mappings', 0)
|
||||||
|
|
||||||
|
" Enable jsx syntax by default
|
||||||
|
call s:SetDefault('g:jsx_ext_required', 0)
|
||||||
|
|
||||||
|
" Make csv loading faster
|
||||||
|
call s:SetDefault('g:csv_start', 1)
|
||||||
|
call s:SetDefault('g:csv_end', 2)
|
||||||
|
|
||||||
|
" Disable json concealing by default
|
||||||
|
call s:SetDefault('g:vim_json_syntax_conceal', 0)
|
||||||
|
|
||||||
|
call s:SetDefault('g:filetype_euphoria', 'elixir')
|
||||||
|
|
||||||
|
if !exists('g:python_highlight_all')
|
||||||
|
call s:SetDefault('g:python_highlight_builtins', 1)
|
||||||
|
call s:SetDefault('g:python_highlight_builtin_objs', 1)
|
||||||
|
call s:SetDefault('g:python_highlight_builtin_types', 1)
|
||||||
|
call s:SetDefault('g:python_highlight_builtin_funcs', 1)
|
||||||
|
call s:SetDefault('g:python_highlight_builtin_funcs_kwarg', 1)
|
||||||
|
call s:SetDefault('g:python_highlight_exceptions', 1)
|
||||||
|
call s:SetDefault('g:python_highlight_string_formatting', 1)
|
||||||
|
call s:SetDefault('g:python_highlight_string_format', 1)
|
||||||
|
call s:SetDefault('g:python_highlight_string_templates', 1)
|
||||||
|
call s:SetDefault('g:python_highlight_indent_errors', 1)
|
||||||
|
call s:SetDefault('g:python_highlight_space_errors', 1)
|
||||||
|
call s:SetDefault('g:python_highlight_doctests', 1)
|
||||||
|
call s:SetDefault('g:python_highlight_func_calls', 1)
|
||||||
|
call s:SetDefault('g:python_highlight_class_vars', 1)
|
||||||
|
call s:SetDefault('g:python_highlight_operators', 1)
|
||||||
|
call s:SetDefault('g:python_highlight_file_headers_as_comments', 1)
|
||||||
|
call s:SetDefault('g:python_slow_sync', 1)
|
||||||
|
endif
|
||||||
|
EOS
|
||||||
|
|
||||||
|
extensions = Hash.new { |h, k| h[k] = [] }
|
||||||
|
|
||||||
|
for package in packages
|
||||||
|
for filetype in package["filetypes"]
|
||||||
|
for ext in filetype["extensions"]
|
||||||
|
extensions[ext] << filetype["name"]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
ambiguous_extensions = extensions
|
||||||
|
.select { |a, b| b.uniq.size > 1 }.keys.sort
|
||||||
|
|
||||||
|
expected_filetypes = detect_filetypes
|
||||||
|
|
||||||
|
for package in packages
|
||||||
|
name = package.fetch("name")
|
||||||
|
|
||||||
|
output << "if !has_key(s:disabled_packages, '#{name}')\n"
|
||||||
|
|
||||||
|
filetypes = package["filetypes"] or raise "Unknown filetype for: #{package["name"]}"
|
||||||
|
|
||||||
|
package_heuristics = []
|
||||||
|
|
||||||
|
for filetype in filetypes
|
||||||
|
name = filetype.fetch("name")
|
||||||
|
syntax = filetype["syntax"] ? " | set syntax=#{filetype["syntax"]}" : ""
|
||||||
|
|
||||||
|
set_command = "setf #{name}"
|
||||||
|
|
||||||
|
if filetype["syntax"]
|
||||||
|
set_command = "if !did_filetype() | set ft=#{name} syntax=#{filetype["syntax"]} | endif"
|
||||||
|
end
|
||||||
|
|
||||||
|
if filetype["custom_set"]
|
||||||
|
set_command = filetype["custom_set"]
|
||||||
|
end
|
||||||
|
|
||||||
|
extensions = filetype["extensions"]
|
||||||
|
filenames = filetype["filenames"]
|
||||||
|
|
||||||
|
if expected_filetypes[name] && !filetype["syntax"]
|
||||||
|
for e in expected_filetypes.fetch(name)[:extensions] - extensions - expand_all(filetype.fetch("ignored_extensions", []))
|
||||||
|
puts "Probable missing extension for #{name}: #{e}"
|
||||||
|
end
|
||||||
|
|
||||||
|
for e in expected_filetypes.fetch(name)[:filenames] - expand_all(filenames).flat_map { |e| [e, e.gsub(/^\./, '')] } - expand_all(filetype.fetch("ignored_filenames", [])) - ['*']
|
||||||
|
puts "Probable missing filename for #{name}: #{e}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
for extension in extensions.sort
|
||||||
|
outer_filetype = filetype["outer_filetype"]
|
||||||
|
if outer_filetype
|
||||||
|
output << " au BufNewFile *.*.#{extension} execute \"do BufNewFile filetypedetect \" . expand(\"<afile>:r\") | #{outer_filetype}\n"
|
||||||
|
output << " au BufReadPre *.*.#{extension} execute \"do BufRead filetypedetect \" . expand(\"<afile>:r\") | #{outer_filetype}\n"
|
||||||
|
end
|
||||||
|
|
||||||
|
heuristic = heuristics.find { |h| h["extensions"].include?(extension) }
|
||||||
|
if heuristic
|
||||||
|
package_heuristics << heuristic
|
||||||
|
else
|
||||||
|
# if ambiguous_extensions.include?(extension)
|
||||||
|
# puts "Ambiguous extension without heuristic: #{extension} => #{filetype["name"]}"
|
||||||
|
# end
|
||||||
|
#
|
||||||
|
output << " au BufNewFile,BufRead *.#{extension} #{set_command}\n"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
for filename in filenames.sort
|
||||||
|
if filename[0] == "."
|
||||||
|
filename = "{.,}" + filename[1..]
|
||||||
|
end
|
||||||
|
output << " au BufNewFile,BufRead #{filename} #{set_command}\n"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
for heuristic in package_heuristics.uniq
|
||||||
|
extensions = heuristic["extensions"].map { |e| "*.#{e}" }
|
||||||
|
output << " au! BufNewFile,BufRead #{extensions.join(",")} call polyglot#Detect#{camelize(heuristic["extensions"].first)}Filetype()\n"
|
||||||
|
end
|
||||||
|
|
||||||
|
output << "endif\n\n"
|
||||||
|
end
|
||||||
|
|
||||||
|
output << <<~EOS
|
||||||
|
au BufNewFile,BufRead,StdinReadPost *
|
||||||
|
\\ if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat
|
||||||
|
\\ | call polyglot#Heuristics() | endif
|
||||||
|
|
||||||
|
" restore Vi compatibility settings
|
||||||
|
let &cpo = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
|
EOS
|
||||||
|
|
||||||
|
File.write('ftdetect/polyglot.vim', output)
|
||||||
|
|
||||||
|
output = <<~EOS
|
||||||
|
" Line continuation is used here, remove 'C' from 'cpoptions'
|
||||||
|
let s:cpo_save = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
func! polyglot#Heuristics()
|
||||||
|
" Try to detect filetype from shebang
|
||||||
|
let l:filetype = polyglot#Shebang()
|
||||||
|
if l:filetype != ""
|
||||||
|
exec "setf " . l:filetype
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
let s:interpreters = {
|
||||||
|
EOS
|
||||||
|
|
||||||
|
for filetype in packages.flat_map { |p| p.fetch("filetypes", []) }.sort_by { |a| a["name"] }
|
||||||
|
for interpreter in filetype["interpreters"]
|
||||||
|
output << " \\ '#{interpreter}': '#{filetype["name"]}',\n"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
output << <<~EOS
|
||||||
|
\\ }
|
||||||
|
|
||||||
|
let s:r_hashbang = '^#!\\s*\\(\\S\\+\\)\\s*\\(.*\\)\\s*'
|
||||||
|
let s:r_envflag = '%(\\S\\+=\\S\\+\\|-[iS]\\|--ignore-environment\\|--split-string\\)'
|
||||||
|
let s:r_env = '^\\%(\\' . s:r_envflag . '\\s\\+\\)*\\(\\S\\+\\)'
|
||||||
|
|
||||||
|
func! polyglot#Shebang()
|
||||||
|
let l:line1 = getline(1)
|
||||||
|
|
||||||
|
if l:line1 !~# "^#!"
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:pathrest = matchlist(l:line1, s:r_hashbang)
|
||||||
|
|
||||||
|
if len(l:pathrest) == 0
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let [_, l:path, l:rest; __] = l:pathrest
|
||||||
|
|
||||||
|
let l:script = split(l:path, "/")[-1]
|
||||||
|
|
||||||
|
if l:script == "env"
|
||||||
|
let l:argspath = matchlist(l:rest, s:r_env)
|
||||||
|
if len(l:argspath) == 0
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:script = l:argspath[1]
|
||||||
|
endif
|
||||||
|
|
||||||
|
if has_key(s:interpreters, l:script)
|
||||||
|
return s:interpreters[l:script]
|
||||||
|
endif
|
||||||
|
|
||||||
|
for interpreter in keys(s:interpreters)
|
||||||
|
if l:script =~# '^' . interpreter
|
||||||
|
return s:interpreters[interpreter]
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
EOS
|
||||||
|
|
||||||
|
for heuristic in heuristics
|
||||||
|
output << <<~EOS
|
||||||
|
func! polyglot#Detect#{camelize(heuristic["extensions"].first)}Filetype()
|
||||||
|
#{indent(rules_to_code(heuristic), 2)}
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
EOS
|
||||||
|
end
|
||||||
|
|
||||||
|
output << <<~EOS
|
||||||
|
" Restore 'cpoptions'
|
||||||
|
let &cpo = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
|
EOS
|
||||||
|
|
||||||
|
File.write('autoload/polyglot.vim', output)
|
||||||
|
end
|
||||||
|
|
||||||
|
def generate_tests(packages)
|
||||||
|
output = <<~EOS
|
||||||
|
function! TestFiletype(filetype)
|
||||||
|
try
|
||||||
|
enew
|
||||||
|
exec 'set ft=' . a:filetype
|
||||||
|
catch
|
||||||
|
echo 'Error loading filetype ' . a:filetype . ':'
|
||||||
|
echo v:exception
|
||||||
|
echo v:throwpoint
|
||||||
|
exec ':cq!'
|
||||||
|
endtry
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
EOS
|
||||||
|
|
||||||
|
for package in packages
|
||||||
|
for filetype in package.fetch("filetypes", [])
|
||||||
|
output << "call TestFiletype('#{filetype["name"]}')\n"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
File.write('scripts/test_filetypes.vim', output)
|
||||||
|
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
def brace_expansion(s)
|
||||||
|
r=1 # Dummy value to forward-declare the parse function `r`
|
||||||
|
t=->x{ # Function to parse a bracket block
|
||||||
|
x=x[0].gsub(/^{(.*)}$/){$1} # Remove outer brackets if both are present
|
||||||
|
# x[0] is required because of quirks in the `scan` function
|
||||||
|
x=x.scan(/(({(\g<1>|,)*}|[^,{}]|(?<=,|^)(?=,|$))+)/)
|
||||||
|
# Regex black magic: collect elements of outer bracket
|
||||||
|
x.map{|i|i=i[0];i[?{]?r[i]:i}.flatten # For each element with brackets, run parse function
|
||||||
|
}
|
||||||
|
r=->x{ # Function to parse bracket expansions a{b,c}{d,e}
|
||||||
|
i=x.scan(/({(\g<1>)*}|[^{} ]+)/) # Regex black magic: scan for adjacent sets of brackets
|
||||||
|
i=i.map(&t) # Map all elements against the bracket parser function `t`
|
||||||
|
i.shift.product(*i).map &:join # Combine the adjacent sets with cartesian product and join them together
|
||||||
|
}
|
||||||
|
s.split.map(&r).flatten
|
||||||
|
end
|
||||||
|
|
||||||
|
def square_expansion(s)
|
||||||
|
return [s] unless s.include?('[')
|
||||||
|
s.scan(/(\[[^\]]+\]|[^\[]+)/).map { |x| x[0] }
|
||||||
|
.map { |x| x[0] == "[" ? x[1..-2].split("") : [x] }
|
||||||
|
.reduce(&:product).map(&:flatten).map(&:join)
|
||||||
|
end
|
||||||
|
|
||||||
|
def comma_expanson(s)
|
||||||
|
s.scan(/{[^{]+}|[^{]+/).map { |a| a[0] == "{" ? a : a.split(",", -1) }.reduce([]) do |a, b|
|
||||||
|
a.size > 0 ?
|
||||||
|
(b.is_a?(String) ?
|
||||||
|
a[0..-2] + [a[-1] + b] :
|
||||||
|
a[0..-2] + [a[-1] + b[0]] + b[1..-1]) :
|
||||||
|
[b].flatten
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def expand_all(pattern)
|
||||||
|
if pattern.is_a?(Array)
|
||||||
|
return pattern.flat_map { |p| expand_all(p) }
|
||||||
|
end
|
||||||
|
|
||||||
|
comma_expanson(pattern).flat_map do |e|
|
||||||
|
brace_expansion(e).flat_map do |e2|
|
||||||
|
square_expansion(e2)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def detect_filetypes
|
||||||
|
filetypes = Dir['tmp/**/ftdetect/*.vim'].flat_map do |file|
|
||||||
|
contents = File.read(file).gsub(/^\s*au(tocmd)?!?\s*$/, '')
|
||||||
|
results = contents.scan(/^\s*(?:au!|au|au[^g][^ ]*) +(?:\S+)\s+(\S+)[\s\\]+([^\n]+)/)
|
||||||
|
results = results.map do |a, b|
|
||||||
|
[
|
||||||
|
a,
|
||||||
|
b.gsub(/call (?:s:setf|s:StarSetf)\('([^']+)'\)/i, 'setf \1')
|
||||||
|
.gsub(/set(?:local)?\s+(?:ft|filetype)=(\S+)/, 'setf \1')
|
||||||
|
.gsub(/setf\S*/, 'setf')
|
||||||
|
.gsub(/.*setf\s+(\S+).*/, 'setf \1')
|
||||||
|
]
|
||||||
|
end.select { |a, b| b.match(/setf \S+/) }.map { |a, b| [a, b.split(" ")[1]] }
|
||||||
|
results
|
||||||
|
end
|
||||||
|
|
||||||
|
Hash[filetypes.flat_map do |ext, filetype|
|
||||||
|
expand_all(ext).map { |e| [filetype, e] }
|
||||||
|
end.group_by { |a, b| a }.map { |a, b| [a, b.map { |c, d| d }] }.map { |a, b|
|
||||||
|
[a, {
|
||||||
|
extensions: b.select { |x| x.match(/^\*\.[^\/]+$/) }.map { |a| a.strip[2..] },
|
||||||
|
filenames: expand_all(b.select { |x| !x.match(/^\*\.[^\/]+$/) })
|
||||||
|
}]
|
||||||
|
}]
|
||||||
|
end
|
||||||
|
|
||||||
|
if __FILE__ == $0
|
||||||
|
if !ENV["DEV"]
|
||||||
|
FileUtils.rm_rf("tmp")
|
||||||
|
end
|
||||||
|
|
||||||
|
packages, heuristics = load_data()
|
||||||
|
download(packages)
|
||||||
|
extract(packages)
|
||||||
|
generate_ftdetect(packages, heuristics)
|
||||||
|
generate_tests(packages)
|
||||||
|
puts(" Bye! Have a wonderful time!")
|
||||||
|
|
||||||
|
if !ENV["DEV"]
|
||||||
|
FileUtils.rm_rf("tmp")
|
||||||
|
end
|
||||||
|
end
|
||||||
1102
scripts/eregex.vim
Normal file
1102
scripts/eregex.vim
Normal file
File diff suppressed because it is too large
Load Diff
11
scripts/test
Executable file
11
scripts/test
Executable file
@@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
vim --clean -N -u <(echo "
|
||||||
|
let &rtp='$PWD,'.&rtp
|
||||||
|
let g:polyglot_test = 1
|
||||||
|
source scripts/test_extensions.vim
|
||||||
|
\"source scripts/test_filetypes.vim
|
||||||
|
qa!
|
||||||
|
")
|
||||||
209
scripts/test_extensions.vim
Normal file
209
scripts/test_extensions.vim
Normal file
@@ -0,0 +1,209 @@
|
|||||||
|
function! TestExtension(filetype, filename, content)
|
||||||
|
try
|
||||||
|
let g:message = ""
|
||||||
|
exec "noautocmd n " . a:filename
|
||||||
|
put =a:content
|
||||||
|
1delete _
|
||||||
|
filetype detect
|
||||||
|
exec "if &filetype != '" . a:filetype . "' \nthrow &filetype\nendif"
|
||||||
|
exec ":bw!"
|
||||||
|
catch
|
||||||
|
echo g:message
|
||||||
|
echo 'Filename "' . a:filename . '" does not resolve to extension "' . a:filetype . '"'
|
||||||
|
echo ' instead received: "' . v:exception . '"'
|
||||||
|
exec ':cq!'
|
||||||
|
endtry
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call TestExtension('sh', 'bash1', "#!/bin/bash")
|
||||||
|
call TestExtension('sh', 'bash2', "#! /bin/bash")
|
||||||
|
call TestExtension('sh', 'bash3', "#! /bin/bash2.3")
|
||||||
|
call TestExtension('sh', 'bash4', "#!/usr/bin/env bash")
|
||||||
|
call TestExtension('sh', 'bash6', "#!/usr/bin/env -i -=split-string foo=bar bash -l foo")
|
||||||
|
call TestExtension('sh', 'bash1', "#!/bin/bash")
|
||||||
|
|
||||||
|
" Vim help file
|
||||||
|
call TestExtension('help', $VIMRUNTIME . '/doc/foobar.txt', '')
|
||||||
|
|
||||||
|
" Abaqus or Trasys
|
||||||
|
call TestExtension('abaqus', 'foobar.inp', "*HEADING\nFoobar")
|
||||||
|
call TestExtension('trasys', 'foobar.inp', "MSC PATRAN\n* foobar\nHEADER SURFACE DATA\nBSC ENCLO1")
|
||||||
|
|
||||||
|
" 8th (Firth-derivative)
|
||||||
|
call TestExtension('8th', 'foobar.8th', '')
|
||||||
|
call TestExtension('8th', 'foobar.8th', '')
|
||||||
|
|
||||||
|
" A-A-P recipe
|
||||||
|
call TestExtension('aap', 'foobar.aap', '')
|
||||||
|
|
||||||
|
|
||||||
|
" A2ps printing utility
|
||||||
|
call TestExtension('a2ps', '/etc/a2ps.cfg', '')
|
||||||
|
call TestExtension('a2ps', '/usr/local/etc/a2ps.cfg', '')
|
||||||
|
call TestExtension('a2ps', '/etc/a2ps/foobar.cfg', '')
|
||||||
|
call TestExtension('a2ps', '/usr/local/etc/a2ps/foobar.cfg', '')
|
||||||
|
call TestExtension('a2ps', '/tmp/a2psrc', '')
|
||||||
|
call TestExtension('a2ps', '/tmp/.a2psrc', '')
|
||||||
|
|
||||||
|
" ABAB/4
|
||||||
|
call TestExtension('abap', 'foobar.abap', '')
|
||||||
|
|
||||||
|
" ABC music notation
|
||||||
|
call TestExtension('abc', 'foobar.abc', '')
|
||||||
|
|
||||||
|
" ABEL
|
||||||
|
call TestExtension('abel', 'foobar.abl', '')
|
||||||
|
|
||||||
|
" AceDB
|
||||||
|
call TestExtension('acedb', 'foobar.wrm', '')
|
||||||
|
|
||||||
|
" Ada (83, 9X, 95)
|
||||||
|
call TestExtension('ada', 'foobar.adb', '')
|
||||||
|
call TestExtension('ada', 'foobar.ads', '')
|
||||||
|
call TestExtension('ada', 'foobar.ada', '')
|
||||||
|
call TestExtension('ada', 'foobar.gpr', '')
|
||||||
|
|
||||||
|
" AHDL
|
||||||
|
call TestExtension('ahdl', 'foobar.tdf', '')
|
||||||
|
|
||||||
|
" AIDL
|
||||||
|
call TestExtension('aidl', 'foobar.aidl', '')
|
||||||
|
|
||||||
|
" AMPL
|
||||||
|
call TestExtension('ampl', 'foobar.run', '')
|
||||||
|
|
||||||
|
" Ant
|
||||||
|
call TestExtension('ant', 'build.xml', '')
|
||||||
|
|
||||||
|
" Arduino
|
||||||
|
call TestExtension('arduino', 'foobar.ino', '')
|
||||||
|
call TestExtension('arduino', 'foobar.pde', '')
|
||||||
|
|
||||||
|
" Apache config file
|
||||||
|
call TestExtension('apache', '.htaccess', '')
|
||||||
|
call TestExtension('apache', '/etc/httpd/foobar.conf', '')
|
||||||
|
call TestExtension('apache', '/etc/apache2/sites-foobar/foobar.com', '')
|
||||||
|
call TestExtension('apache', '/usr/local/etc/httpd/foobar.conf', '')
|
||||||
|
call TestExtension('apache', '/usr/local/etc/apache2/sites-foobar/foobar.com', '')
|
||||||
|
|
||||||
|
" XA65 MOS6510 cross assembler
|
||||||
|
call TestExtension('a65', 'foobar.a65', '')
|
||||||
|
|
||||||
|
" Applescript
|
||||||
|
call TestExtension('applescript', 'foobar.scpt', '')
|
||||||
|
|
||||||
|
" Applix ELF
|
||||||
|
call TestExtension('elf', 'foobar.am', '')
|
||||||
|
call TestExtension('automake', 'Makefile.am', '')
|
||||||
|
call TestExtension('automake', 'makefile.am', '')
|
||||||
|
|
||||||
|
" ALSA configuration
|
||||||
|
call TestExtension('alsaconf', '.asoundrc', '')
|
||||||
|
call TestExtension('alsaconf', '/usr/share/alsa/alsa.conf', '')
|
||||||
|
call TestExtension('alsaconf', '/media/foo/usr/share/alsa/alsa.conf', '')
|
||||||
|
call TestExtension('alsaconf', '/etc/asound.conf', '')
|
||||||
|
call TestExtension('alsaconf', '/media/foo/etc/asound.conf', '')
|
||||||
|
|
||||||
|
" Arc Macro Language
|
||||||
|
call TestExtension('aml', 'foobar.aml', '')
|
||||||
|
|
||||||
|
" APT config file
|
||||||
|
call TestExtension('aptconf', 'apt.conf', '')
|
||||||
|
call TestExtension('aptconf', '/root/.aptitude/config', '')
|
||||||
|
call TestExtension('aptconf', '/etc/apt/apt.conf.d/foo_bar-12', '')
|
||||||
|
call TestExtension('aptconf', '/etc/apt/apt.conf.d/foo_bar-12.conf', '')
|
||||||
|
call TestExtension('', '/etc/apt/apt.conf.d/.gsdf', '')
|
||||||
|
|
||||||
|
" Arch Inventory file
|
||||||
|
call TestExtension('arch', '.arch-inventory', '')
|
||||||
|
call TestExtension('arch', '=tagging-method', '')
|
||||||
|
|
||||||
|
" ART*Enterprise (formerly ART-IM)
|
||||||
|
call TestExtension('art', 'foobar.art', '')
|
||||||
|
|
||||||
|
" AsciiDoc
|
||||||
|
call TestExtension('asciidoc', 'foobar.asciidoc', '')
|
||||||
|
call TestExtension('asciidoc', 'foobar.adoc', '')
|
||||||
|
|
||||||
|
" ASN.1
|
||||||
|
call TestExtension('asn', 'foobar.asn', '')
|
||||||
|
call TestExtension('asn', 'foobar.asn1', '')
|
||||||
|
|
||||||
|
" Active Server Pages (with Visual Basic Script)
|
||||||
|
call TestExtension('aspvbs', 'foobar.asa', '')
|
||||||
|
let g:filetype_asa = 'fizfuz'
|
||||||
|
call TestExtension('fizfuz', 'foobar.asa', '')
|
||||||
|
|
||||||
|
" Active Server Pages (with Perl or Visual Basic Script)
|
||||||
|
call TestExtension('aspvbs', 'vbs.asp', "")
|
||||||
|
call TestExtension('aspperl', 'perl.asp', "<Job ID=\"DropFiles\">\n<script language=\"PerlScript\">\n</script>\n</Job>")
|
||||||
|
let g:filetype_asp = 'fizfuz'
|
||||||
|
call TestExtension('fizfuz', 'fizfuz.asp', '')
|
||||||
|
|
||||||
|
|
||||||
|
" Grub (must be before catch *.lst)
|
||||||
|
call TestExtension('grub', '/boot/grub/menu.lst', '')
|
||||||
|
call TestExtension('grub', '/media/foobar/boot/grub/menu.lst', '')
|
||||||
|
call TestExtension('grub', '/boot/grub/grub.conf', '')
|
||||||
|
call TestExtension('grub', '/media/foobar/boot/grub/grub.conf', '')
|
||||||
|
call TestExtension('grub', '/etc/grub.conf', '')
|
||||||
|
call TestExtension('grub', '/media/foobar/etc/grub.conf', '')
|
||||||
|
|
||||||
|
" Assembly (all kinds)
|
||||||
|
" *.lst is not pure assembly, it has two extra columns (address, byte codes)
|
||||||
|
|
||||||
|
au BufNewFile,BufRead *.asm,*.[sS],*.[aA],*.mac,*.lst call dist#ft#FTasm()
|
||||||
|
|
||||||
|
" Macro (VAX)
|
||||||
|
call TestExtension('vmasm', 'foobar.mar', '')
|
||||||
|
|
||||||
|
" Atlas
|
||||||
|
call TestExtension('atlas', 'foobar.atl', '')
|
||||||
|
call TestExtension('atlas', 'foobar.as', '')
|
||||||
|
|
||||||
|
" Autoit v3
|
||||||
|
call TestExtension('autoit', 'foobar.au3', '')
|
||||||
|
|
||||||
|
" Autohotkey
|
||||||
|
call TestExtension('autohotkey', 'foobar.ahk', '')
|
||||||
|
|
||||||
|
" Automake
|
||||||
|
call TestExtension('automake', 'Makefile.am', '')
|
||||||
|
call TestExtension('automake', 'makefile.am', '')
|
||||||
|
call TestExtension('automake', 'GNUmakefile.am', '')
|
||||||
|
|
||||||
|
" Autotest .at files are actually m4
|
||||||
|
call TestExtension('m4', 'foobar.at', '')
|
||||||
|
|
||||||
|
" Avenue
|
||||||
|
call TestExtension('ave', 'foobar.ave', '')
|
||||||
|
|
||||||
|
" Awk
|
||||||
|
call TestExtension('awk', 'foobar.awk', '')
|
||||||
|
|
||||||
|
" vim-polyglot only
|
||||||
|
call TestExtension('blade', 'test.blade.php', '')
|
||||||
|
call TestExtension('yaml.ansible', 'playbook.yml', '')
|
||||||
|
call TestExtension('yaml.ansible', 'host_vars/foobar', '')
|
||||||
|
call TestExtension('yaml.ansible', 'handlers.foobar.yaml', '')
|
||||||
|
call TestExtension('yaml.ansible', 'requirements.yaml', '')
|
||||||
|
call TestExtension('ps1xml', 'foobar.ps1xml', '')
|
||||||
|
|
||||||
|
" .m extension
|
||||||
|
call TestExtension('octave', 'matlab.m', '')
|
||||||
|
call TestExtension('objc', 'objc.m', "\n\n #import <Foundation/Foundation.h>")
|
||||||
|
call TestExtension('octave', 'objc.m', "results_ub_times=zeros(2,2,M);\n%results pour la lower bound")
|
||||||
|
call TestExtension('mma', 'mathematica.m', "newcase[ \"00003\" ];\n (* Hello world *)")
|
||||||
|
call TestExtension('murphi', 'murphi.m', "type\n square: 1 .. 9")
|
||||||
|
call TestExtension('murphi', 'murphi.m', "something\n--foobar")
|
||||||
|
call TestExtension('octave', 'percentcomment.m', "hello world\n%foobar")
|
||||||
|
call TestExtension('objc', 'comment.m', "\n/* Hello world */")
|
||||||
|
let g:filetype_m = 'fizfuz'
|
||||||
|
call TestExtension('fizfuz', 'fizfuz.m', '')
|
||||||
|
|
||||||
|
" .fs extension
|
||||||
|
call TestExtension('forth', 'empty.fs', '')
|
||||||
|
call TestExtension('fsharp', 'fsharp.fs', "let myInt = 5")
|
||||||
|
call TestExtension('glsl', 'glsl.fs', "//#version 120\nvoid main() {}")
|
||||||
|
let g:filetype_fs = 'fizfuz'
|
||||||
|
call TestExtension('fizfuz', 'fizfuz.fs', '')
|
||||||
229
scripts/test_filetypes.vim
Normal file
229
scripts/test_filetypes.vim
Normal file
@@ -0,0 +1,229 @@
|
|||||||
|
function! TestFiletype(filetype)
|
||||||
|
try
|
||||||
|
enew
|
||||||
|
exec 'set ft=' . a:filetype
|
||||||
|
catch
|
||||||
|
echo 'Error loading filetype ' . a:filetype . ':'
|
||||||
|
echo v:exception
|
||||||
|
echo v:throwpoint
|
||||||
|
exec ':cq!'
|
||||||
|
endtry
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call TestFiletype('8th')
|
||||||
|
call TestFiletype('a2ps')
|
||||||
|
call TestFiletype('a65')
|
||||||
|
call TestFiletype('aap')
|
||||||
|
call TestFiletype('abap')
|
||||||
|
call TestFiletype('abaqus')
|
||||||
|
call TestFiletype('abc')
|
||||||
|
call TestFiletype('abel')
|
||||||
|
call TestFiletype('acedb')
|
||||||
|
call TestFiletype('asl')
|
||||||
|
call TestFiletype('ada')
|
||||||
|
call TestFiletype('ahdl')
|
||||||
|
call TestFiletype('aidl')
|
||||||
|
call TestFiletype('alsaconf')
|
||||||
|
call TestFiletype('aml')
|
||||||
|
call TestFiletype('ampl')
|
||||||
|
call TestFiletype('ant')
|
||||||
|
call TestFiletype('apache')
|
||||||
|
call TestFiletype('apiblueprint')
|
||||||
|
call TestFiletype('applescript')
|
||||||
|
call TestFiletype('aptconf')
|
||||||
|
call TestFiletype('arch')
|
||||||
|
call TestFiletype('arduino')
|
||||||
|
call TestFiletype('art')
|
||||||
|
call TestFiletype('asciidoc')
|
||||||
|
call TestFiletype('autohotkey')
|
||||||
|
call TestFiletype('automake')
|
||||||
|
call TestFiletype('asn')
|
||||||
|
call TestFiletype('aspvbs')
|
||||||
|
call TestFiletype('aspperl')
|
||||||
|
call TestFiletype('atlas')
|
||||||
|
call TestFiletype('autoit')
|
||||||
|
call TestFiletype('ave')
|
||||||
|
call TestFiletype('awk')
|
||||||
|
call TestFiletype('c')
|
||||||
|
call TestFiletype('cpp')
|
||||||
|
call TestFiletype('caddyfile')
|
||||||
|
call TestFiletype('carp')
|
||||||
|
call TestFiletype('clojure')
|
||||||
|
call TestFiletype('cmake')
|
||||||
|
call TestFiletype('coffee')
|
||||||
|
call TestFiletype('litcoffee')
|
||||||
|
call TestFiletype('cryptol')
|
||||||
|
call TestFiletype('crystal')
|
||||||
|
call TestFiletype('ecrystal')
|
||||||
|
call TestFiletype('csv')
|
||||||
|
call TestFiletype('cucumber')
|
||||||
|
call TestFiletype('cuesheet')
|
||||||
|
call TestFiletype('dart')
|
||||||
|
call TestFiletype('dhall')
|
||||||
|
call TestFiletype('grub')
|
||||||
|
call TestFiletype('d')
|
||||||
|
call TestFiletype('dcov')
|
||||||
|
call TestFiletype('dd')
|
||||||
|
call TestFiletype('ddoc')
|
||||||
|
call TestFiletype('dsdl')
|
||||||
|
call TestFiletype('Dockerfile')
|
||||||
|
call TestFiletype('yaml.docker-compose')
|
||||||
|
call TestFiletype('elf')
|
||||||
|
call TestFiletype('elixir')
|
||||||
|
call TestFiletype('eelixir')
|
||||||
|
call TestFiletype('elm')
|
||||||
|
call TestFiletype('ember-script')
|
||||||
|
call TestFiletype('emblem')
|
||||||
|
call TestFiletype('erlang')
|
||||||
|
call TestFiletype('fennel')
|
||||||
|
call TestFiletype('ferm')
|
||||||
|
call TestFiletype('fish')
|
||||||
|
call TestFiletype('fbs')
|
||||||
|
call TestFiletype('forth')
|
||||||
|
call TestFiletype('fsharp')
|
||||||
|
call TestFiletype('gdscript3')
|
||||||
|
call TestFiletype('gitconfig')
|
||||||
|
call TestFiletype('gitrebase')
|
||||||
|
call TestFiletype('gitsendemail')
|
||||||
|
call TestFiletype('gitcommit')
|
||||||
|
call TestFiletype('glsl')
|
||||||
|
call TestFiletype('gmpl')
|
||||||
|
call TestFiletype('gnuplot')
|
||||||
|
call TestFiletype('go')
|
||||||
|
call TestFiletype('gomod')
|
||||||
|
call TestFiletype('gohtmltmpl')
|
||||||
|
call TestFiletype('graphql')
|
||||||
|
call TestFiletype('groovy')
|
||||||
|
call TestFiletype('haml')
|
||||||
|
call TestFiletype('mustache')
|
||||||
|
call TestFiletype('haproxy')
|
||||||
|
call TestFiletype('haskell')
|
||||||
|
call TestFiletype('haxe')
|
||||||
|
call TestFiletype('hcl')
|
||||||
|
call TestFiletype('hive')
|
||||||
|
call TestFiletype('html')
|
||||||
|
call TestFiletype('i3config')
|
||||||
|
call TestFiletype('icalendar')
|
||||||
|
call TestFiletype('idris')
|
||||||
|
call TestFiletype('ion')
|
||||||
|
call TestFiletype('javascript')
|
||||||
|
call TestFiletype('flow')
|
||||||
|
call TestFiletype('Jenkinsfile')
|
||||||
|
call TestFiletype('jinja.html')
|
||||||
|
call TestFiletype('jq')
|
||||||
|
call TestFiletype('json5')
|
||||||
|
call TestFiletype('json')
|
||||||
|
call TestFiletype('jsonnet')
|
||||||
|
call TestFiletype('jst')
|
||||||
|
call TestFiletype('javascriptreact')
|
||||||
|
call TestFiletype('julia')
|
||||||
|
call TestFiletype('kotlin')
|
||||||
|
call TestFiletype('ledger')
|
||||||
|
call TestFiletype('less')
|
||||||
|
call TestFiletype('lilypond')
|
||||||
|
call TestFiletype('livescript')
|
||||||
|
call TestFiletype('llvm')
|
||||||
|
call TestFiletype('tablegen')
|
||||||
|
call TestFiletype('log')
|
||||||
|
call TestFiletype('lua')
|
||||||
|
call TestFiletype('m4')
|
||||||
|
call TestFiletype('mako')
|
||||||
|
call TestFiletype('octave')
|
||||||
|
call TestFiletype('mma')
|
||||||
|
call TestFiletype('markdown')
|
||||||
|
call TestFiletype('markdown.mdx')
|
||||||
|
call TestFiletype('meson')
|
||||||
|
call TestFiletype('dosini')
|
||||||
|
call TestFiletype('moon')
|
||||||
|
call TestFiletype('murphi')
|
||||||
|
call TestFiletype('nginx')
|
||||||
|
call TestFiletype('nim')
|
||||||
|
call TestFiletype('nix')
|
||||||
|
call TestFiletype('objc')
|
||||||
|
call TestFiletype('ocaml')
|
||||||
|
call TestFiletype('omake')
|
||||||
|
call TestFiletype('opam')
|
||||||
|
call TestFiletype('oasis')
|
||||||
|
call TestFiletype('dune')
|
||||||
|
call TestFiletype('ocamlbuild_tags')
|
||||||
|
call TestFiletype('ocpbuild')
|
||||||
|
call TestFiletype('ocpbuildroot')
|
||||||
|
call TestFiletype('sexplib')
|
||||||
|
call TestFiletype('opencl')
|
||||||
|
call TestFiletype('perl')
|
||||||
|
call TestFiletype('sql')
|
||||||
|
call TestFiletype('sql')
|
||||||
|
call TestFiletype('cql')
|
||||||
|
call TestFiletype('blade')
|
||||||
|
call TestFiletype('php')
|
||||||
|
call TestFiletype('plantuml')
|
||||||
|
call TestFiletype('pony')
|
||||||
|
call TestFiletype('ps1')
|
||||||
|
call TestFiletype('ps1xml')
|
||||||
|
call TestFiletype('proto')
|
||||||
|
call TestFiletype('pug')
|
||||||
|
call TestFiletype('puppet')
|
||||||
|
call TestFiletype('embeddedpuppet')
|
||||||
|
call TestFiletype('purescript')
|
||||||
|
call TestFiletype('python')
|
||||||
|
call TestFiletype('requirements')
|
||||||
|
call TestFiletype('qmake')
|
||||||
|
call TestFiletype('qml')
|
||||||
|
call TestFiletype('r')
|
||||||
|
call TestFiletype('rhelp')
|
||||||
|
call TestFiletype('racket')
|
||||||
|
call TestFiletype('ragel')
|
||||||
|
call TestFiletype('raku')
|
||||||
|
call TestFiletype('raml')
|
||||||
|
call TestFiletype('razor')
|
||||||
|
call TestFiletype('reason')
|
||||||
|
call TestFiletype('rst')
|
||||||
|
call TestFiletype('ruby')
|
||||||
|
call TestFiletype('eruby')
|
||||||
|
call TestFiletype('ruby')
|
||||||
|
call TestFiletype('brewfile')
|
||||||
|
call TestFiletype('rust')
|
||||||
|
call TestFiletype('scala')
|
||||||
|
call TestFiletype('sbt.scala')
|
||||||
|
call TestFiletype('scss')
|
||||||
|
call TestFiletype('sh')
|
||||||
|
call TestFiletype('zsh')
|
||||||
|
call TestFiletype('slim')
|
||||||
|
call TestFiletype('slime')
|
||||||
|
call TestFiletype('smt2')
|
||||||
|
call TestFiletype('solidity')
|
||||||
|
call TestFiletype('stylus')
|
||||||
|
call TestFiletype('svelte')
|
||||||
|
call TestFiletype('svg')
|
||||||
|
call TestFiletype('swift')
|
||||||
|
call TestFiletype('sxhkdrc')
|
||||||
|
call TestFiletype('systemd')
|
||||||
|
call TestFiletype('terraform')
|
||||||
|
call TestFiletype('textile')
|
||||||
|
call TestFiletype('thrift')
|
||||||
|
call TestFiletype('tmux')
|
||||||
|
call TestFiletype('toml')
|
||||||
|
call TestFiletype('tptp')
|
||||||
|
call TestFiletype('html.twig')
|
||||||
|
call TestFiletype('xml.twig')
|
||||||
|
call TestFiletype('typescript')
|
||||||
|
call TestFiletype('typescriptreact')
|
||||||
|
call TestFiletype('unison')
|
||||||
|
call TestFiletype('v')
|
||||||
|
call TestFiletype('vala')
|
||||||
|
call TestFiletype('vbnet')
|
||||||
|
call TestFiletype('vcl')
|
||||||
|
call TestFiletype('velocity')
|
||||||
|
call TestFiletype('vmasm')
|
||||||
|
call TestFiletype('vue')
|
||||||
|
call TestFiletype('xdc')
|
||||||
|
call TestFiletype('xml')
|
||||||
|
call TestFiletype('xsl')
|
||||||
|
call TestFiletype('yaml.ansible')
|
||||||
|
call TestFiletype('yaml')
|
||||||
|
call TestFiletype('helm')
|
||||||
|
call TestFiletype('help')
|
||||||
|
call TestFiletype('zephir')
|
||||||
|
call TestFiletype('zir')
|
||||||
|
call TestFiletype('zig')
|
||||||
|
call TestFiletype('trasys')
|
||||||
339
syntax/8th.vim
Normal file
339
syntax/8th.vim
Normal file
@@ -0,0 +1,339 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, '8th') == -1
|
||||||
|
|
||||||
|
" Vim syntax file
|
||||||
|
" Language: 8th
|
||||||
|
" Version: 19.01d
|
||||||
|
" Maintainer: Ron Aaron <ron@aaron-tech.com>
|
||||||
|
" URL: https://8th-dev.com/
|
||||||
|
" Filetypes: *.8th
|
||||||
|
" NOTE: You should also have the ftplugin/8th.vim file to set 'isk'
|
||||||
|
|
||||||
|
if version < 600
|
||||||
|
syntax clear
|
||||||
|
finish
|
||||||
|
elseif exists("b:current_syntax")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:cpo_save = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
syn clear
|
||||||
|
" Synchronization method
|
||||||
|
syn sync ccomment
|
||||||
|
syn sync maxlines=100
|
||||||
|
syn case match
|
||||||
|
syn match eighthColonName "\S\+" contained
|
||||||
|
syn match eighthColonDef ":\s\+\S\+" contains=eighthColonName
|
||||||
|
|
||||||
|
" new words
|
||||||
|
syn match eighthClasses "\<\S\+:" contained
|
||||||
|
syn match eighthClassWord "\<\S\+:.\+" contains=eighthClasses
|
||||||
|
|
||||||
|
syn keyword eighthEndOfColonDef ; i;
|
||||||
|
syn keyword eighthDefine var var,
|
||||||
|
|
||||||
|
" Built in words
|
||||||
|
com! -nargs=+ Builtin syn keyword eighthBuiltin <args>
|
||||||
|
"Builtin ^ < <# <#> = > - -- ,# ; ;; ! ??? / . .# ' () @ * */ \
|
||||||
|
|
||||||
|
Builtin ! G:! #! G:#! ## G:## #> G:#> #if G:#if ' G:' ( G:( (* G:(* (:) G:(:) (code) G:(code) (getc) G:(getc)
|
||||||
|
Builtin (gets) G:(gets) (interp) G:(interp) (needs) G:(needs) (putc) G:(putc) (puts) G:(puts) (putslim) G:(putslim)
|
||||||
|
Builtin (say) G:(say) (stat) G:(stat) ) G:) +listener G:+listener +ref G:+ref ,# G:,# -- G:-- -----BEGIN G:-----BEGIN
|
||||||
|
Builtin -Inf G:-Inf -Inf? G:-Inf? -listener G:-listener -ref G:-ref -rot G:-rot . G:. .# G:.# .needs G:.needs
|
||||||
|
Builtin .r G:.r .s G:.s .stats G:.stats .ver G:.ver .with G:.with 0; G:0; 2dip G:2dip 2drop G:2drop
|
||||||
|
Builtin 2dup G:2dup 2over G:2over 2swap G:2swap 3drop G:3drop 4drop G:4drop 8thdt? G:8thdt? 8thver? G:8thver?
|
||||||
|
Builtin : G:: ; G:; ;; G:;; ;;; G:;;; ;then G:;then ;with G:;with <# G:<# <#> G:<#> >clip G:>clip >json G:>json
|
||||||
|
Builtin >kind G:>kind >n G:>n >r G:>r >s G:>s ?: G:?: ??? G:??? @ G:@ Inf G:Inf Inf? G:Inf? NaN G:NaN
|
||||||
|
Builtin NaN? G:NaN? SED-CHECK G:SED-CHECK SED: G:SED: SED: G:SED: \ G:\ ` G:` `` G:`` actor: G:actor:
|
||||||
|
Builtin again G:again ahead G:ahead and G:and appname G:appname apropos G:apropos argc G:argc args G:args
|
||||||
|
Builtin array? G:array? assert G:assert base G:base bi G:bi bits G:bits break G:break break? G:break?
|
||||||
|
Builtin build? G:build? buildver? G:buildver? bye G:bye c# G:c# c/does G:c/does case G:case caseof G:caseof
|
||||||
|
Builtin chdir G:chdir clip> G:clip> clone G:clone clone-shallow G:clone-shallow cold G:cold compat-level G:compat-level
|
||||||
|
Builtin compile G:compile compile? G:compile? conflict G:conflict const G:const container? G:container?
|
||||||
|
Builtin cr G:cr curlang G:curlang curry G:curry curry: G:curry: decimal G:decimal defer: G:defer: deg>rad G:deg>rad
|
||||||
|
Builtin depth G:depth die G:die dip G:dip drop G:drop dstack G:dstack dump G:dump dup G:dup dup? G:dup?
|
||||||
|
Builtin else G:else enum: G:enum: eval G:eval eval! G:eval! eval0 G:eval0 execnull G:execnull expect G:expect
|
||||||
|
Builtin extra! G:extra! extra@ G:extra@ false G:false fnv G:fnv fourth G:fourth free G:free func: G:func:
|
||||||
|
Builtin getc G:getc getcwd G:getcwd getenv G:getenv gets G:gets handler G:handler header G:header help G:help
|
||||||
|
Builtin hex G:hex i: G:i: i; G:i; if G:if if; G:if; isa? G:isa? items-used G:items-used jcall G:jcall
|
||||||
|
Builtin jclass G:jclass jmethod G:jmethod json-nesting G:json-nesting json-pretty G:json-pretty json-throw G:json-throw
|
||||||
|
Builtin json> G:json> k32 G:k32 keep G:keep l: G:l: last G:last lib G:lib libbin G:libbin libc G:libc
|
||||||
|
Builtin listener@ G:listener@ literal G:literal locals: G:locals: lock G:lock lock-to G:lock-to locked? G:locked?
|
||||||
|
Builtin log G:log log-async G:log-async log-task G:log-task log-time G:log-time log-time-local G:log-time-local
|
||||||
|
Builtin long-days G:long-days long-months G:long-months loop G:loop loop- G:loop- map? G:map? mark G:mark
|
||||||
|
Builtin mark? G:mark? memfree G:memfree mobile? G:mobile? n# G:n# name>os G:name>os name>sem G:name>sem
|
||||||
|
Builtin ndrop G:ndrop needs G:needs new G:new next-arg G:next-arg nip G:nip noop G:noop not G:not ns G:ns
|
||||||
|
Builtin ns: G:ns: ns>ls G:ns>ls ns>s G:ns>s ns? G:ns? null G:null null; G:null; null? G:null? number? G:number?
|
||||||
|
Builtin off G:off on G:on onexit G:onexit only G:only op! G:op! or G:or os G:os os-names G:os-names
|
||||||
|
Builtin os>long-name G:os>long-name os>name G:os>name over G:over p: G:p: pack G:pack parse G:parse
|
||||||
|
Builtin parsech G:parsech parseln G:parseln parsews G:parsews pick G:pick poke G:poke pool-clear G:pool-clear
|
||||||
|
Builtin prior G:prior private G:private process-args G:process-args prompt G:prompt public G:public
|
||||||
|
Builtin putc G:putc puts G:puts putslim G:putslim quote G:quote r! G:r! r> G:r> r@ G:r@ rad>deg G:rad>deg
|
||||||
|
Builtin rand G:rand rand-pcg G:rand-pcg rand-pcg-seed G:rand-pcg-seed randbuf G:randbuf randbuf-pcg G:randbuf-pcg
|
||||||
|
Builtin rdrop G:rdrop recurse G:recurse recurse-stack G:recurse-stack ref@ G:ref@ reg! G:reg! reg@ G:reg@
|
||||||
|
Builtin regbin@ G:regbin@ remaining-args G:remaining-args repeat G:repeat reset G:reset roll G:roll
|
||||||
|
Builtin rop! G:rop! rot G:rot rpick G:rpick rroll G:rroll rstack G:rstack rswap G:rswap rusage G:rusage
|
||||||
|
Builtin s>ns G:s>ns same? G:same? scriptdir G:scriptdir scriptfile G:scriptfile sem G:sem sem-post G:sem-post
|
||||||
|
Builtin sem-rm G:sem-rm sem-wait G:sem-wait sem-wait? G:sem-wait? sem>name G:sem>name semi-throw G:semi-throw
|
||||||
|
Builtin set-wipe G:set-wipe setenv G:setenv settings! G:settings! settings![] G:settings![] settings@ G:settings@
|
||||||
|
Builtin settings@? G:settings@? settings@[] G:settings@[] sh G:sh sh$ G:sh$ short-days G:short-days
|
||||||
|
Builtin short-months G:short-months sleep G:sleep space G:space stack-check G:stack-check stack-size G:stack-size
|
||||||
|
Builtin step G:step string? G:string? struct: G:struct: swap G:swap syslang G:syslang sysregion G:sysregion
|
||||||
|
Builtin tab-hook G:tab-hook tell-conflict G:tell-conflict tempdir G:tempdir tempfilename G:tempfilename
|
||||||
|
Builtin then G:then third G:third throw G:throw thrownull G:thrownull times G:times tlog G:tlog tri G:tri
|
||||||
|
Builtin true G:true tuck G:tuck type-check G:type-check typeassert G:typeassert unlock G:unlock unpack G:unpack
|
||||||
|
Builtin until G:until until! G:until! var G:var var, G:var, while G:while while! G:while! with: G:with:
|
||||||
|
Builtin words G:words words-like G:words-like words/ G:words/ xchg G:xchg xor G:xor >auth HTTP:>auth
|
||||||
|
Builtin sh I:sh tpush I:tpush trace-word I:trace-word call JSONRPC:call auth-string OAuth:auth-string
|
||||||
|
Builtin gen-nonce OAuth:gen-nonce params OAuth:params call SOAP:call ! a:! + a:+ - a:- 2each a:2each
|
||||||
|
Builtin 2map a:2map 2map+ a:2map+ 2map= a:2map= = a:= >map a:>map @ a:@ @@ a:@@ bsearch a:bsearch clear a:clear
|
||||||
|
Builtin close a:close diff a:diff dot a:dot each a:each each-slice a:each-slice exists? a:exists? filter a:filter
|
||||||
|
Builtin generate a:generate group a:group indexof a:indexof insert a:insert intersect a:intersect join a:join
|
||||||
|
Builtin len a:len map a:map map+ a:map+ map= a:map= mean a:mean mean&variance a:mean&variance new a:new
|
||||||
|
Builtin op a:op op! a:op! op= a:op= open a:open pop a:pop push a:push qsort a:qsort randeach a:randeach
|
||||||
|
Builtin reduce a:reduce reduce+ a:reduce+ rev a:rev shift a:shift shuffle a:shuffle slice a:slice slice+ a:slice+
|
||||||
|
Builtin slide a:slide sort a:sort union a:union when a:when when! a:when! x a:x x-each a:x-each xchg a:xchg
|
||||||
|
Builtin y a:y zip a:zip 8thdir app:8thdir asset app:asset atrun app:atrun atrun app:atrun atrun app:atrun
|
||||||
|
Builtin basedir app:basedir current app:current datadir app:datadir exename app:exename isgui app:isgui
|
||||||
|
Builtin main app:main oncrash app:oncrash orientation app:orientation pid app:pid restart app:restart
|
||||||
|
Builtin resumed app:resumed shared? app:shared? standalone app:standalone subdir app:subdir suspended app:suspended
|
||||||
|
Builtin sysquit app:sysquit (here) asm:(here) >n asm:>n avail asm:avail c, asm:c, here! asm:here! n> asm:n>
|
||||||
|
Builtin used asm:used w, asm:w, ! b:! + b:+ / b:/ = b:= >base64 b:>base64 >hex b:>hex >mpack b:>mpack
|
||||||
|
Builtin @ b:@ append b:append base64> b:base64> bit! b:bit! bit@ b:bit@ clear b:clear compress b:compress
|
||||||
|
Builtin conv b:conv each b:each each-slice b:each-slice expand b:expand fill b:fill getb b:getb hex> b:hex>
|
||||||
|
Builtin len b:len mem> b:mem> move b:move mpack-date b:mpack-date mpack-ignore b:mpack-ignore mpack> b:mpack>
|
||||||
|
Builtin new b:new op b:op rev b:rev search b:search shmem b:shmem slice b:slice splice b:splice ungetb b:ungetb
|
||||||
|
Builtin writable b:writable xor b:xor +block bc:+block .blocks bc:.blocks add-block bc:add-block block-hash bc:block-hash
|
||||||
|
Builtin block@ bc:block@ first-block bc:first-block hash bc:hash last-block bc:last-block load bc:load
|
||||||
|
Builtin new bc:new save bc:save set-sql bc:set-sql validate bc:validate validate-block bc:validate-block
|
||||||
|
Builtin add bloom:add filter bloom:filter in? bloom:in? accept bt:accept ch! bt:ch! ch@ bt:ch@ connect bt:connect
|
||||||
|
Builtin disconnect bt:disconnect err? bt:err? leconnect bt:leconnect lescan bt:lescan listen bt:listen
|
||||||
|
Builtin on? bt:on? read bt:read scan bt:scan service? bt:service? services? bt:services? write bt:write
|
||||||
|
Builtin * c:* * c:* + c:+ + c:+ = c:= = c:= >ri c:>ri >ri c:>ri abs c:abs abs c:abs arg c:arg arg c:arg
|
||||||
|
Builtin conj c:conj conj c:conj im c:im n> c:n> new c:new new c:new re c:re >aes128gcm cr:>aes128gcm
|
||||||
|
Builtin >aes256gcm cr:>aes256gcm >cp cr:>cp >cpe cr:>cpe >decrypt cr:>decrypt >edbox cr:>edbox >encrypt cr:>encrypt
|
||||||
|
Builtin >nbuf cr:>nbuf >rsabox cr:>rsabox >uuid cr:>uuid CBC cr:CBC CFB cr:CFB CTR cr:CTR ECB cr:ECB
|
||||||
|
Builtin GCM cr:GCM OFB cr:OFB aad? cr:aad? aes128box-sig cr:aes128box-sig aes128gcm> cr:aes128gcm>
|
||||||
|
Builtin aes256box-sig cr:aes256box-sig aes256gcm> cr:aes256gcm> aesgcm cr:aesgcm blakehash cr:blakehash
|
||||||
|
Builtin chacha20box-sig cr:chacha20box-sig chachapoly cr:chachapoly cipher! cr:cipher! cipher@ cr:cipher@
|
||||||
|
Builtin cp> cr:cp> cpe> cr:cpe> decrypt cr:decrypt decrypt+ cr:decrypt+ decrypt> cr:decrypt> dh-genkey cr:dh-genkey
|
||||||
|
Builtin dh-secret cr:dh-secret dh-sign cr:dh-sign dh-verify cr:dh-verify ebox-sig cr:ebox-sig ecc-genkey cr:ecc-genkey
|
||||||
|
Builtin ecc-secret cr:ecc-secret ecc-sign cr:ecc-sign ecc-verify cr:ecc-verify edbox-sig cr:edbox-sig
|
||||||
|
Builtin edbox> cr:edbox> encrypt cr:encrypt encrypt+ cr:encrypt+ encrypt> cr:encrypt> ensurekey cr:ensurekey
|
||||||
|
Builtin err? cr:err? gcm-tag-size cr:gcm-tag-size genkey cr:genkey hash cr:hash hash! cr:hash! hash+ cr:hash+
|
||||||
|
Builtin hash>b cr:hash>b hash>s cr:hash>s hash@ cr:hash@ hmac cr:hmac hotp cr:hotp iv? cr:iv? mode cr:mode
|
||||||
|
Builtin mode@ cr:mode@ randkey cr:randkey restore cr:restore root-certs cr:root-certs rsa_decrypt cr:rsa_decrypt
|
||||||
|
Builtin rsa_encrypt cr:rsa_encrypt rsa_sign cr:rsa_sign rsa_verify cr:rsa_verify rsabox-sig cr:rsabox-sig
|
||||||
|
Builtin rsabox> cr:rsabox> rsagenkey cr:rsagenkey save cr:save sbox-sig cr:sbox-sig sha1-hmac cr:sha1-hmac
|
||||||
|
Builtin shard cr:shard tag? cr:tag? totp cr:totp totp-epoch cr:totp-epoch totp-time-step cr:totp-time-step
|
||||||
|
Builtin unshard cr:unshard uuid cr:uuid uuid> cr:uuid> validate-pgp-sig cr:validate-pgp-sig (.hebrew) d:(.hebrew)
|
||||||
|
Builtin (.islamic) d:(.islamic) + d:+ +day d:+day +hour d:+hour +min d:+min +msec d:+msec - d:- .hebrew d:.hebrew
|
||||||
|
Builtin .islamic d:.islamic .time d:.time / d:/ = d:= >fixed d:>fixed >hebepoch d:>hebepoch >msec d:>msec
|
||||||
|
Builtin >unix d:>unix >ymd d:>ymd Adar d:Adar Adar2 d:Adar2 Adar2 d:Adar2 Av d:Av Elul d:Elul Fri d:Fri
|
||||||
|
Builtin Heshvan d:Heshvan Iyar d:Iyar Kislev d:Kislev Mon d:Mon Nissan d:Nissan Sat d:Sat Shevat d:Shevat
|
||||||
|
Builtin Sivan d:Sivan Sun d:Sun Tammuz d:Tammuz Tevet d:Tevet Thu d:Thu Tishrei d:Tishrei Tue d:Tue
|
||||||
|
Builtin Wed d:Wed adjust-dst d:adjust-dst between d:between d. d:d. dawn d:dawn days-in-hebrew-year d:days-in-hebrew-year
|
||||||
|
Builtin displaying-hebrew d:displaying-hebrew do-dawn d:do-dawn do-dusk d:do-dusk do-rise d:do-rise
|
||||||
|
Builtin doy d:doy dst? d:dst? dstquery d:dstquery dstzones? d:dstzones? dusk d:dusk elapsed-timer d:elapsed-timer
|
||||||
|
Builtin elapsed-timer-seconds d:elapsed-timer-seconds first-dow d:first-dow fixed> d:fixed> fixed>dow d:fixed>dow
|
||||||
|
Builtin fixed>hebrew d:fixed>hebrew fixed>islamic d:fixed>islamic format d:format hanukkah d:hanukkah
|
||||||
|
Builtin hebrew-epoch d:hebrew-epoch hebrew>fixed d:hebrew>fixed hebrewtoday d:hebrewtoday hmonth-name d:hmonth-name
|
||||||
|
Builtin islamic.epoch d:islamic.epoch islamic>fixed d:islamic>fixed islamictoday d:islamictoday join d:join
|
||||||
|
Builtin last-day-of-hebrew-month d:last-day-of-hebrew-month last-dow d:last-dow last-month d:last-month
|
||||||
|
Builtin last-week d:last-week last-year d:last-year latitude d:latitude longitude d:longitude longitude d:longitude
|
||||||
|
Builtin msec d:msec msec> d:msec> new d:new next-dow d:next-dow next-month d:next-month next-week d:next-week
|
||||||
|
Builtin next-year d:next-year number>hebrew d:number>hebrew omer d:omer parse d:parse pesach d:pesach
|
||||||
|
Builtin prev-dow d:prev-dow purim d:purim rosh-chodesh? d:rosh-chodesh? rosh-hashanah d:rosh-hashanah
|
||||||
|
Builtin shavuot d:shavuot start-timer d:start-timer sunrise d:sunrise taanit-esther d:taanit-esther
|
||||||
|
Builtin ticks d:ticks ticks/sec d:ticks/sec timer d:timer tisha-beav d:tisha-beav tzadjust d:tzadjust
|
||||||
|
Builtin unix> d:unix> updatetz d:updatetz year@ d:year@ ymd d:ymd ymd> d:ymd> yom-haatsmaut d:yom-haatsmaut
|
||||||
|
Builtin yom-kippur d:yom-kippur add-func db:add-func bind db:bind close db:close col db:col col[] db:col[]
|
||||||
|
Builtin col{} db:col{} err? db:err? errmsg db:errmsg exec db:exec exec-cb db:exec-cb key db:key mysql? db:mysql?
|
||||||
|
Builtin odbc? db:odbc? open db:open open? db:open? prepare db:prepare query db:query query-all db:query-all
|
||||||
|
Builtin rekey db:rekey sqlerrmsg db:sqlerrmsg bp dbg:bp except-task@ dbg:except-task@ go dbg:go line-info dbg:line-info
|
||||||
|
Builtin prompt dbg:prompt stop dbg:stop trace dbg:trace trace-enter dbg:trace-enter trace-leave dbg:trace-leave
|
||||||
|
Builtin abspath f:abspath append f:append associate f:associate atime f:atime canwrite? f:canwrite?
|
||||||
|
Builtin chmod f:chmod close f:close copy f:copy copydir f:copydir create f:create ctime f:ctime dir? f:dir?
|
||||||
|
Builtin dname f:dname eachbuf f:eachbuf eachline f:eachline enssep f:enssep eof? f:eof? err? f:err?
|
||||||
|
Builtin exists? f:exists? flush f:flush fname f:fname getb f:getb getc f:getc getline f:getline getmod f:getmod
|
||||||
|
Builtin glob f:glob glob-nocase f:glob-nocase include f:include launch f:launch link f:link link> f:link>
|
||||||
|
Builtin link? f:link? mkdir f:mkdir mmap f:mmap mmap-range f:mmap-range mmap-range? f:mmap-range? mtime f:mtime
|
||||||
|
Builtin mv f:mv open f:open open-ro f:open-ro popen f:popen print f:print read f:read relpath f:relpath
|
||||||
|
Builtin rglob f:rglob rm f:rm rmdir f:rmdir seek f:seek sep f:sep show f:show size f:size slurp f:slurp
|
||||||
|
Builtin stderr f:stderr stdin f:stdin stdout f:stdout tell f:tell times f:times trash f:trash ungetb f:ungetb
|
||||||
|
Builtin ungetc f:ungetc unzip f:unzip unzip-entry f:unzip-entry watch f:watch write f:write writen f:writen
|
||||||
|
Builtin zip+ f:zip+ zip@ f:zip@ zipentry f:zipentry zipnew f:zipnew zipopen f:zipopen zipsave f:zipsave
|
||||||
|
Builtin bold font:bold face? font:face? glyph-path font:glyph-path glyph-pos font:glyph-pos info font:info
|
||||||
|
Builtin italic font:italic ls font:ls measure font:measure new font:new pixels font:pixels pixels? font:pixels?
|
||||||
|
Builtin points font:points points? font:points? styles font:styles styles? font:styles? underline font:underline
|
||||||
|
Builtin +child g:+child +kind g:+kind +path g:+path -child g:-child /path g:/path >img g:>img >progress g:>progress
|
||||||
|
Builtin add-items g:add-items adjustwidth g:adjustwidth allow-orient g:allow-orient arc g:arc arc2 g:arc2
|
||||||
|
Builtin autohide g:autohide back g:back bezier g:bezier bg g:bg bg? g:bg? bounds g:bounds bounds? g:bounds?
|
||||||
|
Builtin box-label g:box-label btn-font g:btn-font bubble g:bubble button-size g:button-size buttons-visible g:buttons-visible
|
||||||
|
Builtin c-text g:c-text callout g:callout center g:center child g:child clear g:clear clearpath g:clearpath
|
||||||
|
Builtin clr>n g:clr>n coleven g:coleven colordlg g:colordlg colwidth g:colwidth connectededges g:connectededges
|
||||||
|
Builtin contrasting g:contrasting cp g:cp curmouse? g:curmouse? default-font g:default-font deselect-row g:deselect-row
|
||||||
|
Builtin dismiss g:dismiss do g:do draw-fitted-text g:draw-fitted-text draw-text g:draw-text draw-text-at g:draw-text-at
|
||||||
|
Builtin each g:each edit-on-double-click g:edit-on-double-click editable g:editable editdlg g:editdlg
|
||||||
|
Builtin empty-text g:empty-text enable g:enable enabled? g:enabled? fade g:fade fb-files g:fb-files
|
||||||
|
Builtin fcolor g:fcolor fg g:fg fg? g:fg? file-filter g:file-filter file-name g:file-name filedlg g:filedlg
|
||||||
|
Builtin fill g:fill fillall g:fillall fit-text g:fit-text flex! g:flex! focus g:focus fontdlg g:fontdlg
|
||||||
|
Builtin forward g:forward fullscreen g:fullscreen get-lasso-items g:get-lasso-items get-tab g:get-tab
|
||||||
|
Builtin getclr g:getclr getfont g:getfont getimage g:getimage getpath g:getpath getroot g:getroot gradient g:gradient
|
||||||
|
Builtin gui? g:gui? handle g:handle headerheight g:headerheight hide g:hide image g:image image-at g:image-at
|
||||||
|
Builtin invalidate g:invalidate ix? g:ix? justify g:justify keyinfo g:keyinfo l-text g:l-text laf g:laf
|
||||||
|
Builtin laf! g:laf! laf? g:laf? len g:len line-width g:line-width lineto g:lineto list+ g:list+ list- g:list-
|
||||||
|
Builtin loadcontent g:loadcontent localize g:localize m! g:m! m@ g:m@ menu-font g:menu-font menu-update g:menu-update
|
||||||
|
Builtin menuenabled g:menuenabled mouse? g:mouse? mousepos? g:mousepos? moveto g:moveto msgdlg g:msgdlg
|
||||||
|
Builtin multi g:multi name g:name named-skin g:named-skin new g:new new-laf g:new-laf next g:next obj g:obj
|
||||||
|
Builtin on g:on on? g:on? ontop g:ontop oshandle g:oshandle outlinethickness g:outlinethickness panel-size g:panel-size
|
||||||
|
Builtin panel-size? g:panel-size? parent g:parent path g:path path>s g:path>s pie g:pie pix! g:pix!
|
||||||
|
Builtin pop g:pop popmenu g:popmenu pos? g:pos? prev g:prev propval! g:propval! propval@ g:propval@
|
||||||
|
Builtin push g:push qbezier g:qbezier quit g:quit r-text g:r-text readonly g:readonly rect g:rect refresh g:refresh
|
||||||
|
Builtin restore g:restore root g:root root-item-visible g:root-item-visible rotate g:rotate rowheight g:rowheight
|
||||||
|
Builtin rrect g:rrect s>path g:s>path save g:save say g:say scale g:scale scolor g:scolor scrollthickness g:scrollthickness
|
||||||
|
Builtin sectionenable g:sectionenable select! g:select! select@ g:select@ selected-rows g:selected-rows
|
||||||
|
Builtin set-lasso g:set-lasso set-long-press g:set-long-press set-popup-font g:set-popup-font set-range g:set-range
|
||||||
|
Builtin set-swipe g:set-swipe set-value g:set-value setcursor g:setcursor setfont g:setfont setheader g:setheader
|
||||||
|
Builtin sethtml g:sethtml setimage g:setimage setname g:setname setroot g:setroot settab g:settab show g:show
|
||||||
|
Builtin show-line-numbers g:show-line-numbers show-pct g:show-pct showmenu g:showmenu showtooltip g:showtooltip
|
||||||
|
Builtin size g:size size? g:size? skin g:skin skin-class g:skin-class stackix g:stackix state g:state
|
||||||
|
Builtin state? g:state? stepsize g:stepsize stroke g:stroke stroke-fill g:stroke-fill style g:style
|
||||||
|
Builtin tabname g:tabname text g:text text-box-style g:text-box-style text? g:text? textcolor g:textcolor
|
||||||
|
Builtin textsize g:textsize timer! g:timer! timer@ g:timer@ toback g:toback tofront g:tofront toggle-row g:toggle-row
|
||||||
|
Builtin tooltip g:tooltip top g:top transition g:transition translate g:translate tree-open g:tree-open
|
||||||
|
Builtin triangle g:triangle update g:update updateitems g:updateitems url g:url user g:user user! g:user!
|
||||||
|
Builtin vertical g:vertical view g:view visible? g:visible? vpos! g:vpos! vpos@ g:vpos@ waitcursor g:waitcursor
|
||||||
|
Builtin winding g:winding xy g:xy xy? g:xy? +edge gr:+edge +edge+w gr:+edge+w +node gr:+node connect gr:connect
|
||||||
|
Builtin edges gr:edges m! gr:m! m@ gr:m@ neighbors gr:neighbors new gr:new node-edges gr:node-edges
|
||||||
|
Builtin nodes gr:nodes traverse gr:traverse + h:+ clear h:clear len h:len new h:new peek h:peek pop h:pop
|
||||||
|
Builtin push h:push unique h:unique arm? hw:arm? camera hw:camera camera-fmt hw:camera-fmt camera-img hw:camera-img
|
||||||
|
Builtin camera? hw:camera? cpu? hw:cpu? device? hw:device? displays? hw:displays? displaysize? hw:displaysize?
|
||||||
|
Builtin err? hw:err? gpio hw:gpio gpio! hw:gpio! gpio-mmap hw:gpio-mmap gpio@ hw:gpio@ i2c hw:i2c i2c! hw:i2c!
|
||||||
|
Builtin i2c!reg hw:i2c!reg i2c@ hw:i2c@ i2c@reg hw:i2c@reg isround? hw:isround? iswatch? hw:iswatch?
|
||||||
|
Builtin mac? hw:mac? mem? hw:mem? poll hw:poll sensor hw:sensor start hw:start stop hw:stop fetch-full imap:fetch-full
|
||||||
|
Builtin fetch-uid-mail imap:fetch-uid-mail login imap:login new imap:new select-inbox imap:select-inbox
|
||||||
|
Builtin >file img:>file copy img:copy crop img:crop data img:data desat img:desat fill img:fill filter img:filter
|
||||||
|
Builtin flip img:flip from-svg img:from-svg new img:new pix! img:pix! pix@ img:pix@ qr-gen img:qr-gen
|
||||||
|
Builtin qr-parse img:qr-parse rotate img:rotate scale img:scale scroll img:scroll size img:size countries iso:countries
|
||||||
|
Builtin find loc:find sort loc:sort ! m:! !? m:!? + m:+ +? m:+? - m:- @ m:@ @? m:@? @@ m:@@ clear m:clear
|
||||||
|
Builtin data m:data each m:each exists? m:exists? iter m:iter iter-all m:iter-all keys m:keys len m:len
|
||||||
|
Builtin map m:map new m:new op! m:op! open m:open vals m:vals xchg m:xchg ! mat:! * mat:* + mat:+ = mat:=
|
||||||
|
Builtin @ mat:@ col mat:col data mat:data det mat:det dim? mat:dim? get-n mat:get-n ident mat:ident
|
||||||
|
Builtin m. mat:m. minor mat:minor n* mat:n* new mat:new row mat:row same-size? mat:same-size? trans mat:trans
|
||||||
|
Builtin ! n:! * n:* */ n:*/ + n:+ +! n:+! - n:- / n:/ /mod n:/mod 1+ n:1+ 1- n:1- < n:< = n:= > n:>
|
||||||
|
Builtin BIGE n:BIGE BIGPI n:BIGPI E n:E PI n:PI ^ n:^ abs n:abs acos n:acos acos n:acos asin n:asin
|
||||||
|
Builtin asin n:asin atan n:atan atan n:atan atan2 n:atan2 band n:band between n:between bfloat n:bfloat
|
||||||
|
Builtin bic n:bic bint n:bint binv n:binv bnot n:bnot bor n:bor bxor n:bxor ceil n:ceil clamp n:clamp
|
||||||
|
Builtin cmp n:cmp comb n:comb cos n:cos cosd n:cosd exp n:exp expmod n:expmod float n:float floor n:floor
|
||||||
|
Builtin fmod n:fmod frac n:frac gcd n:gcd int n:int invmod n:invmod kind? n:kind? lcm n:lcm ln n:ln
|
||||||
|
Builtin max n:max median n:median min n:min mod n:mod neg n:neg odd? n:odd? perm n:perm prime? n:prime?
|
||||||
|
Builtin quantize n:quantize quantize! n:quantize! r+ n:r+ range n:range rot32l n:rot32l rot32r n:rot32r
|
||||||
|
Builtin round n:round round2 n:round2 running-variance n:running-variance running-variance-finalize n:running-variance-finalize
|
||||||
|
Builtin sgn n:sgn shl n:shl shr n:shr sin n:sin sind n:sind sqr n:sqr sqrt n:sqrt tan n:tan tand n:tand
|
||||||
|
Builtin trunc n:trunc ~= n:~= ! net:! >url net:>url @ net:@ DGRAM net:DGRAM INET4 net:INET4 INET6 net:INET6
|
||||||
|
Builtin PROTO_TCP net:PROTO_TCP PROTO_UDP net:PROTO_UDP STREAM net:STREAM accept net:accept addrinfo>o net:addrinfo>o
|
||||||
|
Builtin again? net:again? alloc-and-read net:alloc-and-read alloc-buf net:alloc-buf bind net:bind browse net:browse
|
||||||
|
Builtin close net:close connect net:connect err>s net:err>s err? net:err? get net:get getaddrinfo net:getaddrinfo
|
||||||
|
Builtin getpeername net:getpeername head net:head ifaces? net:ifaces? listen net:listen net-socket net:net-socket
|
||||||
|
Builtin opts net:opts port-is-ssl? net:port-is-ssl? post net:post proxy! net:proxy! read net:read recvfrom net:recvfrom
|
||||||
|
Builtin s>url net:s>url sendto net:sendto server net:server setsockopt net:setsockopt socket net:socket
|
||||||
|
Builtin tlshello net:tlshello url> net:url> user-agent net:user-agent wait net:wait write net:write
|
||||||
|
Builtin MAX ns:MAX cast ptr:cast len ptr:len pack ptr:pack unpack ptr:unpack unpack_orig ptr:unpack_orig
|
||||||
|
Builtin + q:+ clear q:clear len q:len new q:new notify q:notify overwrite q:overwrite peek q:peek pick q:pick
|
||||||
|
Builtin pop q:pop push q:push shift q:shift size q:size slide q:slide throwing q:throwing wait q:wait
|
||||||
|
Builtin ++match r:++match +/ r:+/ +match r:+match / r:/ @ r:@ err? r:err? len r:len match r:match new r:new
|
||||||
|
Builtin rx r:rx str r:str ! s:! * s:* + s:+ - s:- / s:/ /scripts s:/scripts <+ s:<+ = s:= =ic s:=ic
|
||||||
|
Builtin >base64 s:>base64 >ucs2 s:>ucs2 @ s:@ append s:append base64> s:base64> clear s:clear cmp s:cmp
|
||||||
|
Builtin cmpi s:cmpi compress s:compress days! s:days! each s:each eachline s:eachline expand s:expand
|
||||||
|
Builtin fill s:fill fmt s:fmt gershayim s:gershayim globmatch s:globmatch hexupr s:hexupr insert s:insert
|
||||||
|
Builtin intl s:intl intl! s:intl! lang s:lang lc s:lc len s:len lsub s:lsub ltrim s:ltrim map s:map
|
||||||
|
Builtin months! s:months! new s:new replace s:replace replace! s:replace! rev s:rev rsearch s:rsearch
|
||||||
|
Builtin rsub s:rsub rtrim s:rtrim script? s:script? search s:search size s:size slice s:slice strfmap s:strfmap
|
||||||
|
Builtin strfmt s:strfmt trim s:trim tsub s:tsub uc s:uc ucs2> s:ucs2> utf8? s:utf8? zt s:zt close sio:close
|
||||||
|
Builtin enum sio:enum open sio:open opts! sio:opts! opts@ sio:opts@ read sio:read write sio:write new smtp:new
|
||||||
|
Builtin send smtp:send apply-filter snd:apply-filter devices? snd:devices? end-record snd:end-record
|
||||||
|
Builtin filter snd:filter formats? snd:formats? freq snd:freq gain snd:gain gain? snd:gain? len snd:len
|
||||||
|
Builtin loop snd:loop mix snd:mix new snd:new pause snd:pause play snd:play played snd:played rate snd:rate
|
||||||
|
Builtin record snd:record seek snd:seek stop snd:stop stopall snd:stopall unmix snd:unmix volume snd:volume
|
||||||
|
Builtin volume? snd:volume? + st:+ . st:. clear st:clear len st:len ndrop st:ndrop new st:new op! st:op!
|
||||||
|
Builtin peek st:peek pick st:pick pop st:pop push st:push roll st:roll shift st:shift size st:size
|
||||||
|
Builtin slide st:slide swap st:swap throwing st:throwing >buf struct:>buf arr> struct:arr> buf struct:buf
|
||||||
|
Builtin buf> struct:buf> byte struct:byte double struct:double field! struct:field! field@ struct:field@
|
||||||
|
Builtin float struct:float ignore struct:ignore int struct:int long struct:long struct; struct:struct;
|
||||||
|
Builtin word struct:word ! t:! @ t:@ assign t:assign curtask t:curtask def-queue t:def-queue def-stack t:def-stack
|
||||||
|
Builtin done? t:done? err! t:err! err? t:err? getq t:getq guitask t:guitask handler t:handler kill t:kill
|
||||||
|
Builtin list t:list main t:main name! t:name! name@ t:name@ notify t:notify pop t:pop priority t:priority
|
||||||
|
Builtin push t:push push< t:push< q-notify t:q-notify q-wait t:q-wait qlen t:qlen result t:result task t:task
|
||||||
|
Builtin task-n t:task-n task-stop t:task-stop wait t:wait ! w:! @ w:@ alias: w:alias: cb w:cb deprecate w:deprecate
|
||||||
|
Builtin exec w:exec exec? w:exec? ffifail w:ffifail find w:find forget w:forget is w:is undo w:undo
|
||||||
|
Builtin >s xml:>s >txt xml:>txt parse xml:parse parse-html xml:parse-html parse-stream xml:parse-stream
|
||||||
|
Builtin getmsg[] zmq:getmsg[] sendmsg[] zmq:sendmsg[]
|
||||||
|
" numbers
|
||||||
|
syn keyword eighthMath decimal hex base@ base!
|
||||||
|
syn match eighthInteger '\<-\=[0-9.]*[0-9.]\+\>'
|
||||||
|
" recognize hex and binary numbers, the '$' and '%' notation is for eighth
|
||||||
|
syn match eighthInteger '\<\$\x*\x\+\>' " *1* --- dont't mess
|
||||||
|
syn match eighthInteger '\<\x*\d\x*\>' " *2* --- this order!
|
||||||
|
syn match eighthInteger '\<%[0-1]*[0-1]\+\>'
|
||||||
|
syn match eighthInteger "\<'.\>"
|
||||||
|
|
||||||
|
" Strings
|
||||||
|
syn region eighthString start=+\.\?\"+ skip=+"+ end=+$+
|
||||||
|
syn keyword jsonNull null
|
||||||
|
syn keyword jsonBool /\(true\|false\)/
|
||||||
|
syn region eighthString start=/\<"/ end=/"\>/
|
||||||
|
syn match jsonObjEntry /"\"[^"]\+\"\ze\s*:/
|
||||||
|
|
||||||
|
"syn region jsonObject start=/{/ end=/}/ contained contains=jsonObjEntry,jsonArray,jsonObject, jsonBool, eighthString
|
||||||
|
"syn region jsonArray start=/\[/ end=/\]/ contained contains=jsonArray,jsonObject, jsonBool, eighthString
|
||||||
|
|
||||||
|
" Include files
|
||||||
|
" syn match eighthInclude '\<\(libinclude\|include\|needs\)\s\+\S\+'
|
||||||
|
syn region eighthComment start="\zs\\" end="$" contains=eighthTodo
|
||||||
|
|
||||||
|
" Define the default highlighting.
|
||||||
|
if !exists("did_eighth_syntax_inits")
|
||||||
|
let did_eighth_syntax_inits=1
|
||||||
|
" The default methods for highlighting. Can be overriden later.
|
||||||
|
hi def link eighthTodo Todo
|
||||||
|
hi def link eighthOperators Operator
|
||||||
|
hi def link eighthMath Number
|
||||||
|
hi def link eighthInteger Number
|
||||||
|
hi def link eighthStack Special
|
||||||
|
hi def link eighthFStack Special
|
||||||
|
hi def link eighthSP Special
|
||||||
|
hi def link eighthColonDef Define
|
||||||
|
hi def link eighthColonName Operator
|
||||||
|
hi def link eighthEndOfColonDef Define
|
||||||
|
hi def link eighthDefine Define
|
||||||
|
hi def link eighthDebug Debug
|
||||||
|
hi def link eighthCharOps Character
|
||||||
|
hi def link eighthConversion String
|
||||||
|
hi def link eighthForth Statement
|
||||||
|
hi def link eighthVocs Statement
|
||||||
|
hi def link eighthString String
|
||||||
|
hi def link eighthComment Comment
|
||||||
|
hi def link eighthClassDef Define
|
||||||
|
hi def link eighthEndOfClassDef Define
|
||||||
|
hi def link eighthObjectDef Define
|
||||||
|
hi def link eighthEndOfObjectDef Define
|
||||||
|
hi def link eighthInclude Include
|
||||||
|
hi def link eighthBuiltin Define
|
||||||
|
hi def link eighthClasses Define
|
||||||
|
hi def link eighthClassWord Keyword
|
||||||
|
|
||||||
|
hi def link jsonObject Delimiter
|
||||||
|
hi def link jsonObjEntry Label
|
||||||
|
hi def link jsonArray Special
|
||||||
|
hi def link jsonNull Function
|
||||||
|
hi def link jsonBool Boolean
|
||||||
|
endif
|
||||||
|
|
||||||
|
let b:current_syntax = "8th"
|
||||||
|
let &cpo = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
|
|
||||||
|
" vim: ts=8:sw=4:nocindent:smartindent:
|
||||||
|
|
||||||
|
endif
|
||||||
75
syntax/a2ps.vim
Normal file
75
syntax/a2ps.vim
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'a2ps') == -1
|
||||||
|
|
||||||
|
" Vim syntax file
|
||||||
|
" Language: a2ps(1) configuration file
|
||||||
|
" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
|
||||||
|
" Latest Revision: 2006-04-19
|
||||||
|
|
||||||
|
if exists("b:current_syntax")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:cpo_save = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
syn keyword a2psPreProc Include
|
||||||
|
\ nextgroup=a2psKeywordColon
|
||||||
|
|
||||||
|
syn keyword a2psMacro UserOption
|
||||||
|
\ nextgroup=a2psKeywordColon
|
||||||
|
|
||||||
|
syn keyword a2psKeyword LibraryPath AppendLibraryPath PrependLibraryPath
|
||||||
|
\ Options Medium Printer UnknownPrinter
|
||||||
|
\ DefaultPrinter OutputFirstLine
|
||||||
|
\ PageLabelFormat Delegation FileCommand
|
||||||
|
\ nextgroup=a2psKeywordColon
|
||||||
|
|
||||||
|
syn match a2psKeywordColon contained display ':'
|
||||||
|
|
||||||
|
syn keyword a2psKeyword Variable nextgroup=a2psVariableColon
|
||||||
|
|
||||||
|
syn match a2psVariableColon contained display ':'
|
||||||
|
\ nextgroup=a2psVariable skipwhite
|
||||||
|
|
||||||
|
syn match a2psVariable contained display '[^ \t:(){}]\+'
|
||||||
|
\ contains=a2psVarPrefix
|
||||||
|
|
||||||
|
syn match a2psVarPrefix contained display
|
||||||
|
\ '\<\%(del\|pro\|ps\|pl\|toc\|user\|\)\ze\.'
|
||||||
|
|
||||||
|
syn match a2psLineCont display '\\$'
|
||||||
|
|
||||||
|
syn match a2psSubst display '$\%(-\=.\=\d\+\)\=\h\d\='
|
||||||
|
syn match a2psSubst display '#[?!]\=\w\d\='
|
||||||
|
syn match a2psSubst display '#{[^}]\+}'
|
||||||
|
|
||||||
|
syn region a2psString display oneline start=+'+ end=+'+
|
||||||
|
\ contains=a2psSubst
|
||||||
|
|
||||||
|
syn region a2psString display oneline start=+"+ end=+"+
|
||||||
|
\ contains=a2psSubst
|
||||||
|
|
||||||
|
syn keyword a2psTodo contained TODO FIXME XXX NOTE
|
||||||
|
|
||||||
|
syn region a2psComment display oneline start='^\s*#' end='$'
|
||||||
|
\ contains=a2psTodo,@Spell
|
||||||
|
|
||||||
|
hi def link a2psTodo Todo
|
||||||
|
hi def link a2psComment Comment
|
||||||
|
hi def link a2psPreProc PreProc
|
||||||
|
hi def link a2psMacro Macro
|
||||||
|
hi def link a2psKeyword Keyword
|
||||||
|
hi def link a2psKeywordColon Delimiter
|
||||||
|
hi def link a2psVariableColon Delimiter
|
||||||
|
hi def link a2psVariable Identifier
|
||||||
|
hi def link a2psVarPrefix Type
|
||||||
|
hi def link a2psLineCont Special
|
||||||
|
hi def link a2psSubst PreProc
|
||||||
|
hi def link a2psString String
|
||||||
|
|
||||||
|
let b:current_syntax = "a2ps"
|
||||||
|
|
||||||
|
let &cpo = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
|
|
||||||
|
endif
|
||||||
157
syntax/a65.vim
Normal file
157
syntax/a65.vim
Normal file
@@ -0,0 +1,157 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'a65') == -1
|
||||||
|
|
||||||
|
" Vim syntax file
|
||||||
|
" Language: xa 6502 cross assembler
|
||||||
|
" Maintainer: Clemens Kirchgatterer <clemens@1541.org>
|
||||||
|
" Last Change: 2016 Aug 31
|
||||||
|
|
||||||
|
" quit when a syntax file was already loaded
|
||||||
|
if exists("b:current_syntax")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
syn case ignore
|
||||||
|
|
||||||
|
" Opcodes
|
||||||
|
syn match a65Opcode "\<PHP\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<PLA\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<PLX\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<PLY\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<SEC\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<CLD\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<SED\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<CLI\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<BVC\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<BVS\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<BCS\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<BCC\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<DEY\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<DEC\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<CMP\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<CPX\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<BIT\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<ROL\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<ROR\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<ASL\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<TXA\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<TYA\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<TSX\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<TXS\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<LDA\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<LDX\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<LDY\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<STA\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<PLP\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<BRK\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<RTI\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<NOP\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<SEI\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<CLV\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<PHA\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<PHX\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<BRA\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<JMP\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<JSR\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<RTS\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<CPY\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<BNE\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<BEQ\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<BMI\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<LSR\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<INX\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<INY\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<INC\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<ADC\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<SBC\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<AND\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<ORA\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<STX\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<STY\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<STZ\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<EOR\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<DEX\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<BPL\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<CLC\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<PHY\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<TRB\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<BBR\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<BBS\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<RMB\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<SMB\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<TAY\($\|\s\)" nextgroup=a65Address
|
||||||
|
syn match a65Opcode "\<TAX\($\|\s\)" nextgroup=a65Address
|
||||||
|
|
||||||
|
" Addresses
|
||||||
|
syn match a65Address "\s*!\=$[0-9A-F]\{2}\($\|\s\)"
|
||||||
|
syn match a65Address "\s*!\=$[0-9A-F]\{4}\($\|\s\)"
|
||||||
|
syn match a65Address "\s*!\=$[0-9A-F]\{2},X\($\|\s\)"
|
||||||
|
syn match a65Address "\s*!\=$[0-9A-F]\{4},X\($\|\s\)"
|
||||||
|
syn match a65Address "\s*!\=$[0-9A-F]\{2},Y\($\|\s\)"
|
||||||
|
syn match a65Address "\s*!\=$[0-9A-F]\{4},Y\($\|\s\)"
|
||||||
|
syn match a65Address "\s*($[0-9A-F]\{2})\($\|\s\)"
|
||||||
|
syn match a65Address "\s*($[0-9A-F]\{4})\($\|\s\)"
|
||||||
|
syn match a65Address "\s*($[0-9A-F]\{2},X)\($\|\s\)"
|
||||||
|
syn match a65Address "\s*($[0-9A-F]\{2}),Y\($\|\s\)"
|
||||||
|
|
||||||
|
" Numbers
|
||||||
|
syn match a65Number "#\=[0-9]*\>"
|
||||||
|
syn match a65Number "#\=$[0-9A-F]*\>"
|
||||||
|
syn match a65Number "#\=&[0-7]*\>"
|
||||||
|
syn match a65Number "#\=%[01]*\>"
|
||||||
|
|
||||||
|
syn case match
|
||||||
|
|
||||||
|
" Types
|
||||||
|
syn match a65Type "\(^\|\s\)\.byt\($\|\s\)"
|
||||||
|
syn match a65Type "\(^\|\s\)\.word\($\|\s\)"
|
||||||
|
syn match a65Type "\(^\|\s\)\.asc\($\|\s\)"
|
||||||
|
syn match a65Type "\(^\|\s\)\.dsb\($\|\s\)"
|
||||||
|
syn match a65Type "\(^\|\s\)\.fopt\($\|\s\)"
|
||||||
|
syn match a65Type "\(^\|\s\)\.text\($\|\s\)"
|
||||||
|
syn match a65Type "\(^\|\s\)\.data\($\|\s\)"
|
||||||
|
syn match a65Type "\(^\|\s\)\.bss\($\|\s\)"
|
||||||
|
syn match a65Type "\(^\|\s\)\.zero\($\|\s\)"
|
||||||
|
syn match a65Type "\(^\|\s\)\.align\($\|\s\)"
|
||||||
|
|
||||||
|
" Blocks
|
||||||
|
syn match a65Section "\(^\|\s\)\.(\($\|\s\)"
|
||||||
|
syn match a65Section "\(^\|\s\)\.)\($\|\s\)"
|
||||||
|
|
||||||
|
" Strings
|
||||||
|
syn match a65String "\".*\""
|
||||||
|
|
||||||
|
" Programm Counter
|
||||||
|
syn region a65PC start="\*=" end="\>" keepend
|
||||||
|
|
||||||
|
" HI/LO Byte
|
||||||
|
syn region a65HiLo start="#[<>]" end="$\|\s" contains=a65Comment keepend
|
||||||
|
|
||||||
|
" Comments
|
||||||
|
syn keyword a65Todo TODO XXX FIXME BUG contained
|
||||||
|
syn match a65Comment ";.*"hs=s+1 contains=a65Todo
|
||||||
|
syn region a65Comment start="/\*" end="\*/" contains=a65Todo,a65Comment
|
||||||
|
|
||||||
|
" Preprocessor
|
||||||
|
syn region a65PreProc start="^#" end="$" contains=a65Comment,a65Continue
|
||||||
|
syn match a65End excludenl /end$/ contained
|
||||||
|
syn match a65Continue "\\$" contained
|
||||||
|
|
||||||
|
" Define the default highlighting.
|
||||||
|
" Only when an item doesn't have highlighting yet
|
||||||
|
|
||||||
|
hi def link a65Section Special
|
||||||
|
hi def link a65Address Special
|
||||||
|
hi def link a65Comment Comment
|
||||||
|
hi def link a65PreProc PreProc
|
||||||
|
hi def link a65Number Number
|
||||||
|
hi def link a65String String
|
||||||
|
hi def link a65Type Statement
|
||||||
|
hi def link a65Opcode Type
|
||||||
|
hi def link a65PC Error
|
||||||
|
hi def link a65Todo Todo
|
||||||
|
hi def link a65HiLo Number
|
||||||
|
|
||||||
|
|
||||||
|
let b:current_syntax = "a65"
|
||||||
|
|
||||||
|
endif
|
||||||
162
syntax/aap.vim
Normal file
162
syntax/aap.vim
Normal file
@@ -0,0 +1,162 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'aap') == -1
|
||||||
|
|
||||||
|
" Vim syntax file
|
||||||
|
" Language: A-A-P recipe
|
||||||
|
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||||
|
" Last Change: 2004 Jun 13
|
||||||
|
|
||||||
|
" Quit when a syntax file was already loaded
|
||||||
|
if exists("b:current_syntax")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:cpo_save = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
syn include @aapPythonScript syntax/python.vim
|
||||||
|
|
||||||
|
syn match aapVariable /$[-+?*="'\\!]*[a-zA-Z0-9_.]*/
|
||||||
|
syn match aapVariable /$[-+?*="'\\!]*([a-zA-Z0-9_.]*)/
|
||||||
|
syn keyword aapTodo contained TODO Todo
|
||||||
|
syn match aapString +'[^']\{-}'+
|
||||||
|
syn match aapString +"[^"]\{-}"+
|
||||||
|
|
||||||
|
syn match aapCommand '^\s*:action\>'
|
||||||
|
syn match aapCommand '^\s*:add\>'
|
||||||
|
syn match aapCommand '^\s*:addall\>'
|
||||||
|
syn match aapCommand '^\s*:asroot\>'
|
||||||
|
syn match aapCommand '^\s*:assertpkg\>'
|
||||||
|
syn match aapCommand '^\s*:attr\>'
|
||||||
|
syn match aapCommand '^\s*:attribute\>'
|
||||||
|
syn match aapCommand '^\s*:autodepend\>'
|
||||||
|
syn match aapCommand '^\s*:buildcheck\>'
|
||||||
|
syn match aapCommand '^\s*:cd\>'
|
||||||
|
syn match aapCommand '^\s*:chdir\>'
|
||||||
|
syn match aapCommand '^\s*:checkin\>'
|
||||||
|
syn match aapCommand '^\s*:checkout\>'
|
||||||
|
syn match aapCommand '^\s*:child\>'
|
||||||
|
syn match aapCommand '^\s*:chmod\>'
|
||||||
|
syn match aapCommand '^\s*:commit\>'
|
||||||
|
syn match aapCommand '^\s*:commitall\>'
|
||||||
|
syn match aapCommand '^\s*:conf\>'
|
||||||
|
syn match aapCommand '^\s*:copy\>'
|
||||||
|
syn match aapCommand '^\s*:del\>'
|
||||||
|
syn match aapCommand '^\s*:deldir\>'
|
||||||
|
syn match aapCommand '^\s*:delete\>'
|
||||||
|
syn match aapCommand '^\s*:delrule\>'
|
||||||
|
syn match aapCommand '^\s*:dll\>'
|
||||||
|
syn match aapCommand '^\s*:do\>'
|
||||||
|
syn match aapCommand '^\s*:error\>'
|
||||||
|
syn match aapCommand '^\s*:execute\>'
|
||||||
|
syn match aapCommand '^\s*:exit\>'
|
||||||
|
syn match aapCommand '^\s*:export\>'
|
||||||
|
syn match aapCommand '^\s*:fetch\>'
|
||||||
|
syn match aapCommand '^\s*:fetchall\>'
|
||||||
|
syn match aapCommand '^\s*:filetype\>'
|
||||||
|
syn match aapCommand '^\s*:finish\>'
|
||||||
|
syn match aapCommand '^\s*:global\>'
|
||||||
|
syn match aapCommand '^\s*:import\>'
|
||||||
|
syn match aapCommand '^\s*:include\>'
|
||||||
|
syn match aapCommand '^\s*:installpkg\>'
|
||||||
|
syn match aapCommand '^\s*:lib\>'
|
||||||
|
syn match aapCommand '^\s*:local\>'
|
||||||
|
syn match aapCommand '^\s*:log\>'
|
||||||
|
syn match aapCommand '^\s*:ltlib\>'
|
||||||
|
syn match aapCommand '^\s*:mkdir\>'
|
||||||
|
syn match aapCommand '^\s*:mkdownload\>'
|
||||||
|
syn match aapCommand '^\s*:move\>'
|
||||||
|
syn match aapCommand '^\s*:pass\>'
|
||||||
|
syn match aapCommand '^\s*:popdir\>'
|
||||||
|
syn match aapCommand '^\s*:produce\>'
|
||||||
|
syn match aapCommand '^\s*:program\>'
|
||||||
|
syn match aapCommand '^\s*:progsearch\>'
|
||||||
|
syn match aapCommand '^\s*:publish\>'
|
||||||
|
syn match aapCommand '^\s*:publishall\>'
|
||||||
|
syn match aapCommand '^\s*:pushdir\>'
|
||||||
|
syn match aapCommand '^\s*:quit\>'
|
||||||
|
syn match aapCommand '^\s*:recipe\>'
|
||||||
|
syn match aapCommand '^\s*:refresh\>'
|
||||||
|
syn match aapCommand '^\s*:remove\>'
|
||||||
|
syn match aapCommand '^\s*:removeall\>'
|
||||||
|
syn match aapCommand '^\s*:require\>'
|
||||||
|
syn match aapCommand '^\s*:revise\>'
|
||||||
|
syn match aapCommand '^\s*:reviseall\>'
|
||||||
|
syn match aapCommand '^\s*:route\>'
|
||||||
|
syn match aapCommand '^\s*:rule\>'
|
||||||
|
syn match aapCommand '^\s*:start\>'
|
||||||
|
syn match aapCommand '^\s*:symlink\>'
|
||||||
|
syn match aapCommand '^\s*:sys\>'
|
||||||
|
syn match aapCommand '^\s*:sysdepend\>'
|
||||||
|
syn match aapCommand '^\s*:syspath\>'
|
||||||
|
syn match aapCommand '^\s*:system\>'
|
||||||
|
syn match aapCommand '^\s*:tag\>'
|
||||||
|
syn match aapCommand '^\s*:tagall\>'
|
||||||
|
syn match aapCommand '^\s*:toolsearch\>'
|
||||||
|
syn match aapCommand '^\s*:totype\>'
|
||||||
|
syn match aapCommand '^\s*:touch\>'
|
||||||
|
syn match aapCommand '^\s*:tree\>'
|
||||||
|
syn match aapCommand '^\s*:unlock\>'
|
||||||
|
syn match aapCommand '^\s*:update\>'
|
||||||
|
syn match aapCommand '^\s*:usetool\>'
|
||||||
|
syn match aapCommand '^\s*:variant\>'
|
||||||
|
syn match aapCommand '^\s*:verscont\>'
|
||||||
|
|
||||||
|
syn match aapCommand '^\s*:print\>' nextgroup=aapPipeEnd
|
||||||
|
syn match aapPipeCmd '\s*:print\>' nextgroup=aapPipeEnd contained
|
||||||
|
syn match aapCommand '^\s*:cat\>' nextgroup=aapPipeEnd
|
||||||
|
syn match aapPipeCmd '\s*:cat\>' nextgroup=aapPipeEnd contained
|
||||||
|
syn match aapCommand '^\s*:syseval\>' nextgroup=aapPipeEnd
|
||||||
|
syn match aapPipeCmd '\s*:syseval\>' nextgroup=aapPipeEnd contained
|
||||||
|
syn match aapPipeCmd '\s*:assign\>' contained
|
||||||
|
syn match aapCommand '^\s*:eval\>' nextgroup=aapPipeEnd
|
||||||
|
syn match aapPipeCmd '\s*:eval\>' nextgroup=aapPipeEndPy contained
|
||||||
|
syn match aapPipeCmd '\s*:tee\>' nextgroup=aapPipeEnd contained
|
||||||
|
syn match aapPipeCmd '\s*:log\>' nextgroup=aapPipeEnd contained
|
||||||
|
syn match aapPipeEnd '[^|]*|' nextgroup=aapPipeCmd contained skipnl
|
||||||
|
syn match aapPipeEndPy '[^|]*|' nextgroup=aapPipeCmd contained skipnl contains=@aapPythonScript
|
||||||
|
syn match aapPipeStart '^\s*|' nextgroup=aapPipeCmd
|
||||||
|
|
||||||
|
"
|
||||||
|
" A Python line starts with @. Can be continued with a trailing backslash.
|
||||||
|
syn region aapPythonRegion start="\s*@" skip='\\$' end=+$+ contains=@aapPythonScript keepend
|
||||||
|
"
|
||||||
|
" A Python block starts with ":python" and continues so long as the indent is
|
||||||
|
" bigger.
|
||||||
|
syn region aapPythonRegion matchgroup=aapCommand start="\z(\s*\):python" skip='\n\z1\s\|\n\s*\n' end=+$+ contains=@aapPythonScript
|
||||||
|
|
||||||
|
" A Python expression is enclosed in backticks.
|
||||||
|
syn region aapPythonRegion start="`" skip="``" end="`" contains=@aapPythonScript
|
||||||
|
|
||||||
|
" TODO: There is something wrong with line continuation.
|
||||||
|
syn match aapComment '#.*' contains=aapTodo
|
||||||
|
syn match aapComment '#.*\(\\\n.*\)' contains=aapTodo
|
||||||
|
|
||||||
|
syn match aapSpecial '$#'
|
||||||
|
syn match aapSpecial '$\$'
|
||||||
|
syn match aapSpecial '$(.)'
|
||||||
|
|
||||||
|
" A heredoc assignment.
|
||||||
|
syn region aapHeredoc start="^\s*\k\+\s*$\=+\=?\=<<\s*\z(\S*\)"hs=e+1 end="^\s*\z1\s*$"he=s-1
|
||||||
|
|
||||||
|
" Syncing is needed for ":python" and "VAR << EOF". Don't use Python syncing
|
||||||
|
syn sync clear
|
||||||
|
syn sync fromstart
|
||||||
|
|
||||||
|
" The default highlighting.
|
||||||
|
hi def link aapTodo Todo
|
||||||
|
hi def link aapString String
|
||||||
|
hi def link aapComment Comment
|
||||||
|
hi def link aapSpecial Special
|
||||||
|
hi def link aapVariable Identifier
|
||||||
|
hi def link aapPipeCmd aapCommand
|
||||||
|
hi def link aapCommand Statement
|
||||||
|
hi def link aapHeredoc Constant
|
||||||
|
|
||||||
|
let b:current_syntax = "aap"
|
||||||
|
|
||||||
|
let &cpo = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
|
|
||||||
|
" vim: ts=8
|
||||||
|
|
||||||
|
endif
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user