Compare commits

...

114 Commits

Author SHA1 Message Date
Adam Stankiewicz
e166f741ef Some major updates including heuristics
- Allow to define heuristics in heuristics.yaml
- Migrate all filetypes from vim beginning with "a"
- Remove enhanced cpp syntax (it was too slow to load)
- Use setf instead of set ft for setting filetype (faster)
- Override native hauristics with au!
- Add globbing of files for packages
- Replace predefined dirs with extra_dirs and ignored_dirs
- Allow to define proper order of packages with topological sort
- Fix powershell detection
- Lint and fix many packages.yaml issues
- etc etd
2020-09-01 08:33:15 +02:00
Tim Bedard
d4fcef1aa8 add missing period to fix mako detection (#530) 2020-08-29 12:17:29 +02:00
Adam Stankiewicz
7972e8eea1 Build 2020-08-27 15:02:54 +02:00
Adam Stankiewicz
6ed481e463 Make sure all extensions are covered 2020-08-27 15:01:44 +02:00
Adam Stankiewicz
c1e1870a3d Fix ocaml and dune ftdetect 2020-08-27 09:30:50 +02:00
Adam Stankiewicz
f0d6ecff07 Build 2020-08-25 23:09:24 +02:00
Tim Bedard
15e5df246e Add missing newlines (#527) 2020-08-25 23:08:33 +02:00
Adam Stankiewicz
94ababe91f Fix ansible ftdetect 2020-08-25 14:28:44 +02:00
Adam Stankiewicz
080b8cdc60 Fix ansible ftdetect 2020-08-25 14:26:38 +02:00
Adam Stankiewicz
e47af23f64 Cleanup ftdetect 2020-08-25 14:03:03 +02:00
Adam Stankiewicz
8f5134aef8 Include docs of plugins 2020-08-24 12:37:31 +02:00
Adam Stankiewicz
be8d039e02 Remove vifm and test all filetypes 2020-08-24 12:34:24 +02:00
Adam Stankiewicz
38ce8e9cb6 Use make in CI 2020-08-24 11:53:03 +02:00
Adam Stankiewicz
55ad5a982a Migrate to makefile 2020-08-24 11:52:33 +02:00
Adam Stankiewicz
b2055afaa7 Migrate only after dirs 2020-08-24 11:48:35 +02:00
Adam Stankiewicz
63a175357a Remove some custom dirs config 2020-08-24 10:56:09 +02:00
Adam Stankiewicz
25db54573a Mention vim-polyglot is more secure than using individual packs 2020-08-24 10:32:03 +02:00
Adam Stankiewicz
d1bfe50419 Ignore compiler for javascript, fixes #521 2020-08-24 10:29:39 +02:00
Adam Stankiewicz
22e8e01c1e Use setf for ambiguous extensions 2020-08-24 09:52:25 +02:00
Adam Stankiewicz
30bef582ba Fix blade ftdetect 2020-08-24 09:31:34 +02:00
Adam Stankiewicz
74d940cda3 Remove travis 2020-08-24 00:21:35 +02:00
Adam Stankiewicz
54d2386262 Update readme 2020-08-24 00:05:31 +02:00
Adam Stankiewicz
a47c315b01 Update readme 2020-08-24 00:04:36 +02:00
Adam Stankiewicz
ff0ada0dc3 Fix CI 2020-08-24 00:01:53 +02:00
Adam Stankiewicz
e194de5875 Debug CI 2020-08-23 23:59:02 +02:00
Adam Stankiewicz
012cf89210 Fix CI 2020-08-23 23:54:23 +02:00
Adam Stankiewicz
ac71777dc2 Fix CI 2020-08-23 23:40:50 +02:00
Adam Stankiewicz
23defeb610 fix: Migrate build script to ruby 2020-08-23 23:35:05 +02:00
Adam Stankiewicz
114a93bb7c Migrate ftdetect generation to ruby 2020-08-23 23:25:06 +02:00
Adam Stankiewicz
f3ab28a287 Move packages to yaml file 2020-08-23 19:39:42 +02:00
Adam Stankiewicz
bc3b36088e Update 2020-08-23 17:26:30 +02:00
Adam Stankiewicz
5d0150e326 Migrate build script to ruby 2020-08-21 19:49:36 +02:00
Adam Stankiewicz
cf8e31ff7f Update 2020-08-21 14:51:19 +02:00
Adam Stankiewicz
0df1bfa0c5 Add requirements.txt support, closes #507 2020-08-18 23:31:31 +02:00
Adam Stankiewicz
f7302d9262 Add jq syntax, closes #502 2020-08-18 23:25:22 +02:00
Adam Stankiewicz
7e38f4288a Add improved sql syntax, closes #505 2020-08-18 23:22:09 +02:00
Adam Stankiewicz
e521ba3ae2 Add fennel support, closes #514 2020-08-18 23:09:35 +02:00
Adam Stankiewicz
ee4f51587d Add ftdetect for jsonnet 2020-08-18 23:06:10 +02:00
Adam Stankiewicz
20a388cbc8 Add jsonnet support, closes #515 2020-08-18 23:04:38 +02:00
Adam Stankiewicz
81e61a3c5d Ignore auto-generated tags file 2020-08-18 23:00:07 +02:00
Adam Stankiewicz
5670985b3a Add docs, fixes #501 2020-08-18 22:45:46 +02:00
Adam Stankiewicz
69eae22ea6 Let fsharp have priority over fs files, fixes #523 2020-08-18 21:30:22 +02:00
Adam Stankiewicz
f8cee0172b Allow to set let g:python_highlight_all = 0, closes #474 2020-08-18 20:52:00 +02:00
Adam Stankiewicz
c6936aeeb1 Fix dhall plugin, closes #519 2020-08-18 20:08:26 +02:00
Adam Stankiewicz
6bb111eaba Embed plugin guards 2020-08-18 20:01:12 +02:00
Adam Stankiewicz
dfecb63078 Report download errors 2020-08-18 18:49:24 +02:00
Adam Stankiewicz
00015bd105 Migrate all ftdetect to linguist 2020-08-18 15:53:18 +02:00
Adam Stankiewicz
d821de3142 Migrate more filetypes 2020-08-18 11:54:28 +02:00
Adam Stankiewicz
a3bdbcdb3c Fix svelte branch name, closes #522 2020-08-14 19:15:07 +02:00
Adam Stankiewicz
34e01b8b62 Start github-linguist rewrite 2020-08-06 13:42:56 +02:00
Adam Stankiewicz
1e533e5982 Update 2020-08-06 13:22:17 +02:00
Adam Stankiewicz
56121b4e27 Update 2020-07-26 10:20:08 +02:00
Adam Stankiewicz
9c3c0bc082 Fix rspect ftdetect, #503 2020-07-06 19:14:22 +02:00
Adam Stankiewicz
8500ae8bb9 Update 2020-07-06 19:13:39 +02:00
Adam Stankiewicz
d09a56a494 Add unison language support 2020-06-25 13:40:40 +02:00
Adam Stankiewicz
abca7c2014 Update 2020-06-25 13:38:15 +02:00
TravonteD
8b6c06e723 Add detection for rspec files (#503)
Standard convention for rspec files is "*_spec.rb". This is also what
rspec.vim (the syntax plugin that is pulled in) uses.
2020-06-19 14:47:03 +02:00
Adam Stankiewicz
a86c0179eb Update 2020-06-13 11:36:03 +02:00
Adam Stankiewicz
22095febb7 Update 2020-06-10 11:46:12 +02:00
Adam Stankiewicz
ff066ee9f0 Update 2020-06-07 17:37:15 +02:00
Adam Stankiewicz
5b38663027 Update README.md 2020-06-01 22:01:48 +02:00
Adam Stankiewicz
f0b38f2c1d Install vim 8 for tests 2020-05-31 23:53:41 +02:00
Adam Stankiewicz
6676d61f61 Fix 2020-05-31 23:51:46 +02:00
Adam Stankiewicz
f0da1a9f4d Update vim version 2020-05-31 23:48:07 +02:00
Adam Stankiewicz
298d6b6356 Fix tests 2020-05-31 23:44:10 +02:00
Adam Stankiewicz
62f004c3da Update travis script 2020-05-31 23:42:04 +02:00
Adam Stankiewicz
c73ea49ecb Improve bash and zsh highlighting 2020-05-31 20:57:37 +02:00
Adam Stankiewicz
b2be47befc Update 2020-05-31 20:52:04 +02:00
Adam Kwiatek
de38ccabbd Enable TypeScript in ftdetect (#496) 2020-05-29 21:10:18 +02:00
Adam Stankiewicz
f0f49cf0fa Add support for ics, closes #492 2020-05-28 11:12:25 +02:00
Adam Stankiewicz
224a6348f9 Update 2020-05-28 11:09:19 +02:00
Emerson MX
00c3f02945 Remove gdscript ftplugin (#494) 2020-05-28 11:05:53 +02:00
Adam Stankiewicz
df34b4b4fa Update 2020-05-21 22:45:59 +02:00
Adam Stankiewicz
f3804b0892 Restore support for polyglot_disabled for ftdetect, closes #491 2020-05-21 22:45:04 +02:00
Adam Stankiewicz
685aeaaeb1 Add ledger support, closes #488 2020-05-20 20:24:48 +02:00
Adam Stankiewicz
a9cc6fd218 Remove latex, fixes #484 2020-05-20 20:19:03 +02:00
Adam Stankiewicz
3c47f192b5 Fix jinja.html detection 2020-05-20 19:44:40 +02:00
Adam Stankiewicz
c8b350432c Remove generation of ftdetect from build 2020-05-20 19:35:10 +02:00
Adam Stankiewicz
cdb8e233c2 Manually fix ftdetect 2020-05-20 19:32:07 +02:00
Adam Stankiewicz
ff282f610f Remove extra files 2020-05-20 17:29:46 +02:00
Adam Stankiewicz
74cb75bedd Add vim-raku, closes #490 2020-05-20 17:06:38 +02:00
Adam Stankiewicz
42529540df Remove non-working ftplugin line, closes #485 2020-05-20 17:04:22 +02:00
Adam Stankiewicz
a688c66a04 Update 2020-05-20 16:59:09 +02:00
Adam Stankiewicz
0a7c62b3b2 Remove rego syntax, fixes #486 2020-04-30 16:49:01 +02:00
Adam Stankiewicz
c7b5826d53 Update 2020-04-28 01:09:08 +02:00
Adam Stankiewicz
1d348d0c2d Update badge 2020-04-25 23:23:00 +02:00
Adam Stankiewicz
6a15d48ed4 Add brewfile support, closes #469 2020-04-25 22:15:02 +02:00
Adam Stankiewicz
24f0581a96 Add rego support, closes #471 2020-04-25 22:12:56 +02:00
Adam Stankiewicz
33c9484671 Allow to configure python syntax, #474 2020-04-25 22:09:35 +02:00
Adam Stankiewicz
55287efdf7 Change elm provider, closes #475 2020-04-25 21:32:37 +02:00
Adam Stankiewicz
d757bfd643 Change latex provider to luatex, closes #476 2020-04-25 21:30:46 +02:00
Adam Stankiewicz
8ec73a3a89 Change fsharp provider, closes #477 2020-04-25 21:22:25 +02:00
Adam Stankiewicz
b2ee28374b Add gdscript, closes #483 2020-04-25 21:06:45 +02:00
Adam Stankiewicz
68b2748af1 Update 2020-04-25 21:03:34 +02:00
Adam Stankiewicz
14dc82fc4e Update 2020-04-14 13:17:26 +02:00
Adam Stankiewicz
e86e0ad36e Update 2020-03-05 12:30:24 +01:00
Adam Stankiewicz
45ab4d80dd Add zinit syntax, closes #459 2020-03-02 01:42:31 +01:00
Adam Stankiewicz
9cd6e8533b Update 2020-03-02 01:39:59 +01:00
Adam Stankiewicz
43ecbfae50 Add ctags files, fixes #445 2020-03-02 01:24:08 +01:00
Adam Stankiewicz
f77702c090 Remove groovy syntax, fixes #456 2020-03-02 01:10:48 +01:00
Adam Stankiewicz
e558a218c6 Add razor syntax, fixes #450 2020-03-02 01:03:15 +01:00
Adam Stankiewicz
16774887a3 Force javascript filetype for jsx, fixes #460 2020-03-02 00:59:47 +01:00
Adam Stankiewicz
e7dc03dc01 Use upstream rspec plugin, fixes #458 2020-03-02 00:45:18 +01:00
Adam Stankiewicz
aee260a301 Remove jasmine syntax, fixes #464 2020-03-02 00:43:28 +01:00
Adam Stankiewicz
6b540d7db0 Update 2020-03-02 00:34:02 +01:00
Adam Stankiewicz
35ea4d2b90 Update 2020-01-25 16:56:10 +01:00
Chris Bandy
967486dd71 Combine ftdetect files in a predictable order (#461)
Bash expands patterns to an alphabetically sorted list of filenames, but
the order depends on LC_COLLATE. On both Linux and BSD, `sort -V` uses
the C locale.
2020-01-25 16:54:44 +01:00
Adam Stankiewicz
e8454d66ab Fix performance issue with markdown highlighting 2019-12-31 14:23:47 +01:00
Adam Stankiewicz
a60e299a3c Switch back to plasticboy for markdown 2019-12-31 14:08:15 +01:00
Adam Stankiewicz
b8a5504021 Update 2019-12-31 14:05:09 +01:00
Adam Stankiewicz
cea0d08a06 Replace markdown plugin for faster one 2019-12-12 16:43:09 +01:00
Adam Stankiewicz
43085dc02f Update 2019-12-12 16:33:01 +01:00
Adam Stankiewicz
4d8423c962 Add v language, closes #437 2019-12-07 17:39:31 +01:00
Adam Stankiewicz
e204a7223b Add ftplugin to markdown, fixes #447 2019-12-07 13:01:03 +01:00
349 changed files with 40703 additions and 18868 deletions

7
.gitattributes vendored
View File

@@ -1,7 +0,0 @@
.gitignore export-ignore
.gitattributes export-ignore
README.md export-ignore
/spec export-ignore
Gemfile export-ignore
Gemfile.lock export-ignore
.travis.yml export-ignore

21
.github/workflows/test.yml vendored Normal file
View 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

2
.gitignore vendored
View File

@@ -1 +1,3 @@
/tmp /tmp
!*ctags*
tags

View File

@@ -1,11 +0,0 @@
language: ruby
rvm:
- 2.6
sudo: false
addons:
apt:
packages:
- vim-gtk
before_script:
- "./build"
script: xvfb-run bundle exec rspec --format=documentation

View File

@@ -1,4 +0,0 @@
source 'https://rubygems.org'
gem 'vimrunner'
gem 'rspec'

View File

@@ -1,28 +0,0 @@
GEM
remote: https://rubygems.org/
specs:
diff-lcs (1.3)
rspec (3.8.0)
rspec-core (~> 3.8.0)
rspec-expectations (~> 3.8.0)
rspec-mocks (~> 3.8.0)
rspec-core (3.8.0)
rspec-support (~> 3.8.0)
rspec-expectations (3.8.2)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.8.0)
rspec-mocks (3.8.0)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.8.0)
rspec-support (3.8.0)
vimrunner (0.3.4)
PLATFORMS
ruby
DEPENDENCIES
rspec
vimrunner
BUNDLED WITH
1.16.2

10
Makefile Normal file
View 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'

368
README.md
View File

@@ -1,22 +1,20 @@
![vim-polyglot](https://i.imgur.com/9RxQK6k.png) ![vim-polyglot](https://i.imgur.com/9RxQK6k.png)
[![Build Status][travis-img-url]][travis-url] [![Maintenance](https://img.shields.io/maintenance/yes/2019.svg?maxAge=2592000)]() ![build](https://github.com/sheerun/vim-polyglot/workflows/Vim%20Polyglot%20CI/badge.svg) [![Maintenance](https://img.shields.io/maintenance/yes/2020.svg?maxAge=2592000)]()
[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-->146<!--/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, concatenated `ftdetect` script takes up to `17ms` to load. \*To be completely honest, optimized `ftdetect` script takes around `19ms` to load.
## Installation ## Installation
@@ -38,189 +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) - [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)
- [c++11](https://github.com/octol/vim-cpp-enhanced-highlight) (syntax) - [acedb](https://github.com/vim/vim/tree/master/runtime)
- [c/c++](https://github.com/vim-jp/vim-cpp) (syntax) - [acpiasl](https://github.com/martinlroth/vim-acpi-asl)
- [caddyfile](https://github.com/isobit/vim-caddyfile) (syntax, indent, ftplugin) - [ada](https://github.com/vim/vim/tree/master/runtime)
- [carp](https://github.com/hellerve/carp-vim) (syntax) - [ahdl](https://github.com/vim/vim/tree/master/runtime)
- [cjsx](https://github.com/mtscout6/vim-cjsx) (syntax, ftplugin) - [aidl](https://github.com/vim/vim/tree/master/runtime)
- [clojure](https://github.com/guns/vim-clojure-static) (syntax, indent, autoload, ftplugin) - [alsaconf](https://github.com/vim/vim/tree/master/runtime)
- [cmake](https://github.com/pboettch/vim-cmake-syntax) (syntax, indent) - [aml](https://github.com/vim/vim/tree/master/runtime)
- [coffee-script](https://github.com/kchmck/vim-coffee-script) (syntax, compiler, indent, autoload, ftplugin) - [ampl](https://github.com/vim/vim/tree/master/runtime)
- [cql](https://github.com/elubow/cql-vim) (syntax) - [ansible](https://github.com/pearofducks/ansible-vim)
- [cryptol](https://github.com/victoredwardocallaghan/cryptol.vim) (syntax, compiler, ftplugin) - [ant](https://github.com/vim/vim/tree/master/runtime)
- [crystal](https://github.com/rhysd/vim-crystal) (syntax, indent, autoload, ftplugin) - [apache](https://github.com/vim/vim/tree/master/runtime)
- [csv](https://github.com/chrisbra/csv.vim) (syntax, autoload, ftplugin) - [apiblueprint](https://github.com/sheerun/apiblueprint.vim)
- [cucumber](https://github.com/tpope/vim-cucumber) (syntax, indent, compiler, ftplugin) - [applescript](https://github.com/mityu/vim-applescript)
- [cue](https://github.com/mgrabovsky/vim-cuesheet) (syntax) - [aptconf](https://github.com/vim/vim/tree/master/runtime)
- [dart](https://github.com/dart-lang/dart-vim-plugin) (syntax, indent, autoload, ftplugin) - [arch](https://github.com/vim/vim/tree/master/runtime)
- [dhall](https://github.com/vmchale/dhall-vim) (syntax, ftplugin) - [arduino](https://github.com/sudar/vim-arduino-syntax)
- [dlang](https://github.com/JesseKPhillips/d.vim) (syntax, indent) - [art](https://github.com/vim/vim/tree/master/runtime)
- [dockerfile](https://github.com/ekalinin/Dockerfile.vim) (syntax, indent, ftplugin) - [asciidoc](https://github.com/asciidoc/vim-asciidoc)
- [elixir](https://github.com/elixir-lang/vim-elixir) (syntax, indent, compiler, autoload, ftplugin) - [asn](https://github.com/vim/vim/tree/master/runtime)
- [elm](https://github.com/ElmCast/elm-vim) (syntax, indent, autoload, ftplugin) - [aspperl](https://github.com/vim/vim/tree/master/runtime)
- [emberscript](https://github.com/yalesov/vim-ember-script) (syntax, indent, ftplugin) - [aspvbs](https://github.com/vim/vim/tree/master/runtime)
- [emblem](https://github.com/yalesov/vim-emblem) (syntax, indent, ftplugin) - [atlas](https://github.com/vim/vim/tree/master/runtime)
- [erlang](https://github.com/vim-erlang/vim-erlang-runtime) (syntax, indent) - [autohotkey](https://github.com/hnamikaw/vim-autohotkey)
- [ferm](https://github.com/vim-scripts/ferm.vim) (syntax) - [autoit](https://github.com/vim/vim/tree/master/runtime)
- [fish](https://github.com/georgewitteman/vim-fish) (syntax, indent, compiler, autoload, ftplugin) - [automake](https://github.com/vim/vim/tree/master/runtime)
- [flatbuffers](https://github.com/dcharbon/vim-flatbuffers) (syntax) - [ave](https://github.com/vim/vim/tree/master/runtime)
- [fsharp](https://github.com/fsharp/vim-fsharp) (syntax, indent) - [awk](https://github.com/vim/vim/tree/master/runtime)
- [git](https://github.com/tpope/vim-git) (syntax, indent, ftplugin) - [blade](https://github.com/jwalton512/vim-blade)
- [glsl](https://github.com/tikhomirov/vim-glsl) (syntax, indent) - [brewfile](https://github.com/bfontaine/Brewfile.vim)
- [gmpl](https://github.com/maelvalais/gmpl.vim) (syntax) - [c/c++](https://github.com/vim-jp/vim-cpp)
- [gnuplot](https://github.com/vim-scripts/gnuplot-syntax-highlighting) (syntax) - [caddyfile](https://github.com/isobit/vim-caddyfile)
- [go](https://github.com/fatih/vim-go) (syntax, compiler, indent) - [carp](https://github.com/hellerve/carp-vim)
- [gradle](https://github.com/tfnico/vim-gradle) (compiler) - [cjsx](https://github.com/mtscout6/vim-cjsx)
- [graphql](https://github.com/jparise/vim-graphql) (syntax, indent, autoload, ftplugin, after) - [clojure](https://github.com/guns/vim-clojure-static)
- [groovy-indent](https://github.com/vim-scripts/groovyindent-unix) (indent) - [cmake](https://github.com/pboettch/vim-cmake-syntax)
- [groovy](https://github.com/vim-scripts/groovy.vim) (syntax) - [coffee-script](https://github.com/kchmck/vim-coffee-script)
- [haml](https://github.com/sheerun/vim-haml) (syntax, indent, compiler, ftplugin) - [cql](https://github.com/elubow/cql-vim)
- [handlebars](https://github.com/mustache/vim-mustache-handlebars) (syntax, indent, ftplugin) - [cryptol](https://github.com/victoredwardocallaghan/cryptol.vim)
- [haproxy](https://github.com/CH-DanReif/haproxy.vim) (syntax) - [crystal](https://github.com/rhysd/vim-crystal)
- [haskell](https://github.com/neovimhaskell/haskell-vim) (syntax, indent, ftplugin) - [csv](https://github.com/chrisbra/csv.vim)
- [haxe](https://github.com/yaymukund/vim-haxe) (syntax) - [cucumber](https://github.com/tpope/vim-cucumber)
- [hcl](https://github.com/b4b4r07/vim-hcl) (syntax, indent, ftplugin) - [cue](https://github.com/mgrabovsky/vim-cuesheet)
- [helm](https://github.com/towolf/vim-helm) (syntax) - [dart](https://github.com/dart-lang/dart-vim-plugin)
- [hive](https://github.com/zebradil/hive.vim) (syntax, ftplugin) - [dhall](https://github.com/vmchale/dhall-vim)
- [html5](https://github.com/othree/html5.vim) (syntax, indent, autoload, ftplugin) - [dlang](https://github.com/JesseKPhillips/d.vim)
- [i3](https://github.com/mboughaba/i3config.vim) (syntax, ftplugin) - [dockerfile](https://github.com/ekalinin/Dockerfile.vim)
- [idris](https://github.com/idris-hackers/idris-vim) (syntax, indent, ftplugin) - [elf](https://github.com/vim/vim/tree/master/runtime)
- [ion](https://github.com/vmchale/ion-vim) (syntax, ftplugin) - [elixir](https://github.com/elixir-lang/vim-elixir)
- [jasmine](https://github.com/glanotte/vim-jasmine) (syntax) - [elm](https://github.com/andys8/vim-elm-syntax)
- [javascript](https://github.com/pangloss/vim-javascript) (syntax, indent, compiler, ftplugin, extras) - [emberscript](https://github.com/yalesov/vim-ember-script)
- [jenkins](https://github.com/martinda/Jenkinsfile-vim-syntax) (syntax, indent) - [emblem](https://github.com/yalesov/vim-emblem)
- [jinja](https://github.com/lepture/vim-jinja) (syntax, indent) - [erlang](https://github.com/vim-erlang/vim-erlang-runtime)
- [json5](https://github.com/GutenYe/json5.vim) (syntax) - [fennel](https://github.com/bakpakin/fennel.vim)
- [json](https://github.com/elzr/vim-json) (syntax, indent, ftplugin) - [ferm](https://github.com/vim-scripts/ferm.vim)
- [jst](https://github.com/briancollins/vim-jst) (syntax, indent) - [fish](https://github.com/georgewitteman/vim-fish)
- [jsx](https://github.com/MaxMEllon/vim-jsx-pretty) (autoload, after) - [flatbuffers](https://github.com/dcharbon/vim-flatbuffers)
- [julia](https://github.com/JuliaEditorSupport/julia-vim) (syntax, indent, autoload, ftplugin) - [forth](https://github.com/vim/vim/tree/master/runtime)
- [kotlin](https://github.com/udalov/kotlin-vim) (syntax, indent, ftplugin) - [fsharp](https://github.com/ionide/Ionide-vim)
- [latex](https://github.com/LaTeX-Box-Team/LaTeX-Box) (syntax, indent, ftplugin) - [gdscript](https://github.com/calviken/vim-gdscript3)
- [less](https://github.com/groenewege/vim-less) (syntax, indent, ftplugin) - [git](https://github.com/tpope/vim-git)
- [lilypond](https://github.com/anowlcalledjosh/vim-lilypond) (syntax, indent, compiler, ftplugin) - [glsl](https://github.com/tikhomirov/vim-glsl)
- [livescript](https://github.com/gkz/vim-ls) (syntax, indent, compiler, ftplugin) - [gmpl](https://github.com/maelvalais/gmpl.vim)
- [llvm](https://github.com/rhysd/vim-llvm) (syntax, indent, ftplugin) - [gnuplot](https://github.com/vim-scripts/gnuplot-syntax-highlighting)
- [log](https://github.com/MTDL9/vim-log-highlighting) (syntax) - [go](https://github.com/fatih/vim-go)
- [lua](https://github.com/tbastos/vim-lua) (syntax, indent) - [gradle](https://github.com/tfnico/vim-gradle)
- [mako](https://github.com/sophacles/vim-bundle-mako) (syntax, indent, ftplugin) - [graphql](https://github.com/jparise/vim-graphql)
- [markdown](https://github.com/plasticboy/vim-markdown) (syntax, indent) - [grub](https://github.com/vim/vim/tree/master/runtime)
- [mathematica](https://github.com/voldikss/vim-mma) (syntax, ftplugin) - [haml](https://github.com/sheerun/vim-haml)
- [mdx](https://github.com/jxnblk/vim-mdx-js) (syntax) - [handlebars](https://github.com/sheerun/vim-mustache-handlebars)
- [meson](https://github.com/mesonbuild/meson) (syntax, indent, ftplugin) - [haproxy](https://github.com/CH-DanReif/haproxy.vim)
- [moonscript](https://github.com/leafo/moonscript-vim) (syntax, indent, ftplugin) - [haskell](https://github.com/neovimhaskell/haskell-vim)
- [nginx](https://github.com/chr4/nginx.vim) (syntax, indent, ftplugin) - [haxe](https://github.com/yaymukund/vim-haxe)
- [nim](https://github.com/zah/nim.vim) (syntax, compiler, indent) - [hcl](https://github.com/b4b4r07/vim-hcl)
- [nix](https://github.com/LnL7/vim-nix) (syntax, indent, compiler, ftplugin) - [helm](https://github.com/towolf/vim-helm)
- [objc](https://github.com/b4winckler/vim-objc) (ftplugin, syntax, indent) - [help](https://github.com/vim/vim/tree/master/runtime)
- [ocaml](https://github.com/rgrinberg/vim-ocaml) (syntax, indent, compiler, ftplugin) - [hive](https://github.com/zebradil/hive.vim)
- [octave](https://github.com/McSinyx/vim-octave) (syntax, indent) - [html5](https://github.com/othree/html5.vim)
- [opencl](https://github.com/petRUShka/vim-opencl) (syntax, indent, ftplugin) - [i3](https://github.com/mboughaba/i3config.vim)
- [perl](https://github.com/vim-perl/vim-perl) (syntax, indent, ftplugin) - [icalendar](https://github.com/chutzpah/icalendar.vim)
- [pgsql](https://github.com/lifepillar/pgsql.vim) (syntax, indent) - [idris](https://github.com/idris-hackers/idris-vim)
- [php](https://github.com/StanAngeloff/php.vim) (syntax) - [ion](https://github.com/vmchale/ion-vim)
- [plantuml](https://github.com/aklt/plantuml-syntax) (syntax, indent, ftplugin) - [javascript](https://github.com/pangloss/vim-javascript)
- [pony](https://github.com/jakwings/vim-pony) (syntax, indent, autoload, ftplugin) - [jenkins](https://github.com/martinda/Jenkinsfile-vim-syntax)
- [powershell](https://github.com/PProvost/vim-ps1) (syntax, indent, ftplugin) - [jinja](https://github.com/lepture/vim-jinja)
- [protobuf](https://github.com/uarun/vim-protobuf) (syntax, indent) - [jq](https://github.com/vito-c/jq.vim)
- [pug](https://github.com/digitaltoad/vim-pug) (syntax, indent, ftplugin) - [json5](https://github.com/GutenYe/json5.vim)
- [puppet](https://github.com/rodjek/vim-puppet) (syntax, indent, autoload, ftplugin) - [json](https://github.com/elzr/vim-json)
- [purescript](https://github.com/purescript-contrib/purescript-vim) (syntax, indent, ftplugin) - [jsonnet](https://github.com/google/vim-jsonnet)
- [python-compiler](https://github.com/aliev/vim-compiler-python) (compiler, autoload) - [jst](https://github.com/briancollins/vim-jst)
- [python-indent](https://github.com/Vimjas/vim-python-pep8-indent) (indent) - [jsx](https://github.com/MaxMEllon/vim-jsx-pretty)
- [python](https://github.com/vim-python/python-syntax) (syntax) - [julia](https://github.com/JuliaEditorSupport/julia-vim)
- [qmake](https://github.com/artoj/qmake-syntax-vim) (syntax) - [kotlin](https://github.com/udalov/kotlin-vim)
- [qml](https://github.com/peterhoeg/vim-qml) (syntax, indent, ftplugin) - [ledger](https://github.com/ledger/vim-ledger)
- [r-lang](https://github.com/vim-scripts/R.vim) (syntax) - [less](https://github.com/groenewege/vim-less)
- [racket](https://github.com/wlangstroth/vim-racket) (syntax, indent, ftplugin) - [lilypond](https://github.com/anowlcalledjosh/vim-lilypond)
- [ragel](https://github.com/jneen/ragel.vim) (syntax) - [livescript](https://github.com/gkz/vim-ls)
- [raml](https://github.com/IN3D/vim-raml) (syntax, ftplugin) - [llvm](https://github.com/rhysd/vim-llvm)
- [reason](https://github.com/reasonml-editor/vim-reason-plus) (syntax, indent) - [log](https://github.com/MTDL9/vim-log-highlighting)
- [rspec](https://github.com/sheerun/rspec.vim) (syntax) - [lua](https://github.com/tbastos/vim-lua)
- [rst](https://github.com/marshallward/vim-restructuredtext) (syntax, indent, autoload, ftplugin) - [m4](https://github.com/vim/vim/tree/master/runtime)
- [ruby](https://github.com/vim-ruby/vim-ruby) (syntax, indent, compiler, autoload, ftplugin) - [mako](https://github.com/sophacles/vim-bundle-mako)
- [rust](https://github.com/rust-lang/rust.vim) (syntax, indent, compiler, autoload, ftplugin) - [markdown](https://github.com/plasticboy/vim-markdown)
- [sbt](https://github.com/derekwyatt/vim-sbt) (syntax) - [mathematica](https://github.com/voldikss/vim-mma)
- [scala](https://github.com/derekwyatt/vim-scala) (syntax, indent, compiler, ftplugin) - [mdx](https://github.com/jxnblk/vim-mdx-js)
- [scss](https://github.com/cakebaker/scss-syntax.vim) (syntax, indent, ftplugin) - [meson](https://github.com/mesonbuild/meson/tree/master/data/syntax-highlighting/vim)
- [slim](https://github.com/slim-template/vim-slim) (syntax, indent, ftplugin) - [moonscript](https://github.com/leafo/moonscript-vim)
- [slime](https://github.com/slime-lang/vim-slime-syntax) (syntax, indent) - [murphi](https://github.com/vim/vim/tree/master/runtime)
- [smt2](https://github.com/bohlender/vim-smt2) (syntax, autoload, ftplugin) - [nginx](https://github.com/chr4/nginx.vim)
- [solidity](https://github.com/tomlion/vim-solidity) (syntax, indent, ftplugin) - [nim](https://github.com/zah/nim.vim)
- [stylus](https://github.com/wavded/vim-stylus) (syntax, indent, ftplugin) - [nix](https://github.com/LnL7/vim-nix)
- [svelte](https://github.com/evanleck/vim-svelte) (syntax, indent) - [objc](https://github.com/b4winckler/vim-objc)
- [svg-indent](https://github.com/jasonshell/vim-svg-indent) (indent) - [ocaml](https://github.com/rgrinberg/vim-ocaml)
- [svg](https://github.com/vim-scripts/svg.vim) (syntax) - [octave](https://github.com/McSinyx/vim-octave)
- [swift](https://github.com/keith/swift.vim) (syntax, indent, ftplugin) - [opencl](https://github.com/petRUShka/vim-opencl)
- [sxhkd](https://github.com/baskerville/vim-sxhkdrc) (syntax) - [perl](https://github.com/vim-perl/vim-perl)
- [systemd](https://github.com/wgwoods/vim-systemd-syntax) (syntax, ftplugin) - [pgsql](https://github.com/lifepillar/pgsql.vim)
- [terraform](https://github.com/hashivim/vim-terraform) (syntax, indent, autoload, ftplugin) - [php](https://github.com/StanAngeloff/php.vim)
- [textile](https://github.com/timcharper/textile.vim) (syntax, ftplugin) - [plantuml](https://github.com/aklt/plantuml-syntax)
- [thrift](https://github.com/solarnz/thrift.vim) (syntax) - [pony](https://github.com/jakwings/vim-pony)
- [tmux](https://github.com/ericpruitt/tmux.vim) (syntax, ftplugin) - [powershell](https://github.com/PProvost/vim-ps1)
- [tomdoc](https://github.com/wellbredgrapefruit/tomdoc.vim) (syntax) - [protobuf](https://github.com/uarun/vim-protobuf)
- [toml](https://github.com/cespare/vim-toml) (syntax, ftplugin) - [pug](https://github.com/digitaltoad/vim-pug)
- [tptp](https://github.com/c-cube/vim-tptp) (syntax) - [puppet](https://github.com/rodjek/vim-puppet)
- [twig](https://github.com/lumiliet/vim-twig) (syntax, indent, ftplugin) - [purescript](https://github.com/purescript-contrib/purescript-vim)
- [typescript](https://github.com/HerringtonDarkholme/yats.vim) (syntax, indent, compiler, ftplugin) - [python-compiler](https://github.com/aliev/vim-compiler-python)
- [vala](https://github.com/arrufat/vala.vim) (syntax, indent, ftplugin) - [python-indent](https://github.com/Vimjas/vim-python-pep8-indent)
- [vbnet](https://github.com/vim-scripts/vbnet.vim) (syntax) - [python](https://github.com/vim-python/python-syntax)
- [vcl](https://github.com/smerrill/vcl-vim-plugin) (syntax) - [qmake](https://github.com/artoj/qmake-syntax-vim)
- [vifm](https://github.com/vifm/vifm.vim) (syntax, autoload, ftplugin) - [qml](https://github.com/peterhoeg/vim-qml)
- [vm](https://github.com/lepture/vim-velocity) (syntax, indent) - [r-lang](https://github.com/vim-scripts/R.vim)
- [vue](https://github.com/posva/vim-vue) (syntax, indent, ftplugin) - [racket](https://github.com/wlangstroth/vim-racket)
- [xdc](https://github.com/amal-khailtash/vim-xdc-syntax) (syntax) - [ragel](https://github.com/jneen/ragel.vim)
- [xls](https://github.com/vim-scripts/XSLT-syntax) (syntax) - [raku](https://github.com/Raku/vim-raku)
- [xml](https://github.com/amadeus/vim-xml) (syntax) - [raml](https://github.com/IN3D/vim-raml)
- [yaml](https://github.com/stephpy/vim-yaml) (syntax, ftplugin) - [razor](https://github.com/adamclerk/vim-razor)
- [yard](https://github.com/sheerun/vim-yardoc) (syntax) - [reason](https://github.com/reasonml-editor/vim-reason-plus)
- [zephir](https://github.com/xwsoul/vim-zephir) (syntax) - [requirements](https://github.com/raimon49/requirements.txt.vim)
- [zig](https://github.com/ziglang/zig.vim) (syntax, autoload, ftplugin) - [rspec](https://github.com/keith/rspec.vim)
- [rst](https://github.com/marshallward/vim-restructuredtext)
- [ruby](https://github.com/vim-ruby/vim-ruby)
- [rust](https://github.com/rust-lang/rust.vim)
- [sbt](https://github.com/derekwyatt/vim-sbt)
- [scala](https://github.com/derekwyatt/vim-scala)
- [scss](https://github.com/cakebaker/scss-syntax.vim)
- [sh](https://github.com/arzg/vim-sh)
- [slim](https://github.com/slim-template/vim-slim)
- [slime](https://github.com/slime-lang/vim-slime-syntax)
- [smt2](https://github.com/bohlender/vim-smt2)
- [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.

View File

@@ -39,11 +39,11 @@ if exists("loaded_matchup")
let b:match_skip = 's:comment\|string' let b:match_skip = 's:comment\|string'
endif endif
let b:original_commentstring = &l:commentstring let b:jsx_pretty_old_cms = &l:commentstring
augroup jsx_comment augroup jsx_comment
autocmd! CursorMoved <buffer> autocmd! CursorMoved <buffer>
autocmd CursorMoved <buffer> call jsx_pretty#comment#update_commentstring(b:original_commentstring) autocmd CursorMoved <buffer> call jsx_pretty#comment#update_commentstring(b:jsx_pretty_old_cms)
augroup end augroup end
setlocal suffixesadd+=.jsx setlocal suffixesadd+=.jsx

View File

@@ -57,7 +57,7 @@ function! s:is_section_delim(line, func_delim) abort
return 0 return 0
endif endif
let kind = sec[0] let kind = sec[0]
return kind == s:KIND_BLOCK_PREC || kind == s:KIND_BLOCK_FOLLOW || kind == func_delim return kind == s:KIND_BLOCK_PREC || kind == s:KIND_BLOCK_FOLLOW || kind == a:func_delim
endfunction endfunction
function! s:next_section(stop_func_begin) abort function! s:next_section(stop_func_begin) abort
@@ -85,11 +85,16 @@ function! s:prev_section(stop_func_begin) abort
endwhile endwhile
endfunction endfunction
nnoremap <buffer><Plug>(llvm-next-section-begin) :<C-u>call <SID>next_section(1)<CR>
nnoremap <buffer><Plug>(llvm-prev-section-begin) :<C-u>call <SID>prev_section(1)<CR>
nnoremap <buffer><Plug>(llvm-next-section-end) :<C-u>call <SID>next_section(0)<CR>
nnoremap <buffer><Plug>(llvm-prev-section-end) :<C-u>call <SID>prev_section(0)<CR>
if !g:llvm_ext_no_mapping if !g:llvm_ext_no_mapping
nnoremap <buffer><silent>]] :<C-u>call <SID>next_section(1)<CR> nmap <buffer><silent>]] <Plug>(llvm-next-section-begin)
nnoremap <buffer><silent>[[ :<C-u>call <SID>prev_section(1)<CR> nmap <buffer><silent>[[ <Plug>(llvm-prev-section-begin)
nnoremap <buffer><silent>][ :<C-u>call <SID>next_section(0)<CR> nmap <buffer><silent>][ <Plug>(llvm-next-section-end)
nnoremap <buffer><silent>[] :<C-u>call <SID>prev_section(0)<CR> nmap <buffer><silent>[] <Plug>(llvm-prev-section-end)
endif endif
function! s:function_range_at(linum) abort function! s:function_range_at(linum) abort
@@ -222,9 +227,12 @@ function! s:move_to_following_block() abort
endtry endtry
endfunction endfunction
nnoremap <buffer><Plug>(llvm-move-block-prev) :<C-u>call <SID>move_to_pred_block()<CR>
nnoremap <buffer><Plug>(llvm-move-block-next) :<C-u>call <SID>move_to_following_block()<CR>
if !g:llvm_ext_no_mapping if !g:llvm_ext_no_mapping
nnoremap <buffer><silent>[b :<C-u>call <SID>move_to_pred_block()<CR> nmap <buffer><silent>[b <Plug>(llvm-move-block-prev)
nnoremap <buffer><silent>]b :<C-u>call <SID>move_to_following_block()<CR> nmap <buffer><silent>]b <Plug>(llvm-move-block-next)
endif endif
function! s:get_func_identifiers(line) abort function! s:get_func_identifiers(line) abort
@@ -438,8 +446,10 @@ function! s:goto_definition() abort
echom "No definition for '" . ident . "' found" echom "No definition for '" . ident . "' found"
endfunction endfunction
nnoremap <buffer><Plug>(llvm-goto-definition) :<C-u>call <SID>goto_definition()<CR>
if !g:llvm_ext_no_mapping if !g:llvm_ext_no_mapping
nnoremap <buffer><silent>K :<C-u>call <SID>goto_definition()<CR> nmap <buffer><silent>K <Plug>(llvm-goto-definition)
endif endif
function! s:run_lli(...) abort function! s:run_lli(...) abort

View File

@@ -20,11 +20,11 @@ if exists("loaded_matchup")
let b:match_skip = 's:comment\|string' let b:match_skip = 's:comment\|string'
endif endif
let b:original_commentstring = &l:commentstring let b:jsx_pretty_old_cms = &l:commentstring
augroup jsx_comment augroup jsx_comment
autocmd! CursorMoved <buffer> autocmd! CursorMoved <buffer>
autocmd CursorMoved <buffer> call jsx_pretty#comment#update_commentstring(b:original_commentstring) autocmd CursorMoved <buffer> call jsx_pretty#comment#update_commentstring(b:jsx_pretty_old_cms)
augroup end augroup end
setlocal suffixesadd+=.tsx setlocal suffixesadd+=.tsx

View File

@@ -1,5 +1,5 @@
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)
source <sfile>:h/typescript.vim source <sfile>:h/tsx.vim
endif endif

View File

@@ -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)
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

40
after/indent/tsx.vim Normal file
View File

@@ -0,0 +1,40 @@
if !exists('g:polyglot_disabled') || !(index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'jsx') != -1)
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Vim indent file
"
" Language: typescript.jsx
" Maintainer: MaxMellon <maxmellon1994@gmail.com>
" Depends: leafgarland/typescript-vim
"
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if get(g:, 'vim_jsx_pretty_disable_tsx', 0)
finish
endif
if exists('b:did_indent')
let s:did_indent = b:did_indent
unlet b:did_indent
endif
let s:keepcpo = &cpo
set cpo&vim
if exists('s:did_indent')
let b:did_indent = s:did_indent
endif
runtime! indent/typescript.vim
setlocal indentexpr=GetJsxIndent()
setlocal indentkeys=0.,0{,0},0),0],0?,0\*,0\,,!^F,:,<:>,o,O,e,<>>,=*/
function! GetJsxIndent()
return jsx_pretty#indent#get(function('GetTypescriptIndent'))
endfunction
let &cpo = s:keepcpo
unlet s:keepcpo
endif

View File

@@ -1,38 +1,47 @@
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, 'graphql') == -1
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Copyright (c) 2016-2020 Jon Parise <jon@indelible.org>
" Vim indent file
" "
" Language: typescript.jsx " Permission is hereby granted, free of charge, to any person obtaining a copy
" Maintainer: MaxMellon <maxmellon1994@gmail.com> " of this software and associated documentation files (the "Software"), to
" Depends: leafgarland/typescript-vim " 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>
if get(g:, 'vim_jsx_pretty_disable_tsx', 0) 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 finish
endif endif
if exists('b:did_indent') " Set the indentexpr with our own version that will call GetGraphQLIndent when
let s:did_indent = b:did_indent " we're inside of a GraphQL string and otherwise defer to GetTypescriptIndent.
unlet b:did_indent setlocal indentexpr=GetTypescriptGraphQLIndent()
endif
let s:keepcpo = &cpo function GetTypescriptGraphQLIndent()
set cpo&vim let l:stack = map(synstack(v:lnum, 1), "synIDattr(v:val,'name')")
if !empty(l:stack) && l:stack[0] ==# 'graphqlTemplateString'
return GetGraphQLIndent()
endif
if exists('s:did_indent') return GetTypescriptIndent()
let b:did_indent = s:did_indent
endif
setlocal indentexpr=GetJsxIndent()
setlocal indentkeys=0.,0{,0},0),0],0?,0\*,0\,,!^F,:,<:>,o,O,e,<>>,=*/
function! GetJsxIndent()
return jsx_pretty#indent#get(function('GetTypescriptIndent'))
endfunction endfunction
let &cpo = s:keepcpo
unlet s:keepcpo
endif endif

View File

@@ -1,5 +1,5 @@
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)
source <sfile>:h/typescript.vim source <sfile>:h/tsx.vim
endif endif

View File

@@ -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

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,28 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1 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>
if exists('b:current_syntax') if exists('b:current_syntax')
let s:current_syntax = b:current_syntax let s:current_syntax = b:current_syntax
unlet b:current_syntax unlet b:current_syntax
@@ -11,17 +34,31 @@ endif
let s:tags = '\%(' . join(graphql#javascript_tags(), '\|') . '\)' let s:tags = '\%(' . join(graphql#javascript_tags(), '\|') . '\)'
exec 'syntax region graphqlTemplateString start=+' . s:tags . '\@20<=`+ skip=+\\`+ end=+`+ contains=@GraphQLSyntax,jsTemplateExpression,jsSpecial extend' if graphql#has_syntax_group('jsTemplateExpression')
exec 'syntax match graphqlTaggedTemplate +' . s:tags . '\ze`+ nextgroup=graphqlTemplateString' " pangloss/vim-javascript
exec 'syntax region graphqlTemplateString start=+' . s:tags . '\@20<=`+ skip=+\\\\\|\\`+ end=+`+ contains=@GraphQLSyntax,jsTemplateExpression,jsSpecial extend'
exec 'syntax match graphqlTaggedTemplate +' . s:tags . '\ze`+ nextgroup=graphqlTemplateString'
syntax region graphqlTemplateExpression start=+${+ end=+}+ contained contains=jsTemplateExpression containedin=graphqlFold keepend
" Support expression interpolation ((${...})) inside template strings. hi def link graphqlTemplateString jsTemplateString
syntax region graphqlTemplateExpression start=+${+ end=+}+ contained contains=jsTemplateExpression containedin=graphqlFold keepend hi def link graphqlTaggedTemplate jsTaggedTemplate
hi def link graphqlTemplateExpression jsTemplateExpression
hi def link graphqlTemplateString jsTemplateString syn cluster jsExpression add=graphqlTaggedTemplate
hi def link graphqlTaggedTemplate jsTaggedTemplate syn cluster graphqlTaggedTemplate add=graphqlTemplateString
hi def link graphqlTemplateExpression jsTemplateExpression elseif graphql#has_syntax_group('javaScriptStringT')
" runtime/syntax/javascript.vim
exec 'syntax region graphqlTemplateString start=+' . s:tags . '\@20<=`+ skip=+\\\\\|\\`+ end=+`+ contains=@GraphQLSyntax,javaScriptSpecial,javaScriptEmbed,@htmlPreproc extend'
exec 'syntax match graphqlTaggedTemplate +' . s:tags . '\ze`+ nextgroup=graphqlTemplateString'
syntax region graphqlTemplateExpression start=+${+ end=+}+ contained contains=@javaScriptEmbededExpr containedin=graphqlFold keepend
syn cluster jsExpression add=graphqlTaggedTemplate hi def link graphqlTemplateString javaScriptStringT
syn cluster graphqlTaggedTemplate add=graphqlTemplateString hi def link graphqlTaggedTemplate javaScriptEmbed
hi def link graphqlTemplateExpression javaScriptEmbed
syn cluster htmlJavaScript add=graphqlTaggedTemplate
syn cluster javaScriptEmbededExpr add=graphqlTaggedTemplate
syn cluster graphqlTaggedTemplate add=graphqlTemplateString
endif
endif endif

View File

@@ -0,0 +1,5 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
runtime! after/syntax/javascript/graphql.vim
endif

View File

@@ -4,7 +4,7 @@ let s:highlight_close_tag = get(g:, 'vim_jsx_pretty_highlight_close_tag', 0)
" detect jsx region " detect jsx region
syntax region jsxRegion syntax region jsxRegion
\ start=+\%(\%(\_[([,?:=+\-*/>{}]\|<\s\+\|&&\|||\|=>\|\<return\|\<default\|\<await\|\<yield\)\_s*\)\@<=<\_s*\%(>\|\z(\%(script\|T\s*>\s*(\)\@!\<[_$A-Za-z][-:._$A-Za-z0-9]*\>\)\%(\_s*\%([-+*)\]}&|?,]\|/\%([/*]\|\_s*>\)\@!\)\)\@!\)+ \ start=+\%(\%(\_[([,?:=+\-*/>{}]\|<\s\+\|&&\|||\|=>\|\<return\|\<default\|\<await\|\<yield\)\_s*\)\@<=<\_s*\%(>\|\z(\%(script\|\s*\<T\>\)\@!\<[_$A-Za-z][-:._$A-Za-z0-9]*\>\)\%(\_s*\%([-+*)\]}&|?,]\|/\%([/*]\|\_s*>\)\@!\)\)\@!\)+
\ end=++ \ end=++
\ contains=jsxElement \ contains=jsxElement
@@ -20,7 +20,7 @@ syntax region jsxTag
\ matchgroup=NONE \ matchgroup=NONE
\ end=+\%(/\_s*>\)\@=+ \ end=+\%(/\_s*>\)\@=+
\ contained \ contained
\ contains=jsxOpenTag,jsxAttrib,jsxEscapeJs,jsxSpreadOperator,jsComment,@javascriptComments,javaScriptLineComment,javaScriptComment,typescriptLineComment,typescriptComment \ contains=jsxOpenTag,jsxAttrib,jsxExpressionBlock,jsxSpreadOperator,jsComment,@javascriptComments,javaScriptLineComment,javaScriptComment,typescriptLineComment,typescriptComment
\ keepend \ keepend
\ extend \ extend
\ skipwhite \ skipwhite
@@ -39,7 +39,7 @@ syntax region jsxElement
\ start=+<\_s*\%(>\|\${\|\z(\<[-:._$A-Za-z0-9]\+\>\)\)+ \ start=+<\_s*\%(>\|\${\|\z(\<[-:._$A-Za-z0-9]\+\>\)\)+
\ end=+/\_s*>+ \ end=+/\_s*>+
\ end=+<\_s*/\_s*\z1\_s*>+ \ end=+<\_s*/\_s*\z1\_s*>+
\ contains=jsxElement,jsxTag,jsxEscapeJs,jsxComment,jsxCloseTag,@Spell \ contains=jsxElement,jsxTag,jsxExpressionBlock,jsxComment,jsxCloseTag,@Spell
\ keepend \ keepend
\ extend \ extend
\ contained \ contained
@@ -66,13 +66,13 @@ exe 'syntax region jsxOpenTag
" <tag key={this.props.key}> " <tag key={this.props.key}>
" ~~~~~~~~~~~~~~~~ " ~~~~~~~~~~~~~~~~
syntax region jsxEscapeJs syntax region jsxExpressionBlock
\ matchgroup=jsxBraces \ matchgroup=jsxBraces
\ start=+{+ \ start=+{+
\ end=+}+ \ end=+}+
\ contained \ contained
\ extend \ extend
\ contains=@jsExpression,jsSpreadExpression,@javascriptExpression,javascriptSpreadOp,@javaScriptEmbededExpr,@typescriptExpression,typescriptObjectSpread \ contains=@jsExpression,jsSpreadExpression,@javascriptExpression,javascriptSpreadOp,@javaScriptEmbededExpr,@typescriptExpression,typescriptObjectSpread,jsComment,@javascriptComments,javaScriptLineComment,javaScriptComment,typescriptLineComment,typescriptComment
" <foo.bar> " <foo.bar>
" ~ " ~
@@ -84,7 +84,7 @@ syntax match jsxNamespace +:+ contained
" <tag id="sample"> " <tag id="sample">
" ~ " ~
syntax match jsxEqual +=+ contained skipwhite skipempty nextgroup=jsxString,jsxEscapeJs,jsxRegion syntax match jsxEqual +=+ contained skipwhite skipempty nextgroup=jsxString,jsxExpressionBlock,jsxRegion
" <tag /> " <tag />
" ~~ " ~~
@@ -154,10 +154,10 @@ if s:enable_tagged_jsx
\ end=+`+ \ end=+`+
\ extend \ extend
\ contained \ contained
\ contains=jsxElement,jsxEscapeJs \ contains=jsxElement,jsxExpressionBlock
\ transparent \ transparent
syntax region jsxEscapeJs syntax region jsxExpressionBlock
\ matchgroup=jsxBraces \ matchgroup=jsxBraces
\ start=+\${+ \ start=+\${+
\ end=+}+ \ end=+}+
@@ -171,14 +171,14 @@ if s:enable_tagged_jsx
\ matchgroup=NONE \ matchgroup=NONE
\ end=+}\@1<=+ \ end=+}\@1<=+
\ contained \ contained
\ contains=jsxEscapeJs \ contains=jsxExpressionBlock
\ skipwhite \ skipwhite
\ skipempty \ skipempty
\ nextgroup=jsxAttrib,jsxSpreadOperator \ nextgroup=jsxAttrib,jsxSpreadOperator
syntax keyword jsxAttribKeyword class contained syntax keyword jsxAttribKeyword class contained
syntax match jsxSpreadOperator +\.\.\.+ contained nextgroup=jsxEscapeJs skipwhite syntax match jsxSpreadOperator +\.\.\.+ contained nextgroup=jsxExpressionBlock skipwhite
syntax match jsxCloseTag +<//>+ contained syntax match jsxCloseTag +<//>+ contained

View File

@@ -2,17 +2,13 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'mathematica') =
"Vim conceal file "Vim conceal file
" Language: Mathematica " Language: Mathematica
" Maintainer: Voldikss <dyzplus@gmail.com> " Maintainer: R. Menon <rsmenon@icloud.com>
" Last Change: 2019 Jan 23 by Voldikss " Last Change: Feb 25, 2013
" Source: https://github.com/voldikss/vim-mma/after/syntax/mma.vim
" Credits:
" Rsmenon: https://github.com/rsmenon
if (exists('g:mma_candy') && g:mma_candy == 0) || !has('conceal') || &enc != 'utf-8' if (exists('g:mma_candy') && g:mma_candy == 0) || !has('conceal') || &enc != 'utf-8'
finish finish
endif endif
"These are fairly safe and straightforward conceals "These are fairly safe and straightforward conceals
if exists('g:mma_candy') && g:mma_candy > 0 if exists('g:mma_candy') && g:mma_candy > 0
"Rules "Rules

View File

@@ -0,0 +1,37 @@
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>
if exists('b:current_syntax')
let s:current_syntax = b:current_syntax
unlet b:current_syntax
endif
syn include @GraphQLSyntax syntax/graphql.vim
if exists('s:current_syntax')
let b:current_syntax = s:current_syntax
endif
syntax region graphqlMultilineString matchgroup=reasonMultilineString start=+graphql\_s*\zs{|+ end=+|}+ contains=@GraphQLSyntax,reasonEscape,reasonEscapeUnicode,reasonEscapeError,reasonStringContinuation keepend
endif

View File

@@ -9,26 +9,183 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rspec') == -1
runtime! syntax/ruby.vim runtime! syntax/ruby.vim
unlet! b:current_syntax unlet! b:current_syntax
syntax keyword rspecGroupMethods context describe example it its let it_should_behave_like shared_examples_for subject it_behaves_like pending specify When Then Given Invariant feature scenario given setlocal commentstring=#\ %s
highlight link rspecGroupMethods Type
syntax keyword rspecBeforeAndAfter after after_suite_parts append_after append_before before before_suite_parts prepend_after prepend_before around syntax keyword rspecGroupMethods
highlight link rspecBeforeAndAfter Statement \ aggregate_failures
\ context
\ describe
\ example
\ feature
\ fcontext
\ fdescribe
\ fexample
\ fit
\ focus
\ fspecify
\ Given
\ given\!
\ include_context
\ include_examples
\ Invariant
\ it
\ it_behaves_like
\ it_should_behave_like
\ its
\ let
\ let\!
\ pending
\ scenario
\ shared_examples
\ shared_examples_for
\ skip
\ specify
\ subject
\ Then
\ When
syntax keyword rspecMocks double mock stub stub_chain syntax keyword rspecBeforeAndAfter
highlight link rspecMocks Constant \ after
\ after_suite_parts
\ append_after
\ append_before
\ around
\ before
\ before_suite_parts
\ prepend_after
\ prepend_before
syntax keyword rspecMockMethods and_raise and_return and_throw and_yield build_child called_max_times expected_args invoke matches syntax keyword rspecMocks
highlight link rspecMockMethods Function \ double
\ instance_double
\ instance_spy
\ mock
\ spy
\ stub
\ stub_chain
\ stub_const
syntax keyword rspecKeywords should should_not should_not_receive should_receive syntax keyword rspecMockMethods
highlight link rspecKeywords Constant \ and_call_original
\ and_raise
\ and_return
\ and_throw
\ and_yield
\ build_child
\ called_max_times
\ expected_args
\ invoke
\ matches
syntax keyword rspecKeywords
\ should
\ should_not
\ should_not_receive
\ should_receive
syntax keyword rspecMatchers
\ all
\ allow
\ allow_any_instance_of
\ assigns
\ be
\ change
\ described_class
\ eq
\ eql
\ equal
\ errors_on
\ exist
\ expect
\ expect_any_instance_of
\ have
\ have_at_least
\ have_at_most
\ have_exactly
\ include
\ is_expected
\ match
\ match_array
\ matcher
\ not_to
\ raise_error
\ raise_exception
\ receive
\ receive_messages
\ receive_message_chain
\ respond_to
\ satisfy
\ throw_symbol
\ to
\ to_not
\ when
\ wrap_expectation
" rspec-mongoid exclusive matchers
syntax keyword rspecMatchers
\ accept_nested_attributes_for
\ belong_to
\ custom_validate
\ embed_many
\ embed_one
\ validate_associated
\ validate_exclusion_of
\ validate_format_of
\ validate_inclusion_of
\ validate_length_of
" shoulda matchers
syntax keyword rspecMatchers
\ allow_mass_assignment_of
\ allow_value
\ ensure_exclusion_of
\ ensure_length_of
\ have_secure_password
\ validate_absence_of
\ validate_acceptance_of
\ validate_confirmation_of
\ validate_numericality_of
\ validate_presence_of
\ validate_uniqueness_of
syntax keyword rspecMessageExpectation
\ advise
\ any_args
\ any_number_of_times
\ anything
\ at_least
\ at_most
\ exactly
\ expected_messages_received
\ generate_error
\ hash_including
\ hash_not_including
\ ignoring_args
\ instance_of
\ matches_at_least_count
\ matches_at_most_count
\ matches_exact_count
\ matches_name_but_not_args
\ negative_expectation_for
\ never
\ no_args
\ once
\ ordered
\ similar_messages
\ times
\ twice
\ verify_messages_received
\ with
syntax keyword rspecMatchers be change eql equal exist expect have have_at_least have_at_most have_exactly include match matcher raise_error raise_exception respond_to satisfy throw_symbol to to_not not_to when wrap_expectation
syntax match rspecMatchers /\<\(be\|have\)_\w\+\>/ syntax match rspecMatchers /\<\(be\|have\)_\w\+\>/
highlight link rspecMatchers Function syntax match rspecGroupMethods /\.describe/
syntax keyword rspecMessageExpectation advise any_args any_number_of_times anything at_least at_most exactly expected_messages_received generate_error hash_including hash_not_including ignoring_args instance_of matches_at_least_count matches_at_most_count matches_exact_count matches_name_but_not_args negative_expectation_for never no_args once ordered similar_messages times twice verify_messages_received with highlight link rspecGroupMethods Statement
highlight link rspecBeforeAndAfter Identifier
highlight link rspecMocks Constant
highlight link rspecMockMethods Function
highlight link rspecKeywords Constant
highlight link rspecMatchers Function
highlight link rspecMessageExpectation Function highlight link rspecMessageExpectation Function
let b:current_syntax = 'rspec' let b:current_syntax = 'rspec'

View File

@@ -1,13 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1
" adds support for cleverref package
" \Cref, \cref, \cpageref, \labelcref, \labelcpageref
syn region texRefZone matchgroup=texStatement start="\\Cref{" end="}\|%stopzone\>" contains=@texRefGroup
syn region texRefZone matchgroup=texStatement start="\\\(label\|\)c\(page\|\)ref{" end="}\|%stopzone\>" contains=@texRefGroup
" adds support for listings package
syn region texZone start="\\begin{lstlisting}" end="\\end{lstlisting}\|%stopzone\>"
syn match texInputFile "\\lstinputlisting\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
syn match texZone "\\lstinline\s*\(\[.*\]\)\={.\{-}}"
endif

View File

@@ -1,28 +1,63 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1 if !exists('g:polyglot_disabled') || !(index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'jsx') != -1)
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Vim syntax file
"
" Language: javascript.jsx
" Maintainer: MaxMellon <maxmellon1994@gmail.com>
" Depends: leafgarland/typescript-vim
"
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if get(g:, 'vim_jsx_pretty_disable_tsx', 0)
finish
endif
let s:jsx_cpo = &cpo
set cpo&vim
syntax case match
" GraphQL Support
if exists('b:current_syntax') if exists('b:current_syntax')
let s:current_syntax = b:current_syntax let s:current_syntax = b:current_syntax
unlet b:current_syntax unlet b:current_syntax
endif endif
syn include @GraphQLSyntax syntax/graphql.vim
if exists('s:current_syntax') if exists('s:current_syntax')
let b:current_syntax = s:current_syntax let b:current_syntax = s:current_syntax
endif endif
let s:tags = '\%(' . join(graphql#javascript_tags(), '\|') . '\)' " refine the typescript line comment
syntax region typescriptLineComment start=+//+ end=/$/ contains=@Spell,typescriptCommentTodo,typescriptRef extend keepend
exec 'syntax region graphqlTemplateString start=+' . s:tags . '\@20<=`+ skip=+\\`+ end=+`+ contains=@GraphQLSyntax,typescriptTemplateSubstitution extend' for syntax_name in ['tsxRegion', 'tsxFragment']
exec 'syntax match graphqlTaggedTemplate +' . s:tags . '\ze`+ nextgroup=graphqlTemplateString' if hlexists(syntax_name)
exe 'syntax clear ' . syntax_name
endif
endfor
" Support expression interpolation ((${...})) inside template strings. if !hlexists('typescriptTypeCast')
syntax region graphqlTemplateExpression start=+${+ end=+}+ contained contains=typescriptTemplateSubstitution containedin=graphqlFold keepend " add a typescriptBlock group for typescript
syntax region typescriptBlock
\ matchgroup=typescriptBraces
\ start="{"
\ end="}"
\ contained
\ extend
\ contains=@typescriptExpression,typescriptBlock
\ fold
hi def link typescriptTypeBrackets typescriptOpSymbols
endif
hi def link graphqlTemplateString typescriptTemplate runtime syntax/jsx_pretty.vim
hi def link graphqlTemplateExpression typescriptTemplateSubstitution syntax cluster typescriptExpression add=jsxRegion,typescriptParens
" Fix type casting ambiguity with JSX syntax
syntax match typescriptTypeBrackets +[<>]+ contained
syntax match typescriptTypeCast +<\([_$A-Za-z0-9]\+\)>\%(\s*\%([_$A-Za-z0-9]\+\s*;\?\|(\)\%(\_[^<]*</\1>\)\@!\)\@=+ contains=typescriptTypeBrackets,@typescriptType,typescriptType nextgroup=@typescriptExpression
syn cluster typescriptExpression add=graphqlTaggedTemplate let b:current_syntax = 'typescript.tsx'
syn cluster graphqlTaggedTemplate add=graphqlTemplateString
let &cpo = s:jsx_cpo
unlet s:jsx_cpo
endif endif

View File

@@ -1,60 +0,0 @@
if !exists('g:polyglot_disabled') || !(index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'jsx') != -1)
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Vim syntax file
"
" Language: javascript.jsx
" Maintainer: MaxMellon <maxmellon1994@gmail.com>
" Depends: leafgarland/typescript-vim
"
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if get(g:, 'vim_jsx_pretty_disable_tsx', 0)
finish
endif
let s:jsx_cpo = &cpo
set cpo&vim
syntax case match
if exists('b:current_syntax')
let s:current_syntax = b:current_syntax
unlet b:current_syntax
endif
if exists('s:current_syntax')
let b:current_syntax = s:current_syntax
endif
" refine the typescript line comment
syntax region typescriptLineComment start=+//+ end=/$/ contains=@Spell,typescriptCommentTodo,typescriptRef extend keepend
for syntax_name in ['tsxRegion', 'tsxFragment']
if hlexists(syntax_name)
exe 'syntax clear ' . syntax_name
endif
endfor
if !hlexists('typescriptTypeCast')
" add a typescriptBlock group for typescript
syntax region typescriptBlock
\ matchgroup=typescriptBraces
\ start="{"
\ end="}"
\ contained
\ extend
\ contains=@typescriptExpression,typescriptBlock
\ fold
endif
syntax cluster typescriptExpression add=jsxRegion,typescriptParens
runtime syntax/jsx_pretty.vim
let b:current_syntax = 'typescript.tsx'
let &cpo = s:jsx_cpo
unlet s:jsx_cpo
endif

View File

@@ -1,5 +1,28 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1 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>
if exists('b:current_syntax') if exists('b:current_syntax')
let s:current_syntax = b:current_syntax let s:current_syntax = b:current_syntax
unlet b:current_syntax unlet b:current_syntax

View File

@@ -1,5 +1,5 @@
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)
source <sfile>:h/typescript.vim source <sfile>:h/tsx.vim
endif endif

View File

@@ -0,0 +1,5 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
runtime! after/syntax/typescript/graphql.vim
endif

View File

@@ -0,0 +1,5 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
runtime! after/syntax/javascript/graphql.vim
endif

View File

@@ -42,8 +42,8 @@ syn keyword yamlConstant NULL Null null NONE None none NIL Nil nil
syn keyword yamlConstant TRUE True true YES Yes yes ON On on syn keyword yamlConstant TRUE True true YES Yes yes ON On on
syn keyword yamlConstant FALSE False false NO No no OFF Off off syn keyword yamlConstant FALSE False false NO No no OFF Off off
syn match yamlKey "^\s*\zs[^ \t\"]\+\ze\s*:" syn match yamlKey "^\s*\zs[^ \t\"\'#]\+\ze\s*:"
syn match yamlKey "^\s*-\s*\zs[^ \t\"\']\+\ze\s*:" syn match yamlKey "^\s*-\s*\zs[^ \t\"\'#]\+\ze\s*:"
syn match yamlAnchor "&\S\+" syn match yamlAnchor "&\S\+"
syn match yamlAlias "*\S\+" syn match yamlAlias "*\S\+"

126
after/syntax/zsh.vim Normal file
View File

@@ -0,0 +1,126 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'zinit') == -1
" Copyright (c) 2019 Sebastian Gniazdowski
"
" Syntax highlighting for Zinit commands in any file of type `zsh'.
" It adds definitions for the Zinit syntax to the ones from the
" existing zsh.vim definitions-file.
" Main Zinit command.
" Should be the only TOP rule for the whole syntax.
syntax match ZinitCommand /\<zinit\>\s/me=e-1
\ skipwhite
\ nextgroup=ZinitSubCommands,ZinitPluginSubCommands,ZinitSnippetSubCommands
\ contains=ZinitSubCommands,ZinitPluginSubCommands,ZinitSnippetSubCommands
" TODO: add options for e.g. light
syntax match ZinitSubCommands /\s\<\%(ice\|compinit\|env-whitelist\|cdreplay\|cdclear\|update\)\>\s/ms=s+1,me=e-1
\ contained
syntax match ZinitPluginSubCommands /\s\<\%(light\|load\)\>\s/ms=s+1,me=e-1
\ skipwhite nextgroup=ZinitPlugin1,ZinitPlugin2,ZinitPlugin3
\ contains=ZinitPlugin1,ZinitPlugin2,ZinitPlugin3
syntax match ZinitSnippetSubCommands /\s\<\%(snippet\)\>\s/ms=s+1,me=e-1
\ skipwhite
\ nextgroup=ZinitSnippetShorthands1,ZinitSnippetShorthands2
\ contains=ZinitSnippetShorthands1,ZinitSnippetShorthands2
" "user/plugin"
syntax match ZinitPlugin1 /\s["]\%([!-_]*\%(\/[!-_]\+\)\+\|[!-_]\+\)["]/ms=s+1,hs=s+2,he=e-1
\ contained
\ nextgroup=ZinitTrailingWhiteSpace
\ contains=ZinitTrailingWhiteSpace
" 'user/plugin'
syntax match ZinitPlugin2 /\s[']\%([!-_]*\%(\/[!-_]\+\)\+\|[!-_]\+\)[']/ms=s+1,hs=s+2,he=e-1
\ contained
\ nextgroup=ZinitTrailingWhiteSpace
\ contains=ZinitTrailingWhiteSpace
" user/plugin
syntax match ZinitPlugin3 /\s\%([!-_]*\%(\/[!-_]\+\)\+\|[!-_]\+\)/ms=s+1,me=e+2
\ contained
\ nextgroup=ZinitTrailingWhiteSpace
\ contains=ZinitTrailingWhiteSpace
" OMZ:: or PZT::
" TODO: 'OMZ:: or 'PZT::
syntax match ZinitSnippetShorthands1 /\s\<\%(\%(OMZ\|PZT\)\>::\|\)/hs=s+1,he=e-2
\ contained
\ skipwhite
\ nextgroup=ZinitSnippetUrl1,ZinitSnippetUrl2
\ contains=ZinitSnippetUrl1,ZinitSnippetUrl2
" "OMZ:: or "PZT::
syntax match ZinitSnippetShorthands2 /\s["]\%(\%(OMZ\|PZT\)\>::\|\)/hs=s+2,he=e-2
\ contained
\ skipwhite
\ nextgroup=ZinitSnippetUrl3,ZinitSnippetUrl4
\ contains=ZinitSnippetUrl3,ZinitSnippetUrl4
syntax match ZinitSnippetUrl3 /\<\%(http:\/\/\|https:\/\/\|ftp:\/\/\|\$HOME\|\/\)[!-_]\+\%(\/[!-_]\+\)*\/\?["]/he=e-1
\ contained
\ nextgroup=ZinitTrailingWhiteSpace
\ contains=ZinitTrailingWhiteSpace
" TODO: Fix ZinitTrailingWhiteSpace not matching
syntax match ZinitSnippetUrl4 /\%(\%(OMZ\|PZT\)::\)[!-_]\+\%(\/[!-_]\+\)*\/\?["]/hs=s+5,he=e-1
\ contained
\ nextgroup=ZinitTrailingWhiteSpace
\ contains=ZinitTrailingWhiteSpace
" http://… or https://… or ftp://… or $HOME/… or /…
" TODO: Fix $HOME/… and /… not matching
syntax match ZinitSnippetUrl1 /\<\%(http:\/\/\|https:\/\/\|ftp:\/\/\|\$HOME\|\/\)[!-_]\+\%(\/[!-_]\+\)*\/\?/
\ contained
\ nextgroup=ZinitTrailingWhiteSpace
\ contains=ZinitTrailingWhiteSpace
" TODO: Fix ZinitTrailingWhiteSpace not matching
syntax match ZinitSnippetUrl2 /\<\%(\%(OMZ\|PZT\)::\)[!-_]\+\%(\/[!-_]\+\)*\/\?/hs=s+5
\ contained
\ nextgroup=ZinitTrailingWhiteSpace
\ contains=ZinitTrailingWhiteSpace
syntax match ZinitTrailingWhiteSpace /[[:space:]]\+$/ contained
" TODO: differentiate the no-value ices
" TODO: use contained
syntax match ZinitIceSubCommand /\sice\s/ms=s+1,me=e-1 nextgroup=ZinitIceModifiers
syntax match ZinitIceModifiers /\s\<\%(svn\|proto\|from\|teleid\|bindmap\|cloneopts\|id-as\|depth\|if\|wait\|load\)\>/ms=s+1
syntax match ZinitIceModifiers /\s\<\%(unload\|blockf\|on-update-of\|subscribe\|pick\|bpick\|src\|as\|ver\|silent\)\>/ms=s+1
syntax match ZinitIceModifiers /\s\<\%(lucid\|notify\|mv\|cp\|atinit\|atclone\|atload\|atpull\|nocd\|run-atpull\|has\)\>/ms=s+1
syntax match ZinitIceModifiers /\s\<\%(cloneonly\|make\|service\|trackbinds\|multisrc\|compile\|nocompile\)\>/ms=s+1
syntax match ZinitIceModifiers /\s\<\%(nocompletions\|reset-prompt\|wrap-track\|reset\|aliases\|sh\|bash\|ksh\|csh\)\>/ms=s+1
syntax match ZinitIceModifiers /\s\<\%(\\!sh\|!sh\|\\!bash\|!bash\|\\!ksh\|!ksh\|\\!csh\|!csh\)\>/ms=s+1
syntax match ZinitIceModifiers /\s\<\%(blockf\|silent\|lucid\|trackbinds\|cloneonly\|nocd\|run-atpull\)\>/ms=s+1
syntax match ZinitIceModifiers /\s\<\%(\|sh\|\!sh\|bash\|\!bash\|ksh\|\!ksh\|csh\|\!csh\)\>/ms=s+1
syntax match ZinitIceModifiers /\s\<\%(nocompletions\|svn\|aliases\|trigger-load\)\>/ms=s+1
syntax match ZinitIceModifiers /\s\<\%(light-mode\|is-snippet\|countdown\|ps-on-unload\|ps-on-update\)\>/ms=s+1
" Include also ices added by the existing annexes
syntax match ZinitIceModifiers /\s\<\%(test\|zman\|submod\|dl\|patch\|fbin\|sbin\|fsrc\|ferc\|fmod\|gem\|node\|rustup\|cargo\)\>/ms=s+1
" Additional Zsh and Zinit functions
syntax match ZshAndZinitFunctions /\<\%(compdef\|compinit\|zpcdreplay\|zpcdclear\|zpcompinit\|zpcompdef\)\>/
" Link
highlight def link ZshAndZinitFunctions Keyword
highlight def link ZinitCommand Statement
highlight def link ZinitSubCommands Title
highlight def link ZinitPluginSubCommands Title
highlight def link ZinitSnippetSubCommands Title
highlight def link ZinitIceModifiers Type
highlight def link ZinitSnippetShorthands1 Keyword
highlight def link ZinitSnippetShorthands2 Keyword
highlight def link ZinitPlugin1 Macro
highlight def link ZinitPlugin2 Macro
highlight def link ZinitPlugin3 Macro
highlight def link ZinitSnippetUrl1 Macro
highlight def link ZinitSnippetUrl2 Macro
highlight def link ZinitSnippetUrl3 Macro
highlight def link ZinitSnippetUrl4 Macro
highlight def link ZinitTrailingWhiteSpace Error
endif

View File

@@ -13,6 +13,9 @@ function! s:L2U_Setup()
if !has_key(b:, "l2u_enabled") if !has_key(b:, "l2u_enabled")
let b:l2u_enabled = 0 let b:l2u_enabled = 0
endif endif
if !has_key(b:, "l2u_autodetect_enable")
let b:l2u_autodetect_enable = 1
endif
" Did we install the L2U tab mappings? " Did we install the L2U tab mappings?
if !has_key(b:, "l2u_tab_set") if !has_key(b:, "l2u_tab_set")
@@ -92,34 +95,39 @@ endfunction
" Each time the filetype changes, we may need to enable or " Each time the filetype changes, we may need to enable or
" disable the LaTeX-to-Unicode functionality " disable the LaTeX-to-Unicode functionality
function! LaTeXtoUnicode#Refresh() function! LaTeXtoUnicode#Refresh()
call s:L2U_Setup() call s:L2U_Setup()
" skip if manually overridden
if !b:l2u_autodetect_enable
return ''
endif
" by default, LaTeX-to-Unicode is only active on julia files " by default, LaTeX-to-Unicode is only active on julia files
let file_types = s:L2U_file_type_regex(get(g:, "latex_to_unicode_file_types", "julia")) let file_types = s:L2U_file_type_regex(get(g:, "latex_to_unicode_file_types", "julia"))
let file_types_blacklist = s:L2U_file_type_regex(get(g:, "latex_to_unicode_file_types_blacklist", "$^")) let file_types_blacklist = s:L2U_file_type_regex(get(g:, "latex_to_unicode_file_types_blacklist", "$^"))
if match(&filetype, file_types) < 0 || match(&filetype, file_types_blacklist) >= 0 if match(&filetype, file_types) < 0 || match(&filetype, file_types_blacklist) >= 0
if b:l2u_enabled if b:l2u_enabled
call LaTeXtoUnicode#Disable() call LaTeXtoUnicode#Disable(1)
else else
return return ''
endif endif
elseif !b:l2u_enabled elseif !b:l2u_enabled
call LaTeXtoUnicode#Enable() call LaTeXtoUnicode#Enable(1)
endif endif
endfunction endfunction
function! LaTeXtoUnicode#Enable() function! LaTeXtoUnicode#Enable(...)
let auto_set = a:0 > 0 ? a:1 : 0
if b:l2u_enabled if b:l2u_enabled
return return ''
end end
call s:L2U_ResetLastCompletionInfo() call s:L2U_ResetLastCompletionInfo()
let b:l2u_enabled = 1 let b:l2u_enabled = 1
let b:l2u_autodetect_enable = auto_set
" If we're editing the first file upon opening vim, this will only init the " If we're editing the first file upon opening vim, this will only init the
" command line mode mapping, and the full initialization will be performed by " command line mode mapping, and the full initialization will be performed by
@@ -127,18 +135,18 @@ function! LaTeXtoUnicode#Enable()
" Otherwise, if we're opening a file from within a running vim session, this " Otherwise, if we're opening a file from within a running vim session, this
" will actually initialize all the LaTeX-to-Unicode substitutions. " will actually initialize all the LaTeX-to-Unicode substitutions.
call LaTeXtoUnicode#Init() call LaTeXtoUnicode#Init()
return ''
return
endfunction endfunction
function! LaTeXtoUnicode#Disable() function! LaTeXtoUnicode#Disable(...)
let auto_set = a:0 > 0 ? a:1 : 0
if !b:l2u_enabled if !b:l2u_enabled
return return ''
endif endif
let b:l2u_enabled = 0 let b:l2u_enabled = 0
let b:l2u_autodetect_enable = auto_set
call LaTeXtoUnicode#Init() call LaTeXtoUnicode#Init()
return return ''
endfunction endfunction
" Translate old options to their new equivalents " Translate old options to their new equivalents
@@ -246,7 +254,6 @@ function! LaTeXtoUnicode#omnifunc(findstart, base)
endif endif
let b:l2u_in_fallback = 0 let b:l2u_in_fallback = 0
" set info for the callback " set info for the callback
let b:l2u_tab_completing = 1
let b:l2u_found_completion = 1 let b:l2u_found_completion = 1
" analyse current line " analyse current line
let col1 = col('.') let col1 = col('.')
@@ -375,6 +382,7 @@ function! LaTeXtoUnicode#Tab()
endif endif
" reset the in_fallback info " reset the in_fallback info
let b:l2u_in_fallback = 0 let b:l2u_in_fallback = 0
let b:l2u_tab_completing = 1
" temporary change to completeopt to use the `longest` setting, which is " temporary change to completeopt to use the `longest` setting, which is
" probably the only one which makes sense given that the goal of the " probably the only one which makes sense given that the goal of the
" completion is to substitute the final string " completion is to substitute the final string
@@ -383,7 +391,8 @@ function! LaTeXtoUnicode#Tab()
set completeopt-=noinsert set completeopt-=noinsert
" invoke omnicompletion; failure to perform LaTeX-to-Unicode completion is " invoke omnicompletion; failure to perform LaTeX-to-Unicode completion is
" handled by the CompleteDone autocommand. " handled by the CompleteDone autocommand.
return "\<C-X>\<C-O>" call feedkeys("\<C-X>\<C-O>", 'n')
return ""
endfunction endfunction
" This function is called at every CompleteDone event, and is meant to handle " This function is called at every CompleteDone event, and is meant to handle
@@ -409,7 +418,7 @@ function! LaTeXtoUnicode#FallbackCallback()
endfunction endfunction
" This is the function that performs the substitution in command-line mode " This is the function that performs the substitution in command-line mode
function! LaTeXtoUnicode#CmdTab(triggeredbytab) function! LaTeXtoUnicode#CmdTab(trigger)
" first stage " first stage
" analyse command line " analyse command line
let col1 = getcmdpos() - 1 let col1 = getcmdpos() - 1
@@ -418,10 +427,12 @@ function! LaTeXtoUnicode#CmdTab(triggeredbytab)
let b:l2u_singlebslash = (match(l[0:col1-1], '\\$') >= 0) let b:l2u_singlebslash = (match(l[0:col1-1], '\\$') >= 0)
" completion not found " completion not found
if col0 == -1 if col0 == -1
if a:triggeredbytab if a:trigger == &wildchar
call feedkeys("\<Tab>", 'nt') " fall-back to the default <Tab> call feedkeys(nr2char(a:trigger), 'nt') " fall-back to the default wildchar
elseif a:trigger == char2nr("\<S-Tab>")
call feedkeys("\<S-Tab>", 'nt') " fall-back to the default <S-Tab>
endif endif
return l return ''
endif endif
let base = l[col0 : col1-1] let base = l[col0 : col1-1]
" search for matches " search for matches
@@ -430,39 +441,28 @@ function! LaTeXtoUnicode#CmdTab(triggeredbytab)
for k in keys(g:l2u_symbols_dict) for k in keys(g:l2u_symbols_dict)
if k ==# base if k ==# base
let exact_match = 1 let exact_match = 1
endif break
if len(k) >= len(base) && k[0 : len(base)-1] ==# base elseif len(k) >= len(base) && k[0 : len(base)-1] ==# base
call add(partmatches, k) call add(partmatches, k)
endif endif
endfor endfor
if len(partmatches) == 0 if !exact_match && len(partmatches) == 0
if a:triggeredbytab " no matches, call fallbacks
call feedkeys("\<Tab>", 'nt') " fall-back to the default <Tab> if a:trigger == &wildchar
call feedkeys(nr2char(a:trigger), 'nt') " fall-back to the default wildchar
elseif a:trigger == char2nr("\<S-Tab>")
call feedkeys("\<S-Tab>", 'nt') " fall-back to the default <S-Tab>
endif endif
return l elseif exact_match
endif " exact matches are replaced with Unicode
" exact matches are replaced with Unicode
if exact_match
let unicode = g:l2u_symbols_dict[base] let unicode = g:l2u_symbols_dict[base]
if col0 > 0 call feedkeys(repeat("\b", len(base)) . unicode, 'nt')
let pre = l[0 : col0 - 1]
else
let pre = ''
endif
let posdiff = col1-col0 - len(unicode)
call setcmdpos(col1 - posdiff + 1)
return pre . unicode . l[col1 : -1]
endif
" no exact match: complete with the longest common prefix
let common = s:L2U_longest_common_prefix(partmatches)
if col0 > 0
let pre = l[0 : col0 - 1]
else else
let pre = '' " no exact match: complete with the longest common prefix
let common = s:L2U_longest_common_prefix(partmatches)
call feedkeys(common[len(base):], 'nt')
endif endif
let posdiff = col1-col0 - len(common) return ''
call setcmdpos(col1 - posdiff + 1)
return pre . common . l[col1 : -1]
endfunction endfunction
" Setup the L2U tab mapping " Setup the L2U tab mapping
@@ -473,7 +473,8 @@ function! s:L2U_SetTab(wait_insert_enter)
let b:l2u_cmdtab_keys = [b:l2u_cmdtab_keys] let b:l2u_cmdtab_keys = [b:l2u_cmdtab_keys]
endif endif
for k in b:l2u_cmdtab_keys for k in b:l2u_cmdtab_keys
exec 'cnoremap <buffer> '.k.' <C-\>eLaTeXtoUnicode#CmdTab('.(k ==? '<Tab>').')<CR>' exec 'let trigger = char2nr("'.(k[0] == '<' ? '\' : '').k.'")'
exec 'cnoremap <buffer><expr> '.k.' LaTeXtoUnicode#CmdTab('.trigger.')'
endfor endfor
let b:l2u_cmdtab_set = 1 let b:l2u_cmdtab_set = 1
endif endif
@@ -637,6 +638,7 @@ function! LaTeXtoUnicode#Init(...)
call s:L2U_SetTab(wait_insert_enter) call s:L2U_SetTab(wait_insert_enter)
call s:L2U_SetAutoSub(wait_insert_enter) call s:L2U_SetAutoSub(wait_insert_enter)
call s:L2U_SetKeymap() call s:L2U_SetKeymap()
return ''
endfunction endfunction
function! LaTeXtoUnicode#Toggle() function! LaTeXtoUnicode#Toggle()
@@ -648,7 +650,7 @@ function! LaTeXtoUnicode#Toggle()
call LaTeXtoUnicode#Enable() call LaTeXtoUnicode#Enable()
echo "LaTeX-to-Unicode enabled" echo "LaTeX-to-Unicode enabled"
endif endif
return return ''
endfunction endfunction
endif endif

641
autoload/ada.vim Normal file
View 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

View File

@@ -1,14 +1,16 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1 if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
function! cargo#Load() function! cargo#Load()
" Utility call to get this script loaded, for debugging " Utility call to get this script loaded, for debugging
endfunction endfunction
function! cargo#cmd(args) function! cargo#cmd(args) abort
" Trim trailing spaces. This is necessary since :terminal command parses " Trim trailing spaces. This is necessary since :terminal command parses
" trailing spaces as an empty argument. " trailing spaces as an empty argument.
let args = substitute(a:args, '\s\+$', '', '') let args = substitute(a:args, '\s\+$', '', '')
if has('terminal') if exists('g:cargo_shell_command_runner')
let cmd = g:cargo_shell_command_runner
elseif has('terminal')
let cmd = 'terminal' let cmd = 'terminal'
elseif has('nvim') elseif has('nvim')
let cmd = 'noautocmd new | terminal' let cmd = 'noautocmd new | terminal'
@@ -67,6 +69,10 @@ function! cargo#build(args)
call cargo#cmd("build " . a:args) call cargo#cmd("build " . a:args)
endfunction endfunction
function! cargo#check(args)
call cargo#cmd("check " . a:args)
endfunction
function! cargo#clean(args) function! cargo#clean(args)
call cargo#cmd("clean " . a:args) call cargo#cmd("clean " . a:args)
endfunction endfunction
@@ -96,6 +102,22 @@ function! cargo#bench(args)
call cargo#cmd("bench " . a:args) call cargo#cmd("bench " . a:args)
endfunction endfunction
function! cargo#update(args)
call cargo#cmd("update " . a:args)
endfunction
function! cargo#search(args)
call cargo#cmd("search " . a:args)
endfunction
function! cargo#publish(args)
call cargo#cmd("publish " . a:args)
endfunction
function! cargo#install(args)
call cargo#cmd("install " . a:args)
endfunction
function! cargo#runtarget(args) function! cargo#runtarget(args)
let l:filename = expand('%:p') let l:filename = expand('%:p')
let l:read_manifest = system('cargo read-manifest') let l:read_manifest = system('cargo read-manifest')

1044
autoload/crystal/indent.vim Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,48 +1,47 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'crystal') == -1 if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'crystal') == -1
let s:save_cpo = &cpo
set cpo&vim
let s:V = vital#crystal#new() let s:V = vital#crystal#new()
let s:P = s:V.import('Process') let s:P = s:V.import('Process')
let s:C = s:V.import('ColorEcho') let s:C = s:V.import('ColorEcho')
let s:IS_WINDOWS = has('win32')
if exists('*json_decode') if exists('*json_decode')
function! s:decode_json(text) abort function! s:decode_json(text) abort
return json_decode(a:text) return json_decode(a:text)
endfunction endfunction
else else
let s:J = s:V.import('Web.JSON') let s:J = s:V.import('Web.JSON')
function! s:decode_json(text) abort function! s:decode_json(text) abort
return s:J.decode(a:text) return s:J.decode(a:text)
endfunction endfunction
endif endif
function! s:echo_error(msg, ...) abort function! s:echo_error(msg, ...) abort
echohl ErrorMsg echohl ErrorMsg
if a:0 == 0 if a:0 == 0
echomsg a:msg echomsg a:msg
else else
echomsg call('printf', [a:msg] + a:000) echomsg call('printf', [a:msg] + a:000)
endif endif
echohl None echohl None
endfunction endfunction
function! s:run_cmd(cmd) abort function! s:run_cmd(cmd) abort
if !executable(g:crystal_compiler_command) if !executable(g:crystal_compiler_command)
throw "vim-crystal: Error: '" . g:crystal_compiler_command . "' command is not found." throw "vim-crystal: Error: '" . g:crystal_compiler_command . "' command is not found."
endif endif
return s:P.system(a:cmd) return s:P.system(a:cmd)
endfunction endfunction
function! s:find_root_by(search_dir, d) abort function! s:find_root_by(search_dir, d) abort
let found_dir = finddir(a:search_dir, a:d . ';') let found_dir = finddir(a:search_dir, a:d . ';')
if found_dir ==# '' if found_dir ==# ''
return '' return ''
endif endif
" Note: ':h:h' for {root}/{search_dir}/ -> {root}/{search_dir} -> {root} " Note: ':h:h' for {root}/{search_dir}/ -> {root}/{search_dir} -> {root}
return fnamemodify(found_dir, ':p:h:h') return fnamemodify(found_dir, ':p:h:h')
endfunction endfunction
" Search the root directory containing a 'spec/' and a 'src/' directories. " Search the root directory containing a 'spec/' and a 'src/' directories.
@@ -51,301 +50,318 @@ endfunction
" compiler has a 'cr_sources/src/spec/' directory that would otherwise give the root " compiler has a 'cr_sources/src/spec/' directory that would otherwise give the root
" directory as 'cr_source/src/' instead of 'cr_sources/'. " directory as 'cr_source/src/' instead of 'cr_sources/'.
function! s:find_root_by_spec_and_src(d) abort function! s:find_root_by_spec_and_src(d) abort
" Search for 'spec/' " Search for 'spec/'
let root = s:find_root_by('spec', a:d) let root = s:find_root_by('spec', a:d)
" Check that 'src/' is also there " Check that 'src/' is also there
if root !=# '' && isdirectory(root . '/src') if root !=# '' && isdirectory(root . '/src')
return root return root
endif endif
" Search for 'src/' " Search for 'src/'
let root = s:find_root_by('src', a:d) let root = s:find_root_by('src', a:d)
" Check that 'spec/' is also there " Check that 'spec/' is also there
if root !=# '' && isdirectory(root . '/spec') if root !=# '' && isdirectory(root . '/spec')
return root return root
endif endif
" Cannot find a directory containing both 'src/' and 'spec/' " Cannot find a directory containing both 'src/' and 'spec/'
return '' return ''
endfunction endfunction
function! crystal_lang#entrypoint_for(file_path) abort function! crystal_lang#entrypoint_for(file_path) abort
let parent_dir = fnamemodify(a:file_path, ':p:h') let parent_dir = fnamemodify(a:file_path, ':p:h')
let root_dir = s:find_root_by_spec_and_src(parent_dir) let root_dir = s:find_root_by_spec_and_src(parent_dir)
if root_dir ==# '' if root_dir ==# ''
" No spec directory found. No need to make temporary file " No spec directory found. No need to make temporary file
return a:file_path return a:file_path
endif endif
let required_spec_path = get(b:, 'crystal_required_spec_path', get(g:, 'crystal_required_spec_path', '')) let required_spec_path = get(b:, 'crystal_required_spec_path', get(g:, 'crystal_required_spec_path', ''))
if required_spec_path !=# '' if required_spec_path !=# ''
let require_spec_str = './' . required_spec_path let require_spec_str = './' . required_spec_path
else else
let require_spec_str = './spec/**' let require_spec_str = './spec/**'
endif endif
let temp_name = root_dir . '/__vim-crystal-temporary-entrypoint-' . fnamemodify(a:file_path, ':t') let temp_name = root_dir . '/__vim-crystal-temporary-entrypoint-' . fnamemodify(a:file_path, ':t')
let contents = [ let contents = [
\ 'require "spec"', \ 'require "spec"',
\ 'require "' . require_spec_str . '"', \ 'require "' . require_spec_str . '"',
\ printf('require "./%s"', fnamemodify(a:file_path, ':p')[strlen(root_dir)+1 : ]) \ printf('require "./%s"', fnamemodify(a:file_path, ':p')[strlen(root_dir)+1 : ])
\ ] \ ]
let result = writefile(contents, temp_name) let result = writefile(contents, temp_name)
if result == -1 if result == -1
" Note: When writefile() failed " Note: When writefile() failed
return a:file_path return a:file_path
endif endif
return temp_name return temp_name
endfunction endfunction
function! crystal_lang#tool(name, file, pos, option_str) abort function! crystal_lang#tool(name, file, pos, option_str) abort
let entrypoint = crystal_lang#entrypoint_for(a:file) let entrypoint = crystal_lang#entrypoint_for(a:file)
let cmd = printf( let cmd = printf(
\ '%s tool %s --no-color %s --cursor %s:%d:%d %s', \ '%s tool %s --no-color %s --cursor %s:%d:%d %s',
\ g:crystal_compiler_command, \ g:crystal_compiler_command,
\ a:name, \ a:name,
\ a:option_str, \ a:option_str,
\ a:file, \ a:file,
\ a:pos[1], \ a:pos[1],
\ a:pos[2], \ a:pos[2],
\ entrypoint \ entrypoint
\ ) \ )
try try
let output = s:run_cmd(cmd) let output = s:run_cmd(cmd)
return {'failed': s:P.get_last_status(), 'output': output} return {'failed': s:P.get_last_status(), 'output': output}
finally finally
" Note: " Note:
" If the entry point is temporary file, delete it finally. " If the entry point is temporary file, delete it finally.
if a:file !=# entrypoint if a:file !=# entrypoint
call delete(entrypoint) call delete(entrypoint)
endif endif
endtry endtry
endfunction endfunction
" `pos` is assumed a returned value from getpos() " `pos` is assumed a returned value from getpos()
function! crystal_lang#impl(file, pos, option_str) abort function! crystal_lang#impl(file, pos, option_str) abort
return crystal_lang#tool('implementations', a:file, a:pos, a:option_str) return crystal_lang#tool('implementations', a:file, a:pos, a:option_str)
endfunction endfunction
function! s:jump_to_impl(impl) abort function! s:jump_to_impl(impl) abort
execute 'edit' a:impl.filename execute 'edit' a:impl.filename
call cursor(a:impl.line, a:impl.column) call cursor(a:impl.line, a:impl.column)
endfunction endfunction
function! crystal_lang#jump_to_definition(file, pos) abort function! crystal_lang#jump_to_definition(file, pos) abort
echo 'analyzing definitions under cursor...' echo 'analyzing definitions under cursor...'
let cmd_result = crystal_lang#impl(a:file, a:pos, '--format json') let cmd_result = crystal_lang#impl(a:file, a:pos, '--format json')
if cmd_result.failed if cmd_result.failed
return s:echo_error(cmd_result.output) return s:echo_error(cmd_result.output)
endif endif
let impl = s:decode_json(cmd_result.output) let impl = s:decode_json(cmd_result.output)
if impl.status !=# 'ok' if impl.status !=# 'ok'
return s:echo_error(impl.message) return s:echo_error(impl.message)
endif endif
if len(impl.implementations) == 1 if len(impl.implementations) == 1
call s:jump_to_impl(impl.implementations[0]) call s:jump_to_impl(impl.implementations[0])
return return
endif endif
let message = "Multiple definitions detected. Choose a number\n\n" let message = "Multiple definitions detected. Choose a number\n\n"
for idx in range(len(impl.implementations)) for idx in range(len(impl.implementations))
let i = impl.implementations[idx] let i = impl.implementations[idx]
let message .= printf("[%d] %s:%d:%d\n", idx, i.filename, i.line, i.column) let message .= printf("[%d] %s:%d:%d\n", idx, i.filename, i.line, i.column)
endfor endfor
let message .= "\n" let message .= "\n"
let idx = str2nr(input(message, "\n> ")) let idx = str2nr(input(message, "\n> "))
call s:jump_to_impl(impl.implementations[idx]) call s:jump_to_impl(impl.implementations[idx])
endfunction endfunction
function! crystal_lang#context(file, pos, option_str) abort function! crystal_lang#context(file, pos, option_str) abort
return crystal_lang#tool('context', a:file, a:pos, a:option_str) return crystal_lang#tool('context', a:file, a:pos, a:option_str)
endfunction endfunction
function! crystal_lang#type_hierarchy(file, option_str) abort function! crystal_lang#type_hierarchy(file, option_str) abort
let cmd = printf( let cmd = printf(
\ '%s tool hierarchy --no-color %s %s', \ '%s tool hierarchy --no-color %s %s',
\ g:crystal_compiler_command, \ g:crystal_compiler_command,
\ a:option_str, \ a:option_str,
\ a:file \ a:file
\ ) \ )
return s:run_cmd(cmd) return s:run_cmd(cmd)
endfunction endfunction
function! s:find_completion_start() abort function! s:find_completion_start() abort
let c = col('.') let c = col('.')
if c <= 1 if c <= 1
return -1 return -1
endif endif
let line = getline('.')[:c-2] let line = getline('.')[:c-2]
return match(line, '\w\+$') return match(line, '\w\+$')
endfunction endfunction
function! crystal_lang#complete(findstart, base) abort function! crystal_lang#complete(findstart, base) abort
if a:findstart if a:findstart
return s:find_completion_start() return s:find_completion_start()
endif endif
let cmd_result = crystal_lang#context(expand('%'), getpos('.'), '--format json') let cmd_result = crystal_lang#context(expand('%'), getpos('.'), '--format json')
if cmd_result.failed if cmd_result.failed
return return
endif endif
let contexts = s:decode_json(cmd_result.output) let contexts = s:decode_json(cmd_result.output)
if contexts.status !=# 'ok' if contexts.status !=# 'ok'
return return
endif endif
let candidates = [] let candidates = []
for c in contexts.contexts for c in contexts.contexts
for [name, desc] in items(c) for [name, desc] in items(c)
let candidates += [{ let candidates += [{
\ 'word': name, \ 'word': name,
\ 'menu': ': ' . desc . ' [var]', \ 'menu': ': ' . desc . ' [var]',
\ }] \ }]
endfor
endfor endfor
endfor
return candidates return candidates
endfunction endfunction
function! crystal_lang#get_spec_switched_path(absolute_path) abort function! crystal_lang#get_spec_switched_path(absolute_path) abort
let base = fnamemodify(a:absolute_path, ':t:r') let base = fnamemodify(a:absolute_path, ':t:r')
" TODO: Make cleverer " TODO: Make cleverer
if base =~# '_spec$' if base =~# '_spec$'
let parent = fnamemodify(substitute(a:absolute_path, '/spec/', '/src/', ''), ':h') let parent = fnamemodify(substitute(a:absolute_path, '/spec/', '/src/', ''), ':h')
return parent . '/' . matchstr(base, '.\+\ze_spec$') . '.cr' return parent . '/' . matchstr(base, '.\+\ze_spec$') . '.cr'
else else
let parent = fnamemodify(substitute(a:absolute_path, '/src/', '/spec/', ''), ':h') let parent = fnamemodify(substitute(a:absolute_path, '/src/', '/spec/', ''), ':h')
return parent . '/' . base . '_spec.cr' return parent . '/' . base . '_spec.cr'
endif endif
endfunction endfunction
function! crystal_lang#switch_spec_file(...) abort function! crystal_lang#switch_spec_file(...) abort
let path = a:0 == 0 ? expand('%:p') : fnamemodify(a:1, ':p') let path = a:0 == 0 ? expand('%:p') : fnamemodify(a:1, ':p')
if path !~# '.cr$' if path !~# '.cr$'
return s:echo_error('Not crystal source file: ' . path) return s:echo_error('Not crystal source file: ' . path)
endif endif
execute 'edit!' crystal_lang#get_spec_switched_path(path) execute 'edit!' crystal_lang#get_spec_switched_path(path)
endfunction endfunction
function! s:run_spec(root, path, ...) abort function! s:run_spec(root, path, ...) abort
" Note: " Note:
" `crystal spec` can't understand absolute path. " `crystal spec` can't understand absolute path.
let cmd = printf( let cmd = printf(
\ '%s spec %s%s', \ '%s spec %s%s',
\ g:crystal_compiler_command, \ g:crystal_compiler_command,
\ a:path, \ a:path,
\ a:0 == 0 ? '' : (':' . a:1) \ a:0 == 0 ? '' : (':' . a:1)
\ ) \ )
let saved_cwd = getcwd() let saved_cwd = getcwd()
let cd = haslocaldir() ? 'lcd' : 'cd' let cd = haslocaldir() ? 'lcd' : 'cd'
try try
execute cd a:root execute cd a:root
call s:C.echo(s:run_cmd(cmd)) call s:C.echo(s:run_cmd(cmd))
finally finally
execute cd saved_cwd execute cd saved_cwd
endtry endtry
endfunction endfunction
function! crystal_lang#run_all_spec(...) abort function! crystal_lang#run_all_spec(...) abort
let path = a:0 == 0 ? expand('%:p:h') : a:1 let path = a:0 == 0 ? expand('%:p:h') : a:1
let root_path = s:find_root_by_spec_and_src(path) let root_path = s:find_root_by_spec_and_src(path)
if root_path ==# '' if root_path ==# ''
return s:echo_error("'spec' directory is not found") return s:echo_error("'spec' directory is not found")
endif endif
call s:run_spec(root_path, 'spec') call s:run_spec(root_path, 'spec')
endfunction endfunction
function! crystal_lang#run_current_spec(...) abort function! crystal_lang#run_current_spec(...) abort
" /foo/bar/src/poyo.cr " /foo/bar/src/poyo.cr
let path = a:0 == 0 ? expand('%:p') : fnamemodify(a:1, ':p') let path = a:0 == 0 ? expand('%:p') : fnamemodify(a:1, ':p')
if path !~# '.cr$' if path !~# '.cr$'
return s:echo_error('Not crystal source file: ' . path) return s:echo_error('Not crystal source file: ' . path)
endif endif
" /foo/bar/src " /foo/bar/src
let source_dir = fnamemodify(path, ':h') let source_dir = fnamemodify(path, ':h')
" /foo/bar " /foo/bar
let root_dir = s:find_root_by_spec_and_src(source_dir) let root_dir = s:find_root_by_spec_and_src(source_dir)
if root_dir ==# '' if root_dir ==# ''
return s:echo_error("Root directory with 'src/' and 'spec/' not found") return s:echo_error("Root directory with 'src/' and 'spec/' not found")
endif endif
" src " src
let rel_path = source_dir[strlen(root_dir)+1 : ] let rel_path = source_dir[strlen(root_dir)+1 : ]
if path =~# '_spec.cr$' if path =~# '_spec.cr$'
call s:run_spec(root_dir, path[strlen(root_dir)+1 : ], line('.')) call s:run_spec(root_dir, path[strlen(root_dir)+1 : ], line('.'))
else else
let spec_path = substitute(rel_path, '^src', 'spec', '') . '/' . fnamemodify(path, ':t:r') . '_spec.cr' let spec_path = substitute(rel_path, '^src', 'spec', '') . '/' . fnamemodify(path, ':t:r') . '_spec.cr'
if !filereadable(root_dir . '/' . spec_path) if !filereadable(root_dir . '/' . spec_path)
return s:echo_error('Error: Could not find a spec source corresponding to ' . path) return s:echo_error('Error: Could not find a spec source corresponding to ' . path)
endif
call s:run_spec(root_dir, spec_path)
endif endif
call s:run_spec(root_dir, spec_path)
endif
endfunction endfunction
function! crystal_lang#format_string(code, ...) abort function! crystal_lang#format_string(code, ...) abort
let cmd = printf( if s:IS_WINDOWS
\ '%s tool format --no-color %s -', let redirect = '2> nul'
\ g:crystal_compiler_command, else
\ get(a:, 1, '') let redirect = '2>/dev/null'
\ ) endif
let output = s:P.system(cmd, a:code) let cmd = printf(
if s:P.get_last_status() \ '%s tool format --no-color %s - %s',
throw 'vim-crystal: Error on formatting: ' . output \ g:crystal_compiler_command,
endif \ get(a:, 1, ''),
return output \ redirect,
\ )
let output = s:P.system(cmd, a:code)
if s:P.get_last_status()
throw 'vim-crystal: Error on formatting with command: ' . cmd
endif
return output
endfunction endfunction
" crystal_lang#format(option_str [, on_save]) " crystal_lang#format(option_str [, on_save])
function! crystal_lang#format(option_str, ...) abort function! crystal_lang#format(option_str, ...) abort
if !executable(g:crystal_compiler_command) let on_save = a:0 > 0 ? a:1 : 0
" Finish command silently
return if !executable(g:crystal_compiler_command)
if on_save
" Finish command silently on save
return
else
throw 'vim-crystal: Command for formatting is not executable: ' . g:crystal_compiler_command
endif endif
endif
let on_save = a:0 > 0 ? a:1 : 0 let before = join(getline(1, '$'), "\n")
try
let before = join(getline(1, '$'), "\n")
let formatted = crystal_lang#format_string(before, a:option_str) let formatted = crystal_lang#format_string(before, a:option_str)
if !on_save catch /^vim-crystal: /
let after = substitute(formatted, '\n$', '', '') echohl ErrorMsg
if before ==# after echomsg v:exception . ': Your code was not formatted. Exception was thrown at ' . v:throwpoint
return echohl None
endif return
endif endtry
let view_save = winsaveview() if !on_save
let pos_save = getpos('.') let after = substitute(formatted, '\n$', '', '')
let lines = split(formatted, '\n') if before ==# after
silent! undojoin return
if line('$') > len(lines)
execute len(lines) . ',$delete' '_'
endif endif
call setline(1, lines) endif
call winrestview(view_save)
call setpos('.', pos_save) let view_save = winsaveview()
let pos_save = getpos('.')
let lines = split(formatted, '\n')
silent! undojoin
if line('$') > len(lines)
execute len(lines) . ',$delete' '_'
endif
call setline(1, lines)
call winrestview(view_save)
call setpos('.', pos_save)
endfunction endfunction
function! crystal_lang#expand(file, pos, ...) abort function! crystal_lang#expand(file, pos, ...) abort
return crystal_lang#tool('expand', a:file, a:pos, get(a:, 1, '')) return crystal_lang#tool('expand', a:file, a:pos, get(a:, 1, ''))
endfunction endfunction
let &cpo = s:save_cpo " vim: sw=2 sts=2 et:
unlet s:save_cpo
endif endif

View File

@@ -69,6 +69,10 @@ fu! csv#Init(start, end, ...) "{{{3
else else
let b:csv_cmt = split(g:csv_comment, '%s') let b:csv_cmt = split(g:csv_comment, '%s')
endif endif
" Make sure it is a list with 2 chars
if b:csv_cmt == []
let b:csv_cmt = ["", ""]
endif
if empty(b:delimiter) && !exists("b:csv_fixed_width") if empty(b:delimiter) && !exists("b:csv_fixed_width")
call csv#Warn("No delimiter found. See :h csv-delimiter to set it manually!") call csv#Warn("No delimiter found. See :h csv-delimiter to set it manually!")
@@ -122,7 +126,7 @@ fu! csv#Init(start, end, ...) "{{{3
" Enable vartabs for tab delimited files " Enable vartabs for tab delimited files
if b:delimiter=="\t" && has("vartabs")&& !exists("b:csv_fixed_width_cols") if b:delimiter=="\t" && has("vartabs")&& !exists("b:csv_fixed_width_cols")
if get(b:, 'col_width', []) ==# [] if get(b:, 'col_width', []) ==# []
call csv#CalculateColumnWidth('') call csv#CalculateColumnWidth(line('$'), 1)
endif endif
let &l:vts=join(b:col_width, ',') let &l:vts=join(b:col_width, ',')
let g:csv_no_conceal=1 let g:csv_no_conceal=1
@@ -263,7 +267,7 @@ fu! csv#GetPat(colnr, maxcolnr, pat, allowmore) "{{{3
" Allow space in front of the pattern, so that it works correctly " Allow space in front of the pattern, so that it works correctly
" even if :Arrange Col has been used #100 " even if :Arrange Col has been used #100
return '^' . csv#GetColPat(a:colnr - 1,0) . return '^' . csv#GetColPat(a:colnr - 1,0) .
\ '\s*\zs' . a:pat . '\ze' . (a:allowmore ? '' : '$') \ '.*\zs' . a:pat . '\ze' . (a:allowmore ? '' : '$')
else else
return '\%' . b:csv_fixed_width_cols[-1] . return '\%' . b:csv_fixed_width_cols[-1] .
\ 'c\zs' . a:pat . '\ze' . (a:allowmore ? '' : '$') \ 'c\zs' . a:pat . '\ze' . (a:allowmore ? '' : '$')
@@ -500,7 +504,7 @@ fu! csv#WColumn(...) "{{{3
" Return on which column the cursor is " Return on which column the cursor is
let _cur = getpos('.') let _cur = getpos('.')
if !exists("b:csv_fixed_width_cols") if !exists("b:csv_fixed_width_cols")
if line('.') > 1 && mode('') != 'n' if line('.') > 1 && mode('') != 'n' && empty(getline('.')[0:col('.')-1])
" in insert mode, get line from above, just in case the current " in insert mode, get line from above, just in case the current
" line is empty " line is empty
let line = getline(line('.')-1) let line = getline(line('.')-1)
@@ -574,7 +578,7 @@ fu! csv#MaxColumns(...) "{{{3
return len(b:csv_fixed_width_cols) return len(b:csv_fixed_width_cols)
endif endif
endfu endfu
fu! csv#ColWidth(colnr, ...) "{{{3 fu! csv#ColWidth(colnr, row, silent) "{{{3
" if a:1 is given, specifies the row, for which to calculate the width " if a:1 is given, specifies the row, for which to calculate the width
" "
" Return the width of a column " Return the width of a column
@@ -586,14 +590,13 @@ fu! csv#ColWidth(colnr, ...) "{{{3
if !exists("b:csv_fixed_width_cols") if !exists("b:csv_fixed_width_cols")
if !exists("b:csv_list") if !exists("b:csv_list")
" only check first 10000 lines, to be faster " only check first 10000 lines, to be faster
let last = line('$') let last = a:row
if exists("a:1") && !empty(a:1)
let last = a:1
endif
if !get(b:, 'csv_arrange_use_all_rows', 0) if !get(b:, 'csv_arrange_use_all_rows', 0)
if last > 10000 if last > 10000
let last = 10000 let last = 10000
call csv#Warn('File too large, only checking the first 10000 rows for the width') if !a:silent
call csv#Warn('File too large, only checking the first 10000 rows for the width')
endif
endif endif
endif endif
let b:csv_list=getline(skipfirst+1,last) let b:csv_list=getline(skipfirst+1,last)
@@ -636,8 +639,12 @@ fu! csv#ArrangeCol(first, last, bang, limit, ...) range "{{{3
return return
endif endif
let cur=winsaveview() let cur=winsaveview()
" be sure, that b:col_width is actually valid
if exists("b:col_width") && eval(join(b:col_width, '+')) == 0
unlet! b:col_width
endif
" Force recalculation of Column width " Force recalculation of Column width
let row = exists("a:1") ? a:1 : '' let row = exists("a:1") && !empty(a:1) ? a:1 : line('$')
if a:bang || !empty(row) if a:bang || !empty(row)
if a:bang && exists("b:col_width") if a:bang && exists("b:col_width")
" Unarrange, so that if csv_arrange_align has changed " Unarrange, so that if csv_arrange_align has changed
@@ -671,7 +678,7 @@ fu! csv#ArrangeCol(first, last, bang, limit, ...) range "{{{3
endif endif
if !exists("b:col_width") if !exists("b:col_width")
call csv#CalculateColumnWidth(row) call csv#CalculateColumnWidth(row, 1)
endif endif
" abort on empty file " abort on empty file
@@ -750,11 +757,15 @@ fu! csv#UnArrangeCol(match) "{{{3
" Strip leading white space, also trims empty recordcsv# " Strip leading white space, also trims empty recordcsv#
return substitute(a:match, '\%(^ \+\)\|\%( \+\ze'.b:delimiter. '\?$\)', '', 'g') return substitute(a:match, '\%(^ \+\)\|\%( \+\ze'.b:delimiter. '\?$\)', '', 'g')
endfu endfu
fu! csv#CalculateColumnWidth(row) "{{{3 fu! csv#CalculateColumnWidth(row, silent) "{{{3
" Internal function, not called from external, " Internal function, not called from external,
" does not work with fixed width columns " does not work with fixed width columns
" row for the row for which to calculate the width " row for the row for which to calculate the width
let b:col_width=[] let b:col_width=[]
if has( 'vartabs' ) && b:delimiter == "\t"
let vts_save=&vts
set vts=
endif
try try
if exists("b:csv_headerline") if exists("b:csv_headerline")
if line('.') < b:csv_headerline if line('.') < b:csv_headerline
@@ -763,7 +774,7 @@ fu! csv#CalculateColumnWidth(row) "{{{3
endif endif
let s:max_cols=csv#MaxColumns(line('.')) let s:max_cols=csv#MaxColumns(line('.'))
for i in range(1,s:max_cols) for i in range(1,s:max_cols)
call add(b:col_width, csv#ColWidth(i, a:row)) call add(b:col_width, csv#ColWidth(i, a:row, a:silent))
endfor endfor
catch /csv:no_col/ catch /csv:no_col/
call csv#Warn("Error: getting Column numbers, aborting!") call csv#Warn("Error: getting Column numbers, aborting!")
@@ -773,6 +784,9 @@ fu! csv#CalculateColumnWidth(row) "{{{3
" delete buffer content in variable b:csv_list, " delete buffer content in variable b:csv_list,
" this was only necessary for calculating the max width " this was only necessary for calculating the max width
unlet! b:csv_list s:columnize_count s:decimal_column unlet! b:csv_list s:columnize_count s:decimal_column
if has( 'vartabs' ) && b:delimiter == "\t"
let &vts=vts_save
endif
endfu endfu
fu! csv#Columnize(field) "{{{3 fu! csv#Columnize(field) "{{{3
" Internal function, not called from external, " Internal function, not called from external,
@@ -1053,7 +1067,7 @@ fu! csv#MoveCol(forward, line, ...) "{{{3
let maxcol=csv#MaxColumns(line('.')) let maxcol=csv#MaxColumns(line('.'))
let cpos=getpos('.')[2] let cpos=getpos('.')[2]
if !exists("b:csv_fixed_width_cols") if !exists("b:csv_fixed_width_cols")
let curwidth=CSVWidth() let curwidth=CSVWidth(1)
call search(b:col, 'bc', line('.')) call search(b:col, 'bc', line('.'))
endif endif
let spos=getpos('.')[2] let spos=getpos('.')[2]
@@ -1146,7 +1160,7 @@ fu! csv#MoveCol(forward, line, ...) "{{{3
" leave the column (if the next column is shorter) " leave the column (if the next column is shorter)
if !exists("b:csv_fixed_width_cols") if !exists("b:csv_fixed_width_cols")
let a = getpos('.') let a = getpos('.')
if CSVWidth() == curwidth if CSVWidth(1) == curwidth
let a[2]+= cpos-spos let a[2]+= cpos-spos
endif endif
else else
@@ -1159,7 +1173,7 @@ fu! csv#MoveCol(forward, line, ...) "{{{3
" Move to the correct screen column " Move to the correct screen column
if !exists("b:csv_fixed_width_cols") if !exists("b:csv_fixed_width_cols")
let a = getpos('.') let a = getpos('.')
if CSVWidth() == curwidth if CSVWidth(1) == curwidth
let a[2]+= cpos-spos let a[2]+= cpos-spos
endif endif
else else
@@ -1493,10 +1507,10 @@ fu! csv#AvgColumn(list) "{{{3
endfor endfor
if has("float") if has("float")
let b:csv_result = printf("%.2f", sum/cnt) let b:csv_result = printf("%.2f", sum/cnt)
return b:csv_result return str2float(b:csv_result)
else else
let b:csv_result = printf("%s", sum/cnt) let b:csv_result = printf("%s", sum/cnt)
return sum/cnt return b:csv_result + 0
endif endif
endif endif
endfu endfu
@@ -1529,7 +1543,7 @@ fu! csv#VarianceColumn(list, is_population) "{{{3
let cnt = cnt-1 let cnt = cnt-1
endif endif
if has("float") if has("float")
let b:csv_result = printf("%.2f", sum/cnt) let b:csv_result = printf("%." . get(b:, 'csv_accuracy', get(g:, 'csv_accuracy', 2)) . "f", sum/cnt)
return b:csv_result return b:csv_result
else else
let b:csv_result = printf("%s", sum/cnt) let b:csv_result = printf("%s", sum/cnt)
@@ -1835,7 +1849,7 @@ fu! csv#ProcessFieldValue(field) "{{{3
if a == b:delimiter if a == b:delimiter
try try
let a=repeat(' ', csv#ColWidth(col)) let a=repeat(' ', csv#ColWidth(col, line('$'), 1))
catch catch
" no-op " no-op
endtry endtry
@@ -1942,8 +1956,12 @@ fu! csv#CheckHeaderLine() "{{{3
endfu endfu
fu! csv#AnalyzeColumn(...) "{{{3 fu! csv#AnalyzeColumn(...) "{{{3
let maxcolnr = csv#MaxColumns() let maxcolnr = csv#MaxColumns()
if len(a:000) == 1 let topn = 5
if len(a:000) > 0
let colnr = a:1 let colnr = a:1
if len(a:000) == 2
let topn = a:2
endif
else else
let colnr = csv#WColumn() let colnr = csv#WColumn()
endif endif
@@ -1971,8 +1989,8 @@ fu! csv#AnalyzeColumn(...) "{{{3
let max_items = reverse(sort(values(res), s:csv_numeric_sort ? 'n' : 'csv#CSVSortValues')) let max_items = reverse(sort(values(res), s:csv_numeric_sort ? 'n' : 'csv#CSVSortValues'))
" What about the minimum 5 items? " What about the minimum 5 items?
let count_items = keys(res) let count_items = keys(res)
if len(max_items) > 5 if len(max_items) > topn
call remove(max_items, 5, -1) call remove(max_items, topn, -1)
call map(max_items, 'printf(''\V%s\m'', escape(v:val, ''\\''))') call map(max_items, 'printf(''\V%s\m'', escape(v:val, ''\\''))')
call filter(res, 'v:val =~ ''^''.join(max_items, ''\|'').''$''') call filter(res, 'v:val =~ ''^''.join(max_items, ''\|'').''$''')
endif endif
@@ -2134,7 +2152,7 @@ fu! csv#NewRecord(line1, line2, count) "{{{3
if !exists("b:col_width") if !exists("b:col_width")
" Best guess width " Best guess width
if exists("b:csv_fixed_width_cols") if exists("b:csv_fixed_width_cols")
let record .= printf("%*s", csv#ColWidth(item), let record .= printf("%*s", csv#ColWidth(item, line('$'), 1),
\ b:delimiter) \ b:delimiter)
else else
let record .= printf("%20s", b:delimiter) let record .= printf("%20s", b:delimiter)
@@ -2249,7 +2267,7 @@ fu! csv#CommandDefinitions() "{{{3
\ ':echo csv#EvalColumn(<q-args>, "csv#SmplStdDevColumn", <line1>,<line2>)', \ ':echo csv#EvalColumn(<q-args>, "csv#SmplStdDevColumn", <line1>,<line2>)',
\ '-nargs=? -range=% -complete=custom,csv#SortComplete') \ '-nargs=? -range=% -complete=custom,csv#SortComplete')
call csv#LocalCmd("PopStdCol", call csv#LocalCmd("PopStdCol",
\ ':echo csv#EvalColumn(<q-args>, "csv#SmplStdDevColumn", <line1>,<line2>)', \ ':echo csv#EvalColumn(<q-args>, "csv#PopStdDevColumn", <line1>,<line2>)',
\ '-nargs=? -range=% -complete=custom,csv#SortComplete') \ '-nargs=? -range=% -complete=custom,csv#SortComplete')
call csv#LocalCmd("UnArrangeColumn", call csv#LocalCmd("UnArrangeColumn",
\':call csv#PrepUnArrangeCol(<line1>, <line2>)', \':call csv#PrepUnArrangeCol(<line1>, <line2>)',
@@ -2297,8 +2315,8 @@ fu! csv#CommandDefinitions() "{{{3
\ '-bang -nargs=? -range=%') \ '-bang -nargs=? -range=%')
call csv#LocalCmd("Filters", ':call csv#OutputFilters(<bang>0)', call csv#LocalCmd("Filters", ':call csv#OutputFilters(<bang>0)',
\ '-nargs=0 -bang') \ '-nargs=0 -bang')
call csv#LocalCmd("Analyze", ':call csv#AnalyzeColumn(<args>)', call csv#LocalCmd("Analyze", ':call csv#AnalyzeColumn(<f-args>)',
\ '-nargs=?') \ '-nargs=*' )
call csv#LocalCmd("VertFold", ':call csv#Vertfold(<bang>0,<q-args>)', call csv#LocalCmd("VertFold", ':call csv#Vertfold(<bang>0,<q-args>)',
\ '-bang -nargs=? -range=% -complete=custom,csv#SortComplete') \ '-bang -nargs=? -range=% -complete=custom,csv#SortComplete')
call csv#LocalCmd("CSVFixed", ':call csv#InitCSVFixedWidth()', '') call csv#LocalCmd("CSVFixed", ':call csv#InitCSVFixedWidth()', '')
@@ -2332,7 +2350,7 @@ fu! csv#ColumnWidth()
endfu endfu
fu! csv#Map(map, name, definition, ...) "{{{3 fu! csv#Map(map, name, definition, ...) "{{{3
let keyname = substitute(a:name, '[<>]', '', 'g') let keyname = substitute(substitute(a:name, '[<>]', '', 'g'), '-', '_', 'g')
let expr = (exists("a:1") && a:1 == 'expr' ? '<expr>' : '') let expr = (exists("a:1") && a:1 == 'expr' ? '<expr>' : '')
if !get(g:, "csv_nomap_". tolower(keyname), 0) if !get(g:, "csv_nomap_". tolower(keyname), 0)
" All mappings are buffer local " All mappings are buffer local
@@ -3145,7 +3163,9 @@ fu! CSVCount(col, fmt, first, last, ...) "{{{3
unlet! s:additional['distinct'] unlet! s:additional['distinct']
return (empty(result) ? 0 : result) return (empty(result) ? 0 : result)
endfu endfu
fu! CSVWidth() "{{{3 fu! CSVWidth(...) "{{{3
" do not output any warning
let silent = get(a:000, 0, 1)
" does not work with fixed width columns " does not work with fixed width columns
if exists("b:csv_fixed_width_cols") if exists("b:csv_fixed_width_cols")
let c = getline(1,'$') let c = getline(1,'$')
@@ -3164,7 +3184,7 @@ fu! CSVWidth() "{{{3
" Add width for last column " Add width for last column
call add(width, max-y+1) call add(width, max-y+1)
else else
call csv#CalculateColumnWidth('') call csv#CalculateColumnWidth(line('$'), silent)
let width=map(copy(b:col_width), 'v:val-1') let width=map(copy(b:col_width), 'v:val-1')
endif endif
return width return width

View File

@@ -27,12 +27,16 @@ function! s:clearQfList(reason) abort
endif endif
endfunction endfunction
function! dart#fmt(q_args) abort function! dart#fmt(...) abort
let cmd = s:FindDartFmt() let l:dartfmt = s:FindDartFmt()
if type(cmd) != type('') | return | endif if type(l:dartfmt) != type('') | return | endif
let buffer_content = getline(1, '$') let buffer_content = getline(1, '$')
let args = '--stdin-name '.expand('%').' '.a:q_args let l:cmd = [l:dartfmt, '--stdin-name', shellescape(expand('%'))]
let lines = systemlist(printf('%s %s', cmd, args), join(buffer_content, "\n")) if exists('g:dartfmt_options')
call extend(l:cmd, g:dartfmt_options)
endif
call extend(l:cmd, a:000)
let lines = systemlist(join(l:cmd), join(buffer_content, "\n"))
" TODO(https://github.com/dart-lang/sdk/issues/38507) - Remove once the " TODO(https://github.com/dart-lang/sdk/issues/38507) - Remove once the
" tool no longer emits this line on SDK upgrades. " tool no longer emits this line on SDK upgrades.
if lines[-1] ==# 'Isolate creation failed' if lines[-1] ==# 'Isolate creation failed'
@@ -86,7 +90,7 @@ endfunction
" If the path cannot be resolved, or is not a package: uri, returns the " If the path cannot be resolved, or is not a package: uri, returns the
" original. " original.
function! dart#resolveUri(uri) abort function! dart#resolveUri(uri) abort
if a:uri !~ 'package:' if a:uri !~# 'package:'
return a:uri return a:uri
endif endif
let package_name = substitute(a:uri, 'package:\(\w\+\)\/.*', '\1', '') let package_name = substitute(a:uri, 'package:\(\w\+\)\/.*', '\1', '')
@@ -118,20 +122,20 @@ function! s:PackageMap() abort
let lines = readfile(dot_packages) let lines = readfile(dot_packages)
let map = {} let map = {}
for line in lines for line in lines
if line =~ '\s*#' if line =~# '\s*#'
continue continue
endif endif
let package = substitute(line, ':.*$', '', '') let package = substitute(line, ':.*$', '', '')
let lib_dir = substitute(line, '^[^:]*:', '', '') let lib_dir = substitute(line, '^[^:]*:', '', '')
if lib_dir =~ 'file:/' if lib_dir =~# 'file:/'
let lib_dir = substitute(lib_dir, 'file://', '', '') let lib_dir = substitute(lib_dir, 'file://', '', '')
if lib_dir =~ '/[A-Z]:/' if lib_dir =~# '/[A-Z]:/'
let lib_dir = lib_dir[1:] let lib_dir = lib_dir[1:]
endif endif
else else
let lib_dir = resolve(dot_packages_dir.'/'.lib_dir) let lib_dir = resolve(dot_packages_dir.'/'.lib_dir)
endif endif
if lib_dir =~ '/$' if lib_dir =~# '/$'
let lib_dir = lib_dir[:len(lib_dir) - 2] let lib_dir = lib_dir[:len(lib_dir) - 2]
endif endif
let map[package] = lib_dir let map[package] = lib_dir
@@ -141,7 +145,7 @@ endfunction
" Toggle whether dartfmt is run on save or not. " Toggle whether dartfmt is run on save or not.
function! dart#ToggleFormatOnSave() abort function! dart#ToggleFormatOnSave() abort
if get(g:, "dart_format_on_save", 0) if get(g:, 'dart_format_on_save', 0)
let g:dart_format_on_save = 0 let g:dart_format_on_save = 0
return return
endif endif

36
autoload/ecrystal.vim Normal file
View File

@@ -0,0 +1,36 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'crystal') == -1
let s:ecrystal_extensions = {
\ 'cr': 'crystal',
\ 'yml': 'yaml',
\ 'js': 'javascript',
\ 'txt': 'text',
\ 'md': 'markdown'
\ }
if exists('g:ecrystal_extensions')
call extend(s:ecrystal_extensions, g:ecrystal_extensions, 'force')
endif
function! ecrystal#SetSubtype() abort
if exists('b:ecrystal_subtype')
return
endif
let b:ecrystal_subtype = matchstr(substitute(expand('%:t'), '\c\%(\.ecr\)\+$', '', ''), '\.\zs\w\+\%(\ze+\w\+\)\=$')
let b:ecrystal_subtype = get(s:ecrystal_extensions, b:ecrystal_subtype, b:ecrystal_subtype)
if b:ecrystal_subtype ==# ''
let b:ecrystal_subtype = get(g:, 'ecrystal_default_subtype', 'html')
endif
if b:ecrystal_subtype !=# ''
exec 'setlocal filetype=ecrystal.' . b:ecrystal_subtype
exec 'setlocal syntax=ecrystal.' . b:ecrystal_subtype
endif
endfunction
" vim: sw=2 sts=2 et:
endif

View File

@@ -1,385 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elm') == -1
let s:errors = []
function! s:elmOracle(...) abort
let l:project = finddir('elm-stuff/..', '.;')
if len(l:project) == 0
echoerr '`elm-stuff` not found! run `elm-package install` for autocomplete.'
return []
endif
let l:filename = expand('%:p')
if a:0 == 0
let l:oldiskeyword = &iskeyword
" Some non obvious values used in 'iskeyword':
" @ = all alpha
" 48-57 = numbers 0 to 9
" @-@ = character @
" 124 = |
setlocal iskeyword=@,48-57,@-@,_,-,~,!,#,$,%,&,*,+,=,<,>,/,?,.,\\,124,^
let l:word = expand('<cword>')
let &iskeyword = l:oldiskeyword
else
let l:word = a:1
endif
let l:infos = elm#Oracle(l:filename, l:word)
if v:shell_error != 0
call elm#util#EchoError("elm-oracle failed:\n\n", l:infos)
return []
endif
let l:d = split(l:infos, '\n')
if len(l:d) > 0
return elm#util#DecodeJSON(l:d[0])
endif
return []
endf
" Vim command to format Elm files with elm-format
function! elm#Format() abort
" check for elm-format
if elm#util#CheckBin('elm-format', 'https://github.com/avh4/elm-format') ==# ''
return
endif
" save cursor position, folds and many other things
let l:curw = {}
try
mkview!
catch
let l:curw = winsaveview()
endtry
" save our undo file to be restored after we are done.
let l:tmpundofile = tempname()
exe 'wundo! ' . l:tmpundofile
" write current unsaved buffer to a temporary file
let l:tmpname = tempname() . '.elm'
call writefile(getline(1, '$'), l:tmpname)
" call elm-format on the temporary file
let l:out = system('elm-format ' . l:tmpname . ' --output ' . l:tmpname)
" if there is no error
if v:shell_error == 0
try | silent undojoin | catch | endtry
" replace current file with temp file, then reload buffer
let l:old_fileformat = &fileformat
call rename(l:tmpname, expand('%'))
silent edit!
let &fileformat = l:old_fileformat
let &syntax = &syntax
elseif g:elm_format_fail_silently == 0
call elm#util#EchoLater('EchoError', 'elm-format:', l:out)
endif
" save our undo history
silent! exe 'rundo ' . l:tmpundofile
call delete(l:tmpundofile)
" restore our cursor/windows positions, folds, etc..
if empty(l:curw)
silent! loadview
else
call winrestview(l:curw)
endif
endf
" Query elm-oracle and echo the type and docs for the word under the cursor.
function! elm#ShowDocs() abort
" check for the elm-oracle binary
if elm#util#CheckBin('elm-oracle', 'https://github.com/elmcast/elm-oracle') ==# ''
return
endif
let l:response = s:elmOracle()
if len(l:response) > 0
let l:info = l:response[0]
redraws! | echohl Identifier | echon l:info.fullName | echohl None | echon ' : ' | echohl Function | echon l:info.signature | echohl None | echon "\n\n" . l:info.comment
else
call elm#util#Echo('elm-oracle:', '...no match found')
endif
endf
" Query elm-oracle and open the docs for the word under the cursor.
function! elm#BrowseDocs() abort
" check for the elm-oracle binary
if elm#util#CheckBin('elm-oracle', 'https://github.com/elmcast/elm-oracle') ==# ''
return
endif
let l:response = s:elmOracle()
if len(l:response) > 0
let l:info = l:response[0]
call elm#util#OpenBrowser(l:info.href)
else
call elm#util#Echo('elm-oracle:', '...no match found')
endif
endf
function! elm#Syntastic(input) abort
let l:fixes = []
let l:bin = 'elm-make'
let l:format = '--report=json'
let l:input = shellescape(a:input)
let l:output = '--output=' . shellescape(syntastic#util#DevNull())
let l:command = l:bin . ' ' . l:format . ' ' . l:input . ' ' . l:output
let l:reports = s:ExecuteInRoot(l:command)
for l:report in split(l:reports, '\n')
if l:report[0] ==# '['
for l:error in elm#util#DecodeJSON(l:report)
if g:elm_syntastic_show_warnings == 0 && l:error.type ==? 'warning'
else
if a:input == l:error.file
call add(s:errors, l:error)
call add(l:fixes, {'filename': l:error.file,
\'valid': 1,
\'bufnr': bufnr('%'),
\'type': (l:error.type ==? 'error') ? 'E' : 'W',
\'lnum': l:error.region.start.line,
\'col': l:error.region.start.column,
\'text': l:error.overview})
endif
endif
endfor
endif
endfor
return l:fixes
endf
function! elm#Build(input, output, show_warnings) abort
let s:errors = []
let l:fixes = []
let l:rawlines = []
let l:bin = 'elm-make'
let l:format = '--report=json'
let l:input = shellescape(a:input)
let l:output = '--output=' . shellescape(a:output)
let l:command = l:bin . ' ' . l:format . ' ' . l:input . ' ' . l:output
let l:reports = s:ExecuteInRoot(l:command)
for l:report in split(l:reports, '\n')
if l:report[0] ==# '['
for l:error in elm#util#DecodeJSON(l:report)
if a:show_warnings == 0 && l:error.type ==? 'warning'
else
call add(s:errors, l:error)
call add(l:fixes, {'filename': l:error.file,
\'valid': 1,
\'type': (l:error.type ==? 'error') ? 'E' : 'W',
\'lnum': l:error.region.start.line,
\'col': l:error.region.start.column,
\'text': l:error.overview})
endif
endfor
else
call add(l:rawlines, l:report)
endif
endfor
let l:details = join(l:rawlines, "\n")
let l:lines = split(l:details, "\n")
if !empty(l:lines)
let l:overview = l:lines[0]
else
let l:overview = ''
endif
if l:details ==# '' || l:details =~? '^Successfully.*'
else
call add(s:errors, {'overview': l:details, 'details': l:details})
call add(l:fixes, {'filename': expand('%', 1),
\'valid': 1,
\'type': 'E',
\'lnum': 0,
\'col': 0,
\'text': l:overview})
endif
return l:fixes
endf
" Make the given file, or the current file if none is given.
function! elm#Make(...) abort
if elm#util#CheckBin('elm-make', 'http://elm-lang.org/install') ==# ''
return
endif
call elm#util#Echo('elm-make:', 'building...')
let l:input = (a:0 == 0) ? expand('%:p') : a:1
let l:fixes = elm#Build(l:input, g:elm_make_output_file, g:elm_make_show_warnings)
if len(l:fixes) > 0
call elm#util#EchoWarning('', 'found ' . len(l:fixes) . ' errors')
call setqflist(l:fixes, 'r')
cwindow
if get(g:, 'elm_jump_to_error', 1)
ll 1
endif
else
call elm#util#EchoSuccess('', 'Sucessfully compiled')
call setqflist([])
cwindow
endif
endf
" Show the detail of the current error in the quickfix window.
function! elm#ErrorDetail() abort
if !empty(filter(tabpagebuflist(), 'getbufvar(v:val, "&buftype") ==? "quickfix"'))
exec ':copen'
let l:linenr = line('.')
exec ':wincmd p'
if len(s:errors) > 0
let l:detail = s:errors[l:linenr-1].details
if l:detail ==# ''
let l:detail = s:errors[l:linenr-1].overview
endif
echo l:detail
endif
endif
endf
" Open the elm repl in a subprocess.
function! elm#Repl() abort
" check for the elm-repl binary
if elm#util#CheckBin('elm-repl', 'http://elm-lang.org/install') ==# ''
return
endif
if has('nvim')
term('elm-repl')
else
!elm-repl
endif
endf
function! elm#Oracle(filepath, word) abort
let l:bin = 'elm-oracle'
let l:filepath = shellescape(a:filepath)
let l:word = shellescape(a:word)
let l:command = l:bin . ' ' . l:filepath . ' ' . l:word
return s:ExecuteInRoot(l:command)
endfunction
let s:fullComplete = ''
" Complete the current token using elm-oracle
function! elm#Complete(findstart, base) abort
" a:base is unused, but the callback function for completion expects 2 arguments
if a:findstart
let l:line = getline('.')
let l:idx = col('.') - 1
let l:start = 0
while l:idx > 0 && l:line[l:idx - 1] =~# '[a-zA-Z0-9_\.]'
if l:line[l:idx - 1] ==# '.' && l:start == 0
let l:start = l:idx
endif
let l:idx -= 1
endwhile
if l:start == 0
let l:start = l:idx
endif
let s:fullComplete = l:line[l:idx : col('.')-2]
return l:start
else
" check for the elm-oracle binary
if elm#util#CheckBin('elm-oracle', 'https://github.com/elmcast/elm-oracle') ==# ''
return []
endif
let l:res = []
let l:response = s:elmOracle(s:fullComplete)
let l:detailed = get(g:, 'elm_detailed_complete', 0)
for l:r in l:response
let l:menu = ''
if l:detailed
let l:menu = ': ' . l:r.signature
endif
call add(l:res, {'word': l:r.name, 'menu': l:menu})
endfor
return l:res
endif
endf
" If the current buffer contains a consoleRunner, run elm-test with it.
" Otherwise run elm-test in the root of your project which deafults to
" running 'elm-test tests/TestRunner'.
function! elm#Test() abort
if elm#util#CheckBin('elm-test', 'https://github.com/rtfeldman/node-elm-test') ==# ''
return
endif
if match(getline(1, '$'), 'consoleRunner') < 0
let l:out = s:ExecuteInRoot('elm-test')
call elm#util#EchoSuccess('elm-test', l:out)
else
let l:filepath = shellescape(expand('%:p'))
let l:out = s:ExecuteInRoot('elm-test ' . l:filepath)
call elm#util#EchoSuccess('elm-test', l:out)
endif
endf
" Returns the closest parent with an elm-package.json file.
function! elm#FindRootDirectory() abort
let l:elm_root = getbufvar('%', 'elmRoot')
if empty(l:elm_root)
let l:current_file = expand('%:p')
let l:dir_current_file = fnameescape(fnamemodify(l:current_file, ':h'))
let l:old_match = findfile('elm-package.json', l:dir_current_file . ';')
let l:new_match = findfile('elm.json', l:dir_current_file . ';')
if !empty(l:new_match)
let l:elm_root = fnamemodify(l:new_match, ':p:h')
elseif !empty(l:old_match)
let l:elm_root = fnamemodify(l:old_match, ':p:h')
else
let l:elm_root = ''
endif
if !empty(l:elm_root)
call setbufvar('%', 'elmRoot', l:elm_root)
endif
endif
return l:elm_root
endfunction
" Executes a command in the project directory.
function! s:ExecuteInRoot(cmd) abort
let l:cd = exists('*haslocaldir') && haslocaldir() ? 'lcd ' : 'cd '
let l:current_dir = getcwd()
let l:root_dir = elm#FindRootDirectory()
try
execute l:cd . fnameescape(l:root_dir)
let l:out = system(a:cmd)
finally
execute l:cd . fnameescape(l:current_dir)
endtry
return l:out
endfunction
endif

View File

@@ -1,184 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elm') == -1
" IsWin returns 1 if current OS is Windows or 0 otherwise
fun! elm#util#IsWin() abort
let l:win = ['win16', 'win32', 'win32unix', 'win64', 'win95']
for l:w in l:win
if (has(l:w))
return 1
endif
endfor
return 0
endf
fun! elm#util#CheckBin(bin, url) abort
let l:binpath = substitute(a:bin, '^\s*\(.\{-}\)\s*$', '\1', '')
if executable(l:binpath)
return l:binpath
endif
call elm#util#EchoWarning('elm-vim:', 'could not find ' . l:binpath . ' [' . a:url . ']')
return ''
endf
" Determines the browser command to use
fun! s:get_browser_command() abort
let l:elm_browser_command = get(g:, 'elm_browser_command', '')
if l:elm_browser_command ==? ''
if elm#util#IsWin()
let l:elm_browser_command = '!start rundll32 url.dll,FileProtocolHandler %URL%'
elseif has('mac') || has('macunix') || has('gui_macvim') || system('uname') =~? '^darwin'
let l:elm_browser_command = 'open %URL%'
elseif executable('xdg-open')
let l:elm_browser_command = 'xdg-open %URL%'
elseif executable('firefox')
let l:elm_browser_command = 'firefox %URL% &'
else
let l:elm_browser_command = ''
endif
endif
return l:elm_browser_command
endf
" OpenBrowser opens a url in the default browser
fun! elm#util#OpenBrowser(url) abort
let l:cmd = s:get_browser_command()
if len(l:cmd) == 0
redraw
echohl WarningMsg
echo "It seems that you don't have general web browser. Open URL below."
echohl None
echo a:url
return
endif
if l:cmd =~? '^!'
let l:cmd = substitute(l:cmd, '%URL%', '\=shellescape(a:url)', 'g')
silent! exec l:cmd
elseif l:cmd =~# '^:[A-Z]'
let l:cmd = substitute(l:cmd, '%URL%', '\=a:url', 'g')
exec l:cmd
else
let l:cmd = substitute(l:cmd, '%URL%', '\=shellescape(a:url)', 'g')
call system(l:cmd)
endif
endf
" DecodeJSON decodes a string of json into a viml object
fun! elm#util#DecodeJSON(s) abort
let l:true = 1
let l:false = 0
let l:null = 0
return eval(a:s)
endf
" Remove ANSI escape characters used for highlighting purposes
fun! s:strip_color(msg) abort
return substitute(a:msg, '\e\[[0-9;]\+[mK]', '', 'g')
endf
" Print functions
fun! elm#util#Echo(title, msg) abort
redraws! | echon a:title . ' ' | echohl Identifier | echon s:strip_color(a:msg) | echohl None
endf
fun! elm#util#EchoSuccess(title, msg) abort
redraws! | echon a:title . ' ' | echohl Function | echon s:strip_color(a:msg) | echohl None
endf
fun! elm#util#EchoWarning(title, msg) abort
redraws! | echon a:title . ' ' | echohl WarningMsg | echon s:strip_color(a:msg) | echohl None
endf
fun! elm#util#EchoError(title, msg) abort
redraws! | echon a:title . ' ' | echohl ErrorMsg | echon s:strip_color(a:msg) | echohl None
endf
fun! elm#util#EchoLater(func_name, title, msg) abort
let s:echo_func_name = a:func_name
let s:echo_title = a:title
let s:echo_msg = a:msg
endf
fun! elm#util#EchoStored() abort
if exists('s:echo_func_name') && exists('s:echo_title') && exists('s:echo_msg')
call elm#util#{s:echo_func_name}(s:echo_title, s:echo_msg)
unlet s:echo_func_name
unlet s:echo_title
unlet s:echo_msg
endif
endf
function! elm#util#GoToModule(name)
if empty(a:name) | return | endif
if empty(matchstr(a:name, '^Native\.'))
let l:extension = '.elm'
else
let l:extension = '.js'
endif
let l:rel_path = substitute(a:name, '\.', '/', 'g') . l:extension
let l:root = elm#FindRootDirectory()
let l:module_file = s:findLocalModule(l:rel_path, l:root)
if !filereadable(l:module_file)
let l:module_file = s:findDependencyModule(l:rel_path, l:root)
endif
if filereadable(l:module_file)
exec 'edit ' . fnameescape(l:module_file)
else
return s:error("Can't find module \"" . a:name . "\"")
endif
endfunction
function! s:findLocalModule(rel_path, root)
let l:old_match = findfile('elm-package.json', a:root . ';')
let l:new_match = findfile('elm.json', a:root . ';')
if !empty(l:new_match)
let l:package_json = l:new_match
elseif !empty(l:old_match)
let l:package_json = l:old_match
endif
if exists('*json_decode')
let l:package = json_decode(readfile(l:package_json))
let l:source_roots = l:package['source-directories']
else
" This is a fallback for vim's which do not support json_decode.
" It simply only looks in the 'src' subdirectory and fails otherwise.
let l:source_roots = ['src']
end
for l:source_root in l:source_roots
let l:file_path = a:root . '/' . l:source_root . '/' . a:rel_path
if !filereadable(l:file_path)
continue
endif
return l:file_path
endfor
endfunction
function! s:findDependencyModule(rel_path, root)
" If we are a dependency ourselves, we need to check our siblings.
" This is because elm package doesn't install dependencies recursively.
let l:root = substitute(a:root, '\/elm-stuff/packages.\+$', '', '')
" We naively craws the dependencies dir for any fitting module name.
" If it exists, we'll find it. If multiple filenames match,
" there's a chance we return the wrong one.
let l:module_paths = glob(l:root . '/elm-stuff/packages/**/' . a:rel_path, 0, 1)
if len(l:module_paths) > 0
return l:module_paths[0]
endif
endfunction
" Using the built-in :echoerr prints a stacktrace, which isn't that nice.
" From: https://github.com/moll/vim-node/blob/master/autoload/node.vim
function! s:error(msg)
echohl ErrorMsg
echomsg a:msg
echohl NONE
let v:errmsg = a:msg
endfunction
endif

View File

@@ -1,25 +1,43 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'fish') == -1 if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'fish') == -1
function! fish#Indent() function! fish#Indent()
let l:shiftwidth = shiftwidth()
let l:prevlnum = prevnonblank(v:lnum - 1) let l:prevlnum = prevnonblank(v:lnum - 1)
if l:prevlnum ==# 0 if l:prevlnum ==# 0
return 0 return 0
endif endif
let l:indent = 0
let l:prevline = getline(l:prevlnum) let l:prevline = getline(l:prevlnum)
if l:prevline =~# '\v^\s*switch>'
return indent(l:prevlnum) + l:shiftwidth
elseif l:prevline =~# '\v^\s*%(begin|if|else|while|for|function|case)>'
let l:indent = l:shiftwidth
endif
let l:line = getline(v:lnum) let l:line = getline(v:lnum)
if l:line =~# '\v^\s*end>' let l:shiftwidth = shiftwidth()
return indent(l:prevlnum) - (l:indent ==# 0 ? l:shiftwidth : l:indent) let l:previndent = indent(l:prevlnum)
elseif l:line =~# '\v^\s*%(case|else)>' let l:indent = l:previndent
return indent(l:prevlnum) - l:shiftwidth if l:prevline =~# '\v^\s*%(begin|if|else|while|for|function|switch|case)>'
let l:indent += l:shiftwidth
endif endif
return indent(l:prevlnum) + l:indent if l:line =~# '\v^\s*end>'
let l:indent -= l:shiftwidth
" If we're inside a case, dedent twice because it ends the switch.
if l:prevline =~# '\v^\s*case>'
" Previous line starts the case.
let l:indent -= l:shiftwidth
else
" Scan back to a dedented line to find whether we're in a case.
let l:i = l:prevlnum
while l:i >= 1 && indent(l:i) >= l:previndent
let l:i = prevnonblank(l:i - 1)
endwhile
if indent(l:i) < l:previndent && getline(l:i) =~# '\v^\s*case>'
let l:indent -= l:shiftwidth
endif
endif
elseif l:line =~# '\v^\s*else>'
let l:indent -= l:shiftwidth
elseif l:prevline !~# '\v^\s*switch>' && l:line =~# '\v^\s*case>'
let l:indent -= l:shiftwidth
endif
if l:indent < 0
return 0
endif
return l:indent
endfunction endfunction
function! fish#Format() function! fish#Format()
@@ -54,7 +72,7 @@ function! fish#Complete(findstart, base)
let l:completions = let l:completions =
\ system('fish -c "complete -C'.shellescape(a:base).'"') \ system('fish -c "complete -C'.shellescape(a:base).'"')
let l:cmd = substitute(a:base, '\v\S+$', '', '') let l:cmd = substitute(a:base, '\v\S+$', '', '')
for l:line in split(l:completions, '\n') for l:line in filter(split(l:completions, '\n'), 'len(v:val)')
let l:tokens = split(l:line, '\t') let l:tokens = split(l:line, '\t')
call add(l:results, {'word': l:cmd.l:tokens[0], call add(l:results, {'word': l:cmd.l:tokens[0],
\'abbr': l:tokens[0], \'abbr': l:tokens[0],

517
autoload/fsharp.vim Normal file
View 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

View File

@@ -55,12 +55,19 @@ 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
function! go#config#TermEnabled() abort function! go#config#TermEnabled() abort
return has('nvim') && get(g:, 'go_term_enabled', 0) " nvim always support
" vim will support if terminal feature exists
let l:support = has('nvim') || has('terminal')
return support && get(g:, 'go_term_enabled', 0)
endfunction endfunction
function! go#config#SetTermEnabled(value) abort function! go#config#SetTermEnabled(value) abort
@@ -84,7 +91,18 @@ function! go#config#StatuslineDuration() abort
endfunction endfunction
function! go#config#SnippetEngine() abort function! go#config#SnippetEngine() abort
return get(g:, 'go_snippet_engine', 'automatic') let l:engine = get(g:, 'go_snippet_engine', 'automatic')
if l:engine is? "automatic"
if get(g:, 'did_plugin_ultisnips') is 1
let l:engine = 'ultisnips'
elseif get(g:, 'loaded_neosnippet') is 1
let l:engine = 'neosnippet'
elseif get(g:, 'loaded_minisnip') is 1
let l:engine = 'minisnip'
endif
endif
return l:engine
endfunction endfunction
function! go#config#PlayBrowserCommand() abort function! go#config#PlayBrowserCommand() abort
@@ -151,30 +169,13 @@ function! go#config#SetGuruScope(scope) abort
endif endif
endfunction endfunction
function! go#config#GocodeUnimportedPackages() abort
return get(g:, 'go_gocode_unimported_packages', 0)
endfunction
let s:sock_type = (has('win32') || has('win64')) ? 'tcp' : 'unix'
function! go#config#GocodeSocketType() abort
return get(g:, 'go_gocode_socket_type', s:sock_type)
endfunction
function! go#config#GocodeProposeBuiltins() abort
return get(g:, 'go_gocode_propose_builtins', 1)
endfunction
function! go#config#GocodeProposeSource() abort
return get(g:, 'go_gocode_propose_source', 0)
endfunction
function! go#config#EchoCommandInfo() abort function! go#config#EchoCommandInfo() abort
return get(g:, 'go_echo_command_info', 1) return get(g:, 'go_echo_command_info', 1)
endfunction endfunction
function! go#config#DocUrl() abort function! go#config#DocUrl() abort
let godoc_url = get(g:, 'go_doc_url', 'https://godoc.org') let godoc_url = get(g:, 'go_doc_url', 'https://pkg.go.dev')
if godoc_url isnot 'https://godoc.org' if godoc_url isnot 'https://pkg.go.dev'
" strip last '/' character if available " strip last '/' character if available
let last_char = strlen(godoc_url) - 1 let last_char = strlen(godoc_url) - 1
if godoc_url[last_char] == '/' if godoc_url[last_char] == '/'
@@ -252,6 +253,10 @@ function! go#config#AddtagsTransform() abort
return get(g:, 'go_addtags_transform', "snakecase") return get(g:, 'go_addtags_transform', "snakecase")
endfunction endfunction
function! go#config#AddtagsSkipUnexported() abort
return get(g:, 'go_addtags_skip_unexported', 0)
endfunction
function! go#config#TemplateAutocreate() abort function! go#config#TemplateAutocreate() abort
return get(g:, "go_template_autocreate", 1) return get(g:, "go_template_autocreate", 1)
endfunction endfunction
@@ -265,23 +270,11 @@ function! go#config#MetalinterCommand() abort
endfunction endfunction
function! go#config#MetalinterAutosaveEnabled() abort function! go#config#MetalinterAutosaveEnabled() abort
let l:default_enabled = ["vet", "golint"] return get(g:, "go_metalinter_autosave_enabled", ["govet", "golint"])
if go#config#MetalinterCommand() == "golangci-lint"
let l:default_enabled = ["govet", "golint"]
endif
return get(g:, "go_metalinter_autosave_enabled", default_enabled)
endfunction endfunction
function! go#config#MetalinterEnabled() abort function! go#config#MetalinterEnabled() abort
let l:default_enabled = ["vet", "golint", "errcheck"] return get(g:, "go_metalinter_enabled", ["vet", "golint", "errcheck"])
if go#config#MetalinterCommand() == "golangci-lint"
let l:default_enabled = ["govet", "golint"]
endif
return get(g:, "go_metalinter_enabled", default_enabled)
endfunction endfunction
function! go#config#GolintBin() abort function! go#config#GolintBin() abort
@@ -308,6 +301,10 @@ function! go#config#FmtAutosave() abort
return get(g:, "go_fmt_autosave", 1) return get(g:, "go_fmt_autosave", 1)
endfunction endfunction
function! go#config#ImportsAutosave() abort
return get(g:, 'go_imports_autosave', 0)
endfunction
function! go#config#SetFmtAutosave(value) abort function! go#config#SetFmtAutosave(value) abort
let g:go_fmt_autosave = a:value let g:go_fmt_autosave = a:value
endfunction endfunction
@@ -352,8 +349,12 @@ function! go#config#FmtCommand() abort
return get(g:, "go_fmt_command", "gofmt") return get(g:, "go_fmt_command", "gofmt")
endfunction endfunction
function! go#config#ImportsMode() abort
return get(g:, "go_imports_mode", "goimports")
endfunction
function! go#config#FmtOptions() abort function! go#config#FmtOptions() abort
return get(g:, "go_fmt_options", {}) return get(b:, "go_fmt_options", get(g:, "go_fmt_options", {}))
endfunction endfunction
function! go#config#FmtFailSilently() abort function! go#config#FmtFailSilently() abort
@@ -368,13 +369,13 @@ function! go#config#PlayOpenBrowser() abort
return get(g:, "go_play_open_browser", 1) return get(g:, "go_play_open_browser", 1)
endfunction endfunction
function! go#config#GorenameCommand() abort function! go#config#RenameCommand() abort
" delegate to go#config#GorenameBin for backwards compatability. " delegate to go#config#GorenameBin for backwards compatability.
return get(g:, "go_gorename_command", go#config#GorenameBin()) return get(g:, "go_rename_command", go#config#GorenameBin())
endfunction endfunction
function! go#config#GorenameBin() abort function! go#config#GorenameBin() abort
return get(g:, "go_gorename_bin", "gorename") return get(g:, "go_gorename_bin", "gopls")
endfunction endfunction
function! go#config#GorenamePrefill() abort function! go#config#GorenamePrefill() abort
@@ -480,6 +481,10 @@ function! go#config#HighlightDebug() abort
return get(g:, 'go_highlight_debug', 1) return get(g:, 'go_highlight_debug', 1)
endfunction endfunction
function! go#config#DebugBreakpointSignText() abort
return get(g:, 'go_debug_breakpoint_sign_text', '>')
endfunction
function! go#config#FoldEnable(...) abort function! go#config#FoldEnable(...) abort
if a:0 > 0 if a:0 > 0
return index(go#config#FoldEnable(), a:1) > -1 return index(go#config#FoldEnable(), a:1) > -1
@@ -495,6 +500,10 @@ function! go#config#CodeCompletionEnabled() abort
return get(g:, "go_code_completion_enabled", 1) return get(g:, "go_code_completion_enabled", 1)
endfunction endfunction
function! go#config#CodeCompletionIcase() abort
return get(g:, "go_code_completion_icase", 0)
endfunction
function! go#config#Updatetime() abort function! go#config#Updatetime() abort
let go_updatetime = get(g:, 'go_updatetime', 800) let go_updatetime = get(g:, 'go_updatetime', 800)
return go_updatetime == 0 ? &updatetime : go_updatetime return go_updatetime == 0 ? &updatetime : go_updatetime
@@ -504,26 +513,57 @@ function! go#config#ReferrersMode() abort
return get(g:, 'go_referrers_mode', 'gopls') return get(g:, 'go_referrers_mode', 'gopls')
endfunction endfunction
function! go#config#ImplementsMode() abort
return get(g:, 'go_implements_mode', 'guru')
endfunction
function! go#config#GoplsCompleteUnimported() abort function! go#config#GoplsCompleteUnimported() abort
return get(g:, 'go_gopls_complete_unimported', 0) return get(g:, 'go_gopls_complete_unimported', v:null)
endfunction endfunction
function! go#config#GoplsDeepCompletion() abort function! go#config#GoplsDeepCompletion() abort
return get(g:, 'go_gopls_deep_completion', 1) return get(g:, 'go_gopls_deep_completion', v:null)
endfunction endfunction
function! go#config#GoplsFuzzyMatching() abort function! go#config#GoplsMatcher() abort
return get(g:, 'go_gopls_fuzzy_matching', 1) if !exists('g:go_gopls_matcher') && get(g:, 'g:go_gopls_fuzzy_matching', v:null) is 1
return 'fuzzy'
endif
return get(g:, 'go_gopls_matcher', v:null)
endfunction
function! go#config#GoplsStaticCheck() abort
return get(g:, 'go_gopls_staticcheck', v:null)
endfunction endfunction
function! go#config#GoplsUsePlaceholders() abort function! go#config#GoplsUsePlaceholders() abort
return get(g:, 'go_gopls_use_placeholders', 0) return get(g:, 'go_gopls_use_placeholders', v:null)
endfunction
function! go#config#GoplsTempModfile() abort
return get(g:, 'go_gopls_temp_modfile', v:null)
endfunction
function! go#config#GoplsAnalyses() abort
return get(g:, 'go_gopls_analyses', v:null)
endfunction
function! go#config#GoplsLocal() abort
return get(g:, 'go_gopls_local', v:null)
endfunction endfunction
function! go#config#GoplsEnabled() abort function! go#config#GoplsEnabled() abort
return get(g:, 'go_gopls_enabled', 1) return get(g:, 'go_gopls_enabled', 1)
endfunction endfunction
function! go#config#DiagnosticsEnabled() abort
return get(g:, 'go_diagnostics_enabled', 0)
endfunction
function! go#config#GoplsOptions() abort
return get(g:, 'go_gopls_options', ['-remote=auto'])
endfunction
" Set the default value. A value of "1" is a shortcut for this, for " Set the default value. A value of "1" is a shortcut for this, for
" compatibility reasons. " compatibility reasons.
if exists("g:go_gorename_prefill") && g:go_gorename_prefill == 1 if exists("g:go_gorename_prefill") && g:go_gorename_prefill == 1

View File

@@ -1,13 +1,36 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1 if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
" Vim plugin " 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 " Language: GraphQL
" Maintainer: Jon Parise <jon@indelible.org> " Maintainer: Jon Parise <jon@indelible.org>
if exists('g:autoloaded_graphql') function! graphql#has_syntax_group(group) abort
finish try
endif silent execute 'silent highlight ' . a:group
let g:autoloaded_graphql = 1 catch
return v:false
endtry
return v:true
endfunction
function! graphql#javascript_tags() abort function! graphql#javascript_tags() abort
return get(g:, 'graphql_javascript_tags', ['gql', 'graphql', 'Relay.QL']) return get(g:, 'graphql_javascript_tags', ['gql', 'graphql', 'Relay.QL'])

129
autoload/jsonnet.vim Normal file
View File

@@ -0,0 +1,129 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'jsonnet') == -1
" Options.
if !exists("g:jsonnet_command")
let g:jsonnet_command = "jsonnet"
endif
if !exists("g:jsonnet_fmt_command")
let g:jsonnet_fmt_command = "jsonnetfmt"
endif
if !exists('g:jsonnet_fmt_options')
let g:jsonnet_fmt_options = ''
endif
if !exists('g:jsonnet_fmt_fail_silently')
let g:jsonnet_fmt_fail_silently = 1
endif
" System runs a shell command. It will reset the shell to /bin/sh for Unix-like
" systems if it is executable.
function! jsonnet#System(str, ...)
let l:shell = &shell
if executable('/bin/sh')
let &shell = '/bin/sh'
endif
try
let l:output = call("system", [a:str] + a:000)
return l:output
finally
let &shell = l:shell
endtry
endfunction
" CheckBinPath checks whether the given binary exists or not and returns the
" path of the binary. It returns an empty string if it doesn't exists.
function! jsonnet#CheckBinPath(binName)
if executable(a:binName)
if exists('*exepath')
let binPath = exepath(a:binName)
return binPath
else
return a:binName
endif
else
echo "vim-jsonnet: could not find '" . a:binName . "'."
return ""
endif
endfunction
" Format calls `jsonnetfmt ... ` on the file and replaces the file with the
" auto formatted version. Does some primitive error checking of the
" jsonnetfmt command too.
function! jsonnet#Format()
" Save cursor position and many other things.
let l:curw = winsaveview()
" Write current unsaved buffer to a temp file
let l:tmpname = tempname()
call writefile(getline(1, '$'), l:tmpname)
" get the command first so we can test it
let l:binName = g:jsonnet_fmt_command
" check if the user has installed command binary.
let l:binPath = jsonnet#CheckBinPath(l:binName)
if empty(l:binPath)
return
endif
" Populate the final command.
let l:command = l:binPath
" The inplace modification is default. Makes file management easier
let l:command = l:command . ' -i '
let l:command = l:command . g:jsonnet_fmt_options
" Execute the compiled jsonnetfmt command and save the return value
let l:out = jsonnet#System(l:command . " " . l:tmpname)
let l:errorCode = v:shell_error
if l:errorCode == 0
" The format command succeeded Move the formatted temp file over the
" current file and restore other settings
" stop undo recording
try | silent undojoin | catch | endtry
let l:originalFileFormat = &fileformat
if exists("*getfperm")
" save old file permissions
let l:originalFPerm = getfperm(expand('%'))
endif
" Overwrite current file with the formatted temp file
call rename(l:tmpname, expand('%'))
if exists("*setfperm") && l:originalFPerm != ''
call setfperm(expand('%'), l:originalFPerm)
endif
" the file has been changed outside of vim, enable reedit
silent edit!
let &fileformat = l:originalFileFormat
let &syntax = &syntax
elseif g:jsonnet_fmt_fail_silently == 0
" FixMe: We could leverage the errors coming from the `jsonnetfmt` and
" give immediate feedback to the user at every save time.
" Our inspiration, vim-go, opens a new list below the current edit
" window and shows the errors (the output of the fmt command).
" We are not sure whether this is desired in the vim-jsonnet community
" or not. Nevertheless, this else block is a suitable place to benefit
" from the `jsonnetfmt` errors.
endif
" Restore our cursor/windows positions.
call winrestview(l:curw)
endfunction
endif

View File

@@ -1,20 +1,20 @@
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)
function! jsx_pretty#comment#update_commentstring(original) function! jsx_pretty#comment#update_commentstring(original)
let syn_current = s:syn_name(line('.'), col('.')) let line = getline(".")
let syn_start = s:syn_name(line('.'), 1) let col = col('.')
if line !~# '^\s*$' && line[: col - 1] =~# '^\s*$' " skip indent
let col = indent('.') + 1
endif
let syn_start = s:syn_name(line('.'), col)
let save_cursor = getcurpos() let save_cursor = getcurpos()
if syn_start =~? '^jsx' if syn_start =~? '^jsx'
let line = getline(".")
let start = len(matchstr(line, '^\s*'))
let syn_name = s:syn_name(line('.'), start + 1)
if line =~ '^\s*//' if line =~ '^\s*//'
let &l:commentstring = '// %s' let &l:commentstring = '// %s'
elseif s:syn_contains(line('.'), col('.'), 'jsxTaggedRegion') elseif s:syn_contains(line('.'), col, 'jsxTaggedRegion')
let &l:commentstring = '<!-- %s -->' let &l:commentstring = '<!-- %s -->'
elseif syn_name =~? '^jsxAttrib' elseif syn_start =~? '^jsxAttrib'
let &l:commentstring = '// %s' let &l:commentstring = '// %s'
else else
let &l:commentstring = '{/* %s */}' let &l:commentstring = '{/* %s */}'

View File

@@ -70,9 +70,9 @@ function s:is_jsx_element(syntax)
return a:syntax =~? 'jsxElement' return a:syntax =~? 'jsxElement'
endfunction endfunction
" Whether the specified syntax group is the jsxEscapeJs " Whether the specified syntax group is the jsxExpressionBlock
function s:is_jsx_escape(syntax) function s:is_jsx_expression(syntax)
return a:syntax =~? 'jsxEscapeJs' return a:syntax =~? 'jsxExpressionBlock'
endfunction endfunction
" Whether the specified syntax group is the jsxBraces " Whether the specified syntax group is the jsxBraces
@@ -191,7 +191,7 @@ endfunction
" - jsxRegion " - jsxRegion
" - jsxTaggedRegion " - jsxTaggedRegion
" - jsxElement " - jsxElement
" - jsxEscapeJs " - jsxExpressionBlock
" - Other " - Other
function s:syntax_context(lnum) function s:syntax_context(lnum)
let start_col = s:start_col(a:lnum) let start_col = s:start_col(a:lnum)
@@ -201,9 +201,9 @@ function s:syntax_context(lnum)
let i = 0 let i = 0
for syntax_name in reversed for syntax_name in reversed
" If the current line is jsxEscapeJs and not starts with jsxBraces " If the current line is jsxExpressionBlock and not starts with jsxBraces
if s:is_jsx_escape(syntax_name) if s:is_jsx_expression(syntax_name)
return 'jsxEscapeJs' return 'jsxExpressionBlock'
endif endif
if s:is_jsx_region(syntax_name) if s:is_jsx_region(syntax_name)
@@ -287,7 +287,7 @@ function! jsx_pretty#indent#get(js_indent)
endif endif
return s:jsx_indent_element(v:lnum) return s:jsx_indent_element(v:lnum)
elseif syntax_context == 'jsxEscapeJs' elseif syntax_context == 'jsxExpressionBlock'
let prev_lnum = s:prev_lnum(v:lnum) let prev_lnum = s:prev_lnum(v:lnum)
let prev_line = s:trim(getline(prev_lnum)) let prev_line = s:trim(getline(prev_lnum))

View File

@@ -1,30 +1,11 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'julia') == -1 if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'julia') == -1
function! julia#set_syntax_version(jvers) function! julia#set_syntax_version(jvers)
if &filetype != "julia" echo "The julia#set_syntax_version function is deprecated"
echo "Not a Julia file"
return
endif
syntax clear
let b:julia_syntax_version = a:jvers
set filetype=julia
endfunction endfunction
function! julia#toggle_deprecated_syntax() function! julia#toggle_deprecated_syntax()
if &filetype != "julia" echo "The julia#toggle_deprecated_syntax function is deprecated"
echo "Not a Julia file"
return
endif
syntax clear
let hd = get(b:, "julia_syntax_highlight_deprecated",
\ get(g:, "julia_syntax_highlight_deprecated", 0))
let b:julia_syntax_highlight_deprecated = hd ? 0 : 1
set filetype=julia
if b:julia_syntax_highlight_deprecated
echo "Highlighting of deprecated syntax enabled"
else
echo "Highlighting of deprecated syntax disabled"
endif
endfunction endfunction
if exists("loaded_matchit") if exists("loaded_matchit")

View File

@@ -1,7 +1,7 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'julia') == -1 if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'julia') == -1
" This file is autogenerated from the script 'generate_latex_symbols_table.jl' " This file is autogenerated from the script 'generate_latex_symbols_table.jl'
" The symbols are based on Julia version 1.3.0-DEV.263 " The symbols are based on Julia version 1.5.0-DEV.67
scriptencoding utf-8 scriptencoding utf-8
@@ -658,7 +658,9 @@ function! julia_latex_symbols#get_dict()
\ '\nequiv': '≢', \ '\nequiv': '≢',
\ '\Equiv': '≣', \ '\Equiv': '≣',
\ '\le': '≤', \ '\le': '≤',
\ '\leq': '≤',
\ '\ge': '≥', \ '\ge': '≥',
\ '\geq': '≥',
\ '\leqq': '≦', \ '\leqq': '≦',
\ '\geqq': '≧', \ '\geqq': '≧',
\ '\lneqq': '≨', \ '\lneqq': '≨',

744
autoload/ledger.vim Normal file
View 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
View 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
View 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

36
autoload/requirements.vim Normal file
View File

@@ -0,0 +1,36 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'requirements') == -1
" the Requirements File Format syntax support for Vim
" Version: 1.5.3
" Author: raimon <raimon49@hotmail.com>
" License: MIT LICENSE
" The MIT License (MIT)
"
" Copyright (c) 2015 raimon
"
" 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.
let s:save_cpo = &cpo
set cpo&vim
let &cpo = s:save_cpo
unlet s:save_cpo
" vim: et sw=4 ts=4 sts=4:
endif

View File

@@ -502,13 +502,8 @@ class VimRubyCompletion
return if rails_base == nil return if rails_base == nil
$:.push rails_base unless $:.index( rails_base ) $:.push rails_base unless $:.index( rails_base )
rails_config = rails_base + "config/" bootfile = rails_base + "config/boot.rb"
rails_lib = rails_base + "lib/" envfile = rails_base + "config/environment.rb"
$:.push rails_config unless $:.index( rails_config )
$:.push rails_lib unless $:.index( rails_lib )
bootfile = rails_config + "boot.rb"
envfile = rails_config + "environment.rb"
if File.exists?( bootfile ) && File.exists?( envfile ) if File.exists?( bootfile ) && File.exists?( envfile )
begin begin
require bootfile require bootfile

View File

@@ -501,7 +501,15 @@ function! s:SearchTestFunctionNameUnderCursor() abort
" Search the end of test function (closing brace) to ensure that the " Search the end of test function (closing brace) to ensure that the
" cursor position is within function definition " cursor position is within function definition
normal! % if maparg('<Plug>(MatchitNormalForward)') ==# ''
keepjumps normal! %
else
" Prefer matchit.vim official plugin to native % since the plugin
" provides better behavior than original % (#391)
" To load the plugin, run:
" :packadd matchit
execute 'keepjumps' 'normal' "\<Plug>(MatchitNormalForward)"
endif
if line('.') < cursor_line if line('.') < cursor_line
return '' return ''
endif endif
@@ -543,21 +551,20 @@ function! rust#Test(mods, winsize, all, options) abort
let saved = getpos('.') let saved = getpos('.')
try try
let func_name = s:SearchTestFunctionNameUnderCursor() let func_name = s:SearchTestFunctionNameUnderCursor()
if func_name ==# ''
echohl ErrorMsg
echomsg 'No test function was found under the cursor. Please add ! to command if you want to run all tests'
echohl None
return
endif
if a:options ==# ''
execute cmd . 'cargo test --manifest-path' manifest func_name
else
execute cmd . 'cargo test --manifest-path' manifest func_name a:options
endif
return
finally finally
call setpos('.', saved) call setpos('.', saved)
endtry endtry
if func_name ==# ''
echohl ErrorMsg
echomsg 'No test function was found under the cursor. Please add ! to command if you want to run all tests'
echohl None
return
endif
if a:options ==# ''
execute cmd . 'cargo test --manifest-path' manifest func_name
else
execute cmd . 'cargo test --manifest-path' manifest func_name a:options
endif
endfunction endfunction
" }}}1 " }}}1

View File

@@ -62,18 +62,19 @@ function! s:RustfmtWriteMode()
endif endif
endfunction endfunction
function! s:RustfmtConfig() function! s:RustfmtConfigOptions()
let l:rustfmt_toml = findfile('rustfmt.toml', expand('%:p:h') . ';') let l:rustfmt_toml = findfile('rustfmt.toml', expand('%:p:h') . ';')
if l:rustfmt_toml !=# '' if l:rustfmt_toml !=# ''
return '--config-path '.l:rustfmt_toml return '--config-path '.fnamemodify(l:rustfmt_toml, ":p")
endif endif
let l:_rustfmt_toml = findfile('.rustfmt.toml', expand('%:p:h') . ';') let l:_rustfmt_toml = findfile('.rustfmt.toml', expand('%:p:h') . ';')
if l:_rustfmt_toml !=# '' if l:_rustfmt_toml !=# ''
return '--config-path '.l:_rustfmt_toml return '--config-path '.fnamemodify(l:_rustfmt_toml, ":p")
endif endif
return '' " Default to edition 2018 in case no rustfmt.toml was found.
return '--edition 2018'
endfunction endfunction
function! s:RustfmtCommandRange(filename, line1, line2) function! s:RustfmtCommandRange(filename, line1, line2)
@@ -84,7 +85,7 @@ function! s:RustfmtCommandRange(filename, line1, line2)
let l:arg = {"file": shellescape(a:filename), "range": [a:line1, a:line2]} let l:arg = {"file": shellescape(a:filename), "range": [a:line1, a:line2]}
let l:write_mode = s:RustfmtWriteMode() let l:write_mode = s:RustfmtWriteMode()
let l:rustfmt_config = s:RustfmtConfig() let l:rustfmt_config = s:RustfmtConfigOptions()
" FIXME: When --file-lines gets to be stable, add version range checking " FIXME: When --file-lines gets to be stable, add version range checking
" accordingly. " accordingly.
@@ -98,14 +99,9 @@ function! s:RustfmtCommandRange(filename, line1, line2)
endfunction endfunction
function! s:RustfmtCommand() function! s:RustfmtCommand()
if g:rustfmt_emit_files let write_mode = g:rustfmt_emit_files ? '--emit=stdout' : '--write-mode=display'
let l:write_mode = "--emit=stdout" let config = s:RustfmtConfigOptions()
else return join([g:rustfmt_command, write_mode, config, g:rustfmt_options])
let l:write_mode = "--write-mode=display"
endif
" rustfmt will pick on the right config on its own due to the
" current directory change.
return g:rustfmt_command . " ". l:write_mode . " " . g:rustfmt_options
endfunction endfunction
function! s:DeleteLines(start, end) abort function! s:DeleteLines(start, end) abort

View File

@@ -1,26 +1,39 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'terraform') == -1 if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'terraform') == -1
let s:cpo_save = &cpoptions
set cpoptions&vim
" Ensure no conflict with arguments from the environment " Ensure no conflict with arguments from the environment
let $TF_CLI_ARGS_fmt='' let $TF_CLI_ARGS_fmt=''
function! terraform#fmt() function! terraform#fmt() abort
if !filereadable(expand('%:p')) " Save the view.
return let curw = winsaveview()
endif
let l:curw = winsaveview()
" Make a fake change so that the undo point is right. " Make a fake change so that the undo point is right.
normal! ix normal! ix
normal! "_x normal! "_x
" Execute `terraform fmt`, redirecting stderr to a temporary file.
let tmpfile = tempname()
let shellredir_save = &shellredir
let &shellredir = '>%s 2>'.tmpfile
silent execute '%!terraform fmt -no-color -' silent execute '%!terraform fmt -no-color -'
let &shellredir = shellredir_save
" If there was an error, undo any changes and show stderr.
if v:shell_error != 0 if v:shell_error != 0
let output = getline(1, '$')
silent undo silent undo
let output = readfile(tmpfile)
echo join(output, "\n") echo join(output, "\n")
endif endif
call winrestview(l:curw)
" Delete the temporary file, and restore the view.
call delete(tmpfile)
call winrestview(curw)
endfunction endfunction
function! terraform#align() function! terraform#align() abort
let p = '^.*=[^>]*$' let p = '^.*=[^>]*$'
if exists(':Tabularize') && getline('.') =~# '^.*=' && (getline(line('.')-1) =~# p || getline(line('.')+1) =~# p) if exists(':Tabularize') && getline('.') =~# '^.*=' && (getline(line('.')-1) =~# p || getline(line('.')+1) =~# p)
let column = strlen(substitute(getline('.')[0:col('.')],'[^=]','','g')) let column = strlen(substitute(getline('.')[0:col('.')],'[^=]','','g'))
@@ -31,8 +44,8 @@ function! terraform#align()
endif endif
endfunction endfunction
function! terraform#commands(ArgLead, CmdLine, CursorPos) function! terraform#commands(ArgLead, CmdLine, CursorPos) abort
let l:commands = [ let commands = [
\ 'apply', \ 'apply',
\ 'console', \ 'console',
\ 'destroy', \ 'destroy',
@@ -42,6 +55,8 @@ function! terraform#commands(ArgLead, CmdLine, CursorPos)
\ 'graph', \ 'graph',
\ 'import', \ 'import',
\ 'init', \ 'init',
\ 'login',
\ 'logout',
\ 'output', \ 'output',
\ 'plan', \ 'plan',
\ 'providers', \ 'providers',
@@ -58,7 +73,10 @@ function! terraform#commands(ArgLead, CmdLine, CursorPos)
\ 'push', \ 'push',
\ 'state' \ 'state'
\ ] \ ]
return join(l:commands, "\n") return join(commands, "\n")
endfunction endfunction
let &cpoptions = s:cpo_save
unlet s:cpo_save
endif endif

View File

@@ -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

View File

@@ -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

View File

@@ -10,8 +10,6 @@ execute join(['function! vital#_crystal#ColorEcho#import() abort', printf("retur
delfunction s:_SID delfunction s:_SID
" ___vital___ " ___vital___
scriptencoding utf-8 scriptencoding utf-8
let s:save_cpo = &cpo
set cpo&vim
function! s:_is_available() abort function! s:_is_available() abort
if has('gui_running') if has('gui_running')
@@ -185,7 +183,4 @@ function! s:echo(str) abort
call echorizer.echo() call echorizer.echo()
endfunction endfunction
let &cpo = s:save_cpo
unlet s:save_cpo
endif endif

View File

@@ -11,9 +11,6 @@ delfunction s:_SID
" ___vital___ " ___vital___
" Utilities for list. " Utilities for list.
let s:save_cpo = &cpo
set cpo&vim
function! s:pop(list) abort function! s:pop(list) abort
return remove(a:list, -1) return remove(a:list, -1)
endfunction endfunction
@@ -460,9 +457,6 @@ function! s:combinations(list, r) abort
return result return result
endfunction endfunction
let &cpo = s:save_cpo
unlet s:save_cpo
" vim:set et ts=2 sts=2 sw=2 tw=0: " vim:set et ts=2 sts=2 sw=2 tw=0:
endif endif

View File

@@ -11,9 +11,6 @@ delfunction s:_SID
" ___vital___ " ___vital___
" Utilities for string. " Utilities for string.
let s:save_cpo = &cpo
set cpo&vim
function! s:_vital_loaded(V) abort function! s:_vital_loaded(V) abort
let s:V = a:V let s:V = a:V
let s:L = s:V.import('Data.List') let s:L = s:V.import('Data.List')
@@ -624,8 +621,6 @@ function! s:split_posix_text(text, ...) abort
return split(text, newline, 1) return split(text, newline, 1)
endfunction endfunction
let &cpo = s:save_cpo
unlet s:save_cpo
" vim:set et ts=2 sts=2 sw=2 tw=0: " vim:set et ts=2 sts=2 sw=2 tw=0:
endif endif

View File

@@ -15,9 +15,6 @@ delfunction s:_SID
" FIXME: This module name should be Vital.System ? " FIXME: This module name should be Vital.System ?
" But the name has been already taken. " But the name has been already taken.
let s:save_cpo = &cpo
set cpo&vim
" FIXME: Unfortunately, can't use s:_vital_loaded() for this purpose. " FIXME: Unfortunately, can't use s:_vital_loaded() for this purpose.
" Because these variables are used when this script file is loaded. " Because these variables are used when this script file is loaded.
@@ -169,9 +166,6 @@ else
endif endif
let &cpo = s:save_cpo
unlet s:save_cpo
" vim:set et ts=2 sts=2 sw=2 tw=0: " vim:set et ts=2 sts=2 sw=2 tw=0:
endif endif

View File

@@ -9,8 +9,6 @@ endfunction
execute join(['function! vital#_crystal#Web#JSON#import() abort', printf("return map({'decode': '', '_vital_depends': '', '_vital_created': '', 'encode': '', '_vital_loaded': ''}, \"vital#_crystal#function('<SNR>%s_' . v:key)\")", s:_SID()), 'endfunction'], "\n") execute join(['function! vital#_crystal#Web#JSON#import() abort', printf("return map({'decode': '', '_vital_depends': '', '_vital_created': '', 'encode': '', '_vital_loaded': ''}, \"vital#_crystal#function('<SNR>%s_' . v:key)\")", s:_SID()), 'endfunction'], "\n")
delfunction s:_SID delfunction s:_SID
" ___vital___ " ___vital___
let s:save_cpo = &cpo
set cpo&vim
function! s:_true() abort function! s:_true() abort
return 1 return 1
@@ -174,9 +172,6 @@ function! s:_encode_dict(val, settings) abort
endfunction endfunction
" @vimlint(EVL102, 0, l:ns) " @vimlint(EVL102, 0, l:ns)
let &cpo = s:save_cpo
unlet s:save_cpo
" vim:set et ts=2 sts=2 sw=2 tw=0: " vim:set et ts=2 sts=2 sw=2 tw=0:
endif endif

View File

@@ -131,6 +131,7 @@ let attributes_value = {
\ 'label': ['Text', ''], \ 'label': ['Text', ''],
\ 'lang': ['Lang Tag', ''], \ 'lang': ['Lang Tag', ''],
\ 'list': ['ID', ''], \ 'list': ['ID', ''],
\ 'loading': ['eager/lazy', ''],
\ 'loop': ['Bool', ''], \ 'loop': ['Bool', ''],
\ 'low': ['Number', ''], \ 'low': ['Number', ''],
\ 'manifest': ['URL', ''], \ 'manifest': ['URL', ''],
@@ -588,11 +589,11 @@ let g:xmldata_html5 = {
\ ], \ ],
\ 'iframe': [ \ 'iframe': [
\ [], \ [],
\ extend(copy(global_attributes), {'src': [], 'srcdoc': [], 'name': [], 'width': [], 'height': [], 'sandbox': ['allow-same-origin', 'allow-forms', 'allow-scripts'], 'seamless': ['seamless', ''], 'referrerpolicy': referrerpolicy, 'allowfullscreen': [], 'allowpaymentrequest': [], 'allowpresentation': [], 'allowusermedia': []}) \ extend(copy(global_attributes), {'src': [], 'srcdoc': [], 'name': [], 'width': [], 'height': [], 'sandbox': ['allow-same-origin', 'allow-forms', 'allow-scripts'], 'seamless': ['seamless', ''], 'referrerpolicy': referrerpolicy, 'allowfullscreen': [], 'allowpaymentrequest': [], 'allowpresentation': [], 'allowusermedia': [], 'loading': ['eager', 'lazy']})
\ ], \ ],
\ 'img': [ \ 'img': [
\ [], \ [],
\ extend(copy(global_attributes), {'src': [], 'alt': [], 'height': [], 'width': [], 'decoding': ['async', 'sync', 'auto'], 'usemap': [], 'ismap': ['ismap', ''], 'referrerpolicy': referrerpolicy, 'crossorigin': ['anonymous', 'use-credentials']}) \ extend(copy(global_attributes), {'src': [], 'alt': [], 'height': [], 'width': [], 'decoding': ['async', 'sync', 'auto'], 'usemap': [], 'ismap': ['ismap', ''], 'referrerpolicy': referrerpolicy, 'crossorigin': ['anonymous', 'use-credentials'], 'loading': ['eager', 'lazy']})
\ ], \ ],
\ 'input': [ \ 'input': [
\ [], \ [],

319
build
View File

@@ -1,319 +0,0 @@
#!/usr/bin/env bash
set -E
DIRS="syntax indent compiler autoload ftplugin 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"
# 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 -L "https://codeload.github.com/$repo/tar.gz/${branch:-master}" | tar -zx -C "$dir" --strip 1 && printf '.') &
done
wait
}
extract() {
echo
cat config.vim >> tmp/polyglot.vim
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'
if (echo "julia coffee-script elixir fish git plantuml scala swift jinja" | grep -qF "$name"); then
echo "Skipping ftdetect installation of $name" >&2
continue
fi
[ -d "${dir}${subtree:-/}ftdetect" ] && for f in "${dir}${subtree:-/}ftdetect/"*; do
cat <<EOF >> tmp/polyglot.vim
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, '${pack%%:*}') == -1
augroup filetypedetect
" ${pack%%:*}, from ${f##*/ftdetect/} in ${pack#*:}
$(cat "${f}")
augroup end
endif
EOF
done
done
mv tmp/polyglot.vim ftdetect/
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' \) -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}"
touch "$file_in_dst"
# Use comma instead of / to handle cases like c/c++
if [[ "${package_name}" == "jsx" ]]; then
sed -e "s,%%PACK%%,${package_name}," -e "/%%CONTENT%%/{r ${file_in_tmp}" -e "d;}" plugin_guard_jsx.vim.template >> "$file_in_dst"
else
sed -e "s,%%PACK%%,${package_name}," -e "/%%CONTENT%%/{r ${file_in_tmp}" -e "d;}" plugin_guard.vim.template >> "$file_in_dst"
fi
}
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
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:ElmCast/elm-vim
emberscript:yalesov/vim-ember-script
emblem:yalesov/vim-emblem
erlang:vim-erlang/vim-erlang-runtime
ferm:vim-scripts/ferm.vim
fish:georgewitteman/vim-fish
flatbuffers:dcharbon/vim-flatbuffers
fsharp:fsharp/vim-fsharp:_BASIC
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
groovy:vim-scripts/groovy.vim
groovy-indent:vim-scripts/groovyindent-unix
haml:sheerun/vim-haml
handlebars:mustache/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
idris:idris-hackers/idris-vim
ion:vmchale/ion-vim
jasmine:glanotte/vim-jasmine
javascript:pangloss/vim-javascript:_JAVASCRIPT
jenkins:martinda/Jenkinsfile-vim-syntax
jinja:lepture/vim-jinja
json5:GutenYe/json5.vim
json:elzr/vim-json
jst:briancollins/vim-jst
jsx:MaxMEllon/vim-jsx-pretty:_ALL
julia:JuliaEditorSupport/julia-vim
kotlin:udalov/kotlin-vim
latex:LaTeX-Box-Team/LaTeX-Box
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:_SYNTAX
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
raml:IN3D/vim-raml
reason:reasonml-editor/vim-reason-plus
rspec:sheerun/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
slim:slim-template/vim-slim
slime:slime-lang/vim-slime-syntax
smt2:bohlender/vim-smt2
solidity:tomlion/vim-solidity
stylus:wavded/vim-stylus
svelte:evanleck/vim-svelte
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
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
"
rm -rf tmp
rm -rf "${DIRS_RM[@]}"
mkdir tmp
printf "Downloading packs..."
download "$(sed '/^#/d' <<<"$PACKS")"
extract "$(sed '/^#/d' <<<"$PACKS")"
update_readme
rm -rf tmp

42
compiler/ant.vim Normal file
View 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

View File

@@ -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

View File

@@ -3,7 +3,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'haml') == -1
" Vim compiler file " Vim compiler file
" Compiler: Haml " Compiler: Haml
" Maintainer: Tim Pope <vimNOSPAM@tpope.org> " Maintainer: Tim Pope <vimNOSPAM@tpope.org>
" Last Change: 2013 May 30 " Last Change: 2016 Aug 29
if exists("current_compiler") if exists("current_compiler")
finish finish

36
compiler/ledger.vim Normal file
View File

@@ -0,0 +1,36 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ledger') == -1
" Vim Compiler File
" Compiler: ledger
" by Johann Klähn; Use according to the terms of the GPL>=2.
" vim:ts=2:sw=2:sts=2:foldmethod=marker
scriptencoding utf-8
if exists('current_compiler') || !exists('g:ledger_bin')
finish
endif
let current_compiler = g:ledger_bin
if exists(':CompilerSet') != 2
command -nargs=* CompilerSet setlocal <args>
endif
if !exists('g:ledger_main')
let g:ledger_main = '%'
endif
if !g:ledger_is_hledger
" Capture Ledger errors (%-C ignores all lines between "While parsing..." and "Error:..."):
CompilerSet errorformat=%EWhile\ parsing\ file\ \"%f\"\\,\ line\ %l:,%ZError:\ %m,%-C%.%#
" Capture Ledger warnings:
CompilerSet errorformat+=%tarning:\ \"%f\"\\,\ line\ %l:\ %m
" Skip all other lines:
CompilerSet errorformat+=%-G%.%#
exe 'CompilerSet makeprg='.substitute(g:ledger_bin, ' ', '\\ ', 'g').'\ -f\ ' . shellescape(expand(g:ledger_main)) . '\ '.substitute(g:ledger_extra_options, ' ', '\\ ', 'g').'\ source\ ' . shellescape(expand(g:ledger_main))
else
exe 'CompilerSet makeprg=('.substitute(g:ledger_bin, ' ', '\\ ', 'g').'\ -f\ ' . shellescape(expand(g:ledger_main)) . '\ print\ '.substitute(g:ledger_extra_options, ' ', '\\ ', 'g').'\ >\ /dev/null)'
endif
endif

View File

@@ -5,9 +5,9 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ocaml') == -1
" Maintainer: Markus Mottl <markus.mottl@gmail.com> " Maintainer: Markus Mottl <markus.mottl@gmail.com>
" URL: http://www.ocaml.info/vim/compiler/ocaml.vim " URL: http://www.ocaml.info/vim/compiler/ocaml.vim
" Last Change: " Last Change:
" 2020 Mar 28 - Improved error format (Thomas Leonard)
" 2017 Nov 26 - Improved error format (Markus Mottl) " 2017 Nov 26 - Improved error format (Markus Mottl)
" 2013 Aug 27 - Added a new OCaml error format (Markus Mottl) " 2013 Aug 27 - Added a new OCaml error format (Markus Mottl)
" 2013 Jun 30 - Initial version (Marc Weber)
" "
" Marc Weber's comments: " Marc Weber's comments:
" Setting makeprg doesn't make sense, because there is ocamlc, ocamlopt, " Setting makeprg doesn't make sense, because there is ocamlc, ocamlopt,
@@ -33,6 +33,7 @@ let s:cpo_save = &cpo
set cpo&vim set cpo&vim
CompilerSet errorformat = CompilerSet errorformat =
\%EFile\ \"%f\"\\,\ lines\ %*\\d-%l\\,\ characters\ %c-%*\\d:,
\%EFile\ \"%f\"\\,\ line\ %l\\,\ characters\ %c-%*\\d:, \%EFile\ \"%f\"\\,\ line\ %l\\,\ characters\ %c-%*\\d:,
\%EFile\ \"%f\"\\,\ line\ %l\\,\ characters\ %c-%*\\d\ %.%#, \%EFile\ \"%f\"\\,\ line\ %l\\,\ characters\ %c-%*\\d\ %.%#,
\%EFile\ \"%f\"\\,\ line\ %l\\,\ character\ %c:%m, \%EFile\ \"%f\"\\,\ line\ %l\\,\ character\ %c:%m,

87
compiler/powershell.vim Normal file
View File

@@ -0,0 +1,87 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'powershell') == -1
" Compiler: powershell
" Run ps1 scripts in powershell and process their output. Quickly jump through
" stack traces and see script output in the quickfix.
if exists("current_compiler")
finish
endif
let current_compiler = "powershell"
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
let s:cpo_save = &cpo
set cpo-=C
if !exists("g:ps1_makeprg_cmd")
if executable('pwsh')
" pwsh is the future
let g:ps1_makeprg_cmd = 'pwsh'
elseif executable('pwsh.exe')
let g:ps1_makeprg_cmd = 'pwsh.exe'
elseif executable('powershell.exe')
let g:ps1_makeprg_cmd = 'powershell.exe'
else
let g:ps1_makeprg_cmd = ''
endif
endif
if !executable(g:ps1_makeprg_cmd)
echoerr "To use the powershell compiler, please set g:ps1_makeprg_cmd to the powershell executable!"
endif
" Show CategoryInfo, FullyQualifiedErrorId, etc?
let g:ps1_efm_show_error_categories = get(g:, 'ps1_efm_show_error_categories', 0)
" Use absolute path because powershell requires explicit relative paths
" (./file.ps1 is okay, but # expands to file.ps1)
let &l:makeprg = g:ps1_makeprg_cmd .' %:p:S'
" Parse file, line, char from callstacks:
" Write-Ouput : The term 'Write-Ouput' is not recognized as the name of a
" cmdlet, function, script file, or operable program. Check the spelling
" of the name, or if a path was included, verify that the path is correct
" and try again.
" At C:\script.ps1:11 char:5
" + Write-Ouput $content
" + ~~~~~~~~~~~
" + CategoryInfo : ObjectNotFound: (Write-Ouput:String) [], CommandNotFoundException
" + FullyQualifiedErrorId : CommandNotFoundException
" Showing error in context with underlining.
CompilerSet errorformat=%+G+%m
" Error summary.
CompilerSet errorformat+=%E%*\\S\ :\ %m
" Error location.
CompilerSet errorformat+=%CAt\ %f:%l\ char:%c
" Errors that span multiple lines (may be wrapped to width of terminal).
CompilerSet errorformat+=%C%m
" Ignore blank/whitespace-only lines.
CompilerSet errorformat+=%Z\\s%#
if g:ps1_efm_show_error_categories
CompilerSet errorformat^=%+G\ \ \ \ +\ %.%#\\s%#:\ %m
else
CompilerSet errorformat^=%-G\ \ \ \ +\ %.%#\\s%#:\ %m
endif
" Parse file, line, char from of parse errors:
" At C:\script.ps1:22 char:16
" + Stop-Process -Name "invalidprocess
" + ~~~~~~~~~~~~~~~
" The string is missing the terminator: ".
" + CategoryInfo : ParserError: (:) [], ParseException
" + FullyQualifiedErrorId : TerminatorExpectedAtEndOfString
CompilerSet errorformat+=At\ %f:%l\ char:%c
let &cpo = s:cpo_save
unlet s:cpo_save
" vim:set sw=2 sts=2:
endif

View File

@@ -26,7 +26,7 @@ else
if has('patch-7.4.191') if has('patch-7.4.191')
CompilerSet makeprg=rustc\ \%:S CompilerSet makeprg=rustc\ \%:S
else else
CompilerSet makeprg=rustc\ \% CompilerSet makeprg=rustc\ \"%\"
endif endif
endif endif

43
compiler/swift.vim Normal file
View File

@@ -0,0 +1,43 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'swift') == -1
" Vim compiler file
" Compiler: Swift Compiler
" Maintainer: Ayman Bagabas <ayman.bagabas@gmail.com>
" Latest Revision: 2020 Feb 16
if exists("current_compiler")
finish
endif
let current_compiler = "swiftc"
" vint: -ProhibitAbbreviationOption
let s:save_cpo = &cpo
set cpo&vim
" vint: +ProhibitAbbreviationOption
if exists(":CompilerSet") != 2
command -nargs=* CompilerSet setlocal <args>
endif
if has('patch-7.4.191')
CompilerSet makeprg=swiftc\ \%:S
else
CompilerSet makeprg=swiftc\ \%
endif
CompilerSet errorformat=
\%E%f:%l:%c:\ %trror:\ %m,
\%W%f:%l:%c:\ %tarning:\ %m,
\%I%f:%l:%c:\ note:\ %m,
\%E%f:%l:\ %trror:\ %m,
\%W%f:%l:\ %tarning:\ %m,
\%I%f:%l:\ note:\ %m,
" vint: -ProhibitAbbreviationOption
let &cpo = s:save_cpo
unlet s:save_cpo
" vint: +ProhibitAbbreviationOption
" vim: set et sw=4 sts=4 ts=8:
endif

View File

@@ -1,82 +0,0 @@
" Enable jsx syntax by default
if !exists('g:jsx_ext_required')
let g:jsx_ext_required = 0
endif
" Make csv loading faster
if !exists('g:csv_start')
let g:csv_start = 1
endif
if !exists('g:csv_end')
let g:csv_end = 2
endif
" Disable json concealing by default
if !exists('g:vim_json_syntax_conceal')
let g:vim_json_syntax_conceal = 0
endif
let g:filetype_euphoria = 'elixir'
augroup filetypedetect
autocmd BufNewFile,BufReadPost *.vb setlocal filetype=vbnet
augroup END
let g:python_highlight_all = 1
augroup filetypedetect
if v:version < 704
" NOTE: this line fixes an issue with the default system-wide lisp ftplugin
" which didn't define b:undo_ftplugin on older Vim versions
" (*.jl files are recognized as lisp)
autocmd BufRead,BufNewFile *.jl let b:undo_ftplugin = "setlocal comments< define< formatoptions< iskeyword< lisp<"
endif
autocmd BufRead,BufNewFile *.jl set filetype=julia
" coffeescript
autocmd BufNewFile,BufRead *.coffee set filetype=coffee
autocmd BufNewFile,BufRead *Cakefile set filetype=coffee
autocmd BufNewFile,BufRead *.coffeekup,*.ck set filetype=coffee
autocmd BufNewFile,BufRead *._coffee set filetype=coffee
autocmd BufNewFile,BufRead *.litcoffee set filetype=litcoffee
autocmd BufNewFile,BufRead *.coffee.md set filetype=litcoffee
" elixir
au BufRead,BufNewFile *.ex,*.exs set filetype=elixir
au BufRead,BufNewFile *.eex,*.leex set filetype=eelixir
au BufRead,BufNewFile mix.lock set filetype=elixir
" fish
autocmd BufRead,BufNewFile *.fish setfiletype fish
autocmd BufRead fish_funced_*_*.fish call search('^$')
autocmd BufRead,BufNewFile ~/.config/fish/fish_{read_,}history setfiletype yaml
autocmd BufRead,BufNewFile ~/.config/fish/fishd.* setlocal readonly
autocmd BufNewFile ~/.config/fish/functions/*.fish
\ call append(0, ['function '.expand('%:t:r'),
\'',
\'end']) |
\ 2
" git
autocmd BufNewFile,BufRead *.git/{,modules/**/,worktrees/*/}{COMMIT_EDIT,TAG_EDIT,MERGE_,}MSG set ft=gitcommit
autocmd BufNewFile,BufRead *.git/config,.gitconfig,gitconfig,.gitmodules set ft=gitconfig
autocmd BufNewFile,BufRead */.config/git/config set ft=gitconfig
autocmd BufNewFile,BufRead *.git/modules/**/config set ft=gitconfig
autocmd BufNewFile,BufRead git-rebase-todo set ft=gitrebase
autocmd BufNewFile,BufRead .gitsendemail.* set ft=gitsendemail
" plantuml
autocmd BufRead,BufNewFile *.pu,*.uml,*.plantuml,*.puml setfiletype plantuml | set filetype=plantuml
" scala
au BufRead,BufNewFile *.scala,*.sc set filetype=scala
au BufRead,BufNewFile *.sbt setfiletype sbt.scala
" swift
autocmd BufNewFile,BufRead *.swift set filetype=swift
"jinja
autocmd BufNewFile,BufRead *.jinja2,*.j2,*.jinja,*.nunjucks,*.nunjs,*.njk set ft=jinja
augroup END

16
ctags/puppet.ctags Normal file
View File

@@ -0,0 +1,16 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'puppet') == -1
--langdef=puppet
--langmap=puppet:.pp
--regex-puppet=/^[[:space:]]*class[[:space:]]*([a-z][a-zA-Z0-9_:\-]+)/\1/c,class/
--regex-puppet=/^[[:space:]]*site[[:space:]]*([a-zA-Z0-9_\-]+)/\1/s,site/
--regex-puppet=/^[[:space:]]*node[[:space:]]*[\'|\"]*([a-zA-Z0-9_\.\-]+)[\'|\"]*/\1/n,node/
--regex-puppet=/^[[:space:]]*define[[:space:]]*([a-z][a-zA-Z0-9_:\-]+)/\1/d,definition/
--regex-puppet=/^[[:space:]]*(include|require)[[:space:]]*([a-zA-Z0-9_:]+)/\1 \2/i,include/
--regex-puppet=/^[[:space:]]*([\$][a-zA-Z0-9_:]+)[[:space:]]*=/\1/v,variable/
--regex-puppet=/^[[:space:]]*[~|\-]?>?[[:space:]]*([a-z][a-zA-Z0-9_:]+)[[:space:]]*\{ *(.*):/\1[\2]/r,resource/
--regex-puppet=/([A-Z][a-zA-Z0-9_:]+)[[:space:]]*\{/\1/f,default/
--regex-puppet=/^[[:space:]]*type[[:space:]]*([A-Z][a-zA-Z0-9_:]*)[[:space:]]*=/\1/t,type/
--regex-puppet=/^[[:space:]]*function[[:space:]]*([a-zA-Z0-9_:]*)[[:space:]]*/\1/u,function/
endif

16
ctags/puppet_u.ctags Normal file
View File

@@ -0,0 +1,16 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'puppet') == -1
--langdef=puppet
--map-puppet=+.pp
--regex-puppet=/^[[:space:]]*node[[:space:]]*[\'|\"]*([a-zA-Z0-9_\.\-]+)[\'|\"]*/\1/n,node/{scope=set}
--regex-puppet=/^[[:space:]]*class[[:space:]]*([a-z][a-zA-Z0-9_:\-]+)[[:space:]]*\{*/\1/c,class,classes/{scope=set}
--regex-puppet=/^[[:space:]]*define[[:space:]]*([a-z][a-zA-Z0-9_:\-]+)/\1/d,definition/{scope=set}
--regex-puppet=/^[[:space:]]*(include|require)[[:space:]]*([a-zA-Z0-9_:]+)/\1 \2/i,include,includes/{scope=ref}
--regex-puppet=/^[[:space:]]*[~|\-]?>?[[:space:]]*([a-z][a-zA-Z0-9_:]+)[[:space:]]*\{[[:space:]]*(.*):/\1[\2]/r,resource/{scope=ref}
--regex-puppet=/^[[:space:]]*([\$][a-zA-Z0-9_:]+)[[:space:]]*=/\1/v,variable/{scope=ref}
--regex-puppet=/([A-Z][a-zA-Z0-9_:]+)[[:space:]]*\{/\1/f,default/
--regex-puppet=/^[[:space:]]*site[[:space:]]*([a-zA-Z0-9_\-]+)/\1/s,site/
--regex-puppet=/^[[:space:]]*type[[:space:]]*([A-Z][a-zA-Z0-9_:]*)[[:space:]]*=/\1/t,type/
--regex-puppet=/^[[:space:]]*function[[:space:]]*([a-zA-Z0-9_:]*)[[:space:]]*/\1/u,function/
endif

15
ctags/rust.ctags Normal file
View File

@@ -0,0 +1,15 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
--langdef=Rust
--langmap=Rust:.rs
--regex-Rust=/^[ \t]*(#\[[^\]]\][ \t]*)*(pub[ \t]+)?(extern[ \t]+)?("[^"]+"[ \t]+)?(unsafe[ \t]+)?fn[ \t]+([a-zA-Z0-9_]+)/\6/f,functions,function definitions/
--regex-Rust=/^[ \t]*(pub[ \t]+)?type[ \t]+([a-zA-Z0-9_]+)/\2/T,types,type definitions/
--regex-Rust=/^[ \t]*(pub[ \t]+)?enum[ \t]+([a-zA-Z0-9_]+)/\2/g,enum,enumeration names/
--regex-Rust=/^[ \t]*(pub[ \t]+)?struct[ \t]+([a-zA-Z0-9_]+)/\2/s,structure names/
--regex-Rust=/^[ \t]*(pub[ \t]+)?mod[ \t]+([a-zA-Z0-9_]+)/\2/m,modules,module names/
--regex-Rust=/^[ \t]*(pub[ \t]+)?(static|const)[ \t]+([a-zA-Z0-9_]+)/\3/c,consts,static constants/
--regex-Rust=/^[ \t]*(pub[ \t]+)?trait[ \t]+([a-zA-Z0-9_]+)/\2/t,traits,traits/
--regex-Rust=/^[ \t]*(pub[ \t]+)?impl([ \t\n]*<[^>]*>)?[ \t]+(([a-zA-Z0-9_:]+)[ \t]*(<[^>]*>)?[ \t]+(for)[ \t]+)?([a-zA-Z0-9_]+)/\4 \6 \7/i,impls,trait implementations/
--regex-Rust=/^[ \t]*macro_rules![ \t]+([a-zA-Z0-9_]+)/\1/d,macros,macro definitions/
endif

17
ctags/scala.ctags Normal file
View File

@@ -0,0 +1,17 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'scala') == -1
--langdef=scala
--langmap=scala:.scala
--regex-scala=/^[ \t]*((abstract|final|sealed|implicit|lazy)[ \t]*)*(private[^ ]*|protected)?[ \t]*class[ \t]+([a-zA-Z0-9_]+)/\4/c,classes/
--regex-scala=/^[ \t]*((abstract|final|sealed|implicit|lazy)[ \t]*)*(private[^ ]*|protected)?[ \t]*object[ \t]+([a-zA-Z0-9_]+)/\4/o,objects/
--regex-scala=/^[ \t]*((abstract|final|sealed|implicit|lazy)[ \t]*)*(private[^ ]*|protected)?[ \t]*((abstract|final|sealed|implicit|lazy)[ \t ]*)*case class[ \t ]+([a-zA-Z0-9_]+)/\6/C,case classes/
--regex-scala=/^[ \t]*((abstract|final|sealed|implicit|lazy)[ \t]*)*(private[^ ]*|protected)?[ \t]*case object[ \t]+([a-zA-Z0-9_]+)/\4/O,case objects/
--regex-scala=/^[ \t]*((abstract|final|sealed|implicit|lazy)[ \t]*)*(private[^ ]*|protected)?[ \t]*trait[ \t]+([a-zA-Z0-9_]+)/\4/t,traits/
--regex-scala=/^[ \t]*type[ \t]+([a-zA-Z0-9_]+)/\1/T,types/
--regex-scala=/^[ \t]*((abstract|final|sealed|implicit|lazy|override|private[^ ]*(\[[a-z]*\])*|protected)[ \t]*)*def[ \t]+([a-zA-Z0-9_]+)/\4/m,methods/
--regex-scala=/^[ \t]*((abstract|final|sealed|implicit|lazy|override|private[^ ]*|protected)[ \t]*)*val[ \t]+([a-zA-Z0-9_]+)/\3/V,values/
--regex-scala=/^[ \t]*((abstract|final|sealed|implicit|lazy|override|private[^ ]*|protected)[ \t]*)*var[ \t]+([a-zA-Z0-9_]+)/\3/v,variables/
--regex-scala=/^[ \t]*package[ \t]+([a-zA-Z0-9_.]+)/\1/p,packages/
endif

17
ctags/typescript.ctags Normal file
View File

@@ -0,0 +1,17 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'typescript') == -1
--langdef=typescript
--langmap=typescript:.ts
--regex-typescript=/^[ \t]*(export)?[ \t]*class[ \t]+([a-zA-Z0-9_]+)/\2/c,classes/
--regex-typescript=/^[ \t]*(export)?[ \t]*abstract class[ \t]+([a-zA-Z0-9_]+)/\2/a,abstract classes/
--regex-typescript=/^[ \t]*(export)?[ \t]*module[ \t]+([a-zA-Z0-9_]+)/\2/n,modules/
--regex-typescript=/^[ \t]*(export)?[ \t]*type[ \t]+([a-zA-Z0-9_]+)/\2/t,types/
--regex-typescript=/^[ \t]*(export)?[ \t]*namespace[ \t]+([a-zA-Z0-9_]+)/\2/n,modules/
--regex-typescript=/^[ \t]*(export)?[ \t]*function[ \t]+([a-zA-Z0-9_]+)/\2/f,functions/
--regex-typescript=/^[ \t]*export[ \t]+(var|const|let)[ \t]+([a-zA-Z0-9_]+)/\1/v,variables/
--regex-typescript=/^[ \t]*var[ \t]+([a-zA-Z0-9_]+)[ \t]*=[ \t]*function[ \t]*\(\)/\1/l,varlambdas/
--regex-typescript=/^[ \t]*(export)?[ \t]*(public|private)[ \t]+(static|readonly)?[ \t]*([a-zA-Z0-9_]+)/\4/m,members/
--regex-typescript=/^[ \t]*(export)?[ \t]*interface[ \t]+([a-zA-Z0-9_]+)/\2/i,interfaces/
--regex-typescript=/^[ \t]*(export)?[ \t]*enum[ \t]+([a-zA-Z0-9_]+)/\2/e,enums/
endif

185
doc/clojure.txt Normal file
View 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
View 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
View 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
View 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
View 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
View 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

File diff suppressed because it is too large Load Diff

View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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

File diff suppressed because it is too large Load Diff

405
doc/julia-vim-L2U.txt Normal file
View 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

Some files were not shown because too many files have changed in this diff Show More