mirror of
https://github.com/sheerun/vim-polyglot.git
synced 2025-11-08 11:33:52 -05:00
Compare commits
69 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d51b8fd17e | ||
|
|
fa57320919 | ||
|
|
9a2b4f5cd8 | ||
|
|
f211f02d1e | ||
|
|
e45b23b6ee | ||
|
|
a0c5f3ee55 | ||
|
|
6b8c72637f | ||
|
|
d330fdc01b | ||
|
|
c225bf8826 | ||
|
|
20125ac3ac | ||
|
|
9f19823a30 | ||
|
|
56d5fc498b | ||
|
|
ab679f37dd | ||
|
|
ca95a47a93 | ||
|
|
a26bebbeb9 | ||
|
|
edd5ee63e6 | ||
|
|
8a255002df | ||
|
|
b2d556d384 | ||
|
|
30c1920e4f | ||
|
|
57cfac7ae3 | ||
|
|
085aad28a4 | ||
|
|
e108a087b4 | ||
|
|
b3257271db | ||
|
|
e9d8c39608 | ||
|
|
04e6a8a73c | ||
|
|
b6a2261cc2 | ||
|
|
811fe888a6 | ||
|
|
2b19388166 | ||
|
|
a531f6b104 | ||
|
|
90d87abd30 | ||
|
|
d6710f1b57 | ||
|
|
0db9bdbfd6 | ||
|
|
c069f0661a | ||
|
|
235a5631f9 | ||
|
|
edf1aa4a1c | ||
|
|
88bd82d6c9 | ||
|
|
2686fb60f4 | ||
|
|
9d92f10375 | ||
|
|
fc0b11afe1 | ||
|
|
0fcd056648 | ||
|
|
78cd7e48cb | ||
|
|
ba1305772d | ||
|
|
ff3cc42bf3 | ||
|
|
e69f9f91d9 | ||
|
|
c37e16fbbd | ||
|
|
d7873996b4 | ||
|
|
73cbf0269e | ||
|
|
0077bd5a31 | ||
|
|
e8c16931f9 | ||
|
|
752a647be1 | ||
|
|
97a0bdcef6 | ||
|
|
58f119c57f | ||
|
|
0ac0389039 | ||
|
|
4bf3f6c300 | ||
|
|
4a80e945ad | ||
|
|
27f22774b1 | ||
|
|
f6be1d3d13 | ||
|
|
77f091c8c7 | ||
|
|
17149b4657 | ||
|
|
271c88a356 | ||
|
|
b86a0cd422 | ||
|
|
06c80c676e | ||
|
|
b061a2d995 | ||
|
|
e59b949def | ||
|
|
f0d869aea7 | ||
|
|
96e9c416ae | ||
|
|
d888bc4422 | ||
|
|
b4425d2c39 | ||
|
|
1ef902d053 |
4
.gitattributes
vendored
4
.gitattributes
vendored
@@ -2,3 +2,7 @@
|
||||
.gitattributes export-ignore
|
||||
build export-ignore
|
||||
README.md export-ignore
|
||||
/spec export-ignore
|
||||
Gemfile export-ignore
|
||||
Gemfile.lock export-ignore
|
||||
.travis.yml export-ignore
|
||||
|
||||
8
.travis.yml
Normal file
8
.travis.yml
Normal file
@@ -0,0 +1,8 @@
|
||||
language: ruby
|
||||
rvm:
|
||||
- 1.9.3
|
||||
before_install: sudo apt-get install vim-gtk
|
||||
before_script:
|
||||
- "export DISPLAY=:99.0"
|
||||
- "sh -e /etc/init.d/xvfb start"
|
||||
script: bundle exec rspec --format=documentation
|
||||
4
Gemfile
Normal file
4
Gemfile
Normal file
@@ -0,0 +1,4 @@
|
||||
source 'https://rubygems.org'
|
||||
|
||||
gem 'vimrunner'
|
||||
gem 'rspec'
|
||||
20
Gemfile.lock
Normal file
20
Gemfile.lock
Normal file
@@ -0,0 +1,20 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
diff-lcs (1.1.3)
|
||||
rspec (2.12.0)
|
||||
rspec-core (~> 2.12.0)
|
||||
rspec-expectations (~> 2.12.0)
|
||||
rspec-mocks (~> 2.12.0)
|
||||
rspec-core (2.12.2)
|
||||
rspec-expectations (2.12.1)
|
||||
diff-lcs (~> 1.1.3)
|
||||
rspec-mocks (2.12.0)
|
||||
vimrunner (0.3.0)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
rspec
|
||||
vimrunner
|
||||
103
README.md
103
README.md
@@ -1,14 +1,20 @@
|
||||
# vim-polyglot
|
||||
# vim-polyglot [![Build Status][travis-img-url]][travis-url]
|
||||
|
||||
[travis-img-url]: https://travis-ci.org/sheerun/vim-polyglot.png
|
||||
[travis-url]: https://travis-ci.org/sheerun/vim-polyglot
|
||||
|
||||
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.
|
||||
|
||||
- It **won't affect your startup time**, as all files are loaded only on demand.
|
||||
- It **won't affect your startup time**, as scripts are loaded only on demand\*.
|
||||
- It **installs 40x faster** (unparallelized), as language packs are not submoduled, but merged.
|
||||
- It clones even faster as all unnecessary files are ignored (like enormous documentation from php support).
|
||||
- Best syntax and indentation support. If someone releases better language pack, it will be replaced here.
|
||||
- No support for esoteric languages (vim-polyglot supports modern ones like `slim` though).
|
||||
- Each build is tested by automated Travis CI setup using vimrunner gem. Spee `spec` directory.
|
||||
|
||||
\*To be completely honest, concatenated `ftdetect` script takes around `3ms` to load.
|
||||
|
||||
## Installation
|
||||
|
||||
@@ -19,48 +25,53 @@ Optionally download one of the [releases](https://github.com/sheerun/vim-polyglo
|
||||
|
||||
## Language packs
|
||||
|
||||
- [arduino](https://github.com/sudar/vim-arduino-syntax)
|
||||
- [bundler](https://github.com/tpope/vim-bundler)
|
||||
- [c/c++](https://github.com/vim-jp/cpp-vim)
|
||||
- [c++11](https://github.com/octol/vim-cpp-enhanced-highlight)
|
||||
- [clojure](https://github.com/guns/vim-clojure-static)
|
||||
- [coffee-script](https://github.com/kchmck/vim-coffee-script)
|
||||
- [csv](https://github.com/chrisbra/csv.vim)
|
||||
- [css colors](https://github.com/ap/vim-css-color)
|
||||
- [cucumber](https://github.com/tpope/vim-cucumber)
|
||||
- [elixir](https://github.com/elixir-lang/vim-elixir)
|
||||
- [erlang](https://github.com/jimenezrick/vimerl)
|
||||
- [git](https://github.com/tpope/vim-git)
|
||||
- [haml](https://github.com/tpope/vim-haml)
|
||||
- [handlebars](https://github.com/nono/vim-handlebars)
|
||||
- [hasksyn](https://github.com/travitch/hasksyn)
|
||||
- [html5](https://github.com/othree/html5.vim)
|
||||
- [javascript](https://github.com/pangloss/vim-javascript)
|
||||
- [json](https://github.com/leshill/vim-json)
|
||||
- [jst](https://github.com/briancollins/vim-jst)
|
||||
- [latex](https://github.com/jcf/vim-latex)
|
||||
- [less](https://github.com/groenewege/vim-less)
|
||||
- [markdown](https://github.com/tpope/vim-markdown)
|
||||
- [nginx](https://github.com/mutewinter/nginx.vim)
|
||||
- [ocaml](https://github.com/jrk/vim-ocaml)
|
||||
- [octave](https://github.com/vim-scripts/octave.vim--)
|
||||
- [php](https://github.com/spf13/PIV)
|
||||
- [puppet](https://github.com/ajf/puppet-vim)
|
||||
- [python](https://github.com/vim-scripts/python.vim--Vasiliev)
|
||||
- [rspec](https://github.com/skwp/vim-rspec)
|
||||
- [ruby](https://github.com/vim-ruby/vim-ruby)
|
||||
- [sbt](https://github.com/derekwyatt/vim-sbt)
|
||||
- [scala](https://github.com/derekwyatt/vim-scala)
|
||||
- [scss-syntax](https://github.com/cakebaker/scss-syntax.vim)
|
||||
- [slim](https://github.com/slim-template/vim-slim)
|
||||
- [stylus](https://github.com/wavded/vim-stylus)
|
||||
- [textile](https://github.com/timcharper/textile.vim)
|
||||
- [tmux](https://github.com/acustodioo/vim-tmux)
|
||||
- [tomdoc](https://github.com/mutewinter/tomdoc.vim)
|
||||
- [twig](https://github.com/beyondwords/vim-twig)
|
||||
- [vbnet](https://github.com/vim-scripts/vbnet.vim)
|
||||
- [vim-golang](https://github.com/jnwhiteh/vim-golang)
|
||||
- [xls](https://github.com/vim-scripts/XSLT-syntax)
|
||||
- [arduino](https://github.com/sudar/vim-arduino-syntax) (syntax, ftdetect)
|
||||
- [c++11](https://github.com/octol/vim-cpp-enhanced-highlight) (syntax)
|
||||
- [c/c++](https://github.com/vim-jp/cpp-vim) (syntax)
|
||||
- [clojure](https://github.com/guns/vim-clojure-static) (syntax, indent, autoload, ftplugin, ftdetect)
|
||||
- [coffee-script](https://github.com/kchmck/vim-coffee-script) (syntax, indent, compiler, autoload, ftplugin, ftdetect)
|
||||
- [css-color](https://github.com/gorodinskiy/vim-coloresque) (syntax)
|
||||
- [csv](https://github.com/chrisbra/csv.vim) (syntax, ftplugin, ftdetect)
|
||||
- [cucumber](https://github.com/tpope/vim-cucumber) (syntax, indent, compiler, ftplugin, ftdetect)
|
||||
- [dockerfile](https://github.com/honza/dockerfile.vim) (syntax, ftdetect)
|
||||
- [elixir](https://github.com/elixir-lang/vim-elixir) (syntax, indent, compiler, ftplugin, ftdetect)
|
||||
- [erlang](https://github.com/oscarh/vimerl) (syntax, indent, compiler, autoload, ftplugin)
|
||||
- [git](https://github.com/tpope/vim-git) (syntax, indent, ftplugin, ftdetect)
|
||||
- [go](https://github.com/jnwhiteh/vim-golang) (syntax, indent, autoload, ftplugin, ftdetect)
|
||||
- [haml](https://github.com/tpope/vim-haml) (syntax, indent, compiler, ftplugin, ftdetect)
|
||||
- [handlebars](https://github.com/nono/vim-handlebars) (syntax, ftplugin, ftdetect)
|
||||
- [haskell](https://github.com/travitch/hasksyn) (syntax, indent, ftplugin)
|
||||
- [html5](https://github.com/othree/html5.vim) (syntax, indent, autoload)
|
||||
- [jade](https://github.com/digitaltoad/vim-jade) (syntax, indent, ftplugin, ftdetect)
|
||||
- [javascript](https://github.com/pangloss/vim-javascript) (syntax, indent, ftdetect)
|
||||
- [json](https://github.com/leshill/vim-json) (syntax, ftdetect)
|
||||
- [jst](https://github.com/briancollins/vim-jst) (syntax, indent, ftdetect)
|
||||
- [latex](https://github.com/LaTeX-Box-Team/LaTeX-Box) (syntax, indent, ftplugin)
|
||||
- [less](https://github.com/groenewege/vim-less) (syntax, indent, ftplugin, ftdetect)
|
||||
- [markdown](https://github.com/tpope/vim-markdown) (syntax, ftplugin, ftdetect)
|
||||
- [nginx](https://github.com/mutewinter/nginx.vim) (syntax, ftdetect)
|
||||
- [ocaml](https://github.com/jrk/vim-ocaml) (syntax, indent, ftplugin)
|
||||
- [octave](https://github.com/vim-scripts/octave.vim--) (syntax)
|
||||
- [perl](https://github.com/vim-perl/vim-perl) (syntax, indent, ftplugin)
|
||||
- [php](https://github.com/StanAngeloff/php.vim) (syntax)
|
||||
- [puppet](https://github.com/ajf/puppet-vim) (syntax, indent, ftplugin, ftdetect)
|
||||
- [protobuf](https://github.com/uarun/vim-protobuf) (syntax, ftdetect)
|
||||
- [python](https://github.com/vim-scripts/python.vim--Vasiliev) (syntax)
|
||||
- [r-lang](https://github.com/vim-scripts/R.vim) (syntax, ftplugin)
|
||||
- [rspec](https://github.com/sheerun/rspec.vim) (syntax, ftdetect)
|
||||
- [ruby](https://github.com/vim-ruby/vim-ruby) (syntax, indent, compiler, autoload, ftplugin, ftdetect)
|
||||
- [rust](https://github.com/wting/rust.vim) (syntax, indent, compiler, ftplugin, ftdetect)
|
||||
- [sbt](https://github.com/derekwyatt/vim-sbt) (syntax, ftdetect)
|
||||
- [scala](https://github.com/derekwyatt/vim-scala) (syntax, indent, ftplugin, ftdetect)
|
||||
- [slim](https://github.com/slim-template/vim-slim) (syntax, indent, ftdetect)
|
||||
- [stylus](https://github.com/wavded/vim-stylus) (syntax, indent, ftplugin, ftdetect)
|
||||
- [textile](https://github.com/timcharper/textile.vim) (syntax, ftplugin, ftdetect)
|
||||
- [tmux](https://github.com/acustodioo/vim-tmux) (syntax, ftdetect)
|
||||
- [tomdoc](https://github.com/duwanis/tomdoc.vim) (syntax)
|
||||
- [typescript](https://github.com/leafgarland/typescript-vim) (syntax, compiler, ftplugin, ftdetect)
|
||||
- [vbnet](https://github.com/vim-scripts/vbnet.vim) (syntax)
|
||||
- [twig](https://github.com/beyondwords/vim-twig) (syntax, ftplugin, ftdetect)
|
||||
- [xls](https://github.com/vim-scripts/XSLT-syntax) (syntax)
|
||||
|
||||
## Contributing
|
||||
|
||||
@@ -71,3 +82,7 @@ Feel free to add your language, and send pull-request.
|
||||
## License
|
||||
|
||||
See linked repositories for detailed license information.
|
||||
|
||||
|
||||
[](https://bitdeli.com/free "Bitdeli Badge")
|
||||
|
||||
|
||||
2
after/ftdetect/rspec.vim
Normal file
2
after/ftdetect/rspec.vim
Normal file
@@ -0,0 +1,2 @@
|
||||
autocmd BufReadPost,BufNewFile *_spec.rb set syntax=rspec
|
||||
autocmd BufReadPost,BufNewFile *_spec.rb setlocal commentstring=#\ %s
|
||||
@@ -1,24 +0,0 @@
|
||||
|
||||
if !exists("g:DisableAutoPHPFolding")
|
||||
let g:DisableAutoPHPFolding = 0
|
||||
endif
|
||||
|
||||
if !g:DisableAutoPHPFolding
|
||||
" Don't use the PHP syntax folding
|
||||
setlocal foldmethod=manual
|
||||
" Turn on PHP fast folds
|
||||
EnableFastPHPFolds
|
||||
endif
|
||||
|
||||
" Fix matchpairs for PHP (for matchit.vim plugin)
|
||||
if exists("loaded_matchit")
|
||||
let b:match_skip = 's:comment\|string'
|
||||
let b:match_words = '<?\(php\)\?:?>,\<switch\>:\<endswitch\>,' .
|
||||
\ '\<if\>:\<elseif\>:\<else\>:\<endif\>,' .
|
||||
\ '\<while\>:\<endwhile\>,\<do\>:\<while\>,' .
|
||||
\ '\<for\>:\<endfor\>,\<foreach\>:\<endforeach\>' .
|
||||
\ '<\@<=[ou]l\>[^>]*\%(>\|$\):<\@<=li\>:<\@<=/[ou]l>,' .
|
||||
\ '<\@<=dl\>[^>]*\%(>\|$\):<\@<=d[td]\>:<\@<=/dl>,' .
|
||||
\ '<\@<=\([^/?][^ \t>]*\)[^>]*\%(>\|$\):<\@<=/\1>,' .
|
||||
\ '<:>,(:),{:},[:]'
|
||||
endif
|
||||
@@ -4,12 +4,12 @@
|
||||
" License: WTFPL
|
||||
|
||||
" Load the coffee and html indent functions.
|
||||
unlet b:did_indent
|
||||
silent! unlet b:did_indent
|
||||
runtime indent/coffee.vim
|
||||
let s:coffeeIndentExpr = &l:indentexpr
|
||||
|
||||
" Load html last so it can overwrite coffee settings.
|
||||
unlet b:did_indent
|
||||
silent! unlet b:did_indent
|
||||
runtime indent/html.vim
|
||||
let s:htmlIndentExpr = &l:indentexpr
|
||||
|
||||
|
||||
@@ -5,8 +5,7 @@
|
||||
"
|
||||
|
||||
syn keyword tomdocKeywords Returns containedin=coffeeComment contained
|
||||
syn keyword tomdocKeywords Yields containedin=coffeeComment contained
|
||||
syn keyword tomdocKeywords Raises containedin=coffeeComment contained
|
||||
syn keyword tomdocKeywords Throws containedin=coffeeComment contained
|
||||
syn keyword tomdocKeywords Examples containedin=coffeeComment contained
|
||||
syn keyword tomdocKeywords Signature containedin=coffeeComment contained
|
||||
|
||||
@@ -16,6 +15,6 @@ syn match tomdocDescriptions +\s*Public:+he=e-1 containedin=coffeeComment contai
|
||||
syn match tomdocDescriptions +\s*Internal:+he=e-1 containedin=coffeeComment contained
|
||||
syn match tomdocDescriptions +\s*Deprecated:+he=e-1 containedin=coffeeComment contained
|
||||
|
||||
hi default link tomdocDescriptions TODO
|
||||
hi default link tomdocKeywords TODO
|
||||
hi default link tomdocDescriptions String
|
||||
hi default link tomdocKeywords String
|
||||
hi default link tomdocArguments HELP
|
||||
|
||||
@@ -2,10 +2,11 @@
|
||||
" Language: C++ Additions
|
||||
" Maintainer: Jon Haggblad <jon@haeggblad.com>
|
||||
" URL: http://www.haeggblad.com
|
||||
" Last Change: 17 May 2013
|
||||
" Version: 0.1
|
||||
" Last Change: 26 Jan 2014
|
||||
" Version: 0.2
|
||||
" Changelog:
|
||||
" 0.1 - initial version.
|
||||
" 0.2 - C++14
|
||||
"
|
||||
" Additional Vim syntax highlighting for C++ (including C++11)
|
||||
"
|
||||
@@ -139,6 +140,7 @@ syntax keyword cppSTLfunction atexit
|
||||
syntax keyword cppSTLfunction atof
|
||||
syntax keyword cppSTLfunction atoi
|
||||
syntax keyword cppSTLfunction atol
|
||||
syntax keyword cppSTLfunction atoll
|
||||
syntax keyword cppSTLfunction back
|
||||
syntax keyword cppSTLfunction back_inserter
|
||||
syntax keyword cppSTLfunction bad
|
||||
@@ -423,8 +425,11 @@ syntax keyword cppSTLfunction strrchr
|
||||
syntax keyword cppSTLfunction strspn
|
||||
syntax keyword cppSTLfunction strstr
|
||||
syntax keyword cppSTLfunction strtod
|
||||
syntax keyword cppSTLfunction strtof
|
||||
syntax keyword cppSTLfunction strtold
|
||||
syntax keyword cppSTLfunction strtok
|
||||
syntax keyword cppSTLfunction strtol
|
||||
syntax keyword cppSTLfunction strtoll
|
||||
syntax keyword cppSTLfunction strtoul
|
||||
syntax keyword cppSTLfunction strxfrm
|
||||
syntax keyword cppSTLfunction substr
|
||||
@@ -440,7 +445,6 @@ syntax keyword cppSTLfunction tellg
|
||||
syntax keyword cppSTLfunction tellp
|
||||
syntax keyword cppSTLfunction test
|
||||
syntax keyword cppSTLfunction time
|
||||
syntax keyword cppSTLfunction time_t
|
||||
syntax keyword cppSTLfunction tmpfile
|
||||
syntax keyword cppSTLfunction tmpnam
|
||||
syntax keyword cppSTLfunction tolower
|
||||
@@ -615,6 +619,7 @@ syntax keyword cppSTLtype stringbuf
|
||||
syntax keyword cppSTLtype stringstream
|
||||
syntax keyword cppSTLtype temporary_buffer
|
||||
syntax keyword cppSTLtype test_type
|
||||
syntax keyword cppSTLtype time_t
|
||||
syntax keyword cppSTLtype tm
|
||||
syntax keyword cppSTLtype traits_type
|
||||
syntax keyword cppSTLtype type_info
|
||||
@@ -635,6 +640,84 @@ syntax keyword cppSTLtype wstring
|
||||
syntax keyword cppSTLtype wstringbuf
|
||||
syntax keyword cppSTLtype wstringstream
|
||||
|
||||
syntax keyword cppSTLfunction mblen
|
||||
syntax keyword cppSTLfunction mbtowc
|
||||
syntax keyword cppSTLfunction wctomb
|
||||
syntax keyword cppSTLfunction mbstowcs
|
||||
syntax keyword cppSTLfunction wcstombs
|
||||
syntax keyword cppSTLfunction mbsinit
|
||||
syntax keyword cppSTLfunction btowc
|
||||
syntax keyword cppSTLfunction wctob
|
||||
syntax keyword cppSTLfunction mbrlen
|
||||
syntax keyword cppSTLfunction mbrtowc
|
||||
syntax keyword cppSTLfunction wcrtomb
|
||||
syntax keyword cppSTLfunction mbsrtowcs
|
||||
syntax keyword cppSTLfunction wcsrtombs
|
||||
|
||||
syntax keyword cppSTLtype mbstate_t
|
||||
|
||||
syntax keyword cppSTLconstant MB_LEN_MAX
|
||||
syntax keyword cppSTLconstant MB_CUR_MAX
|
||||
syntax keyword cppSTLconstant __STDC_UTF_16__
|
||||
syntax keyword cppSTLconstant __STDC_UTF_32__
|
||||
|
||||
syntax keyword cppSTLfunction iswalnum
|
||||
syntax keyword cppSTLfunction iswalpha
|
||||
syntax keyword cppSTLfunction iswlower
|
||||
syntax keyword cppSTLfunction iswupper
|
||||
syntax keyword cppSTLfunction iswdigit
|
||||
syntax keyword cppSTLfunction iswxdigit
|
||||
syntax keyword cppSTLfunction iswcntrl
|
||||
syntax keyword cppSTLfunction iswgraph
|
||||
syntax keyword cppSTLfunction iswspace
|
||||
syntax keyword cppSTLfunction iswprint
|
||||
syntax keyword cppSTLfunction iswpunct
|
||||
syntax keyword cppSTLfunction iswctype
|
||||
syntax keyword cppSTLfunction wctype
|
||||
|
||||
syntax keyword cppSTLfunction towlower
|
||||
syntax keyword cppSTLfunction towupper
|
||||
syntax keyword cppSTLfunction towctrans
|
||||
syntax keyword cppSTLfunction wctrans
|
||||
|
||||
syntax keyword cppSTLfunction wcstol
|
||||
syntax keyword cppSTLfunction wcstoll
|
||||
syntax keyword cppSTLfunction wcstoul
|
||||
syntax keyword cppSTLfunction wcstoull
|
||||
syntax keyword cppSTLfunction wcstof
|
||||
syntax keyword cppSTLfunction wcstod
|
||||
syntax keyword cppSTLfunction wcstold
|
||||
|
||||
syntax keyword cppSTLfunction wcscpy
|
||||
syntax keyword cppSTLfunction wcsncpy
|
||||
syntax keyword cppSTLfunction wcscat
|
||||
syntax keyword cppSTLfunction wcsncat
|
||||
syntax keyword cppSTLfunction wcsxfrm
|
||||
syntax keyword cppSTLfunction wcslen
|
||||
syntax keyword cppSTLfunction wcscmp
|
||||
syntax keyword cppSTLfunction wcsncmp
|
||||
syntax keyword cppSTLfunction wcscoll
|
||||
syntax keyword cppSTLfunction wcschr
|
||||
syntax keyword cppSTLfunction wcsrchr
|
||||
syntax keyword cppSTLfunction wcsspn
|
||||
syntax keyword cppSTLfunction wcscspn
|
||||
syntax keyword cppSTLfunction wcspbrk
|
||||
syntax keyword cppSTLfunction wcsstr
|
||||
syntax keyword cppSTLfunction wcstok
|
||||
syntax keyword cppSTLfunction wmemcpy
|
||||
syntax keyword cppSTLfunction wmemmove
|
||||
syntax keyword cppSTLfunction wmemcmp
|
||||
syntax keyword cppSTLfunction wmemchr
|
||||
syntax keyword cppSTLfunction wmemset
|
||||
|
||||
syntax keyword cppSTLtype wctrans_t
|
||||
syntax keyword cppSTLtype wctype_t
|
||||
syntax keyword cppSTLtype wint_t
|
||||
|
||||
syntax keyword cppSTLconstant WEOF
|
||||
syntax keyword cppSTLconstant WCHAR_MIN
|
||||
syntax keyword cppSTLconstant WCHAR_MAX
|
||||
|
||||
if !exists("cpp_no_cpp11")
|
||||
syntax keyword cppSTLtype nullptr_t max_align_t
|
||||
syntax keyword cppSTLtype type_index
|
||||
@@ -968,6 +1051,7 @@ if !exists("cpp_no_cpp11")
|
||||
|
||||
" locale
|
||||
syntax keyword cppSTLfunction isblank
|
||||
syntax keyword cppSTLfunction iswblank
|
||||
syntax keyword cppSTLtype wstring_convert
|
||||
syntax keyword cppSTLtype wbuffer_convert
|
||||
syntax keyword cppSTLtype codecvt_utf8
|
||||
@@ -1016,13 +1100,51 @@ if !exists("cpp_no_cpp11")
|
||||
syntax keyword cppSTLfunction atomic_flag_clear
|
||||
syntax keyword cppSTLfunction atomic_flag_clear_explicit
|
||||
|
||||
syntax keyword cppSTLtype atomic_bool
|
||||
syntax keyword cppSTLtype atomic_char
|
||||
syntax keyword cppSTLtype atomic_schar
|
||||
syntax keyword cppSTLtype atomic_uchar
|
||||
syntax keyword cppSTLtype atomic_short
|
||||
syntax keyword cppSTLtype atomic_ushort
|
||||
syntax keyword cppSTLtype atomic_int
|
||||
syntax keyword cppSTLtype atomic_uint
|
||||
syntax keyword cppSTLtype atomic_long
|
||||
syntax keyword cppSTLtype atomic_ulong
|
||||
syntax keyword cppSTLtype atomic_llong
|
||||
syntax keyword cppSTLtype atomic_ullong
|
||||
syntax keyword cppSTLtype atomic_char16_t
|
||||
syntax keyword cppSTLtype atomic_char32_t
|
||||
syntax keyword cppSTLtype atomic_wchar_t
|
||||
syntax keyword cppSTLtype atomic_int_least8_t
|
||||
syntax keyword cppSTLtype atomic_uint_least8_t
|
||||
syntax keyword cppSTLtype atomic_int_least16_t
|
||||
syntax keyword cppSTLtype atomic_uint_least16_t
|
||||
syntax keyword cppSTLtype atomic_int_least32_t
|
||||
syntax keyword cppSTLtype atomic_uint_least32_t
|
||||
syntax keyword cppSTLtype atomic_int_least64_t
|
||||
syntax keyword cppSTLtype atomic_uint_least64_t
|
||||
syntax keyword cppSTLtype atomic_int_fast8_t
|
||||
syntax keyword cppSTLtype atomic_uint_fast8_t
|
||||
syntax keyword cppSTLtype atomic_int_fast16_t
|
||||
syntax keyword cppSTLtype atomic_uint_fast16_t
|
||||
syntax keyword cppSTLtype atomic_int_fast32_t
|
||||
syntax keyword cppSTLtype atomic_uint_fast32_t
|
||||
syntax keyword cppSTLtype atomic_int_fast64_t
|
||||
syntax keyword cppSTLtype atomic_uint_fast64_t
|
||||
syntax keyword cppSTLtype atomic_intptr_t
|
||||
syntax keyword cppSTLtype atomic_uintptr_t
|
||||
syntax keyword cppSTLtype atomic_size_t
|
||||
syntax keyword cppSTLtype atomic_ptrdiff_t
|
||||
syntax keyword cppSTLtype atomic_intmax_t
|
||||
syntax keyword cppSTLtype atomic_uintmax_t
|
||||
|
||||
syntax keyword cppSTLtype memory_order
|
||||
syntax keyword cppSTLfunction atomic_init
|
||||
syntax keyword cppSTLfunction ATOMIC_VAR_INIT
|
||||
syntax keyword cppSTLconstant ATOMIC_FLAG_INIT
|
||||
syntax keyword cppSTLconstant kill_dependency
|
||||
syntax keyword cppSTLconstant atomic_thread_fence
|
||||
syntax keyword cppSTLconstant atomic_signal_fence
|
||||
syntax keyword cppSTLfunction kill_dependency
|
||||
syntax keyword cppSTLfunction atomic_thread_fence
|
||||
syntax keyword cppSTLfunction atomic_signal_fence
|
||||
|
||||
" thread
|
||||
syntax keyword cppSTLtype thread
|
||||
@@ -1061,8 +1183,8 @@ if !exists("cpp_no_cpp11")
|
||||
syntax keyword cppSTLtype future
|
||||
syntax keyword cppSTLtype shared_future
|
||||
|
||||
"syntax keyword cppSTLfunction async
|
||||
"syntax keyword cppSTLenum launch
|
||||
syntax keyword cppSTLfunction async
|
||||
syntax keyword cppSTLenum launch
|
||||
|
||||
syntax keyword cppSTLenum future_status
|
||||
syntax keyword cppSTLenum future_errc
|
||||
@@ -1114,7 +1236,36 @@ if !exists("cpp_no_cpp11")
|
||||
|
||||
"limits
|
||||
syntax keyword cppSTLfunction lowest
|
||||
endif
|
||||
|
||||
"cuchar
|
||||
syntax keyword cppSTLfunction mbrtoc16
|
||||
syntax keyword cppSTLfunction c16rtomb
|
||||
syntax keyword cppSTLfunction mbrtoc32
|
||||
syntax keyword cppSTLfunction c32rtomb
|
||||
|
||||
"cinttypes
|
||||
syntax keyword cppSTLfunction strtoimax
|
||||
syntax keyword cppSTLfunction strtoumax
|
||||
syntax keyword cppSTLfunction wcstoimax
|
||||
syntax keyword cppSTLfunction wcstoumax
|
||||
|
||||
endif " C++11
|
||||
|
||||
if !exists("cpp_no_cpp14")
|
||||
|
||||
"optional
|
||||
syntax keyword cppSTLtype optional
|
||||
"syntax keyword cppSTLfunction value
|
||||
syntax keyword cppSTLfunction value_or
|
||||
syntax keyword cppSTLfunction make_optional
|
||||
|
||||
"dynarray
|
||||
syntax keyword cppSTLtype dynarray
|
||||
|
||||
"thread
|
||||
syntax keyword cppSTLtype shared_mutex
|
||||
syntax keyword cppSTLtype shared_lock
|
||||
endif " C++14
|
||||
|
||||
" Default highlighting
|
||||
if version >= 508 || !exists("did_cpp_syntax_inits")
|
||||
|
||||
@@ -1,13 +1,18 @@
|
||||
" Language: Colorful CSS Color Preview
|
||||
" Author: Aristotle Pagaltzis <pagaltzis@gmx.de>
|
||||
" Last Change: 2013-03-09
|
||||
" Licence: No Warranties. WTFPL. But please tell me!
|
||||
" Version: 0.7.3
|
||||
" Name: Coloresque
|
||||
" Language: color preview in vim
|
||||
" Author: Gorodinskii Konstantin <gor.konstantin@gmail.com>
|
||||
" Licence: Vim license
|
||||
" Version: 0.9.5
|
||||
" based on
|
||||
" https://github.com/ap/vim-css-color
|
||||
" https://github.com/lilydjwg/colorizer
|
||||
" vim:et:ts=2 sw=2 sts=2
|
||||
"
|
||||
" KNOWN PROBLEMS: compatibility with `cursorline` -- https://github.com/ap/vim-css-color/issues/24
|
||||
|
||||
let s:hex={}
|
||||
let b:matchescache = {}
|
||||
let b:color_pattern = {}
|
||||
|
||||
let w:colorDictRegExp=''
|
||||
for i in range(0, 255)
|
||||
let s:hex[ printf( '%02x', i ) ] = i
|
||||
endfor
|
||||
@@ -24,25 +29,52 @@ function! s:FGForBG(color)
|
||||
return r*30 + g*59 + b*11 > 12000 ? s:black : s:white
|
||||
endfunction
|
||||
|
||||
let b:color_pattern = {}
|
||||
let s:color_prefix = 'gui'
|
||||
let s:fg_color_calc = 'let color = "#" . toupper(a:color)'
|
||||
|
||||
function! s:MatchColorValue(color, pattern)
|
||||
function! s:RestoreColors()
|
||||
for part in keys(b:color_pattern)
|
||||
|
||||
"if b:color_pattern[part]=="ffffff"
|
||||
"echoe part
|
||||
"endif
|
||||
|
||||
call s:MatchColorValue(b:color_pattern[part], part)
|
||||
"echoe color
|
||||
"echoe b:color_pattern[color]
|
||||
"let group = 'cssColor' . tolower(strpart(b:color_pattern[part]["color"], 1))
|
||||
""exe 'syn match' group '/'.escape(pattern, '/').'/ contained'
|
||||
"exe 'syn cluster cssColors add='.group
|
||||
"exe 'hi' group s:color_prefix.'bg='.b:color_pattern[part]["bg"] s:color_prefix.'fg='.b:color_pattern[part]["fg"]
|
||||
|
||||
"if !exists('b:matchescache')
|
||||
"let b:matchescache={}
|
||||
"endif
|
||||
|
||||
"let b:matchescache[part] = matchadd(group, part, -1)
|
||||
endfor
|
||||
endfunction
|
||||
|
||||
function! s:MatchColorValue(color, part)
|
||||
if ! len(a:color) | return | endif
|
||||
|
||||
if has_key( b:color_pattern, a:pattern ) | return | endif
|
||||
let b:color_pattern[a:pattern] = 1
|
||||
let group = 'cssColor' . tolower(a:color)
|
||||
|
||||
let pattern = a:pattern
|
||||
" iff pattern ends on word character, require word break to match
|
||||
if pattern =~ '\>$' | let pattern .= '\>' | endif
|
||||
if !exists('b:color_pattern[a:part]')
|
||||
exe s:fg_color_calc
|
||||
exe 'syn cluster cssColors add='.group
|
||||
exe 'hi' group s:color_prefix.'bg='.color s:color_prefix.'fg='.s:FGForBG(a:color)
|
||||
let b:color_pattern[a:part] = a:color
|
||||
endif
|
||||
|
||||
if !exists('b:matchescache')
|
||||
let b:matchescache = {}
|
||||
elseif !exists('b:matchescache[a:part]')
|
||||
let b:matchescache[a:part] = matchadd(group, a:part, -1)
|
||||
endif
|
||||
|
||||
"call add(w:matchescache, matchadd(group, a:part, -1))
|
||||
|
||||
let group = 'cssColor' . tolower(a:color)
|
||||
exe 'syn match' group '/'.escape(pattern, '/').'/ contained'
|
||||
exe 'syn cluster cssColors add='.group
|
||||
exe s:fg_color_calc
|
||||
exe 'hi' group s:color_prefix.'bg='.color s:color_prefix.'fg='.s:FGForBG(a:color)
|
||||
return ''
|
||||
endfunction
|
||||
|
||||
@@ -73,18 +105,265 @@ function! s:HexForHSLValue(h,s,l)
|
||||
return printf( '%02x%02x%02x', rgb[0], rgb[1], rgb[2] )
|
||||
endfunction
|
||||
|
||||
function! s:PreviewCSSColorInLine()
|
||||
" TODO use cssColor matchdata
|
||||
"
|
||||
" N.B. these substitute() calls are here just for the side effect
|
||||
" of invoking s:MatchColorValue during substitution -- because
|
||||
" match() and friends do not allow finding all matches in a single
|
||||
" scan without examining the start of the string over and over
|
||||
call substitute( substitute( substitute( substitute( getline('.'),
|
||||
\ '#\(\x\)\(\x\)\(\x\)\>', '\=s:MatchColorValue(submatch(1).submatch(1).submatch(2).submatch(2).submatch(3).submatch(3), submatch(0))', 'g' ),
|
||||
\ '#\(\x\{6}\)\>', '\=s:MatchColorValue(submatch(1), submatch(0))', 'g' ),
|
||||
\ 'rgba\?(\s*\(\d\{1,3}%\?\)\s*,\s*\(\d\{1,3}%\?\)\s*,\s*\(\d\{1,3}%\?\)\s*\%(,[^)]*\)\?)', '\=s:MatchColorValue(s:HexForRGBValue(submatch(1),submatch(2),submatch(3)),submatch(0))', 'g' ),
|
||||
\ 'hsla\?(\s*\(\d\{1,3}%\?\)\s*,\s*\(\d\{1,3}%\?\)\s*,\s*\(\d\{1,3}%\?\)\s*\%(,[^)]*\)\?)', '\=s:MatchColorValue(s:HexForHSLValue(submatch(1),submatch(2),submatch(3)),submatch(0))', 'g' )
|
||||
function! s:ClearMatches()
|
||||
call clearmatches()
|
||||
|
||||
if !exists('b:matchescache')
|
||||
return
|
||||
endif
|
||||
"for i in values(b:matchescache)
|
||||
"call matchdelete(i)
|
||||
"endfor
|
||||
unlet b:matchescache
|
||||
endfunction
|
||||
|
||||
function! s:VimCssInit(update)
|
||||
|
||||
if a:update==1
|
||||
call s:ClearMatches()
|
||||
endif
|
||||
:set isk+=-
|
||||
:set isk+=#
|
||||
:set isk+=.
|
||||
|
||||
if len(keys(b:color_pattern))>0
|
||||
call s:RestoreColors()
|
||||
return
|
||||
endif
|
||||
|
||||
"let b:matchescache = {}
|
||||
|
||||
call s:AdditionalColors()
|
||||
|
||||
"for i in range(1, line("$"))
|
||||
call s:PreviewCSSColor(join(getline(1,'$'), "\n"))
|
||||
"endfor
|
||||
|
||||
endfunction
|
||||
|
||||
function! s:AdditionalColors()
|
||||
"if exists('&b:colorDictRegExp')&&b:colorDictRegExp!=''
|
||||
"return
|
||||
"endif
|
||||
|
||||
" w3c Colors
|
||||
" plus extra colors
|
||||
let w:colorDict = {
|
||||
\'black': '#000000',
|
||||
\'red': '#ff0000',
|
||||
\'silver': '#c0c0c0',
|
||||
\'gray': '#808080',
|
||||
\'white': '#ffffff',
|
||||
\'maroon': '#800000',
|
||||
\'purple': '#800080',
|
||||
\'fuchsia': '#ff00ff',
|
||||
\'green': '#008000',
|
||||
\'lime': '#00ff00',
|
||||
\'olive': '#808000',
|
||||
\'yellow': '#ffff00',
|
||||
\'navy': '#000080',
|
||||
\'blue': '#0000ff',
|
||||
\'teal': '#008080',
|
||||
\'aqua': '#00ffff',
|
||||
\'aliceblue': '#f0f8ff',
|
||||
\'antiquewhite': '#faebd7',
|
||||
\'aquamarine': '#7fffd4',
|
||||
\'azure': '#f0ffff',
|
||||
\'beige': '#f5f5dc',
|
||||
\'bisque': '#ffe4c4',
|
||||
\'blanchedalmond': '#ffebcd',
|
||||
\'blueviolet': '#8a2be2',
|
||||
\'brown': '#a52a2a',
|
||||
\'burlywood': '#deb887',
|
||||
\'cadetblue': '#5f9ea0',
|
||||
\'chartreuse': '#7fff00',
|
||||
\'chocolate': '#d2691e',
|
||||
\'coral': '#ff7f50',
|
||||
\'cornflowerblue': '#6495ed',
|
||||
\'cornsilk': '#fff8dc',
|
||||
\'crimson': '#dc143c',
|
||||
\'cyan': '#00ffff',
|
||||
\'darkblue': '#00008b',
|
||||
\'darkcyan': '#008b8b',
|
||||
\'darkgoldenrod': '#b8860b',
|
||||
\'darkgray': '#a9a9a9',
|
||||
\'darkgreen': '#006400',
|
||||
\'darkgrey': '#a9a9a9',
|
||||
\'darkkhaki': '#bdb76b',
|
||||
\'darkmagenta': '#8b008b',
|
||||
\'darkolivegreen': '#556b2f',
|
||||
\'darkorchid': '#9932cc',
|
||||
\'darkred': '#8b0000',
|
||||
\'darksalmon': '#e9967a',
|
||||
\'darkseagreen': '#8fbc8f',
|
||||
\'darkslateblue': '#483d8b',
|
||||
\'darkslategray': '#2f4f4f',
|
||||
\'darkslategrey': '#2f4f4f',
|
||||
\'darkturquoise': '#00ced1',
|
||||
\'darkviolet': '#9400d3',
|
||||
\'darkorange': '#ff8c00',
|
||||
\'deeppink': '#ff1493',
|
||||
\'deepskyblue': '#00bfff',
|
||||
\'dimgray': '#696969',
|
||||
\'dimgrey': '#696969',
|
||||
\'dodgerblue': '#1e90ff',
|
||||
\'firebrick': '#b22222',
|
||||
\'floralwhite': '#fffaf0',
|
||||
\'forestgreen': '#228b22',
|
||||
\'gainsboro': '#dcdcdc',
|
||||
\'ghostwhite': '#f8f8ff',
|
||||
\'gold': '#ffd700',
|
||||
\'goldenrod': '#daa520',
|
||||
\'greenyellow': '#adff2f',
|
||||
\'grey': '#808080',
|
||||
\'honeydew': '#f0fff0',
|
||||
\'hotpink': '#ff69b4',
|
||||
\'indianred': '#cd5c5c',
|
||||
\'indigo': '#4b0082',
|
||||
\'ivory': '#fffff0',
|
||||
\'khaki': '#f0e68c',
|
||||
\'lavender': '#e6e6fa',
|
||||
\'lavenderblush': '#fff0f5',
|
||||
\'lawngreen': '#7cfc00',
|
||||
\'lemonchiffon': '#fffacd',
|
||||
\'lightblue': '#add8e6',
|
||||
\'lightcoral': '#f08080',
|
||||
\'lightcyan': '#e0ffff',
|
||||
\'lightgoldenrodyellow': '#fafad2',
|
||||
\'lightgray': '#d3d3d3',
|
||||
\'lightgreen': '#90ee90',
|
||||
\'lightgrey': '#d3d3d3',
|
||||
\'lightpink': '#ffb6c1',
|
||||
\'lightsalmon': '#ffa07a',
|
||||
\'lightseagreen': '#20b2aa',
|
||||
\'lightskyblue': '#87cefa',
|
||||
\'lightslategray': '#778899',
|
||||
\'lightslategrey': '#778899',
|
||||
\'lightsteelblue': '#b0c4de',
|
||||
\'lightyellow': '#ffffe0',
|
||||
\'limegreen': '#32cd32',
|
||||
\'linen': '#faf0e6',
|
||||
\'magenta': '#ff00ff',
|
||||
\'mediumaquamarine': '#66cdaa',
|
||||
\'mediumblue': '#0000cd',
|
||||
\'mediumorchid': '#ba55d3',
|
||||
\'mediumpurple': '#9370d8',
|
||||
\'mediumseagreen': '#3cb371',
|
||||
\'mediumslateblue': '#7b68ee',
|
||||
\'mediumspringgreen': '#00fa9a',
|
||||
\'mediumturquoise': '#48d1cc',
|
||||
\'mediumvioletred': '#c71585',
|
||||
\'midnightblue': '#191970',
|
||||
\'mintcream': '#f5fffa',
|
||||
\'mistyrose': '#ffe4e1',
|
||||
\'moccasin': '#ffe4b5',
|
||||
\'navajowhite': '#ffdead',
|
||||
\'oldlace': '#fdf5e6',
|
||||
\'olivedrab': '#6b8e23',
|
||||
\'orange': '#ffa500',
|
||||
\'orangered': '#ff4500',
|
||||
\'orchid': '#da70d6',
|
||||
\'palegoldenrod': '#eee8aa',
|
||||
\'palegreen': '#98fb98',
|
||||
\'paleturquoise': '#afeeee',
|
||||
\'palevioletred': '#d87093',
|
||||
\'papayawhip': '#ffefd5',
|
||||
\'peachpuff': '#ffdab9',
|
||||
\'peru': '#cd853f',
|
||||
\'pink': '#ffc0cb',
|
||||
\'plum': '#dda0dd',
|
||||
\'powderblue': '#b0e0e6',
|
||||
\'rosybrown': '#bc8f8f',
|
||||
\'royalblue': '#4169e1',
|
||||
\'saddlebrown': '#8b4513',
|
||||
\'salmon': '#fa8072',
|
||||
\'sandybrown': '#f4a460',
|
||||
\'seagreen': '#2e8b57',
|
||||
\'seashell': '#fff5ee',
|
||||
\'sienna': '#a0522d',
|
||||
\'skyblue': '#87ceeb',
|
||||
\'slateblue': '#6a5acd',
|
||||
\'slategray': '#708090',
|
||||
\'slategrey': '#708090',
|
||||
\'snow': '#fffafa',
|
||||
\'springgreen': '#00ff7f',
|
||||
\'steelblue': '#4682b4',
|
||||
\'tan': '#d2b48c',
|
||||
\'thistle': '#d8bfd8',
|
||||
\'tomato': '#ff6347',
|
||||
\'turquoise': '#40e0d0',
|
||||
\'violet': '#ee82ee',
|
||||
\'wheat': '#f5deb3',
|
||||
\'whitesmoke': '#f5f5f5',
|
||||
\'yellowgreen': '#9acd32'
|
||||
\}
|
||||
|
||||
"let w:colorDictRegExp = '\('
|
||||
for _color in keys(w:colorDict)
|
||||
"let w:colorDictRegExp.='\<'._color.'\>\|'
|
||||
call s:MatchColorValue(strpart(w:colorDict[tolower(_color)], 1), '\<\c'._color.'\>')
|
||||
endfor
|
||||
"let w:colorDictRegExp=strpart(w:colorDictRegExp, 0, len(w:colorDictRegExp)-2).'\)\c'
|
||||
endfunction
|
||||
|
||||
function! s:ProcessByLine(w)
|
||||
call s:PreviewCSSColor(getline(a:w))
|
||||
endfunction
|
||||
|
||||
function! s:PreviewCSSColor(str)
|
||||
"if !exists('&w:colorDictRegExp')
|
||||
"endif
|
||||
|
||||
let line=a:str "getline(a:w)
|
||||
let colorexps = {
|
||||
\ 'hex' : '#[0-9A-Fa-f]\{3\}\>\|#[0-9A-Fa-f]\{6\}\>',
|
||||
\ 'rgba' : 'rgba\?(\s*\(\d\{1,3}%\?\)\s*,\s*\(\d\{1,3}%\?\)\s*,\s*\(\d\{1,3}%\?\)\s*\%(,[^)]*\)\?)',
|
||||
\ 'hsla' : 'hsla\?(\s*\(\d\{1,3}%\?\)\s*,\s*\(\d\{1,3}%\?\)\s*,\s*\(\d\{1,3}%\?\)\s*\%(,[^)]*\)\?)'
|
||||
\ }
|
||||
"\ 'color': w:colorDictRegExp
|
||||
|
||||
"let foundcolor=''
|
||||
|
||||
for exp in keys(colorexps)
|
||||
let place=0
|
||||
|
||||
if exists("foundcolor")
|
||||
unlet foundcolor
|
||||
endif
|
||||
|
||||
while 1
|
||||
if exp=='rgba'||exp=='hsla'
|
||||
let foundcolor = matchlist(a:str, colorexps[exp], place)
|
||||
else
|
||||
let foundcolor = matchstr(a:str, colorexps[exp], place)
|
||||
endif
|
||||
|
||||
let place = matchend(a:str, colorexps[exp], place)
|
||||
|
||||
if empty(foundcolor)
|
||||
break
|
||||
endif
|
||||
|
||||
if exp=='hex'
|
||||
let part = foundcolor.'\>'
|
||||
else
|
||||
let part = foundcolor[0]
|
||||
endif
|
||||
|
||||
if exp=='hex'
|
||||
if len(foundcolor) == 4
|
||||
let foundcolor = substitute(foundcolor, '[[:xdigit:]]', '&&', 'g')
|
||||
endif
|
||||
call s:MatchColorValue(strpart(foundcolor, 1), part)
|
||||
elseif exp=='rgba'
|
||||
"TODO get rid of duplicated variables
|
||||
call s:MatchColorValue(s:HexForRGBValue(foundcolor[1], foundcolor[2], foundcolor[3]), part)
|
||||
elseif exp=='hsla'
|
||||
call s:MatchColorValue(s:HexForHSLValue(foundcolor[1], foundcolor[2], foundcolor[3]), part)
|
||||
endif
|
||||
endwhile
|
||||
endfor
|
||||
|
||||
endfunction
|
||||
|
||||
if has("gui_running") || &t_Co==256
|
||||
@@ -340,161 +619,14 @@ if has("gui_running") || &t_Co==256
|
||||
hi cssColorfffff0 guibg=#FFFFF0 guifg=#000000 ctermbg=15 ctermfg=16 | syn cluster cssColors add=cssColorfffff0
|
||||
hi cssColorffffff guibg=#FFFFFF guifg=#000000 ctermbg=231 ctermfg=16 | syn cluster cssColors add=cssColorffffff
|
||||
|
||||
" w3c Colors
|
||||
syn keyword cssColor000000 black contained
|
||||
syn keyword cssColorc0c0c0 silver contained
|
||||
syn keyword cssColor808080 gray contained
|
||||
syn match cssColorffffff "\<white\(-\)\@!\>" contained
|
||||
syn keyword cssColor800000 maroon contained
|
||||
syn keyword cssColorff0000 red contained
|
||||
syn keyword cssColor800080 purple contained
|
||||
syn keyword cssColorff00ff fuchsia contained
|
||||
syn keyword cssColor008000 green contained
|
||||
syn keyword cssColor00ff00 lime contained
|
||||
syn keyword cssColor808000 olive contained
|
||||
syn keyword cssColorffff00 yellow contained
|
||||
syn keyword cssColor000080 navy contained
|
||||
syn keyword cssColor0000ff blue contained
|
||||
syn keyword cssColor008080 teal contained
|
||||
syn keyword cssColor00ffff aqua contained
|
||||
"call s:VimCssInit(1)
|
||||
|
||||
" extra colors
|
||||
syn keyword cssColorf0f8ff AliceBlue contained
|
||||
syn keyword cssColorfaebd7 AntiqueWhite contained
|
||||
syn keyword cssColor7fffd4 Aquamarine contained
|
||||
syn keyword cssColorf0ffff Azure contained
|
||||
syn keyword cssColorf5f5dc Beige contained
|
||||
syn keyword cssColorffe4c4 Bisque contained
|
||||
syn keyword cssColorffebcd BlanchedAlmond contained
|
||||
syn keyword cssColor8a2be2 BlueViolet contained
|
||||
syn keyword cssColora52a2a Brown contained
|
||||
syn keyword cssColordeb887 BurlyWood contained
|
||||
syn keyword cssColor5f9ea0 CadetBlue contained
|
||||
syn keyword cssColor7fff00 Chartreuse contained
|
||||
syn keyword cssColord2691e Chocolate contained
|
||||
syn keyword cssColorff7f50 Coral contained
|
||||
syn keyword cssColor6495ed CornflowerBlue contained
|
||||
syn keyword cssColorfff8dc Cornsilk contained
|
||||
syn keyword cssColordc143c Crimson contained
|
||||
syn keyword cssColor00ffff Cyan contained
|
||||
syn keyword cssColor00008b DarkBlue contained
|
||||
syn keyword cssColor008b8b DarkCyan contained
|
||||
syn keyword cssColorb8860b DarkGoldenRod contained
|
||||
syn keyword cssColora9a9a9 DarkGray contained
|
||||
syn keyword cssColor006400 DarkGreen contained
|
||||
syn keyword cssColora9a9a9 DarkGrey contained
|
||||
syn keyword cssColorbdb76b DarkKhaki contained
|
||||
syn keyword cssColor8b008b DarkMagenta contained
|
||||
syn keyword cssColor556b2f DarkOliveGreen contained
|
||||
syn keyword cssColor9932cc DarkOrchid contained
|
||||
syn keyword cssColor8b0000 DarkRed contained
|
||||
syn keyword cssColore9967a DarkSalmon contained
|
||||
syn keyword cssColor8fbc8f DarkSeaGreen contained
|
||||
syn keyword cssColor483d8b DarkSlateBlue contained
|
||||
syn keyword cssColor2f4f4f DarkSlateGray contained
|
||||
syn keyword cssColor2f4f4f DarkSlateGrey contained
|
||||
syn keyword cssColor00ced1 DarkTurquoise contained
|
||||
syn keyword cssColor9400d3 DarkViolet contained
|
||||
syn keyword cssColorff8c00 Darkorange contained
|
||||
syn keyword cssColorff1493 DeepPink contained
|
||||
syn keyword cssColor00bfff DeepSkyBlue contained
|
||||
syn keyword cssColor696969 DimGray contained
|
||||
syn keyword cssColor696969 DimGrey contained
|
||||
syn keyword cssColor1e90ff DodgerBlue contained
|
||||
syn keyword cssColorb22222 FireBrick contained
|
||||
syn keyword cssColorfffaf0 FloralWhite contained
|
||||
syn keyword cssColor228b22 ForestGreen contained
|
||||
syn keyword cssColordcdcdc Gainsboro contained
|
||||
syn keyword cssColorf8f8ff GhostWhite contained
|
||||
syn keyword cssColorffd700 Gold contained
|
||||
syn keyword cssColordaa520 GoldenRod contained
|
||||
syn keyword cssColoradff2f GreenYellow contained
|
||||
syn keyword cssColor808080 Grey contained
|
||||
syn keyword cssColorf0fff0 HoneyDew contained
|
||||
syn keyword cssColorff69b4 HotPink contained
|
||||
syn keyword cssColorcd5c5c IndianRed contained
|
||||
syn keyword cssColor4b0082 Indigo contained
|
||||
syn keyword cssColorfffff0 Ivory contained
|
||||
syn keyword cssColorf0e68c Khaki contained
|
||||
syn keyword cssColore6e6fa Lavender contained
|
||||
syn keyword cssColorfff0f5 LavenderBlush contained
|
||||
syn keyword cssColor7cfc00 LawnGreen contained
|
||||
syn keyword cssColorfffacd LemonChiffon contained
|
||||
syn keyword cssColoradd8e6 LightBlue contained
|
||||
syn keyword cssColorf08080 LightCoral contained
|
||||
syn keyword cssColore0ffff LightCyan contained
|
||||
syn keyword cssColorfafad2 LightGoldenRodYellow contained
|
||||
syn keyword cssColord3d3d3 LightGray contained
|
||||
syn keyword cssColor90ee90 LightGreen contained
|
||||
syn keyword cssColord3d3d3 LightGrey contained
|
||||
syn keyword cssColorffb6c1 LightPink contained
|
||||
syn keyword cssColorffa07a LightSalmon contained
|
||||
syn keyword cssColor20b2aa LightSeaGreen contained
|
||||
syn keyword cssColor87cefa LightSkyBlue contained
|
||||
syn keyword cssColor778899 LightSlateGray contained
|
||||
syn keyword cssColor778899 LightSlateGrey contained
|
||||
syn keyword cssColorb0c4de LightSteelBlue contained
|
||||
syn keyword cssColorffffe0 LightYellow contained
|
||||
syn keyword cssColor32cd32 LimeGreen contained
|
||||
syn keyword cssColorfaf0e6 Linen contained
|
||||
syn keyword cssColorff00ff Magenta contained
|
||||
syn keyword cssColor66cdaa MediumAquaMarine contained
|
||||
syn keyword cssColor0000cd MediumBlue contained
|
||||
syn keyword cssColorba55d3 MediumOrchid contained
|
||||
syn keyword cssColor9370d8 MediumPurple contained
|
||||
syn keyword cssColor3cb371 MediumSeaGreen contained
|
||||
syn keyword cssColor7b68ee MediumSlateBlue contained
|
||||
syn keyword cssColor00fa9a MediumSpringGreen contained
|
||||
syn keyword cssColor48d1cc MediumTurquoise contained
|
||||
syn keyword cssColorc71585 MediumVioletRed contained
|
||||
syn keyword cssColor191970 MidnightBlue contained
|
||||
syn keyword cssColorf5fffa MintCream contained
|
||||
syn keyword cssColorffe4e1 MistyRose contained
|
||||
syn keyword cssColorffe4b5 Moccasin contained
|
||||
syn keyword cssColorffdead NavajoWhite contained
|
||||
syn keyword cssColorfdf5e6 OldLace contained
|
||||
syn keyword cssColor6b8e23 OliveDrab contained
|
||||
syn keyword cssColorffa500 Orange contained
|
||||
syn keyword cssColorff4500 OrangeRed contained
|
||||
syn keyword cssColorda70d6 Orchid contained
|
||||
syn keyword cssColoreee8aa PaleGoldenRod contained
|
||||
syn keyword cssColor98fb98 PaleGreen contained
|
||||
syn keyword cssColorafeeee PaleTurquoise contained
|
||||
syn keyword cssColord87093 PaleVioletRed contained
|
||||
syn keyword cssColorffefd5 PapayaWhip contained
|
||||
syn keyword cssColorffdab9 PeachPuff contained
|
||||
syn keyword cssColorcd853f Peru contained
|
||||
syn keyword cssColorffc0cb Pink contained
|
||||
syn keyword cssColordda0dd Plum contained
|
||||
syn keyword cssColorb0e0e6 PowderBlue contained
|
||||
syn keyword cssColorbc8f8f RosyBrown contained
|
||||
syn keyword cssColor4169e1 RoyalBlue contained
|
||||
syn keyword cssColor8b4513 SaddleBrown contained
|
||||
syn keyword cssColorfa8072 Salmon contained
|
||||
syn keyword cssColorf4a460 SandyBrown contained
|
||||
syn keyword cssColor2e8b57 SeaGreen contained
|
||||
syn keyword cssColorfff5ee SeaShell contained
|
||||
syn keyword cssColora0522d Sienna contained
|
||||
syn keyword cssColor87ceeb SkyBlue contained
|
||||
syn keyword cssColor6a5acd SlateBlue contained
|
||||
syn keyword cssColor708090 SlateGray contained
|
||||
syn keyword cssColor708090 SlateGrey contained
|
||||
syn keyword cssColorfffafa Snow contained
|
||||
syn keyword cssColor00ff7f SpringGreen contained
|
||||
syn keyword cssColor4682b4 SteelBlue contained
|
||||
syn keyword cssColord2b48c Tan contained
|
||||
syn keyword cssColord8bfd8 Thistle contained
|
||||
syn keyword cssColorff6347 Tomato contained
|
||||
syn keyword cssColor40e0d0 Turquoise contained
|
||||
syn keyword cssColoree82ee Violet contained
|
||||
syn keyword cssColorf5deb3 Wheat contained
|
||||
syn keyword cssColorf5f5f5 WhiteSmoke contained
|
||||
syn keyword cssColor9acd32 YellowGreen contained
|
||||
":augroup css
|
||||
"au!
|
||||
autocmd CursorMovedI <buffer> silent call s:ProcessByLine('.')
|
||||
autocmd ColorScheme <buffer> silent call s:VimCssInit(1)
|
||||
autocmd BufEnter <buffer> silent call s:VimCssInit(1)
|
||||
":augroup END
|
||||
|
||||
let view = winsaveview()
|
||||
%call s:PreviewCSSColorInLine()
|
||||
call winrestview(view)
|
||||
|
||||
autocmd CursorMoved <buffer> silent call s:PreviewCSSColorInLine()
|
||||
autocmd CursorMovedI <buffer> silent call s:PreviewCSSColorInLine()
|
||||
"autocmd CursorMoved <buffer> silent call s:ProcessByLine('.')
|
||||
endif
|
||||
@@ -9,3 +9,4 @@ syn region coffeeScript start=#<script [^>]*type="text/coffeescript"[^>]*>#
|
||||
\ end=#</script>#me=s-1 keepend
|
||||
\ contains=@htmlCoffeeScript,htmlScriptTag,@htmlPreproc
|
||||
\ containedin=htmlHead
|
||||
syn include syntax/css/vim-coloresque.vim
|
||||
|
||||
1
after/syntax/less.vim
Normal file
1
after/syntax/less.vim
Normal file
@@ -0,0 +1 @@
|
||||
syn include syntax/css/vim-coloresque.vim
|
||||
32
after/syntax/rspec.vim
Normal file
32
after/syntax/rspec.vim
Normal file
@@ -0,0 +1,32 @@
|
||||
"
|
||||
" An rspec syntax file
|
||||
" Originally from http://www.vim.org/scripts/script.php?script_id=2286
|
||||
"
|
||||
"
|
||||
|
||||
runtime! syntax/ruby.vim
|
||||
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
|
||||
highlight link rspecGroupMethods Type
|
||||
|
||||
syntax keyword rspecBeforeAndAfter after after_suite_parts append_after append_before before before_suite_parts prepend_after prepend_before around
|
||||
highlight link rspecBeforeAndAfter Statement
|
||||
|
||||
syntax keyword rspecMocks double mock stub stub_chain
|
||||
highlight link rspecMocks Constant
|
||||
|
||||
syntax keyword rspecMockMethods and_raise and_return and_throw and_yield build_child called_max_times expected_args invoke matches
|
||||
highlight link rspecMockMethods Function
|
||||
|
||||
syntax keyword rspecKeywords should should_not should_not_receive should_receive
|
||||
highlight link rspecKeywords Constant
|
||||
|
||||
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\+\>/
|
||||
highlight link rspecMatchers Function
|
||||
|
||||
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 rspecMessageExpectation Function
|
||||
|
||||
let b:current_syntax = 'rspec'
|
||||
@@ -15,6 +15,6 @@ syn match tomdocDescriptions +\s*Public:+he=e-1 containedin=rubyComment containe
|
||||
syn match tomdocDescriptions +\s*Internal:+he=e-1 containedin=rubyComment contained
|
||||
syn match tomdocDescriptions +\s*Deprecated:+he=e-1 containedin=rubyComment contained
|
||||
|
||||
hi default link tomdocDescriptions TODO
|
||||
hi default link tomdocKeywords TODO
|
||||
hi default link tomdocDescriptions String
|
||||
hi default link tomdocKeywords String
|
||||
hi default link tomdocArguments HELP
|
||||
|
||||
33
after/syntax/rust.vim
Normal file
33
after/syntax/rust.vim
Normal file
@@ -0,0 +1,33 @@
|
||||
if !exists('g:rust_conceal') || !has('conceal') || &enc != 'utf-8'
|
||||
finish
|
||||
endif
|
||||
|
||||
" For those who don't want to see `::`...
|
||||
if exists('g:rust_conceal_mod_path')
|
||||
syn match rustNiceOperator "::" conceal cchar=ㆍ
|
||||
endif
|
||||
|
||||
syn match rustRightArrowHead contained ">" conceal cchar=
|
||||
syn match rustRightArrowTail contained "-" conceal cchar=⟶
|
||||
syn match rustNiceOperator "->" contains=rustRightArrowHead,rustRightArrowTail
|
||||
|
||||
syn match rustFatRightArrowHead contained ">" conceal cchar=
|
||||
syn match rustFatRightArrowTail contained "=" conceal cchar=⟹
|
||||
syn match rustNiceOperator "=>" contains=rustFatRightArrowHead,rustFatRightArrowTail
|
||||
|
||||
syn match rustNiceOperator /\<\@!_\(_*\>\)\@=/ conceal cchar=′
|
||||
|
||||
" For those who don't want to see `pub`...
|
||||
if exists('g:rust_conceal_pub')
|
||||
syn match rustPublicSigil contained "pu" conceal cchar=*
|
||||
syn match rustPublicRest contained "b" conceal cchar=
|
||||
syn match rustNiceOperator "pub " contains=rustPublicSigil,rustPublicRest
|
||||
endif
|
||||
|
||||
hi link rustNiceOperator Operator
|
||||
|
||||
if !exists('g:rust_conceal_mod_path')
|
||||
hi! link Conceal Operator
|
||||
endif
|
||||
|
||||
setlocal conceallevel=2
|
||||
@@ -1 +1 @@
|
||||
syn cluster sassCssAttributes add=@cssColors
|
||||
syn include syntax/css/vim-coloresque.vim
|
||||
|
||||
1
after/syntax/scss.vim
Normal file
1
after/syntax/scss.vim
Normal file
@@ -0,0 +1 @@
|
||||
syn include syntax/css/vim-coloresque.vim
|
||||
@@ -1 +1 @@
|
||||
syn cluster stylusCssAttributes add=@cssColors
|
||||
syn include syntax/css/vim-coloresque.vim
|
||||
|
||||
4
after/syntax/tex.vim
Normal file
4
after/syntax/tex.vim
Normal file
@@ -0,0 +1,4 @@
|
||||
" 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
|
||||
1
after/syntax/vim.vim
Normal file
1
after/syntax/vim.vim
Normal file
@@ -0,0 +1 @@
|
||||
syn include syntax/css/vim-coloresque.vim
|
||||
@@ -1,219 +0,0 @@
|
||||
" Vim omni completion file
|
||||
" Language: Erlang
|
||||
" Author: Oscar Hellström <oscar@oscarh.net>
|
||||
" Contributors: kTT (http://github.com/kTT)
|
||||
" Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
|
||||
" Eduardo Lopez (http://github.com/tapichu)
|
||||
" Zhihui Jiao (http://github.com/onlychoice)
|
||||
" License: Vim license
|
||||
" Version: 2012/11/26
|
||||
|
||||
if !exists('g:erlang_completion_cache')
|
||||
let g:erlang_completion_cache = 1
|
||||
endif
|
||||
|
||||
" Completion program path
|
||||
let s:erlang_complete_file = expand('<sfile>:p:h') . '/erlang_complete.erl'
|
||||
|
||||
" Modules cache used to speed up the completion
|
||||
let s:modules_cache = {}
|
||||
|
||||
" File cache for persistence between Vim sessions
|
||||
if filewritable(expand('<sfile>:p:h')) == 2
|
||||
let s:file_cache = expand('<sfile>:p:h') . '/vimerl_cache'
|
||||
else
|
||||
let s:file_cache = '/tmp/vimerl_cache'
|
||||
endif
|
||||
|
||||
" Patterns for completions
|
||||
let s:erlang_local_func_beg = '\(\<[0-9A-Za-z_-]*\|\s*\)$'
|
||||
let s:erlang_external_func_beg = '\<[0-9A-Za-z_-]\+:[0-9A-Za-z_-]*$'
|
||||
let s:erlang_blank_line = '^\s*\(%.*\)\?$'
|
||||
|
||||
" Main function for completion
|
||||
function erlang_complete#Complete(findstart, base)
|
||||
let lnum = line('.')
|
||||
let column = col('.')
|
||||
let line = strpart(getline('.'), 0, column - 1)
|
||||
|
||||
" 1) Check if the char to the left of us are part of a function call
|
||||
"
|
||||
" Nothing interesting is written at the char just before the cursor
|
||||
" This means _anything_ could be started here
|
||||
" In this case, keyword completion should probably be used,
|
||||
" for now we'll only try and complete local functions.
|
||||
"
|
||||
" TODO: Examine if we can stare Identifiers end complete on them
|
||||
" Is this worth it? Is /completion/ of a "blank" wanted? Can we consider
|
||||
" `(' interesting and check if we are in a function call etc.?
|
||||
if line[column - 2] !~ '[0-9A-Za-z:_-]'
|
||||
if a:findstart
|
||||
return column
|
||||
else
|
||||
return s:ErlangFindLocalFunc(a:base)
|
||||
endif
|
||||
endif
|
||||
|
||||
" 2) Function in external module
|
||||
if line =~ s:erlang_external_func_beg
|
||||
let delimiter = match(line, ':[0-9A-Za-z_-]*$') + 1
|
||||
if a:findstart
|
||||
return delimiter
|
||||
else
|
||||
let module = matchstr(line[:-2], '\<\k*\>$')
|
||||
return s:ErlangFindExternalFunc(module, a:base)
|
||||
endif
|
||||
endif
|
||||
|
||||
" 3) Local function
|
||||
if line =~ s:erlang_local_func_beg
|
||||
let funcstart = match(line, ':\@<![0-9A-Za-z_-]*$')
|
||||
if a:findstart
|
||||
return funcstart
|
||||
else
|
||||
return s:ErlangFindLocalFunc(a:base)
|
||||
endif
|
||||
endif
|
||||
|
||||
" 4) Unhandled situation
|
||||
if a:findstart
|
||||
return -1
|
||||
else
|
||||
return []
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" Find the next non-blank line
|
||||
function s:ErlangFindNextNonBlank(lnum)
|
||||
let lnum = nextnonblank(a:lnum + 1)
|
||||
let line = getline(lnum)
|
||||
|
||||
while line =~ s:erlang_blank_line && 0 != lnum
|
||||
let lnum = nextnonblank(lnum + 1)
|
||||
let line = getline(lnum)
|
||||
endwhile
|
||||
|
||||
return lnum
|
||||
endfunction
|
||||
|
||||
" Find external function names
|
||||
function s:ErlangFindExternalFunc(module, base)
|
||||
" If the module is cached, load its functions
|
||||
if has_key(s:modules_cache, a:module)
|
||||
for field_cache in get(s:modules_cache, a:module)
|
||||
if match(field_cache.word, a:base) == 0
|
||||
call complete_add(field_cache)
|
||||
endif
|
||||
endfor
|
||||
|
||||
return []
|
||||
endif
|
||||
|
||||
let functions = system(s:erlang_complete_file . ' ' . a:module)
|
||||
for function_spec in split(functions, '\n')
|
||||
if match(function_spec, a:base) == 0
|
||||
let function_name = matchstr(function_spec, a:base . '\w*')
|
||||
let field = {'word': function_name . '(', 'abbr': function_spec,
|
||||
\ 'kind': 'f', 'dup': 1}
|
||||
call complete_add(field)
|
||||
|
||||
" Populate the cache only when iterating over all the
|
||||
" module functions (i.e. no prefix for the completion)
|
||||
if g:erlang_completion_cache && a:base == ''
|
||||
if !has_key(s:modules_cache, a:module)
|
||||
let s:modules_cache[a:module] = [field]
|
||||
else
|
||||
let fields_cache = get(s:modules_cache, a:module)
|
||||
let s:modules_cache[a:module] = add(fields_cache, field)
|
||||
endif
|
||||
endif
|
||||
|
||||
" The user entered some text, so stop the completion
|
||||
if complete_check()
|
||||
" The module couldn't be entirely cached
|
||||
if has_key(s:modules_cache, a:module)
|
||||
call remove(s:modules_cache, a:module)
|
||||
endif
|
||||
break
|
||||
endif
|
||||
endif
|
||||
endfor
|
||||
|
||||
call s:ErlangWriteCache(a:module)
|
||||
|
||||
return []
|
||||
endfunction
|
||||
|
||||
" Find local function names
|
||||
function s:ErlangFindLocalFunc(base)
|
||||
" Begin at line 1
|
||||
let lnum = s:ErlangFindNextNonBlank(1)
|
||||
|
||||
if "" == a:base
|
||||
let base = '\w' " Used to match against word symbol
|
||||
else
|
||||
let base = a:base
|
||||
endif
|
||||
|
||||
while 0 != lnum && !complete_check()
|
||||
let line = getline(lnum)
|
||||
let function_name = matchstr(line, '^' . base . '[0-9A-Za-z_-]\+(\@=')
|
||||
if function_name != ""
|
||||
call complete_add({'word': function_name, 'kind': 'f'})
|
||||
endif
|
||||
let lnum = s:ErlangFindNextNonBlank(lnum)
|
||||
endwhile
|
||||
|
||||
return []
|
||||
endfunction
|
||||
|
||||
function s:ErlangLoadCache()
|
||||
if filereadable(s:file_cache)
|
||||
for line in readfile(s:file_cache)
|
||||
let cache_entry = eval(line)
|
||||
" cache_entry is a dict with just one key with the
|
||||
" module name and the function list we are going to
|
||||
" add to the memory cache as the value of this key
|
||||
for mod_name in keys(cache_entry)
|
||||
let func_list = get(cache_entry, mod_name)
|
||||
let s:modules_cache[mod_name] = func_list
|
||||
endfor
|
||||
endfor
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function s:ErlangWriteCache(module)
|
||||
" Write all the module functions to the cache file
|
||||
if has_key(s:modules_cache, a:module)
|
||||
let func_list = get(s:modules_cache, a:module)
|
||||
if len(func_list) > 0
|
||||
let cache_entry = {a:module : func_list}
|
||||
execute 'redir >>' . s:file_cache
|
||||
silent echon cache_entry
|
||||
silent echon "\n"
|
||||
redir END
|
||||
endif
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function s:ErlangPurgeCache(...)
|
||||
for mod_name in a:000
|
||||
if has_key(s:modules_cache, mod_name)
|
||||
call remove(s:modules_cache, mod_name)
|
||||
endif
|
||||
endfor
|
||||
|
||||
" Delete the old cache file
|
||||
call delete(s:file_cache)
|
||||
|
||||
" Write a new one
|
||||
for mod_name in keys(s:modules_cache)
|
||||
call s:ErlangWriteCache(mod_name)
|
||||
endfor
|
||||
endfunction
|
||||
|
||||
" Load the file cache when this script is autoloaded
|
||||
call s:ErlangLoadCache()
|
||||
|
||||
" Command for removing modules from the cache
|
||||
command -nargs=+ ErlangPurgeCache silent call s:ErlangPurgeCache(<f-args>)
|
||||
161
autoload/erlangcomplete.vim
Normal file
161
autoload/erlangcomplete.vim
Normal file
@@ -0,0 +1,161 @@
|
||||
" ------------------------------------------------------------------------------
|
||||
" Vim omni-completion script
|
||||
" Author: Oscar Hellström
|
||||
" Email: oscar@oscarh.net
|
||||
" Version: 2010-08-10
|
||||
" Contributors: kTT (http://github.com/kTT)
|
||||
" Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
|
||||
" ------------------------------------------------------------------------------
|
||||
|
||||
" Patterns for completions {{{1
|
||||
let s:erlangLocalFuncBeg = '\(\<[0-9A-Za-z_-]*\|\s*\)$'
|
||||
let s:erlangExternalFuncBeg = '\<[0-9A-Za-z_-]\+:[0-9A-Za-z_-]*$'
|
||||
let s:ErlangBlankLine = '^\s*\(%.*\)\?$'
|
||||
let s:erlangCompletionPath = expand('<sfile>:p:h') . '/erlang_completion.erl'
|
||||
|
||||
if !exists('g:erlangCompletionGrep')
|
||||
let g:erlangCompletionGrep = 'grep'
|
||||
endif
|
||||
|
||||
if !exists('g:erlangManSuffix')
|
||||
let g:erlangManSuffix = ''
|
||||
endif
|
||||
|
||||
if !exists('g:erlangManPath')
|
||||
let g:erlangManPath = '/usr/lib/erlang/man'
|
||||
endif
|
||||
|
||||
if !exists('g:erlangCompletionDisplayDoc')
|
||||
let g:erlangCompletionDisplayDoc = 1
|
||||
endif
|
||||
|
||||
" Main function for completion {{{1
|
||||
function! erlangcomplete#Complete(findstart, base)
|
||||
" 0) Init {{{2
|
||||
let lnum = line('.')
|
||||
let column = col('.')
|
||||
let line = strpart(getline('.'), 0, column - 1)
|
||||
|
||||
" 1) First, check if completion is impossible {{{2
|
||||
if line =~ '[^~\\]%'
|
||||
return -1
|
||||
endif
|
||||
|
||||
"echo "line[col - 1]:" . line[column - 1] . " line[col - 2]:" . line[column - 2] . "\n" . line . "\n"
|
||||
|
||||
" 2) Check if the char to the left of us are part of a function call {{{2
|
||||
"
|
||||
" Nothing interesting is written at the char just before the cursor
|
||||
" This means _anything_ could be started here
|
||||
" In this case, keyword completion should probably be used,
|
||||
" for now we'll only try and complete local functions.
|
||||
" TODO: Examine if we can stare Identifiers end complete on them
|
||||
" Is this worth it? Is /completion/ of a "blank" wanted? Can we consider (
|
||||
" interesting and check if we are in a function call etc.?
|
||||
if line[column - 2] !~ '[0-9A-Za-z:_-]'
|
||||
if a:findstart
|
||||
return column
|
||||
else
|
||||
return s:erlangFindLocalFunc(a:base)
|
||||
endif
|
||||
endif
|
||||
|
||||
|
||||
" 3) Function in external module {{{2
|
||||
if line =~ s:erlangExternalFuncBeg
|
||||
let delimiter = match(line, ':[0-9A-Za-z_-]*$') + 1
|
||||
if a:findstart
|
||||
return delimiter
|
||||
else
|
||||
let module = matchstr(line[:-2], '\<\k*\>$')
|
||||
return s:erlangFindExternalFunc(module, a:base)
|
||||
endif
|
||||
endif
|
||||
|
||||
" 4) Local function {{{2
|
||||
if line =~ s:erlangLocalFuncBeg
|
||||
let funcstart = match(line, ':\@<![0-9A-Za-z_-]*$')
|
||||
if a:findstart
|
||||
return funcstart
|
||||
else
|
||||
return s:erlangFindLocalFunc(a:base)
|
||||
endif
|
||||
endif
|
||||
|
||||
" 5) Unhandled situation {{{2
|
||||
if a:findstart
|
||||
return -1
|
||||
else
|
||||
return []
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" Auxiliary functions for completion {{{1
|
||||
" Find the next non-blank line {{{2
|
||||
function s:erlangFindNextNonBlank(lnum)
|
||||
let lnum = nextnonblank(a:lnum + 1)
|
||||
let line = getline(lnum)
|
||||
while line =~ s:ErlangBlankLine && 0 != lnum
|
||||
let lnum = nextnonblank(lnum + 1)
|
||||
let line = getline(lnum)
|
||||
endwhile
|
||||
return lnum
|
||||
endfunction
|
||||
|
||||
" vim: foldmethod=marker:
|
||||
" Find external function names {{{2
|
||||
function s:erlangFindExternalFunc(module, base)
|
||||
" If it's a local module, try to compile it
|
||||
if filereadable(a:module . '.erl') && !filereadable(a:module . '.beam')
|
||||
silent execute '!erlc' a:module . '.erl' '>/dev/null' '2>/dev/null'
|
||||
redraw!
|
||||
endif
|
||||
let functions = system(s:erlangCompletionPath . ' ' . a:module)
|
||||
for element in sort(split(functions, '\n'))
|
||||
if match(element, a:base) == 0
|
||||
let function_name = matchstr(element, a:base . '\w\+')
|
||||
let number_of_args = matchstr(element, '\d\+', len(function_name))
|
||||
let number_of_comma = max([number_of_args - 1, 0])
|
||||
let file_path = g:erlangManPath . '/man?/' . a:module . '\.?' . g:erlangManSuffix
|
||||
" [:-2] cutting some weird characters at the end
|
||||
" becouse grep doesn't support multilines, we have to filter
|
||||
" first by .B and next by looking via function name
|
||||
" if someone have better idea, please change it
|
||||
let description = ''
|
||||
" Don't look man pages if the module is present in the current directory
|
||||
if g:erlangCompletionDisplayDoc != 0 && !filereadable(a:module . '.erl')
|
||||
let system_command = g:erlangCompletionGrep . ' -A 1 "\.B" ' . file_path . ' | grep -EZo "\<' .
|
||||
\ function_name . '\>\((\w+, ){' . number_of_comma . '}[^),]*\) -> .*"'
|
||||
let description = system(system_command)
|
||||
let description = description[:-2]
|
||||
endif
|
||||
if description == ''
|
||||
let description = element " if function doesn't have description e.g. lists:rmerge, put rmerge/2 instead
|
||||
endif
|
||||
let field = {'word': function_name . '(', 'abbr': description, 'kind': 'f', 'dup': 1} " always duplicate functions
|
||||
call complete_add(field)
|
||||
endif
|
||||
endfor
|
||||
return []
|
||||
endfunction
|
||||
|
||||
" Find local function names {{{2
|
||||
function s:erlangFindLocalFunc(base)
|
||||
" begin at line 1
|
||||
let lnum = s:erlangFindNextNonBlank(1)
|
||||
if "" == a:base
|
||||
let base = '\w' " used to match against word symbol
|
||||
else
|
||||
let base = a:base
|
||||
endif
|
||||
while 0 != lnum && !complete_check()
|
||||
let line = getline(lnum)
|
||||
let function_name = matchstr(line, '^' . base . '[0-9A-Za-z_-]\+(\@=')
|
||||
if function_name != ""
|
||||
call complete_add(function_name)
|
||||
endif
|
||||
let lnum = s:erlangFindNextNonBlank(lnum)
|
||||
endwhile
|
||||
return []
|
||||
endfunction
|
||||
|
||||
@@ -28,43 +28,75 @@ if len(s:goarch) == 0
|
||||
endif
|
||||
endif
|
||||
|
||||
function! go#complete#PackageMembers(package, member)
|
||||
silent! let content = system('godoc ' . a:package)
|
||||
if v:shell_error || !len(content)
|
||||
return []
|
||||
endif
|
||||
let lines = filter(split(content, "\n"),"v:val !~ '^\\s\\+$'")
|
||||
try
|
||||
let mx1 = '^\s\+\(\S+\)\s\+=\s\+.*'
|
||||
let mx2 = '^\%(const\|var\|type\|func\) \([A-Z][^ (]\+\).*'
|
||||
let candidates =
|
||||
\ map(filter(copy(lines), 'v:val =~ mx1'), 'substitute(v:val, mx1, "\\1", "")')
|
||||
\ + map(filter(copy(lines), 'v:val =~ mx2'), 'substitute(v:val, mx2, "\\1", "")')
|
||||
return filter(candidates, '!stridx(v:val, a:member)')
|
||||
catch
|
||||
return []
|
||||
endtry
|
||||
endfunction
|
||||
|
||||
function! go#complete#Package(ArgLead, CmdLine, CursorPos)
|
||||
let dirs = []
|
||||
|
||||
let words = split(a:CmdLine, '\s\+', 1)
|
||||
if len(words) > 2
|
||||
" Complete package members
|
||||
return go#complete#PackageMembers(words[1], words[2])
|
||||
endif
|
||||
|
||||
if executable('go')
|
||||
let goroot = substitute(system('go env GOROOT'), '\n', '', 'g')
|
||||
if v:shell_error
|
||||
echo '\'go env GOROOT\' failed'
|
||||
endif
|
||||
let goroot = substitute(system('go env GOROOT'), '\n', '', 'g')
|
||||
if v:shell_error
|
||||
echomsg '\'go env GOROOT\' failed'
|
||||
endif
|
||||
else
|
||||
let goroot = $GOROOT
|
||||
let goroot = $GOROOT
|
||||
endif
|
||||
|
||||
if len(goroot) != 0 && isdirectory(goroot)
|
||||
let dirs += [ goroot ]
|
||||
let dirs += [goroot]
|
||||
endif
|
||||
|
||||
let workspaces = split($GOPATH, ':')
|
||||
let pathsep = ':'
|
||||
if s:goos == 'windows'
|
||||
let pathsep = ';'
|
||||
endif
|
||||
let workspaces = split($GOPATH, pathsep)
|
||||
if workspaces != []
|
||||
let dirs += workspaces
|
||||
let dirs += workspaces
|
||||
endif
|
||||
|
||||
if len(dirs) == 0
|
||||
" should not happen
|
||||
return []
|
||||
" should not happen
|
||||
return []
|
||||
endif
|
||||
|
||||
let ret = {}
|
||||
for dir in dirs
|
||||
let root = expand(dir . '/pkg/' . s:goos . '_' . s:goarch)
|
||||
for i in split(globpath(root, a:ArgLead.'*'), "\n")
|
||||
if isdirectory(i)
|
||||
let i .= '/'
|
||||
elseif i !~ '\.a$'
|
||||
continue
|
||||
endif
|
||||
let i = substitute(substitute(i[len(root)+1:], '[\\]', '/', 'g'), '\.a$', '', 'g')
|
||||
let ret[i] = i
|
||||
" this may expand to multiple lines
|
||||
let root = split(expand(dir . '/pkg/' . s:goos . '_' . s:goarch), "\n")
|
||||
call add(root, expand(dir . '/src'))
|
||||
for r in root
|
||||
for i in split(globpath(r, a:ArgLead.'*'), "\n")
|
||||
if isdirectory(i)
|
||||
let i .= '/'
|
||||
elseif i !~ '\.a$'
|
||||
continue
|
||||
endif
|
||||
let i = substitute(substitute(i[len(r)+1:], '[\\]', '/', 'g'), '\.a$', '', 'g')
|
||||
let ret[i] = i
|
||||
endfor
|
||||
endfor
|
||||
endfor
|
||||
return sort(keys(ret))
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -61,7 +61,7 @@ let charset = [
|
||||
" }}}
|
||||
|
||||
" Attributes_and_Settings: {{{
|
||||
let core_attributes = {'accesskey': [], 'class': [], 'contenteditable': ['true', 'false', ''], 'contextmenu': [], 'dir': ['ltr', 'rtl'], 'draggable': ['true', 'false'], 'hidden': ['hidden', ''], 'id': [], 'lang': lang_tag, 'spellcheck': ['true', 'false', ''], 'style': [], 'tabindex': [], 'title': []}
|
||||
let core_attributes = {'accesskey': [], 'class': [], 'contenteditable': ['true', 'false', ''], 'contextmenu': [], 'dir': ['ltr', 'rtl'], 'draggable': ['true', 'false'], 'hidden': ['hidden', ''], 'id': [], 'is': [], 'lang': lang_tag, 'spellcheck': ['true', 'false', ''], 'style': [], 'tabindex': [], 'title': []}
|
||||
let xml_attributes = {'xml:lang': lang_tag, 'xml:space': ['preserve'], 'xml:base': [], 'xmlns': ['http://www.w3.org/1999/xhtml', 'http://www.w3.org/1998/Math/MathML', 'http://www.w3.org/2000/svg', 'http://www.w3.org/1999/xlink']}
|
||||
|
||||
let body_attributes = {}
|
||||
@@ -101,6 +101,7 @@ let attributes_value = {
|
||||
\ 'disabled': ['Bool', ''],
|
||||
\ 'draggable': ['true/false', ''],
|
||||
\ 'enctype': ['Token', ''],
|
||||
\ 'extends': ['Text', ''],
|
||||
\ 'for': ['ID', ''],
|
||||
\ 'form': ['ID', ''],
|
||||
\ 'formaction': ['URL', ''],
|
||||
@@ -152,6 +153,7 @@ let attributes_value = {
|
||||
\ 'scope': ['Token', ''],
|
||||
\ 'scoped': ['Bool', ''],
|
||||
\ 'seamless': ['Bool', ''],
|
||||
\ 'select': ['Text', ''],
|
||||
\ 'selected': ['Bool', ''],
|
||||
\ 'shape': ['Token', ''],
|
||||
\ 'size': ['Int', ''],
|
||||
@@ -322,16 +324,16 @@ endif
|
||||
|
||||
" Ref: http://dev.w3.org/html5/markup/
|
||||
" Version: Draft 05 April 2011
|
||||
let phrasing_elements = ['a', 'em', 'strong', 'small', 'mark', 'abbr', 'dfn', 'i', 'b', 'u', 'code', 'var', 'samp', 'kbd', 'sup', 'sub', 'q', 'cite', 'span', 'bdo', 'bdi', 'br', 'wbr', 'ins', 'del', 'img', 'embed', 'object', 'iframe', 'map', 'area', 'script', 'noscript', 'ruby', 'video', 'audio', 'input', 'textarea', 'select', 'button', 'label', 'output', 'datalist', 'keygen', 'progress', 'command', 'canvas', 'time', 'meter', 'data']
|
||||
let phrasing_elements = ['a', 'em', 'strong', 'small', 'mark', 'abbr', 'dfn', 'i', 'b', 'u', 'code', 'var', 'samp', 'kbd', 'sup', 'sub', 'q', 'cite', 'span', 'bdo', 'bdi', 'br', 'wbr', 'ins', 'del', 'img', 'embed', 'object', 'iframe', 'map', 'area', 'script', 'noscript', 'ruby', 'video', 'audio', 'input', 'textarea', 'select', 'button', 'label', 'output', 'datalist', 'keygen', 'progress', 'command', 'canvas', 'time', 'meter', 'data', 'content', 'shadow']
|
||||
|
||||
let metadata_elements = ['link', 'style', 'meta', 'script', 'noscript', 'command']
|
||||
|
||||
let flow_elements = phrasing_elements + ['p', 'hr', 'pre', 'ul', 'ol', 'dl', 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hgroup', 'address', 'blockquote', 'ins', 'del', 'object', 'main', 'map', 'noscript', 'section', 'nav', 'article', 'aside', 'header', 'footer', 'video', 'audio', 'figure', 'table', 'template', 'form', 'fieldset', 'menu', 'canvas', 'details']
|
||||
let flow_elements = phrasing_elements + ['p', 'hr', 'pre', 'ul', 'ol', 'dl', 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hgroup', 'address', 'blockquote', 'ins', 'del', 'element', 'object', 'main', 'map', 'noscript', 'section', 'nav', 'article', 'aside', 'header', 'footer', 'video', 'audio', 'figure', 'table', 'template', 'form', 'fieldset', 'menu', 'canvas', 'details']
|
||||
|
||||
" http://dev.w3.org/html5/spec/Overview.html#linkTypes
|
||||
let linktypes = ['alternate', 'author', 'bookmark', 'external', 'help', 'icon', 'license', 'next', 'nofollow', 'noreferrer', 'pingback', 'prefetch', 'prev', 'search', 'stylesheet', 'sidebar', 'tag']
|
||||
" http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html
|
||||
let linkreltypes = linktypes + ['canonical']
|
||||
let linkreltypes = linktypes + ['canonical', 'import']
|
||||
|
||||
" a and button are special elements for interactive, some element can't be its descendent
|
||||
let abutton_dec = 'details\\|embed\\|iframe\\|keygen\\|label\\|menu\\|select\\|textarea'
|
||||
@@ -425,6 +427,10 @@ let g:xmldata_html5 = {
|
||||
\ [],
|
||||
\ extend(copy(global_attributes), {'span': []})
|
||||
\ ],
|
||||
\ 'content': [
|
||||
\ [],
|
||||
\ extend(copy(global_attributes), {'select': []})
|
||||
\ ],
|
||||
\ 'command': [
|
||||
\ ['col'],
|
||||
\ extend(copy(global_attributes), {'type': ['command', 'radio', 'checkbox'], 'radiogroup': [], 'checked': ['checked', ''], 'label': [], 'icon': [], 'disabled': ['disabled', '']})
|
||||
@@ -677,6 +683,10 @@ let g:xmldata_html5 = {
|
||||
\ ['optgroup', 'option'],
|
||||
\ extend(copy(global_attributes), {'name': [], 'disabled': ['disabled', ''], 'form': [], 'size': [], 'multiple': ['multiple', '']})
|
||||
\ ],
|
||||
\ 'shadow': [
|
||||
\ [],
|
||||
\ global_attributes
|
||||
\ ],
|
||||
\ 'small': [
|
||||
\ phrasing_elements,
|
||||
\ global_attributes
|
||||
|
||||
167
build
167
build
@@ -1,94 +1,127 @@
|
||||
#!/bin/sh
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -E
|
||||
|
||||
DIRS="
|
||||
syntax indent ftplugin ftdetect autoload compiler
|
||||
after/syntax after/indent after/ftplugin after/ftdetect
|
||||
"
|
||||
|
||||
copy_dir() {
|
||||
if [ -d "$1/$2" ]; then
|
||||
for file in $(find "$1/$2" -name '*.vim'); do
|
||||
file_path="$(dirname "${file##$1/}")"
|
||||
mkdir -p "$file_path"
|
||||
cp $file $file_path/
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
# Fetches syntax files from given Github repo
|
||||
DIRS="syntax indent compiler autoload ftplugin ftdetect after/syntax after/indent after/ftplugin after/ftdetect"
|
||||
|
||||
download() {
|
||||
for pack in $1; do
|
||||
dir="tmp/$(echo "$pack" | cut -d '/' -f 2)"
|
||||
echo "- [$pack](https://github.com/$pack)"
|
||||
path="$(printf "$pack" | cut -d ':' -f 2)"
|
||||
dir="tmp/$(printf "$path" | cut -d '/' -f 2)"
|
||||
rm -rf "$dir"
|
||||
git clone -q --recursive "https://github.com/$pack.git" "$dir" &
|
||||
(git clone -q --recursive "https://github.com/$path.git" "$dir" && printf '.') &
|
||||
done
|
||||
|
||||
wait
|
||||
}
|
||||
|
||||
extract() {
|
||||
printf "\n"
|
||||
for pack in $1; do
|
||||
dir="tmp/$(echo "$pack" | cut -d '/' -f 2)"
|
||||
# which tree > /dev/null && tree tmp
|
||||
name="$(printf "$pack" | cut -d ':' -f 1)"
|
||||
path="$(printf "$pack" | cut -d ':' -f 2)"
|
||||
dir="tmp/$(printf "$path" | cut -d '/' -f 2)"
|
||||
printf -- "- [$name](https://github.com/$path) ("
|
||||
|
||||
subdirs=""
|
||||
for subdir in $DIRS; do
|
||||
copy_dir "$dir" "$subdir"
|
||||
if [ -d "$dir/$subdir" ]; then
|
||||
base="$(basename "$subdir")"
|
||||
if [[ "$subdirs" != *"$base"* ]]; then
|
||||
subdirs="$subdirs, $base"
|
||||
fi
|
||||
|
||||
copy_dir "$dir" "$subdir"
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
printf "${subdirs##, })\n"
|
||||
done
|
||||
|
||||
for pack in $1; do
|
||||
name="$(printf "$pack" | cut -d ':' -f 1)"
|
||||
path="$(printf "$pack" | cut -d ':' -f 2)"
|
||||
dir="tmp/$(printf "$path" | cut -d '/' -f 2)"
|
||||
|
||||
if [ -d "$dir/plugin" ]; then
|
||||
printf "Possible error (plugin directory exists): $path\n"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
rm -rf tmp
|
||||
rm -rf $DIRS
|
||||
mkdir -p tmp
|
||||
copy_dir() {
|
||||
for file in $(find "$1/$2" -name '*.vim'); do
|
||||
file_path="$(dirname "${file##$1/}")"
|
||||
mkdir -p "$file_path"
|
||||
touch "$file_path/$(basename "$file")"
|
||||
cat $file >> $file_path/$(basename "$file")
|
||||
done
|
||||
}
|
||||
|
||||
concat_ftdetect() {
|
||||
cat ftdetect/* | grep -E '^[^"]' > tmp/polyglot.vim
|
||||
rm -f ftdetect/*
|
||||
mv tmp/polyglot.vim ftdetect/
|
||||
}
|
||||
|
||||
PACKS="
|
||||
vim-ruby/vim-ruby
|
||||
kchmck/vim-coffee-script
|
||||
tpope/vim-haml
|
||||
tpope/vim-bundler
|
||||
pangloss/vim-javascript
|
||||
leshill/vim-json
|
||||
mutewinter/tomdoc.vim
|
||||
mutewinter/nginx.vim
|
||||
timcharper/textile.vim
|
||||
tpope/vim-markdown
|
||||
nono/vim-handlebars
|
||||
acustodioo/vim-tmux
|
||||
groenewege/vim-less
|
||||
wavded/vim-stylus
|
||||
tpope/vim-cucumber
|
||||
jrk/vim-ocaml
|
||||
slim-template/vim-slim
|
||||
vim-scripts/XSLT-syntax
|
||||
vim-scripts/python.vim--Vasiliev
|
||||
vim-scripts/octave.vim--
|
||||
jnwhiteh/vim-golang
|
||||
spf13/PIV
|
||||
briancollins/vim-jst
|
||||
derekwyatt/vim-scala
|
||||
derekwyatt/vim-sbt
|
||||
travitch/hasksyn
|
||||
ajf/puppet-vim
|
||||
beyondwords/vim-twig
|
||||
sudar/vim-arduino-syntax
|
||||
guns/vim-clojure-static
|
||||
chrisbra/csv.vim
|
||||
elixir-lang/vim-elixir
|
||||
jimenezrick/vimerl
|
||||
tpope/vim-git
|
||||
skwp/vim-rspec
|
||||
vim-scripts/vbnet.vim
|
||||
jcf/vim-latex
|
||||
othree/html5.vim
|
||||
ap/vim-css-color
|
||||
vim-jp/cpp-vim
|
||||
octol/vim-cpp-enhanced-highlight
|
||||
arduino:sudar/vim-arduino-syntax
|
||||
c++11:octol/vim-cpp-enhanced-highlight
|
||||
c/c++:vim-jp/cpp-vim
|
||||
clojure:guns/vim-clojure-static
|
||||
coffee-script:kchmck/vim-coffee-script
|
||||
csv:chrisbra/csv.vim
|
||||
cucumber:tpope/vim-cucumber
|
||||
dockerfile:honza/dockerfile.vim
|
||||
elixir:elixir-lang/vim-elixir
|
||||
erlang:oscarh/vimerl
|
||||
git:tpope/vim-git
|
||||
go:jnwhiteh/vim-golang
|
||||
haml:tpope/vim-haml
|
||||
handlebars:mustache/vim-mustache-handlebars
|
||||
haskell:travitch/hasksyn
|
||||
html5:othree/html5.vim
|
||||
jade:digitaltoad/vim-jade
|
||||
javascript:pangloss/vim-javascript
|
||||
json:leshill/vim-json
|
||||
jst:briancollins/vim-jst
|
||||
latex:LaTeX-Box-Team/LaTeX-Box
|
||||
less:groenewege/vim-less
|
||||
markdown:tpope/vim-markdown
|
||||
nginx:mutewinter/nginx.vim
|
||||
ocaml:jrk/vim-ocaml
|
||||
octave:vim-scripts/octave.vim--
|
||||
perl:vim-perl/vim-perl
|
||||
php:StanAngeloff/php.vim
|
||||
puppet:ajf/puppet-vim
|
||||
protobuf:uarun/vim-protobuf
|
||||
python:vim-scripts/python.vim--Vasiliev
|
||||
r-lang:vim-scripts/R.vim
|
||||
rspec:sheerun/rspec.vim
|
||||
ruby:vim-ruby/vim-ruby
|
||||
rust:wting/rust.vim
|
||||
sbt:derekwyatt/vim-sbt
|
||||
scala:derekwyatt/vim-scala
|
||||
slim:slim-template/vim-slim
|
||||
stylus:wavded/vim-stylus
|
||||
textile:timcharper/textile.vim
|
||||
tmux:acustodioo/vim-tmux
|
||||
tomdoc:duwanis/tomdoc.vim
|
||||
typescript:leafgarland/typescript-vim
|
||||
vbnet:vim-scripts/vbnet.vim
|
||||
twig:beyondwords/vim-twig
|
||||
xls:vim-scripts/XSLT-syntax
|
||||
css-color:gorodinskiy/vim-coloresque
|
||||
"
|
||||
|
||||
rm -rf tmp
|
||||
rm -rf $DIRS
|
||||
mkdir tmp
|
||||
|
||||
printf "Downloading packs..."
|
||||
download "$PACKS"
|
||||
extract "$PACKS"
|
||||
concat_ftdetect
|
||||
|
||||
rm -rf tmp
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
" Vim compiler file
|
||||
|
||||
if exists("current_compiler")
|
||||
finish
|
||||
endif
|
||||
let current_compiler = "bundler"
|
||||
|
||||
let s:cpo_save = &cpo
|
||||
set cpo-=C
|
||||
|
||||
CompilerSet makeprg=bundle
|
||||
|
||||
CompilerSet errorformat=
|
||||
\%+E%f:%l:\ parse\ error,
|
||||
\%W%f:%l:\ warning:\ %m,
|
||||
\%E%f:%l:in\ %*[^:]:\ %m,
|
||||
\%E%f:%l:\ %m,
|
||||
\%-C%\tfrom\ %f:%l:in\ %.%#,
|
||||
\%-Z%\tfrom\ %f:%l,
|
||||
\%-Z%p^,
|
||||
\%-G%.%#
|
||||
|
||||
let &cpo = s:cpo_save
|
||||
unlet s:cpo_save
|
||||
|
||||
" vim: sw=2:
|
||||
@@ -27,8 +27,8 @@ function! s:GetMakePrg()
|
||||
\ ' -c' .
|
||||
\ ' ' . b:coffee_litcoffee .
|
||||
\ ' ' . g:coffee_make_options .
|
||||
\ ' ' . fnameescape(expand('%')) .
|
||||
\ ' $*'
|
||||
\ ' $*' .
|
||||
\ ' ' . fnameescape(expand('%'))
|
||||
endfunction
|
||||
|
||||
" Set `makeprg` and return 1 if coffee is still the compiler, else return 0.
|
||||
@@ -75,8 +75,8 @@ augroup CoffeeUpdateMakePrg
|
||||
|
||||
" Set autocmd locally if compiler was set locally.
|
||||
if &l:makeprg =~ s:pat
|
||||
autocmd BufFilePost,BufWritePost <buffer> call s:UpdateMakePrg()
|
||||
autocmd BufWritePre,BufFilePost <buffer> call s:UpdateMakePrg()
|
||||
else
|
||||
autocmd BufFilePost,BufWritePost call s:UpdateMakePrg()
|
||||
autocmd BufWritePre,BufFilePost call s:UpdateMakePrg()
|
||||
endif
|
||||
augroup END
|
||||
|
||||
@@ -1,111 +1,80 @@
|
||||
" Vim compiler file
|
||||
" Language: Erlang
|
||||
" Author: Pawel 'kTT' Salata <rockplayer.pl@gmail.com>
|
||||
" Contributors: Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
|
||||
" License: Vim license
|
||||
" Version: 2013/03/06
|
||||
" Erlang compiler file
|
||||
" Language: Erlang
|
||||
" Maintainer: Pawel 'kTT' Salata <rockplayer.pl@gmail.com>
|
||||
" URL: http://ktototaki.info
|
||||
|
||||
if exists("current_compiler") || v:version < 703
|
||||
finish
|
||||
else
|
||||
let current_compiler = "erlang"
|
||||
if exists("current_compiler")
|
||||
finish
|
||||
endif
|
||||
|
||||
let b:error_list = {}
|
||||
let b:is_showing_msg = 0
|
||||
let b:next_sign_id = 1
|
||||
let current_compiler = "erlang"
|
||||
|
||||
if exists(":CompilerSet") != 2
|
||||
command -nargs=* CompilerSet setlocal <args>
|
||||
command -nargs=* CompilerSet setlocal <args>
|
||||
endif
|
||||
|
||||
CompilerSet makeprg=make
|
||||
CompilerSet errorformat=%f:%l:\ %tarning:\ %m,%f:%l:\ %m
|
||||
|
||||
" Only define functions and script scope variables once
|
||||
if exists("*s:ShowErrors")
|
||||
finish
|
||||
if !exists('g:erlangCheckFile')
|
||||
let g:erlangCheckFile = "~/.vim/compiler/erlang_check_file.erl"
|
||||
endif
|
||||
|
||||
if !exists("g:erlang_show_errors")
|
||||
let g:erlang_show_errors = 1
|
||||
if !exists('g:erlangHighlightErrors')
|
||||
let g:erlangHighlightErrors = 0
|
||||
endif
|
||||
|
||||
let s:erlang_check_file = expand("<sfile>:p:h") . "/erlang_check.erl"
|
||||
let s:autocmds_defined = 0
|
||||
let b:error_list = {}
|
||||
let b:is_showing_msg = 0
|
||||
|
||||
sign define ErlangError text=>> texthl=Error
|
||||
sign define ErlangWarning text=>> texthl=Todo
|
||||
|
||||
command ErlangDisableShowErrors silent call s:DisableShowErrors()
|
||||
command ErlangEnableShowErrors silent call s:EnableShowErrors()
|
||||
|
||||
function s:ShowErrors()
|
||||
setlocal shellpipe=>
|
||||
if match(getline(1), "#!.*escript") != -1
|
||||
setlocal makeprg=escript\ -s\ %
|
||||
else
|
||||
execute "setlocal makeprg=" . s:erlang_check_file . "\\ \%"
|
||||
endif
|
||||
silent make!
|
||||
for error in getqflist()
|
||||
let item = {}
|
||||
let item["lnum"] = error.lnum
|
||||
let item["text"] = error.text
|
||||
let b:error_list[error.lnum] = item
|
||||
let type = error.type == "W" ? "ErlangWarning" : "ErlangError"
|
||||
execute "sign place" b:next_sign_id "line=" . item.lnum "name=" . type "file=" . expand("%:p")
|
||||
let b:next_sign_id += 1
|
||||
endfor
|
||||
setlocal shellpipe&
|
||||
setlocal makeprg=make
|
||||
function! HighlightErlangErrors()
|
||||
if match(getline(1), "#!.*escript") != -1
|
||||
setlocal makeprg=escript\ -s\ %
|
||||
else
|
||||
execute "setlocal makeprg=" . g:erlangCheckFile . "\\ \%"
|
||||
endif
|
||||
silent make!
|
||||
call s:clear_matches()
|
||||
for error in getqflist()
|
||||
let item = {}
|
||||
let item['lnum'] = error.lnum
|
||||
let item['msg'] = error.text
|
||||
let b:error_list[error.lnum] = item
|
||||
call matchadd('SpellBad', "\\%" . error.lnum . "l")
|
||||
endfor
|
||||
if len(getqflist())
|
||||
redraw!
|
||||
endif
|
||||
call s:show_msg()
|
||||
setlocal makeprg=erlc\ %
|
||||
endfunction
|
||||
|
||||
function s:ShowErrorMsg()
|
||||
let pos = getpos(".")
|
||||
if has_key(b:error_list, pos[1])
|
||||
let item = get(b:error_list, pos[1])
|
||||
echo item.text
|
||||
let b:is_showing_msg = 1
|
||||
else
|
||||
if b:is_showing_msg
|
||||
echo
|
||||
let b:is_showing_msg = 0
|
||||
endif
|
||||
endif
|
||||
function! s:show_msg()
|
||||
let pos = getpos(".")
|
||||
if has_key(b:error_list, pos[1])
|
||||
let item = get(b:error_list, pos[1])
|
||||
echo item.msg
|
||||
let b:is_showing_msg = 1
|
||||
else
|
||||
if exists("b:is_showing_msg") && b:is_showing_msg == 1
|
||||
echo
|
||||
let b:is_showing_msg = 0
|
||||
endif
|
||||
endif
|
||||
endf
|
||||
|
||||
function s:ClearErrors()
|
||||
sign unplace *
|
||||
let b:error_list = {}
|
||||
let b:next_sign_id = 1
|
||||
if b:is_showing_msg
|
||||
echo
|
||||
let b:is_showing_msg = 0
|
||||
endif
|
||||
function! s:clear_matches()
|
||||
call clearmatches()
|
||||
let b:error_list = {}
|
||||
if exists("b:is_showing_msg") && b:is_showing_msg == 1
|
||||
echo
|
||||
let b:is_showing_msg = 0
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function s:EnableShowErrors()
|
||||
if !s:autocmds_defined
|
||||
augroup vimerl
|
||||
autocmd!
|
||||
autocmd BufWritePre *.erl call s:ClearErrors()
|
||||
autocmd BufWritePost *.erl call s:ShowErrors()
|
||||
autocmd CursorHold *.erl call s:ShowErrorMsg()
|
||||
autocmd CursorMoved *.erl call s:ShowErrorMsg()
|
||||
augroup END
|
||||
let s:autocmds_defined = 1
|
||||
endif
|
||||
endfunction
|
||||
CompilerSet makeprg=erlc\ %
|
||||
CompilerSet errorformat=%f:%l:\ %tarning:\ %m,%E%f:%l:\ %m
|
||||
|
||||
function s:DisableShowErrors()
|
||||
sign unplace *
|
||||
augroup vimerl
|
||||
autocmd!
|
||||
augroup END
|
||||
let s:autocmds_defined = 0
|
||||
endfunction
|
||||
|
||||
if g:erlang_show_errors
|
||||
call s:EnableShowErrors()
|
||||
if g:erlangHighlightErrors
|
||||
autocmd BufLeave *.erl call s:clear_matches()
|
||||
autocmd BufEnter *.erl call s:clear_matches()
|
||||
autocmd BufWritePost *.erl call HighlightErlangErrors()
|
||||
autocmd CursorHold *.erl call s:show_msg()
|
||||
autocmd CursorMoved *.erl call s:show_msg()
|
||||
endif
|
||||
|
||||
30
compiler/go.vim
Normal file
30
compiler/go.vim
Normal file
@@ -0,0 +1,30 @@
|
||||
" Copyright 2013 The Go Authors. All rights reserved.
|
||||
" Use of this source code is governed by a BSD-style
|
||||
" license that can be found in the LICENSE file.
|
||||
"
|
||||
" compiler/go.vim: Vim compiler file for Go.
|
||||
|
||||
if exists("current_compiler")
|
||||
finish
|
||||
endif
|
||||
let current_compiler = "go"
|
||||
|
||||
if exists(":CompilerSet") != 2
|
||||
command -nargs=* CompilerSet setlocal <args>
|
||||
endif
|
||||
|
||||
let s:save_cpo = &cpo
|
||||
set cpo-=C
|
||||
|
||||
CompilerSet makeprg=go\ build
|
||||
CompilerSet errorformat=
|
||||
\%-G#\ %.%#,
|
||||
\%A%f:%l:%c:\ %m,
|
||||
\%A%f:%l:\ %m,
|
||||
\%C%*\\s%m,
|
||||
\%-G%.%#
|
||||
|
||||
let &cpo = s:save_cpo
|
||||
unlet s:save_cpo
|
||||
|
||||
" vim:ts=4:sw=4:et
|
||||
33
compiler/rustc.vim
Normal file
33
compiler/rustc.vim
Normal file
@@ -0,0 +1,33 @@
|
||||
" Vim compiler file
|
||||
" Compiler: Rust Compiler
|
||||
" Maintainer: Chris Morgan <me@chrismorgan.info>
|
||||
" Latest Revision: 2013 Jul 12
|
||||
|
||||
if exists("current_compiler")
|
||||
finish
|
||||
endif
|
||||
let current_compiler = "rustc"
|
||||
|
||||
let s:cpo_save = &cpo
|
||||
set cpo&vim
|
||||
|
||||
if exists(":CompilerSet") != 2
|
||||
command -nargs=* CompilerSet setlocal <args>
|
||||
endif
|
||||
|
||||
if exists("g:rustc_makeprg_no_percent") && g:rustc_makeprg_no_percent == 1
|
||||
CompilerSet makeprg=rustc
|
||||
else
|
||||
CompilerSet makeprg=rustc\ \%
|
||||
endif
|
||||
|
||||
CompilerSet errorformat=
|
||||
\%f:%l:%c:\ %t%*[^:]:\ %m,
|
||||
\%f:%l:%c:\ %*\\d:%*\\d\ %t%*[^:]:\ %m,
|
||||
\%-G%f:%l\ %s,
|
||||
\%-G%*[\ ]^,
|
||||
\%-G%*[\ ]^%*[~],
|
||||
\%-G%*[\ ]...
|
||||
|
||||
let &cpo = s:cpo_save
|
||||
unlet s:cpo_save
|
||||
298
compiler/tex.vim
298
compiler/tex.vim
@@ -1,298 +0,0 @@
|
||||
" File: tex.vim
|
||||
" Type: compiler plugin for LaTeX
|
||||
" Original Author: Artem Chuprina <ran@ran.pp.ru>
|
||||
" Customization: Srinath Avadhanula <srinath@fastmail.fm>
|
||||
" Description: {{{
|
||||
" This file sets the 'makeprg' and 'errorformat' options for the LaTeX
|
||||
" compiler. It is customizable to optionally ignore certain warnings and
|
||||
" provides the ability to set a dynamic 'ignore-warning' level.
|
||||
"
|
||||
" By default it is set up in a 'non-verbose', 'ignore-common-warnings' mode,
|
||||
" which means that irrelevant lines from the compilers output will be
|
||||
" ignored and also some very common warnings are ignored.
|
||||
"
|
||||
" Depending on the 'ignore-level', the following kinds of messages are
|
||||
" ignored. An ignore level of 3 for instance means that messages 1-3 will be
|
||||
" ignored. By default, the ignore level is set to 4.
|
||||
"
|
||||
" 1. LaTeX Warning: Specifier 'h' changed to 't'.
|
||||
" This errors occurs when TeX is not able to correctly place a floating
|
||||
" object at a specified location, because of which it defaulted to the
|
||||
" top of the page.
|
||||
" 2. LaTeX Warning: Underfull box ...
|
||||
" 3. LaTeX Warning: Overfull box ...
|
||||
" both these warnings (very common) are due to \hbox settings not being
|
||||
" satisfied nicely.
|
||||
" 4. LaTeX Warning: You have requested ...,
|
||||
" This warning occurs in slitex when using the xypic package.
|
||||
" 5. Missing number error:
|
||||
" Usually, when the name of an included eps file is spelled incorrectly,
|
||||
" then the \bb-error message is accompanied by a bunch of "missing
|
||||
" number, treated as zero" error messages. This level ignores these
|
||||
" warnings.
|
||||
" NOTE: number 5 is actually a latex error, not a warning!
|
||||
"
|
||||
" Use
|
||||
" TCLevel <level>
|
||||
" where level is a number to set the ignore level dynamically.
|
||||
"
|
||||
" When TCLevel is called with the unquoted string strict
|
||||
" TClevel strict
|
||||
" then the 'efm' switches to a 'verbose', 'no-lines-ignored' mode which is
|
||||
" useful when you want to make final checks of your document and want to be
|
||||
" careful not to let things slip by.
|
||||
"
|
||||
" TIP: MikTeX has a bug where it sometimes erroneously splits a line number
|
||||
" into multiple lines. i.e, if the warning is on line 1234. the compiler
|
||||
" output is:
|
||||
" LaTeX Warning: ... on input line 123
|
||||
" 4.
|
||||
" In this case, vim will wrongly interpret the line-number as 123 instead
|
||||
" of 1234. If you have cygwin, a simple remedy around this is to first
|
||||
" copy the file vimlatex (provided) into your $PATH, make sure its
|
||||
" executable and then set the variable g:tex_flavor to vimlatex in your
|
||||
" ~/.vimrc (i.e putting let "g:tex_flavor = 'vimlatex'" in your .vimrc).
|
||||
" This problem occurs rarely enough that its not a botheration for most
|
||||
" people.
|
||||
"
|
||||
" TODO:
|
||||
" 1. menu items for dynamically selecting a ignore warning level.
|
||||
" }}}
|
||||
|
||||
" avoid reinclusion for the same buffer. keep it buffer local so it can be
|
||||
" externally reset in case of emergency re-sourcing.
|
||||
if exists('b:doneTexCompiler') && !exists('b:forceRedoTexCompiler')
|
||||
finish
|
||||
endif
|
||||
let b:doneTexCompiler = 1
|
||||
|
||||
" ==============================================================================
|
||||
" Customization of 'efm': {{{
|
||||
" This section contains the customization variables which the user can set.
|
||||
" g:Tex_IgnoredWarnings: This variable contains a ¡ seperated list of
|
||||
" patterns which will be ignored in the TeX compiler's output. Use this
|
||||
" carefully, otherwise you might end up losing valuable information.
|
||||
if !exists('g:Tex_IgnoredWarnings')
|
||||
let g:Tex_IgnoredWarnings =
|
||||
\'Underfull'."\n".
|
||||
\'Overfull'."\n".
|
||||
\'specifier changed to'."\n".
|
||||
\'You have requested'."\n".
|
||||
\'Missing number, treated as zero.'."\n".
|
||||
\'There were undefined references'."\n".
|
||||
\'Citation %.%# undefined'
|
||||
endif
|
||||
" This is the number of warnings in the g:Tex_IgnoredWarnings string which
|
||||
" will be ignored.
|
||||
if !exists('g:Tex_IgnoreLevel')
|
||||
let g:Tex_IgnoreLevel = 7
|
||||
endif
|
||||
" There will be lots of stuff in a typical compiler output which will
|
||||
" completely fall through the 'efm' parsing. This options sets whether or not
|
||||
" you will be shown those lines.
|
||||
if !exists('g:Tex_IgnoreUnmatched')
|
||||
let g:Tex_IgnoreUnmatched = 1
|
||||
endif
|
||||
" With all this customization, there is a slight risk that you might be
|
||||
" ignoring valid warnings or errors. Therefore before getting the final copy
|
||||
" of your work, you might want to reset the 'efm' with this variable set to 1.
|
||||
" With that value, all the lines from the compiler are shown irrespective of
|
||||
" whether they match the error or warning patterns.
|
||||
" NOTE: An easier way of resetting the 'efm' to show everything is to do
|
||||
" TCLevel strict
|
||||
if !exists('g:Tex_ShowallLines')
|
||||
let g:Tex_ShowallLines = 0
|
||||
endif
|
||||
|
||||
" }}}
|
||||
" ==============================================================================
|
||||
" Customization of 'makeprg': {{{
|
||||
|
||||
" There are several alternate ways in which 'makeprg' is set up.
|
||||
"
|
||||
" Case 1
|
||||
" ------
|
||||
" The first is when this file is a part of latex-suite. In this case, a
|
||||
" variable called g:Tex_DefaultTargetFormat exists, which gives the default
|
||||
" format .tex files should be compiled into. In this case, we use the TTarget
|
||||
" command provided by latex-suite.
|
||||
"
|
||||
" Case 2
|
||||
" ------
|
||||
" The user is using this file without latex-suite AND he wants to directly
|
||||
" specify the complete 'makeprg'. Then he should set the g:Tex_CompileRule_dvi
|
||||
" variable. This is a string which should be directly be able to be cast into
|
||||
" &makeprg. An example of one such string is:
|
||||
"
|
||||
" g:Tex_CompileRule_dvi = 'pdflatex \\nonstopmode \\input\{$*\}'
|
||||
"
|
||||
" NOTE: You will need to escape back-slashes, {'s etc yourself if you are
|
||||
" using this file independently of latex-suite.
|
||||
" TODO: Should we also have a check for backslash escaping here based on
|
||||
" platform?
|
||||
"
|
||||
" Case 3
|
||||
" ------
|
||||
" The use is using this file without latex-suite and he doesnt want any
|
||||
" customization. In this case, this file makes some intelligent guesses based
|
||||
" on the platform. If he doesn't want to specify the complete 'makeprg' but
|
||||
" only the name of the compiler program (for example 'pdflatex' or 'latex'),
|
||||
" then he sets b:tex_flavor or g:tex_flavor.
|
||||
|
||||
if exists('g:Tex_DefaultTargetFormat')
|
||||
exec 'TTarget '.g:Tex_DefaultTargetFormat
|
||||
elseif exists('g:Tex_CompileRule_dvi')
|
||||
let &l:makeprg = g:Tex_CompileRule_dvi
|
||||
else
|
||||
" If buffer-local variable 'tex_flavor' exists, it defines TeX flavor,
|
||||
" otherwize the same for global variable with same name, else it will be LaTeX
|
||||
if exists("b:tex_flavor")
|
||||
let current_compiler = b:tex_flavor
|
||||
elseif exists("g:tex_flavor")
|
||||
let current_compiler = g:tex_flavor
|
||||
else
|
||||
let current_compiler = "latex"
|
||||
end
|
||||
if has('win32')
|
||||
let escChars = ''
|
||||
else
|
||||
let escChars = '{}\'
|
||||
endif
|
||||
" Furthermore, if 'win32' is detected, then we want to set the arguments up so
|
||||
" that miktex can handle it.
|
||||
if has('win32')
|
||||
let options = '--src-specials'
|
||||
else
|
||||
let options = ''
|
||||
endif
|
||||
let &l:makeprg = current_compiler . ' ' . options .
|
||||
\ escape(' \nonstopmode \input{$*}', escChars)
|
||||
endif
|
||||
|
||||
" }}}
|
||||
" ==============================================================================
|
||||
" Functions for setting up a customized 'efm' {{{
|
||||
|
||||
" IgnoreWarnings: parses g:Tex_IgnoredWarnings for message customization {{{
|
||||
" Description:
|
||||
function! <SID>IgnoreWarnings()
|
||||
let i = 1
|
||||
while s:Strntok(g:Tex_IgnoredWarnings, "\n", i) != '' &&
|
||||
\ i <= g:Tex_IgnoreLevel
|
||||
let warningPat = s:Strntok(g:Tex_IgnoredWarnings, "\n", i)
|
||||
let warningPat = escape(substitute(warningPat, '[\,]', '%\\\\&', 'g'), ' ')
|
||||
exe 'setlocal efm+=%-G%.%#'.warningPat.'%.%#'
|
||||
let i = i + 1
|
||||
endwhile
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
" SetLatexEfm: sets the 'efm' for the latex compiler {{{
|
||||
" Description:
|
||||
function! <SID>SetLatexEfm()
|
||||
|
||||
let pm = ( g:Tex_ShowallLines == 1 ? '+' : '-' )
|
||||
|
||||
setlocal efm=
|
||||
" remove default error formats that cause issues with revtex, where they
|
||||
" match version messages
|
||||
" Reference: http://bugs.debian.org/582100
|
||||
setlocal efm-=%f:%l:%m
|
||||
setlocal efm-=%f:%l:%c:%m
|
||||
|
||||
if !g:Tex_ShowallLines
|
||||
call s:IgnoreWarnings()
|
||||
endif
|
||||
|
||||
setlocal efm+=%E!\ LaTeX\ %trror:\ %m
|
||||
setlocal efm+=%E!\ %m
|
||||
setlocal efm+=%E%f:%l:\ %m
|
||||
|
||||
setlocal efm+=%+WLaTeX\ %.%#Warning:\ %.%#line\ %l%.%#
|
||||
setlocal efm+=%+W%.%#\ at\ lines\ %l--%*\\d
|
||||
setlocal efm+=%+WLaTeX\ %.%#Warning:\ %m
|
||||
|
||||
exec 'setlocal efm+=%'.pm.'Cl.%l\ %m'
|
||||
exec 'setlocal efm+=%'.pm.'Cl.%l\ '
|
||||
exec 'setlocal efm+=%'.pm.'C\ \ %m'
|
||||
exec 'setlocal efm+=%'.pm.'C%.%#-%.%#'
|
||||
exec 'setlocal efm+=%'.pm.'C%.%#[]%.%#'
|
||||
exec 'setlocal efm+=%'.pm.'C[]%.%#'
|
||||
exec 'setlocal efm+=%'.pm.'C%.%#%[{}\\]%.%#'
|
||||
exec 'setlocal efm+=%'.pm.'C<%.%#>%m'
|
||||
exec 'setlocal efm+=%'.pm.'C\ \ %m'
|
||||
exec 'setlocal efm+=%'.pm.'GSee\ the\ LaTeX%m'
|
||||
exec 'setlocal efm+=%'.pm.'GType\ \ H\ <return>%m'
|
||||
exec 'setlocal efm+=%'.pm.'G\ ...%.%#'
|
||||
exec 'setlocal efm+=%'.pm.'G%.%#\ (C)\ %.%#'
|
||||
exec 'setlocal efm+=%'.pm.'G(see\ the\ transcript%.%#)'
|
||||
exec 'setlocal efm+=%'.pm.'G\\s%#'
|
||||
exec 'setlocal efm+=%'.pm.'O(%*[^()])%r'
|
||||
exec 'setlocal efm+=%'.pm.'P(%f%r'
|
||||
exec 'setlocal efm+=%'.pm.'P\ %\\=(%f%r'
|
||||
exec 'setlocal efm+=%'.pm.'P%*[^()](%f%r'
|
||||
exec 'setlocal efm+=%'.pm.'P(%f%*[^()]'
|
||||
exec 'setlocal efm+=%'.pm.'P[%\\d%[^()]%#(%f%r'
|
||||
if g:Tex_IgnoreUnmatched && !g:Tex_ShowallLines
|
||||
setlocal efm+=%-P%*[^()]
|
||||
endif
|
||||
exec 'setlocal efm+=%'.pm.'Q)%r'
|
||||
exec 'setlocal efm+=%'.pm.'Q%*[^()])%r'
|
||||
exec 'setlocal efm+=%'.pm.'Q[%\\d%*[^()])%r'
|
||||
if g:Tex_IgnoreUnmatched && !g:Tex_ShowallLines
|
||||
setlocal efm+=%-Q%*[^()]
|
||||
endif
|
||||
if g:Tex_IgnoreUnmatched && !g:Tex_ShowallLines
|
||||
setlocal efm+=%-G%.%#
|
||||
endif
|
||||
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
" Strntok: extract the n^th token from a list {{{
|
||||
" example: Strntok('1,23,3', ',', 2) = 23
|
||||
fun! <SID>Strntok(s, tok, n)
|
||||
return matchstr( a:s.a:tok[0], '\v(\zs([^'.a:tok.']*)\ze['.a:tok.']){'.a:n.'}')
|
||||
endfun
|
||||
|
||||
" }}}
|
||||
" SetTexCompilerLevel: sets the "level" for the latex compiler {{{
|
||||
function! <SID>SetTexCompilerLevel(...)
|
||||
if a:0 > 0
|
||||
let level = a:1
|
||||
else
|
||||
call Tex_ResetIncrementNumber(0)
|
||||
echo substitute(g:Tex_IgnoredWarnings,
|
||||
\ '^\|\n\zs\S', '\=Tex_IncrementNumber(1)." ".submatch(0)', 'g')
|
||||
let level = input("\nChoose an ignore level: ")
|
||||
if level == ''
|
||||
return
|
||||
endif
|
||||
endif
|
||||
if level == 'strict'
|
||||
let g:Tex_ShowallLines = 1
|
||||
elseif level =~ '^\d\+$'
|
||||
let g:Tex_ShowallLines = 0
|
||||
let g:Tex_IgnoreLevel = level
|
||||
else
|
||||
echoerr "SetTexCompilerLevel: Unkwown option [".level."]"
|
||||
end
|
||||
call s:SetLatexEfm()
|
||||
endfunction
|
||||
|
||||
com! -nargs=? TCLevel :call <SID>SetTexCompilerLevel(<f-args>)
|
||||
" }}}
|
||||
|
||||
" }}}
|
||||
" ==============================================================================
|
||||
|
||||
call s:SetLatexEfm()
|
||||
|
||||
if !exists('*Tex_Debug')
|
||||
function! Tex_Debug(...)
|
||||
endfunction
|
||||
endif
|
||||
|
||||
call Tex_Debug("compiler/tex.vim: sourcing this file", "comp")
|
||||
|
||||
" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
|
||||
8
compiler/typescript.vim
Normal file
8
compiler/typescript.vim
Normal file
@@ -0,0 +1,8 @@
|
||||
if exists("current_compiler")
|
||||
finish
|
||||
endif
|
||||
let current_compiler = "typescript"
|
||||
|
||||
CompilerSet makeprg=tsc\ $*\ %
|
||||
|
||||
CompilerSet errorformat=%+A\ %#%f\ %#(%l\\\,%c):\ %m,%C%m
|
||||
@@ -1 +0,0 @@
|
||||
au BufRead,BufNewFile *.ino,*.pde set filetype=arduino
|
||||
@@ -1 +0,0 @@
|
||||
au BufNewFile,BufRead *.clj,*.cljs,*.edn setf clojure
|
||||
@@ -1,17 +0,0 @@
|
||||
" Language: CoffeeScript
|
||||
" Maintainer: Mick Koch <kchmck@gmail.com>
|
||||
" URL: http://github.com/kchmck/vim-coffee-script
|
||||
" License: WTFPL
|
||||
|
||||
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
|
||||
|
||||
function! s:DetectCoffee()
|
||||
if getline(1) =~ '^#!.*\<coffee\>'
|
||||
set filetype=coffee
|
||||
endif
|
||||
endfunction
|
||||
|
||||
autocmd BufNewFile,BufRead * call s:DetectCoffee()
|
||||
@@ -1,3 +0,0 @@
|
||||
" Install Filetype detection for CSV files
|
||||
au BufRead,BufNewFile *.csv,*.dat,*.tsv,*.tab set filetype=csv
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
" Cucumber
|
||||
autocmd BufNewFile,BufReadPost *.feature,*.story set filetype=cucumber
|
||||
@@ -1,2 +0,0 @@
|
||||
au BufRead,BufNewFile *.ex,*.exs set filetype=elixir
|
||||
au FileType elixir setl sw=2 sts=2 et iskeyword+=!,?
|
||||
@@ -1,20 +0,0 @@
|
||||
" Git
|
||||
autocmd BufNewFile,BufRead *.git/{,modules/**/}{COMMIT_EDIT,MERGE_}MSG set ft=gitcommit
|
||||
autocmd BufNewFile,BufRead *.git/config,.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 .msg.[0-9]*
|
||||
\ if getline(1) =~ '^From.*# This line is ignored.$' |
|
||||
\ set ft=gitsendemail |
|
||||
\ endif
|
||||
autocmd BufNewFile,BufRead *.git/**
|
||||
\ if getline(1) =~ '^\x\{40\}\>\|^ref: ' |
|
||||
\ set ft=git |
|
||||
\ endif
|
||||
|
||||
" This logic really belongs in scripts.vim
|
||||
autocmd BufNewFile,BufRead,StdinReadPost *
|
||||
\ if getline(1) =~ '^\(commit\|tree\|object\) \x\{40\}\>\|^tag \S\+$' |
|
||||
\ set ft=git |
|
||||
\ endif
|
||||
@@ -1,23 +0,0 @@
|
||||
" We take care to preserve the user's fileencodings and fileformats,
|
||||
" because those settings are global (not buffer local), yet we want
|
||||
" to override them for loading Go files, which are defined to be UTF-8.
|
||||
let s:current_fileformats = ''
|
||||
let s:current_fileencodings = ''
|
||||
|
||||
" define fileencodings to open as utf-8 encoding even if it's ascii.
|
||||
function! s:gofiletype_pre()
|
||||
let s:current_fileformats = &g:fileformats
|
||||
let s:current_fileencodings = &g:fileencodings
|
||||
set fileencodings=utf-8 fileformats=unix
|
||||
setlocal filetype=go
|
||||
endfunction
|
||||
|
||||
" restore fileencodings as others
|
||||
function! s:gofiletype_post()
|
||||
let &g:fileformats = s:current_fileformats
|
||||
let &g:fileencodings = s:current_fileencodings
|
||||
endfunction
|
||||
|
||||
au BufNewFile *.go setlocal filetype=go fileencoding=utf-8 fileformat=unix
|
||||
au BufRead *.go call s:gofiletype_pre()
|
||||
au BufReadPost *.go call s:gofiletype_post()
|
||||
@@ -1,3 +0,0 @@
|
||||
autocmd BufNewFile,BufRead *.haml,*.hamlbars setf haml
|
||||
autocmd BufNewFile,BufRead *.sass setf sass
|
||||
autocmd BufNewFile,BufRead *.scss setf scss
|
||||
@@ -1,3 +0,0 @@
|
||||
if has("autocmd")
|
||||
au BufNewFile,BufRead *.{handlebars,hb,hbs,hbt}{,.erb} set ft=html syntax=handlebars | runtime! ftplugin/handlebars.vim ftplugin/handlebars*.vim ftplugin/handlebars/*.vim
|
||||
endif
|
||||
@@ -1,11 +0,0 @@
|
||||
au BufNewFile,BufRead *.js setf javascript
|
||||
au BufNewFile,BufRead *.jsm setf javascript
|
||||
au BufNewFile,BufRead *.json setf javascript
|
||||
au BufNewFile,BufRead Jakefile setf javascript
|
||||
|
||||
fun! s:SelectJavascript()
|
||||
if getline(1) =~# '^#!.*/bin/env\s\+node\>'
|
||||
set ft=javascript
|
||||
endif
|
||||
endfun
|
||||
au BufNewFile,BufRead * call s:SelectJavascript()
|
||||
@@ -1,8 +0,0 @@
|
||||
autocmd BufNewFile,BufRead *.json set filetype=json
|
||||
|
||||
augroup json_autocmd
|
||||
autocmd!
|
||||
autocmd FileType json setlocal autoindent
|
||||
autocmd FileType json setlocal formatoptions=tcq2l
|
||||
autocmd FileType json setlocal foldmethod=syntax
|
||||
augroup END
|
||||
@@ -1,3 +0,0 @@
|
||||
au BufNewFile,BufRead *.ejs set filetype=jst
|
||||
au BufNewFile,BufRead *.jst set filetype=jst
|
||||
au BufNewFile,BufRead *.hamljs set filetype=jst
|
||||
@@ -1 +0,0 @@
|
||||
autocmd BufNewFile,BufRead *.less setf less
|
||||
@@ -1,6 +0,0 @@
|
||||
autocmd BufNewFile,BufRead *.markdown,*.md,*.mdown,*.mkd,*.mkdn
|
||||
\ if &ft =~# '^\%(conf\|modula2\)$' |
|
||||
\ set ft=markdown |
|
||||
\ else |
|
||||
\ setf markdown |
|
||||
\ endif
|
||||
@@ -1 +0,0 @@
|
||||
au BufRead,BufNewFile /etc/nginx/*,/usr/local/nginx/*,*/nginx/vhosts.d/*,nginx.conf if &ft == '' | setfiletype nginx | endif
|
||||
127
ftdetect/polyglot.vim
Normal file
127
ftdetect/polyglot.vim
Normal file
@@ -0,0 +1,127 @@
|
||||
au BufRead,BufNewFile *.ino,*.pde set filetype=arduino
|
||||
autocmd BufNewFile,BufRead *.clj,*.cljs,*.edn setlocal filetype=clojure
|
||||
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
|
||||
function! s:DetectCoffee()
|
||||
if getline(1) =~ '^#!.*\<coffee\>'
|
||||
set filetype=coffee
|
||||
endif
|
||||
endfunction
|
||||
autocmd BufNewFile,BufRead * call s:DetectCoffee()
|
||||
au BufRead,BufNewFile *.csv,*.dat,*.tsv,*.tab set filetype=csv
|
||||
autocmd BufNewFile,BufReadPost *.feature,*.story set filetype=cucumber
|
||||
au BufNewFile,BufRead Dockerfile set filetype=dockerfile
|
||||
au BufRead,BufNewFile *.ex,*.exs set filetype=elixir
|
||||
au FileType elixir setl sw=2 sts=2 et iskeyword+=!,?
|
||||
autocmd BufNewFile,BufRead *.git/{,modules/**/}{COMMIT_EDIT,MERGE_}MSG set ft=gitcommit
|
||||
autocmd BufNewFile,BufRead *.git/config,.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 .msg.[0-9]*
|
||||
\ if getline(1) =~ '^From.*# This line is ignored.$' |
|
||||
\ set ft=gitsendemail |
|
||||
\ endif
|
||||
autocmd BufNewFile,BufRead *.git/**
|
||||
\ if getline(1) =~ '^\x\{40\}\>\|^ref: ' |
|
||||
\ set ft=git |
|
||||
\ endif
|
||||
autocmd BufNewFile,BufRead,StdinReadPost *
|
||||
\ if getline(1) =~ '^\(commit\|tree\|object\) \x\{40\}\>\|^tag \S\+$' |
|
||||
\ set ft=git |
|
||||
\ endif
|
||||
let s:current_fileformats = ''
|
||||
let s:current_fileencodings = ''
|
||||
function! s:gofiletype_pre()
|
||||
let s:current_fileformats = &g:fileformats
|
||||
let s:current_fileencodings = &g:fileencodings
|
||||
set fileencodings=utf-8 fileformats=unix
|
||||
setlocal filetype=go
|
||||
endfunction
|
||||
function! s:gofiletype_post()
|
||||
let &g:fileformats = s:current_fileformats
|
||||
let &g:fileencodings = s:current_fileencodings
|
||||
endfunction
|
||||
au BufNewFile *.go setlocal filetype=go fileencoding=utf-8 fileformat=unix
|
||||
au BufRead *.go call s:gofiletype_pre()
|
||||
au BufReadPost *.go call s:gofiletype_post()
|
||||
autocmd BufNewFile,BufRead *.haml,*.hamlbars setf haml
|
||||
autocmd BufNewFile,BufRead *.sass setf sass
|
||||
autocmd BufNewFile,BufRead *.scss setf scss
|
||||
autocmd BufNewFile,BufReadPost *.jade set filetype=jade
|
||||
au BufNewFile,BufRead *.js setf javascript
|
||||
au BufNewFile,BufRead *.jsm setf javascript
|
||||
au BufNewFile,BufRead Jakefile setf javascript
|
||||
fun! s:SelectJavascript()
|
||||
if getline(1) =~# '^#!.*/bin/env\s\+node\>'
|
||||
set ft=javascript
|
||||
endif
|
||||
endfun
|
||||
au BufNewFile,BufRead * call s:SelectJavascript()
|
||||
autocmd BufNewFile,BufRead *.json set filetype=json
|
||||
augroup json_autocmd
|
||||
autocmd!
|
||||
autocmd FileType json setlocal autoindent
|
||||
autocmd FileType json setlocal formatoptions=tcq2l
|
||||
autocmd FileType json setlocal foldmethod=syntax
|
||||
augroup END
|
||||
au BufNewFile,BufRead *.ejs set filetype=jst
|
||||
au BufNewFile,BufRead *.jst set filetype=jst
|
||||
au BufNewFile,BufRead *.hamljs set filetype=jst
|
||||
autocmd BufNewFile,BufRead *.less setf less
|
||||
autocmd BufNewFile,BufRead *.markdown,*.md,*.mdown,*.mkd,*.mkdn
|
||||
\ if &ft =~# '^\%(conf\|modula2\)$' |
|
||||
\ set ft=markdown |
|
||||
\ else |
|
||||
\ setf markdown |
|
||||
\ endif
|
||||
autocmd BufRead *.html
|
||||
\ if getline(1) =~ '^\(%\|<[%&].*>\)' |
|
||||
\ set filetype=mason |
|
||||
\ endif
|
||||
if has("autocmd")
|
||||
au BufNewFile,BufRead *.mustache,*.handlebars,*.hbs,*.hogan,*.hulk,*.hjs set filetype=html syntax=mustache | runtime! ftplugin/mustache.vim ftplugin/mustache*.vim ftplugin/mustache/*.vim
|
||||
endif
|
||||
au BufRead,BufNewFile /etc/nginx/*,/usr/local/nginx/*,*/nginx/vhosts.d/*,nginx.conf if &ft == '' | setfiletype nginx | endif
|
||||
autocmd BufNewFile,BufRead *.proto setfiletype proto
|
||||
au BufRead,BufNewFile *.pp set filetype=puppet
|
||||
au BufNewFile,BufRead *.rb,*.rbw,*.gemspec set filetype=ruby
|
||||
au BufNewFile,BufRead *.builder,*.rxml,*.rjs set filetype=ruby
|
||||
au BufNewFile,BufRead [rR]akefile,*.rake set filetype=ruby
|
||||
au BufNewFile,BufRead [rR]antfile,*.rant set filetype=ruby
|
||||
au BufNewFile,BufRead .irbrc,irbrc set filetype=ruby
|
||||
au BufNewFile,BufRead .pryrc set filetype=ruby
|
||||
au BufNewFile,BufRead *.ru set filetype=ruby
|
||||
au BufNewFile,BufRead Capfile set filetype=ruby
|
||||
au BufNewFile,BufRead Gemfile set filetype=ruby
|
||||
au BufNewFile,BufRead Guardfile,.Guardfile set filetype=ruby
|
||||
au BufNewFile,BufRead Cheffile set filetype=ruby
|
||||
au BufNewFile,BufRead Berksfile set filetype=ruby
|
||||
au BufNewFile,BufRead [vV]agrantfile set filetype=ruby
|
||||
au BufNewFile,BufRead .autotest set filetype=ruby
|
||||
au BufNewFile,BufRead *.erb,*.rhtml set filetype=eruby
|
||||
au BufNewFile,BufRead [tT]horfile,*.thor set filetype=ruby
|
||||
au BufNewFile,BufRead *.rabl set filetype=ruby
|
||||
au BufNewFile,BufRead *.jbuilder set filetype=ruby
|
||||
au BufNewFile,BufRead Puppetfile set filetype=ruby
|
||||
au BufNewFile,BufRead [Bb]uildfile set filetype=ruby
|
||||
au BufNewFile,BufRead Appraisals set filetype=ruby
|
||||
au BufRead,BufNewFile *.rs set filetype=rust
|
||||
au BufRead,BufNewFile *.sbt set filetype=sbt
|
||||
fun! s:DetectScala()
|
||||
if getline(1) == '#!/usr/bin/env scala'
|
||||
set filetype=scala
|
||||
endif
|
||||
endfun
|
||||
au BufRead,BufNewFile *.scala,*.sbt set filetype=scala
|
||||
au BufRead,BufNewFile * call s:DetectScala()
|
||||
autocmd BufNewFile,BufRead *.slim set filetype=slim
|
||||
autocmd BufNewFile,BufReadPost *.styl set filetype=stylus
|
||||
autocmd BufNewFile,BufReadPost *.stylus set filetype=stylus
|
||||
au BufRead,BufNewFile *.textile set filetype=textile
|
||||
autocmd BufNewFile,BufRead .tmux.conf*,tmux.conf* setf tmux
|
||||
autocmd BufNewFile,BufRead *.twig set filetype=twig
|
||||
autocmd BufNewFile,BufRead *.html.twig set filetype=html.twig
|
||||
autocmd BufNewFile,BufRead *.ts setlocal filetype=typescript
|
||||
@@ -1,2 +0,0 @@
|
||||
" detect puppet filetype
|
||||
au BufRead,BufNewFile *.pp set filetype=puppet
|
||||
@@ -1,62 +0,0 @@
|
||||
" Ruby
|
||||
au BufNewFile,BufRead *.rb,*.rbw,*.gemspec set filetype=ruby
|
||||
|
||||
" Ruby on Rails
|
||||
au BufNewFile,BufRead *.builder,*.rxml,*.rjs set filetype=ruby
|
||||
|
||||
" Rakefile
|
||||
au BufNewFile,BufRead [rR]akefile,*.rake set filetype=ruby
|
||||
|
||||
" Rantfile
|
||||
au BufNewFile,BufRead [rR]antfile,*.rant set filetype=ruby
|
||||
|
||||
" IRB config
|
||||
au BufNewFile,BufRead .irbrc,irbrc set filetype=ruby
|
||||
|
||||
" Pry config
|
||||
au BufNewFile,BufRead .pryrc set filetype=ruby
|
||||
|
||||
" Rackup
|
||||
au BufNewFile,BufRead *.ru set filetype=ruby
|
||||
|
||||
" Capistrano
|
||||
au BufNewFile,BufRead Capfile set filetype=ruby
|
||||
|
||||
" Bundler
|
||||
au BufNewFile,BufRead Gemfile set filetype=ruby
|
||||
|
||||
" Guard
|
||||
au BufNewFile,BufRead Guardfile,.Guardfile set filetype=ruby
|
||||
|
||||
" Chef
|
||||
au BufNewFile,BufRead Cheffile set filetype=ruby
|
||||
au BufNewFile,BufRead Berksfile set filetype=ruby
|
||||
|
||||
" Vagrant
|
||||
au BufNewFile,BufRead [vV]agrantfile set filetype=ruby
|
||||
|
||||
" Autotest
|
||||
au BufNewFile,BufRead .autotest set filetype=ruby
|
||||
|
||||
" eRuby
|
||||
au BufNewFile,BufRead *.erb,*.rhtml set filetype=eruby
|
||||
|
||||
" Thor
|
||||
au BufNewFile,BufRead [tT]horfile,*.thor set filetype=ruby
|
||||
|
||||
" Rabl
|
||||
au BufNewFile,BufRead *.rabl set filetype=ruby
|
||||
|
||||
" Jbuilder
|
||||
au BufNewFile,BufRead *.jbuilder set filetype=ruby
|
||||
|
||||
" Puppet librarian
|
||||
au BufNewFile,BufRead Puppetfile set filetype=ruby
|
||||
"
|
||||
" Buildr Buildfile
|
||||
au BufNewFile,BufRead [Bb]uildfile set filetype=ruby
|
||||
|
||||
" Appraisal
|
||||
au BufNewFile,BufRead Appraisals set filetype=ruby
|
||||
|
||||
" vim: nowrap sw=2 sts=2 ts=8 noet:
|
||||
@@ -1,6 +0,0 @@
|
||||
" Vim detect file
|
||||
" Language: sbt
|
||||
" Maintainer: Derek Wyatt <derek@{myfirstname}{mylastname}.org>
|
||||
" Last Change: 2012 Jan 19
|
||||
|
||||
au BufRead,BufNewFile *.sbt set filetype=sbt
|
||||
@@ -1,8 +0,0 @@
|
||||
fun! s:DetectScala()
|
||||
if getline(1) == '#!/usr/bin/env scala'
|
||||
set filetype=scala
|
||||
endif
|
||||
endfun
|
||||
|
||||
au BufRead,BufNewFile *.scala,*.sbt set filetype=scala
|
||||
au BufRead,BufNewFile * call s:DetectScala()
|
||||
@@ -1 +0,0 @@
|
||||
autocmd BufNewFile,BufRead *.slim setf slim
|
||||
@@ -1,3 +0,0 @@
|
||||
" Stylus
|
||||
autocmd BufNewFile,BufReadPost *.styl set filetype=stylus
|
||||
autocmd BufNewFile,BufReadPost *.stylus set filetype=stylus
|
||||
@@ -1,8 +0,0 @@
|
||||
" textile.vim
|
||||
"
|
||||
" Tim Harper (tim.theenchanter.com)
|
||||
|
||||
" Force filetype to be textile even if already set
|
||||
" This will override the system ftplugin/changelog
|
||||
" set on some distros
|
||||
au BufRead,BufNewFile *.textile set filetype=textile
|
||||
@@ -1 +0,0 @@
|
||||
autocmd BufNewFile,BufRead .tmux.conf*,tmux.conf* setf tmux
|
||||
@@ -1,5 +0,0 @@
|
||||
" Twig
|
||||
autocmd BufNewFile,BufRead *.twig set filetype=twig
|
||||
|
||||
" HTML Twig
|
||||
autocmd BufNewFile,BufRead *.html.twig set filetype=html.twig
|
||||
@@ -1,15 +0,0 @@
|
||||
" File: bib_latexSuite.vim
|
||||
" Author: Srinath Avadhanula
|
||||
" License: Vim Charityware License
|
||||
" Description:
|
||||
" This file sources the bibtex.vim file distributed as part of latex-suite.
|
||||
" That file sets up 3 maps BBB, BAS, and BBA which are easy wasy to type in
|
||||
" bibliographic entries.
|
||||
"
|
||||
|
||||
" source main.vim because we need a few functions from it.
|
||||
runtime ftplugin/latex-suite/main.vim
|
||||
" Disable smart-quotes because we need to enter real quotes in bib files.
|
||||
runtime ftplugin/latex-suite/bibtex.vim
|
||||
|
||||
" vim:fdm=marker:ff=unix:noet:ts=4:sw=4:nowrap
|
||||
@@ -23,9 +23,8 @@ setlocal iskeyword+=?,-,*,!,+,/,=,<,>,.,:,$
|
||||
" of user-defined def* definitions.
|
||||
setlocal define=\\v[(/]def(ault)@!\\S*
|
||||
|
||||
" Remove 't' from 'formatoptions' to avoid auto-wrapping code. The '+=croql'
|
||||
" is standard ftplugin boilerplate, although it is arguably intrusive.
|
||||
setlocal formatoptions-=t formatoptions+=croql
|
||||
" Remove 't' from 'formatoptions' to avoid auto-wrapping code.
|
||||
setlocal formatoptions-=t
|
||||
|
||||
" Lisp comments are routinely nested (e.g. ;;; SECTION HEADING)
|
||||
setlocal comments=n:;
|
||||
|
||||
254
ftplugin/csv.vim
254
ftplugin/csv.vim
@@ -11,10 +11,10 @@
|
||||
" though, implementation differs.
|
||||
|
||||
" Plugin folklore "{{{2
|
||||
if v:version < 700 || exists('b:did_ftplugin')
|
||||
if v:version < 700 || exists('b:did_csv_ftplugin')
|
||||
finish
|
||||
endif
|
||||
let b:did_ftplugin = 1
|
||||
let b:did_csv_ftplugin = 1
|
||||
|
||||
let s:cpo_save = &cpo
|
||||
set cpo&vim
|
||||
@@ -136,7 +136,8 @@ fu! <sid>Init(startline, endline) "{{{3
|
||||
\ . "| unlet! b:csv_fixed_width b:csv_list b:col_width"
|
||||
\ . "| unlet! b:csv_SplitWindow b:csv_headerline"
|
||||
\ . "| unlet! b:csv_thousands_sep b:csv_decimal_sep"
|
||||
\. " | unlet! b:browsefilter b:csv_start b:csv_end"
|
||||
\. " | unlet! b:browsefilter b:csv_cmt"
|
||||
\. " | unlet! b:csv_arrange_leftalign"
|
||||
|
||||
" Delete all functions
|
||||
" disabled currently, because otherwise when switching ft
|
||||
@@ -168,6 +169,7 @@ fu! <sid>Init(startline, endline) "{{{3
|
||||
" \ delf <sid>SaveOptions | delf <sid>CheckDuplicates |
|
||||
" \ delf <sid>CompleteColumnNr | delf <sid>CSVPat | delf <sid>Transpose |
|
||||
" \ delf <sid>LocalSettings() | delf <sid>AddColumn | delf <sid>SubstituteInColumn
|
||||
" \ delf <sid>SetupQuitPre() | delf CSV_CloseBuffer
|
||||
endfu
|
||||
|
||||
fu! <sid>LocalSettings(type) "{{{3
|
||||
@@ -275,7 +277,9 @@ fu! <sid>DoAutoCommands() "{{{3
|
||||
au BufNewFile,BufNew * call <sid>Menu(0)
|
||||
augroup END
|
||||
"let b:undo_ftplugin .= '| sil! amenu disable CSV'
|
||||
let b:undo_ftplugin .= '| sil! call <sid>Menu(0)'
|
||||
"
|
||||
" b:undo_ftplugin does not support calling <sid> Functions
|
||||
"let b:undo_ftplugin .= '| sil! call <sid>Menu(0)'
|
||||
endif
|
||||
endfu
|
||||
|
||||
@@ -658,7 +662,7 @@ fu! <sid>ArrangeCol(first, last, bang) range "{{{3
|
||||
else
|
||||
let ro = 0
|
||||
endif
|
||||
exe a:first . ',' . a:last .'s/' . (b:col) .
|
||||
exe "sil". a:first . ',' . a:last .'s/' . (b:col) .
|
||||
\ '/\=<SID>Columnize(submatch(0))/' . (&gd ? '' : 'g')
|
||||
" Clean up variables, that were only needed for <sid>Columnize() function
|
||||
unlet! s:columnize_count s:max_cols s:prev_line
|
||||
@@ -693,7 +697,11 @@ endfu
|
||||
|
||||
fu! <sid>UnArrangeCol(match) "{{{3
|
||||
" Strip leading white space, also trims empty records:
|
||||
return substitute(a:match, '^\s\+', '', '')
|
||||
if get(b:, 'csv_arrange_leftalign',0)
|
||||
return substitute(a:match, '\s\+\ze'. b:delimiter. '\?$', '', '')
|
||||
else
|
||||
return substitute(a:match, '^\s\+', '', '')
|
||||
endif
|
||||
" only strip leading white space, if a non-white space follows:
|
||||
"return substitute(a:match, '^\s\+\ze\S', '', '')
|
||||
endfu
|
||||
@@ -741,9 +749,18 @@ fu! <sid>Columnize(field) "{{{3
|
||||
let width=get(b:col_width, (s:columnize_count % s:max_cols), 20)
|
||||
|
||||
let s:columnize_count += 1
|
||||
let has_delimiter = (a:field =~# b:delimiter.'$')
|
||||
if v:version > 703 || v:version == 703 && has("patch713")
|
||||
" printf knows about %S (e.g. can handle char length
|
||||
return printf("%*S", width+1 , a:field)
|
||||
if get(b:, 'csv_arrange_leftalign',0)
|
||||
" left-align content
|
||||
return printf("%-*S%s", width+1 ,
|
||||
\ (has_delimiter ?
|
||||
\ matchstr(a:field, '.*\%('.b:delimiter.'\)\@=') : a:field),
|
||||
\ (has_delimiter ? b:delimiter : ''))
|
||||
else
|
||||
return printf("%*S", width+1 , a:field)
|
||||
endif
|
||||
else
|
||||
" printf only handles bytes
|
||||
if !exists("g:csv_no_multibyte") &&
|
||||
@@ -765,7 +782,14 @@ fu! <sid>Columnize(field) "{{{3
|
||||
" Column has correct length, don't use printf()
|
||||
return a:field
|
||||
else
|
||||
return printf("%*s", width , a:field)
|
||||
if get(b:, 'csv_arrange_leftalign',0)
|
||||
" left-align content
|
||||
return printf("%-*s%s", width,
|
||||
\ (has_delimiter ? matchstr(a:field, '.*\%('.b:delimiter.'\)\@=') : a:field),
|
||||
\ (has_delimiter ? b:delimiter : ''))
|
||||
else
|
||||
return printf("%*s", width , a:field)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endfun
|
||||
@@ -795,16 +819,13 @@ fu! <sid>GetColPat(colnr, zs_flag) "{{{3
|
||||
return pat . (a:zs_flag ? '\zs' : '')
|
||||
endfu
|
||||
|
||||
fu! <sid>SetupQuitPre() "{{{3
|
||||
fu! <sid>SetupQuitPre(window) "{{{3
|
||||
" Setup QuitPre autocommand to quit cleanly
|
||||
if exists("##QuitPre")
|
||||
let bufnr=bufnr('')
|
||||
noa wincmd p
|
||||
augroup CSV_QuitPre
|
||||
au!
|
||||
exe "au QuitPre * ". bufnr. "bw"
|
||||
exe "au QuitPre * call CSV_CloseBuffer(".winbufnr(a:window).")"
|
||||
augroup end
|
||||
noa wincmd p
|
||||
endif
|
||||
endfu
|
||||
|
||||
@@ -839,7 +860,7 @@ fu! <sid>SplitHeaderLine(lines, bang, hor) "{{{3
|
||||
"let b:col=b
|
||||
"setl syntax=csv
|
||||
sil! doautocmd FileType csv
|
||||
1
|
||||
noa 1
|
||||
exe "resize" . lines
|
||||
setl scrollopt=hor winfixheight nowrap
|
||||
"let &l:stl=repeat(' ', winwidth(0))
|
||||
@@ -848,31 +869,31 @@ fu! <sid>SplitHeaderLine(lines, bang, hor) "{{{3
|
||||
let &l:fdc = _fdc
|
||||
else
|
||||
setl scrollopt=ver scrollbind
|
||||
0
|
||||
let a=<sid>CopyCol('',1)
|
||||
" Force recalculating columns width
|
||||
unlet! b:csv_list
|
||||
try
|
||||
let width = <sid>ColWidth(1)
|
||||
catch /ColWidth/
|
||||
call <sid>Warn("Error: getting Column Width, using default!")
|
||||
endtry
|
||||
noa 0
|
||||
let a=<sid>CopyCol('',1,a:lines)
|
||||
" Does it make sense to use the preview window?
|
||||
"vert sil! pedit |wincmd w | enew!
|
||||
above vsp +enew
|
||||
call append(0, a)
|
||||
$d _
|
||||
sil %s/.*/\=printf("%.*s", width, submatch(0))/eg
|
||||
0
|
||||
exe "vert res" width
|
||||
let b:col=b
|
||||
let b:col = b
|
||||
sil! doautocmd FileType csv
|
||||
" remove leading delimiter
|
||||
exe "sil :%s/^". b:delimiter. "//e"
|
||||
" remove trailing delimiter
|
||||
exe "sil :%s/". b:delimiter. "\s*$//e"
|
||||
syn clear
|
||||
noa 0
|
||||
let b:csv_SplitWindow = winnr()
|
||||
sil :call <sid>ArrangeCol(1,line('$'), 1)
|
||||
exe "vert res" . len(split(getline(1), '\zs'))
|
||||
call matchadd("CSVHeaderLine", b:col)
|
||||
setl scrollopt=ver winfixwidth
|
||||
endif
|
||||
call <sid>SetupQuitPre()
|
||||
call <sid>SetupQuitPre(winnr())
|
||||
let win = winnr()
|
||||
setl scrollbind buftype=nowrite bufhidden=wipe noswapfile nobuflisted
|
||||
wincmd p
|
||||
noa wincmd p
|
||||
let b:csv_SplitWindow = win
|
||||
aug CSV_Preview
|
||||
au!
|
||||
@@ -891,7 +912,12 @@ fu! <sid>SplitHeaderLine(lines, bang, hor) "{{{3
|
||||
let &sbo = _sbo
|
||||
endif
|
||||
setl noscrollbind
|
||||
wincmd c
|
||||
try
|
||||
wincmd c
|
||||
catch /^Vim\%((\a\+)\)\=:E444/ " cannot close last window
|
||||
catch /^Vim\%((\a\+)\)\=:E517/ " buffer already wiped
|
||||
" no-op
|
||||
endtry
|
||||
"pclose!
|
||||
unlet! b:csv_SplitWindow
|
||||
aug CSV_Preview
|
||||
@@ -910,8 +936,11 @@ fu! <sid>SplitHeaderToggle(hor) "{{{3
|
||||
endfu
|
||||
|
||||
" TODO: from here on add logic for fixed-width csv files!
|
||||
fu! <sid>MoveCol(forward, line) "{{{3
|
||||
fu! <sid>MoveCol(forward, line, ...) "{{{3
|
||||
" Move cursor position upwards/downwards left/right
|
||||
" a:1 is there to have some mappings move in the same
|
||||
" direction but still stop at a different position
|
||||
" see :h csv-mapping-H
|
||||
let colnr=<SID>WColumn()
|
||||
let maxcol=<SID>MaxColumns()
|
||||
let cpos=getpos('.')[2]
|
||||
@@ -982,6 +1011,17 @@ fu! <sid>MoveCol(forward, line) "{{{3
|
||||
norm! 0
|
||||
endif
|
||||
endw
|
||||
if (exists("a:1") && a:1)
|
||||
" H also stops at the beginning of the content
|
||||
" of a field.
|
||||
let epos = getpos('.')
|
||||
if getline('.')[col('.')-1] == ' '
|
||||
call search('\S', 'W', line('.'))
|
||||
if getpos('.')[2] > spos
|
||||
call setpos('.', epos)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
else
|
||||
norm! 0
|
||||
endif
|
||||
@@ -1043,13 +1083,19 @@ fu! <sid>Sort(bang, line1, line2, colnr) range "{{{3
|
||||
call winrestview(wsv)
|
||||
endfun
|
||||
|
||||
fu! <sid>CopyCol(reg, col) "{{{3
|
||||
fu! <sid>CopyCol(reg, col, cnt) "{{{3
|
||||
" Return Specified Column into register reg
|
||||
let col = a:col == "0" ? <sid>WColumn() : a:col+0
|
||||
let mcol = <sid>MaxColumns()
|
||||
if col == '$' || col > mcol
|
||||
let col = mcol
|
||||
endif
|
||||
" The number of columns to return
|
||||
" by default (value of zero, will only return that specific column)
|
||||
let cnt_cols = col - 1
|
||||
if !empty(a:cnt) && a:cnt > 0 && col + a:cnt <= mcol
|
||||
let cnt_cols = col + a:cnt - 1
|
||||
endif
|
||||
let a = []
|
||||
" Don't get lines, that are currently filtered away
|
||||
if !exists("b:csv_filter") || empty(b:csv_filter)
|
||||
@@ -1068,9 +1114,12 @@ fu! <sid>CopyCol(reg, col) "{{{3
|
||||
call filter(a, 'v:val !~ pat')
|
||||
|
||||
if !exists("b:csv_fixed_width_cols")
|
||||
call map(a, 'split(v:val, ''^'' . b:col . ''\zs'')[col-1]')
|
||||
call map(a, 'split(v:val, ''^'' . b:col . ''\zs'')[col-1:cnt_cols]')
|
||||
else
|
||||
call map(a, 'matchstr(v:val, <sid>GetColPat(col, 0))')
|
||||
call map(a, 'matchstr(v:val, <sid>GetColPat(col, 0)).*<sid>GetColPat(col+cnt_cols, 0)')
|
||||
endif
|
||||
if type(a[0]) == type([])
|
||||
call map(a, 'join(v:val, "")')
|
||||
endif
|
||||
if a:reg =~ '[-"0-9a-zA-Z*+]'
|
||||
"exe ':let @' . a:reg . ' = "' . join(a, "\n") . '"'
|
||||
@@ -1222,8 +1271,8 @@ fu! <sid>SumColumn(list) "{{{3
|
||||
if empty(item)
|
||||
continue
|
||||
endif
|
||||
let nr = matchstr(item, '\d\(.*\d\)\?$')
|
||||
let format1 = '^\d\+\zs\V' . s:nr_format[0] . '\m\ze\d'
|
||||
let nr = matchstr(item, '-\?\d\(.*\d\)\?$')
|
||||
let format1 = '^-\?\d\+\zs\V' . s:nr_format[0] . '\m\ze\d'
|
||||
let format2 = '\d\+\zs\V' . s:nr_format[1] . '\m\ze\d'
|
||||
try
|
||||
let nr = substitute(nr, format1, '', '')
|
||||
@@ -1574,10 +1623,13 @@ fu! <sid>AnalyzeColumn(...) "{{{3
|
||||
|
||||
" Initialize s:fold_headerline
|
||||
call <sid>CheckHeaderLine()
|
||||
let data = <sid>CopyCol('', colnr)[s:csv_fold_headerline : -1]
|
||||
let data = <sid>CopyCol('', colnr, '')[s:csv_fold_headerline : -1]
|
||||
let qty = len(data)
|
||||
let res = {}
|
||||
for item in data
|
||||
if empty(item)
|
||||
let item = 'NULL'
|
||||
endif
|
||||
if !get(res, item)
|
||||
let res[item] = 0
|
||||
endif
|
||||
@@ -1585,6 +1637,7 @@ fu! <sid>AnalyzeColumn(...) "{{{3
|
||||
endfor
|
||||
|
||||
let max_items = reverse(sort(values(res)))
|
||||
let count_items = keys(res)
|
||||
if len(max_items) > 5
|
||||
call remove(max_items, 5, -1)
|
||||
call filter(res, 'v:val =~ ''^''.join(max_items, ''\|'').''$''')
|
||||
@@ -1595,9 +1648,9 @@ fu! <sid>AnalyzeColumn(...) "{{{3
|
||||
else
|
||||
let title="Nr\tCount\tValue"
|
||||
endif
|
||||
echohl "Title"
|
||||
echohl Title
|
||||
echo printf("%s", title)
|
||||
echohl "Normal"
|
||||
echohl Normal
|
||||
echo printf("%s", repeat('=', strdisplaywidth(title)))
|
||||
|
||||
let i=1
|
||||
@@ -1622,6 +1675,8 @@ fu! <sid>AnalyzeColumn(...) "{{{3
|
||||
endif
|
||||
endfor
|
||||
endfor
|
||||
echo printf("%s", repeat('=', strdisplaywidth(title)))
|
||||
echo printf("different values: %d", len(count_items))
|
||||
unlet max_items
|
||||
endfunc
|
||||
|
||||
@@ -1665,59 +1720,56 @@ fu! <sid>InitCSVFixedWidth() "{{{3
|
||||
endif
|
||||
" Turn off syntax highlighting
|
||||
syn clear
|
||||
let max_len = len(split(getline(1), '\zs'))
|
||||
let _cc = &l:cc
|
||||
let &l:cc = 1
|
||||
redraw!
|
||||
let list = []
|
||||
let Dict = {'1': 1} " first column is always the start of a new column
|
||||
let tcc = &l:cc
|
||||
let &l:cc = 1
|
||||
echo "<Cursor>, <Space>, <ESC>, <BS>, <CR>..."
|
||||
let char=getchar()
|
||||
while 1
|
||||
if char == "\<Left>" || char == "\<Right>"
|
||||
let tcc = eval('tcc'.(char=="\<Left>" ? '-' : '+').'1')
|
||||
if tcc < 0
|
||||
let tcc=0
|
||||
elseif tcc > max_len
|
||||
let tcc = max_len
|
||||
endif
|
||||
elseif char == "\<Space>" || char == 32 " Space
|
||||
call add(list, tcc)
|
||||
let Dict[tcc] = 1
|
||||
elseif char == "\<BS>" || char == 127
|
||||
call remove(list, -1)
|
||||
try
|
||||
call remove(Dict, reverse(sort(keys(Dict)))[0])
|
||||
catch /^Vim\%((\a\+)\)\=:E\(\%(716\)\|\%(684\)\)/ " Dict or List empty
|
||||
break
|
||||
endtry
|
||||
elseif char == "\<ESC>" || char == 27
|
||||
let &l:cc=_cc
|
||||
redraw!
|
||||
return
|
||||
elseif char == "\<CR>" || char == "\n" || char == "\r" " Enter
|
||||
let Dict[tcc] = 1
|
||||
break
|
||||
else
|
||||
break
|
||||
endif
|
||||
let &l:cc=tcc . (!empty(list)? ',' . join(list, ','):'')
|
||||
let &l:cc=tcc . (!empty(keys(Dict))? ',' . join(keys(Dict), ','):'')
|
||||
redraw!
|
||||
echo "<Cursor>, <Space>, <ESC>, <BS>, <CR>..."
|
||||
let char=getchar()
|
||||
endw
|
||||
if tcc > 0
|
||||
call add(list,tcc)
|
||||
endif
|
||||
let b:csv_fixed_width_cols=[]
|
||||
let tcc=0
|
||||
if !empty(list)
|
||||
call Break()
|
||||
" Remove duplicate entries
|
||||
for val in sort(list, "<sid>SortList")
|
||||
if val==tcc
|
||||
continue
|
||||
endif
|
||||
call add(b:csv_fixed_width_cols, val)
|
||||
let tcc=val
|
||||
endfor
|
||||
let b:csv_fixed_width=join(sort(b:csv_fixed_width_cols,
|
||||
\ "<sid>SortList"), ',')
|
||||
call <sid>Init(1, line('$'))
|
||||
endif
|
||||
let b:csv_fixed_width_cols = sort(keys(Dict), "<sid>SortList")
|
||||
let b:csv_fixed_width = join(sort(keys(Dict), "<sid>SortList"), ',')
|
||||
call <sid>Init(1, line('$'))
|
||||
|
||||
let &l:cc=_cc
|
||||
redraw!
|
||||
endfu
|
||||
|
||||
fu! Break()
|
||||
return
|
||||
endfu
|
||||
|
||||
fu! <sid>NewRecord(line1, line2, count) "{{{3
|
||||
if a:count =~ "\D"
|
||||
call <sid>WarningMsg("Invalid count specified")
|
||||
@@ -1757,33 +1809,53 @@ fu! <sid>MoveOver(outer) "{{{3
|
||||
" Move over a field
|
||||
" a:outer means include the delimiter
|
||||
let last = 0
|
||||
let mode = a:outer
|
||||
let outer_field = a:outer
|
||||
let cur_field = <sid>WColumn()
|
||||
let _wsv = winsaveview()
|
||||
|
||||
if <sid>WColumn() == <sid>MaxColumns()
|
||||
if cur_field == <sid>MaxColumns()
|
||||
let last = 1
|
||||
if !mode && getline('.')[-1:] != b:delimiter
|
||||
if !outer_field && getline('.')[-1:] != b:delimiter
|
||||
" No trailing delimiter, so inner == outer
|
||||
let mode = 1
|
||||
let outer_field = 1
|
||||
endif
|
||||
endif
|
||||
" Use the mapped key
|
||||
exe ":sil! norm E"
|
||||
" Move 1 column backwards, unless the cursor is in the first column
|
||||
" or in front of a delimiter
|
||||
if matchstr(getline('.'), '.\%'.virtcol('.').'v') != b:delimiter && virtcol('.') > 1
|
||||
call <sid>MoveCol(-1, line('.'))
|
||||
endif
|
||||
" if cur_field != <sid>WColumn()
|
||||
" cursor was at the beginning of the field, and moved back to the
|
||||
" previous field, move back to original position
|
||||
" call cursor(_wsv.lnum, _wsv.col)
|
||||
" endif
|
||||
let _s = @/
|
||||
if last
|
||||
exe "sil! norm! /" . b:col . "\<cr>v$h" . (mode ? "" : "\<Left>")
|
||||
exe "sil! norm! v$h" . (outer_field ? "" : "h") . (&sel ==# 'exclusive' ? "l" : '')
|
||||
else
|
||||
exe "sil! norm! /" . b:col . "\<cr>vn\<Left>" . (mode ? "" : "\<Left>")
|
||||
exe "sil! norm! v/." . b:col . "\<cr>h" . (outer_field ? "" : "h") . (&sel ==# 'exclusive' ? "l" : '')
|
||||
endif
|
||||
let _wsv.col = col('.')-1
|
||||
call winrestview(_wsv)
|
||||
let @/ = _s
|
||||
endfu
|
||||
|
||||
fu! <sid>CSVMappings() "{{{3
|
||||
call <sid>Map('noremap', 'W', ':<C-U>call <SID>MoveCol(1, line("."))<CR>')
|
||||
call <sid>Map('noremap', '<C-Right>', ':<C-U>call <SID>MoveCol(1, line("."))<CR>')
|
||||
call <sid>Map('noremap', 'L', ':<C-U>call <SID>MoveCol(1, line("."))<CR>')
|
||||
call <sid>Map('noremap', 'E', ':<C-U>call <SID>MoveCol(-1, line("."))<CR>')
|
||||
call <sid>Map('noremap', '<C-Left>', ':<C-U>call <SID>MoveCol(-1, line("."))<CR>')
|
||||
call <sid>Map('noremap', 'H', ':<C-U>call <SID>MoveCol(-1, line("."), 1)<CR>')
|
||||
call <sid>Map('noremap', 'K', ':<C-U>call <SID>MoveCol(0,
|
||||
\ line(".")-v:count1)<CR>')
|
||||
call <sid>Map('noremap', '<Up>', ':<C-U>call <SID>MoveCol(0,
|
||||
\ line(".")-v:count1)<CR>')
|
||||
call <sid>Map('noremap', 'J', ':<C-U>call <SID>MoveCol(0,
|
||||
\ line(".")+v:count1)<CR>')
|
||||
call <sid>Map('noremap', '<Down>', ':<C-U>call <SID>MoveCol(0,
|
||||
\ line(".")+v:count1)<CR>')
|
||||
call <sid>Map('nnoremap', '<CR>', ':<C-U>call <SID>PrepareFolding(1,
|
||||
\ 1)<CR>')
|
||||
call <sid>Map('nnoremap', '<Space>', ':<C-U>call <SID>PrepareFolding(1,
|
||||
@@ -1806,12 +1878,6 @@ fu! <sid>CSVMappings() "{{{3
|
||||
call <sid>Map('nnoremap', '<LocalLeader><CR>', '<CR>')
|
||||
call <sid>Map('nnoremap', '<LocalLeader><Space>', '<Space>')
|
||||
call <sid>Map('nnoremap', '<LocalLeader><BS>', '<BS>')
|
||||
call <sid>Map('map', '<C-Right>', 'W')
|
||||
call <sid>Map('map', '<C-Left>', 'E')
|
||||
call <sid>Map('map', 'H', 'E')
|
||||
call <sid>Map('map', 'L', 'W')
|
||||
call <sid>Map('map', '<Up>', 'K')
|
||||
call <sid>Map('map', '<Down>', 'J')
|
||||
endfu
|
||||
|
||||
fu! <sid>CommandDefinitions() "{{{3
|
||||
@@ -1845,8 +1911,8 @@ fu! <sid>CommandDefinitions() "{{{3
|
||||
\ ':call <sid>Sort(<bang>0, <line1>,<line2>,<q-args>)',
|
||||
\ '-nargs=* -bang -range=% -complete=custom,<sid>SortComplete')
|
||||
call <sid>LocalCmd("Column",
|
||||
\ ':call <sid>CopyCol(empty(<q-reg>)?''"'':<q-reg>,<q-count>)',
|
||||
\ '-count -register')
|
||||
\ ':call <sid>CopyCol(empty(<q-reg>)?''"'':<q-reg>,<q-count>,<q-args>)',
|
||||
\ '-count -register -nargs=?')
|
||||
call <sid>LocalCmd("MoveColumn",
|
||||
\ ':call <sid>MoveColumn(<line1>,<line2>,<f-args>)',
|
||||
\ '-range=% -nargs=* -complete=custom,<sid>SortComplete')
|
||||
@@ -2327,15 +2393,20 @@ endfu
|
||||
|
||||
" Global functions "{{{2
|
||||
fu! csv#EvalColumn(nr, func, first, last) range "{{{3
|
||||
" Make sure, the function is called for the correct filetype.
|
||||
if match(split(&ft, '\.'), 'csv') == -1
|
||||
call <sid>Warn("File is no CSV file!")
|
||||
return
|
||||
endif
|
||||
let save = winsaveview()
|
||||
call <sid>CheckHeaderLine()
|
||||
let nr = matchstr(a:nr, '^\d\+')
|
||||
let nr = matchstr(a:nr, '^\-\?\d\+')
|
||||
let col = (empty(nr) ? <sid>WColumn() : nr)
|
||||
" don't take the header line into consideration
|
||||
let start = a:first - 1 + s:csv_fold_headerline
|
||||
let stop = a:last - 1 + s:csv_fold_headerline
|
||||
|
||||
let column = <sid>CopyCol('', col)[start : stop]
|
||||
let column = <sid>CopyCol('', col, '')[start : stop]
|
||||
" Delete delimiter
|
||||
call map(column, 'substitute(v:val, b:delimiter . "$", "", "g")')
|
||||
" Revmoe trailing whitespace
|
||||
@@ -2395,7 +2466,7 @@ fu! CSVField(x, y, ...) "{{{3
|
||||
let orig = !empty(a:0)
|
||||
let y = (y < 0 ? 0 : y)
|
||||
let x = (x > (<sid>MaxColumns()) ? (<sid>MaxColumns()) : x)
|
||||
let col = <sid>CopyCol('',x)
|
||||
let col = <sid>CopyCol('',x,'')
|
||||
if !orig
|
||||
" remove leading and trainling whitespace and the delimiter
|
||||
return matchstr(col[y], '^\s*\zs.\{-}\ze\s*'.b:delimiter.'\?$')
|
||||
@@ -2434,6 +2505,23 @@ fu! CSV_WCol(...) "{{{3
|
||||
endtry
|
||||
endfun
|
||||
|
||||
fu! CSV_CloseBuffer(buffer) "{{{3
|
||||
" Setup by SetupQuitPre autocommand
|
||||
try
|
||||
if bufnr((a:buffer)+0) > -1
|
||||
exe a:buffer. "bw"
|
||||
endif
|
||||
catch /^Vim\%((\a\+)\)\=:E517/ " buffer already wiped
|
||||
" no-op
|
||||
finally
|
||||
augroup CSV_QuitPre
|
||||
au!
|
||||
augroup END
|
||||
augroup! CSV_QuitPre
|
||||
endtry
|
||||
endfu
|
||||
|
||||
|
||||
" Initialize Plugin "{{{2
|
||||
let b:csv_start = exists("b:csv_start") ? b:csv_start : 1
|
||||
let b:csv_end = exists("b:csv_end") ? b:csv_end : line('$')
|
||||
|
||||
@@ -1,85 +1,151 @@
|
||||
" Vim ftplugin file
|
||||
" Language: Erlang
|
||||
" Author: Oscar Hellström <oscar@oscarh.net>
|
||||
" Contributors: Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
|
||||
" Eduardo Lopez (http://github.com/tapichu)
|
||||
" License: Vim license
|
||||
" Version: 2012/11/25
|
||||
|
||||
if exists('b:did_ftplugin')
|
||||
" Language: Erlang
|
||||
" Maintainer: Oscar Hellström <oscar@oscarh.net>
|
||||
" URL: http://personal.oscarh.net
|
||||
" Contributor: Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
|
||||
" Version: 2010-09-03
|
||||
" ------------------------------------------------------------------------------
|
||||
" Usage:
|
||||
"
|
||||
" To enable folding put in your vimrc:
|
||||
" set foldenable
|
||||
"
|
||||
" Folding will make only one fold for a complete function, even though it has
|
||||
" more than one function head and body.
|
||||
"
|
||||
" To change this behaviour put in your vimrc file:
|
||||
" let g:erlangFoldSplitFunction=1
|
||||
"
|
||||
" ------------------------------------------------------------------------------
|
||||
" Plugin init
|
||||
if exists("b:did_ftplugin")
|
||||
finish
|
||||
else
|
||||
let b:did_ftplugin = 1
|
||||
endif
|
||||
|
||||
if exists('s:did_function_definitions')
|
||||
" Don't load any other
|
||||
let b:did_ftplugin=1
|
||||
|
||||
if exists('s:doneFunctionDefinitions')
|
||||
call s:SetErlangOptions()
|
||||
finish
|
||||
else
|
||||
let s:did_function_definitions = 1
|
||||
endif
|
||||
|
||||
if !exists('g:erlang_keywordprg')
|
||||
let g:erlang_keywordprg = 'erl -man'
|
||||
endif
|
||||
|
||||
if !exists('g:erlang_folding')
|
||||
let g:erlang_folding = 0
|
||||
endif
|
||||
|
||||
let s:erlang_fun_begin = '^\(\a\w*\|[''][^'']*['']\)(.*$'
|
||||
let s:erlang_fun_end = '^[^%]*\.\s*\(%.*\)\?$'
|
||||
let s:doneFunctionDefinitions=1
|
||||
|
||||
" Local settings
|
||||
function s:SetErlangOptions()
|
||||
compiler erlang
|
||||
if version >= 700
|
||||
setlocal omnifunc=erlang_complete#Complete
|
||||
setlocal omnifunc=erlangcomplete#Complete
|
||||
endif
|
||||
|
||||
if g:erlang_folding
|
||||
setlocal foldmethod=expr
|
||||
setlocal foldexpr=GetErlangFold(v:lnum)
|
||||
setlocal foldtext=ErlangFoldText()
|
||||
endif
|
||||
|
||||
setlocal comments=:%%%,:%%,:%
|
||||
setlocal commentstring=%%s
|
||||
setlocal formatoptions+=ro
|
||||
setlocal suffixesadd=.erl
|
||||
let libs = substitute(system('which erl'), '/bin/erl', '/lib/erlang/lib/**/src/', '')
|
||||
execute 'setlocal path+=' . libs
|
||||
let &l:keywordprg = g:erlang_keywordprg
|
||||
setlocal foldmethod=expr
|
||||
setlocal foldexpr=GetErlangFold(v:lnum)
|
||||
setlocal foldtext=ErlangFoldText()
|
||||
endfunction
|
||||
|
||||
function GetErlangFold(lnum)
|
||||
let lnum = a:lnum
|
||||
let line = getline(lnum)
|
||||
" Define folding functions
|
||||
if !exists("*GetErlangFold")
|
||||
" Folding params
|
||||
let s:ErlangFunBegin = '^\a\w*(.*$'
|
||||
let s:ErlangFunEnd = '^[^%]*\.\s*\(%.*\)\?$'
|
||||
let s:ErlangBlankLine = '^\s*\(%.*\)\?$'
|
||||
|
||||
if line =~ s:erlang_fun_end
|
||||
return '<1'
|
||||
endif
|
||||
" Auxiliary fold functions
|
||||
function s:GetNextNonBlank(lnum)
|
||||
let lnum = nextnonblank(a:lnum + 1)
|
||||
let line = getline(lnum)
|
||||
while line =~ s:ErlangBlankLine && 0 != lnum
|
||||
let lnum = nextnonblank(lnum + 1)
|
||||
let line = getline(lnum)
|
||||
endwhile
|
||||
return lnum
|
||||
endfunction
|
||||
|
||||
if line =~ s:erlang_fun_begin && foldlevel(lnum - 1) == 1
|
||||
return '1'
|
||||
endif
|
||||
function s:GetFunName(str)
|
||||
return matchstr(a:str, '^\a\w*(\@=')
|
||||
endfunction
|
||||
|
||||
if line =~ s:erlang_fun_begin
|
||||
return '>1'
|
||||
endif
|
||||
function s:GetFunArgs(str, lnum)
|
||||
let str = a:str
|
||||
let lnum = a:lnum
|
||||
while str !~ '->\s*\(%.*\)\?$'
|
||||
let lnum = s:GetNextNonBlank(lnum)
|
||||
if 0 == lnum " EOF
|
||||
return ""
|
||||
endif
|
||||
let str .= getline(lnum)
|
||||
endwhile
|
||||
return matchstr(str,
|
||||
\ '\(^(\s*\)\@<=.*\(\s*)\(\s\+when\s\+.*\)\?\s\+->\s*\(%.*\)\?$\)\@=')
|
||||
endfunction
|
||||
|
||||
return '='
|
||||
endfunction
|
||||
function s:CountFunArgs(arguments)
|
||||
let pos = 0
|
||||
let ac = 0 " arg count
|
||||
let arguments = a:arguments
|
||||
|
||||
" Change list / tuples into just one A(rgument)
|
||||
let erlangTuple = '{\([A-Za-z_,|=\-\[\]]\|\s\)*}'
|
||||
let erlangList = '\[\([A-Za-z_,|=\-{}]\|\s\)*\]'
|
||||
|
||||
function ErlangFoldText()
|
||||
let line = getline(v:foldstart)
|
||||
let foldlen = v:foldend - v:foldstart + 1
|
||||
let lines = ' ' . foldlen . ' lines: ' . substitute(line, "[ \t]*", '', '')
|
||||
if foldlen < 10
|
||||
let lines = ' ' . lines
|
||||
endif
|
||||
let retval = '+' . v:folddashes . lines
|
||||
" FIXME: Use searchpair?
|
||||
while arguments =~ erlangTuple
|
||||
let arguments = substitute(arguments, erlangTuple, "A", "g")
|
||||
endwhile
|
||||
" FIXME: Use searchpair?
|
||||
while arguments =~ erlangList
|
||||
let arguments = substitute(arguments, erlangList, "A", "g")
|
||||
endwhile
|
||||
|
||||
let len = strlen(arguments)
|
||||
while pos < len && pos > -1
|
||||
let ac += 1
|
||||
let pos = matchend(arguments, ',\s*', pos)
|
||||
endwhile
|
||||
return ac
|
||||
endfunction
|
||||
|
||||
return retval
|
||||
endfunction
|
||||
" Main fold function
|
||||
function GetErlangFold(lnum)
|
||||
let lnum = a:lnum
|
||||
let line = getline(lnum)
|
||||
|
||||
if line =~ s:ErlangFunEnd
|
||||
return '<1'
|
||||
endif
|
||||
|
||||
if line =~ s:ErlangFunBegin && foldlevel(lnum - 1) == 1
|
||||
if exists("g:erlangFoldSplitFunction") && g:erlangFoldSplitFunction
|
||||
return '>1'
|
||||
else
|
||||
return '1'
|
||||
endif
|
||||
endif
|
||||
|
||||
if line =~ s:ErlangFunBegin
|
||||
return '>1'
|
||||
endif
|
||||
|
||||
return '='
|
||||
endfunction
|
||||
|
||||
" Erlang fold description (foldtext function)
|
||||
function ErlangFoldText()
|
||||
let foldlen = v:foldend - v:foldstart
|
||||
if 1 < foldlen
|
||||
let lines = "lines"
|
||||
else
|
||||
let lines = "line"
|
||||
endif
|
||||
let line = getline(v:foldstart)
|
||||
let name = s:GetFunName(line)
|
||||
let arguments = s:GetFunArgs(strpart(line, strlen(name)), v:foldstart)
|
||||
let argcount = s:CountFunArgs(arguments)
|
||||
let retval = "+" . v:folddashes . " " . name . "/" . argcount
|
||||
let retval .= " (" . foldlen . " " . lines . ")"
|
||||
return retval
|
||||
endfunction
|
||||
endif
|
||||
|
||||
call s:SetErlangOptions()
|
||||
|
||||
295
ftplugin/erlang_refactor.vim
Normal file
295
ftplugin/erlang_refactor.vim
Normal file
@@ -0,0 +1,295 @@
|
||||
" Erlang refactor file
|
||||
" Language: Erlang
|
||||
" Maintainer: Pawel 'kTT' Salata <rockplayer.pl@gmail.com>
|
||||
" URL: http://ktototaki.info
|
||||
|
||||
if exists("b:did_ftplugin_erlang")
|
||||
finish
|
||||
endif
|
||||
|
||||
" Don't load any other
|
||||
let b:did_ftplugin_erlang=1
|
||||
|
||||
if !exists('g:erlangRefactoring') || g:erlangRefactoring == 0
|
||||
finish
|
||||
endif
|
||||
|
||||
if !exists('g:erlangWranglerPath')
|
||||
let g:erlangWranglerPath = '/usr/share/wrangler/'
|
||||
endif
|
||||
|
||||
if glob(g:erlangWranglerPath) == ""
|
||||
call confirm("Wrong path to wrangler dir")
|
||||
finish
|
||||
endif
|
||||
|
||||
autocmd VimLeavePre * call StopWranglerServer()
|
||||
|
||||
let s:erlangServerName = "wrangler_vim"
|
||||
|
||||
" Starting background erlang session with wrangler on
|
||||
function! StartWranglerServer()
|
||||
let wranglerEbinDir = g:erlangWranglerPath . "/ebin"
|
||||
let command = "erl_call -s -sname " . s:erlangServerName . " -x 'erl -pa " . wranglerEbinDir . "'"
|
||||
call system(command)
|
||||
call s:send_rpc('application', 'start', '[wrangler_app]')
|
||||
endfunction
|
||||
|
||||
" Stopping erlang session
|
||||
function! StopWranglerServer()
|
||||
echo s:send_rpc('erlang', 'halt', '')
|
||||
endfunction
|
||||
|
||||
" Sending rpc call to erlang session
|
||||
function! s:send_rpc(module, fun, args)
|
||||
let command = "erl_call -sname " . s:erlangServerName . " -a '" . a:module . " " . a:fun . " " . a:args . "'"
|
||||
let result = system(command)
|
||||
if match(result, 'erl_call: failed to connect to node .*') != -1
|
||||
call StartWranglerServer()
|
||||
return system(command)
|
||||
endif
|
||||
return result
|
||||
endfunction
|
||||
|
||||
function! ErlangUndo()
|
||||
echo s:send_rpc("wrangler_undo_server", "undo", "[]")
|
||||
:e!
|
||||
endfunction
|
||||
|
||||
function! s:trim(text)
|
||||
return substitute(a:text, "^\\s\\+\\|\\s\\+$", "", "g")
|
||||
endfunction
|
||||
|
||||
function! s:get_msg(result, tuple_start)
|
||||
let msg_begin = '{' . a:tuple_start . ','
|
||||
let matching_start = match(a:result, msg_begin)
|
||||
if matching_start != -1
|
||||
return s:trim(matchstr(a:result, '[^}]*', matching_start + strlen(msg_begin)))
|
||||
endif
|
||||
return ""
|
||||
endfunction
|
||||
|
||||
" Check if there is an error in result
|
||||
function! s:check_for_error(result)
|
||||
let msg = s:get_msg(a:result, 'ok')
|
||||
if msg != ""
|
||||
return [0, msg]
|
||||
endif
|
||||
let msg = s:get_msg(a:result, 'warning')
|
||||
if msg != ""
|
||||
return [1, msg]
|
||||
endif
|
||||
let msg = s:get_msg(a:result, 'error')
|
||||
if msg != ""
|
||||
return [2, msg]
|
||||
endif
|
||||
return [-1, ""]
|
||||
endfunction
|
||||
|
||||
" Sending apply changes to file
|
||||
function! s:send_confirm()
|
||||
let choice = confirm("What do you want?", "&Preview\n&Confirm\nCa&ncel", 0)
|
||||
if choice == 1
|
||||
echo "TODO: Display preview :)"
|
||||
elseif choice == 2
|
||||
let module = 'wrangler_preview_server'
|
||||
let fun = 'commit'
|
||||
let args = '[]'
|
||||
return s:send_rpc(module, fun, args)
|
||||
else
|
||||
let module = 'wrangler_preview_server'
|
||||
let fun = 'abort'
|
||||
let args = '[]'
|
||||
return s:send_rpc(module, fun, args)
|
||||
echo "Canceled"
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" Manually send confirm, for testing purpose only
|
||||
function! SendConfirm()
|
||||
echo s:send_confirm()
|
||||
endfunction
|
||||
|
||||
" Format and send function extracton call
|
||||
function! s:call_extract(start_line, start_col, end_line, end_col, name)
|
||||
let file = expand("%:p")
|
||||
let module = 'wrangler'
|
||||
let fun = 'fun_extraction'
|
||||
let args = '["' . file . '", {' . a:start_line . ', ' . a:start_col . '}, {' . a:end_line . ', ' . a:end_col . '}, "' . a:name . '", ' . &sw . ']'
|
||||
let result = s:send_rpc(module, fun, args)
|
||||
let [error_code, msg] = s:check_for_error(result)
|
||||
if error_code != 0
|
||||
call confirm(msg)
|
||||
return 0
|
||||
endif
|
||||
echo "This files will be changed: " . matchstr(msg, "[^]]*", 1)
|
||||
echo s:send_confirm()
|
||||
return 1
|
||||
endfunction
|
||||
|
||||
function! ErlangExtractFunction(mode) range
|
||||
silent w!
|
||||
let name = inputdialog("New function name: ")
|
||||
if name != ""
|
||||
if a:mode == "v"
|
||||
let start_pos = getpos("'<")
|
||||
let start_line = start_pos[1]
|
||||
let start_col = start_pos[2]
|
||||
|
||||
let end_pos = getpos("'>")
|
||||
let end_line = end_pos[1]
|
||||
let end_col = end_pos[2]
|
||||
elseif a:mode == "n"
|
||||
let pos = getpos(".")
|
||||
let start_line = pos[1]
|
||||
let start_col = pos[2]
|
||||
let end_line = pos[1]
|
||||
let end_col = pos[2]
|
||||
else
|
||||
echo "Mode not supported."
|
||||
return
|
||||
endif
|
||||
if s:call_extract(start_line, start_col, end_line, end_col, name)
|
||||
let temp = &autoread
|
||||
set autoread
|
||||
:e
|
||||
if temp == 0
|
||||
set noautoread
|
||||
endif
|
||||
endif
|
||||
else
|
||||
echo "Empty function name. Ignoring."
|
||||
endif
|
||||
endfunction
|
||||
nmap <A-r>e :call ErlangExtractFunction("n")<ENTER>
|
||||
vmap <A-r>e :call ErlangExtractFunction("v")<ENTER>
|
||||
|
||||
function! s:call_rename(mode, line, col, name, search_path)
|
||||
let file = expand("%:p")
|
||||
let module = 'wrangler'
|
||||
let fun = 'rename_' . a:mode
|
||||
let args = '["' . file .'", '
|
||||
if a:mode != "mod"
|
||||
let args = args . a:line . ', ' . a:col . ', '
|
||||
endif
|
||||
let args = args . '"' . a:name . '", ["' . a:search_path . '"], ' . &sw . ']'
|
||||
let result = s:send_rpc(module, fun, args)
|
||||
let [error_code, msg] = s:check_for_error(result)
|
||||
if error_code != 0
|
||||
call confirm(msg)
|
||||
return 0
|
||||
endif
|
||||
echo "This files will be changed: " . matchstr(msg, "[^]]*", 1)
|
||||
echo s:send_confirm()
|
||||
return 1
|
||||
endfunction
|
||||
|
||||
function! ErlangRename(mode)
|
||||
silent w!
|
||||
if a:mode == "mod"
|
||||
let name = inputdialog('Rename module to: ')
|
||||
else
|
||||
let name = inputdialog('Rename "' . expand("<cword>") . '" to: ')
|
||||
endif
|
||||
if name != ""
|
||||
let search_path = expand("%:p:h")
|
||||
"let search_path = inputdialog('Search path: ', expand("%:p:h"))
|
||||
let pos = getpos(".")
|
||||
let line = pos[1]
|
||||
let col = pos[2]
|
||||
let current_filename = expand("%")
|
||||
let current_filepath = expand("%:p")
|
||||
let new_filename = name . '.erl'
|
||||
if s:call_rename(a:mode, line, col, name, search_path)
|
||||
if a:mode == "mod"
|
||||
execute ':bd ' . current_filename
|
||||
execute ':e ' . new_filename
|
||||
silent execute '!mv ' . current_filepath . ' ' . current_filepath . '.bak'
|
||||
redraw!
|
||||
else
|
||||
let temp = &autoread
|
||||
set autoread
|
||||
:e
|
||||
if temp == 0
|
||||
set noautoread
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
else
|
||||
echo "Empty name. Ignoring."
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! ErlangRenameFunction()
|
||||
call ErlangRename("fun")
|
||||
endfunction
|
||||
map <A-r>f :call ErlangRenameFunction()<ENTER>
|
||||
|
||||
function! ErlangRenameVariable()
|
||||
call ErlangRename("var")
|
||||
endfunction
|
||||
map <A-r>v :call ErlangRenameVariable()<ENTER>
|
||||
|
||||
function! ErlangRenameModule()
|
||||
call ErlangRename("mod")
|
||||
endfunction
|
||||
map <A-r>m :call ErlangRenameModule()<ENTER>
|
||||
|
||||
function! ErlangRenameProcess()
|
||||
call ErlangRename("process")
|
||||
endfunction
|
||||
map <A-r>p :call ErlangRenameProcess()<ENTER>
|
||||
|
||||
function! s:call_tuple_fun_args(start_line, start_col, end_line, end_col, search_path)
|
||||
let file = expand("%:p")
|
||||
let module = 'wrangler'
|
||||
let fun = 'tuple_funpar'
|
||||
let args = '["' . file . '", {' . a:start_line . ', ' . a:start_col . '}, {' . a:end_line . ', ' . a:end_col . '}, ["' . a:search_path . '"], ' . &sw . ']'
|
||||
let result = s:send_rpc(module, fun, args)
|
||||
if s:check_for_error(result)
|
||||
return 0
|
||||
endif
|
||||
call s:send_confirm()
|
||||
return 1
|
||||
endfunction
|
||||
|
||||
function! ErlangTupleFunArgs(mode)
|
||||
silent w!
|
||||
let search_path = expand("%:p:h")
|
||||
"let search_path = inputdialog('Search path: ', expand("%:p:h"))
|
||||
if a:mode == "v"
|
||||
let start_pos = getpos("'<")
|
||||
let start_line = start_pos[1]
|
||||
let start_col = start_pos[2]
|
||||
|
||||
let end_pos = getpos("'>")
|
||||
let end_line = end_pos[1]
|
||||
let end_col = end_pos[2]
|
||||
if s:call_tuple_fun_args(start_line, start_col, end_line, end_col, search_path)
|
||||
let temp = &autoread
|
||||
set autoread
|
||||
:e
|
||||
if temp == 0
|
||||
set noautoread
|
||||
endif
|
||||
endif
|
||||
elseif a:mode == "n"
|
||||
let pos = getpos(".")
|
||||
let line = pos[1]
|
||||
let col = pos[2]
|
||||
if s:call_tuple_fun_args(line, col, line, col, search_path)
|
||||
let temp = &autoread
|
||||
set autoread
|
||||
:e
|
||||
if temp == 0
|
||||
set noautoread
|
||||
endif
|
||||
endif
|
||||
else
|
||||
echo "Mode not supported."
|
||||
endif
|
||||
endfunction
|
||||
nmap <A-r>t :call ErlangTupleFunArgs("n")<ENTER>
|
||||
vmap <A-r>t :call ErlangTupleFunArgs("v")<ENTER>
|
||||
|
||||
" vim: set foldmethod=marker:
|
||||
17
ftplugin/go.vim
Normal file
17
ftplugin/go.vim
Normal file
@@ -0,0 +1,17 @@
|
||||
" Copyright 2013 The Go Authors. All rights reserved.
|
||||
" Use of this source code is governed by a BSD-style
|
||||
" license that can be found in the LICENSE file.
|
||||
"
|
||||
" go.vim: Vim filetype plugin for Go.
|
||||
|
||||
if exists("b:did_ftplugin")
|
||||
finish
|
||||
endif
|
||||
let b:did_ftplugin = 1
|
||||
|
||||
setlocal comments=s1:/*,mb:*,ex:*/,://
|
||||
setlocal commentstring=//\ %s
|
||||
|
||||
let b:undo_ftplugin = "setl com< cms<"
|
||||
|
||||
" vim:ts=4:sw=4:et
|
||||
@@ -12,15 +12,35 @@
|
||||
" It tries to preserve cursor position and avoids
|
||||
" replacing the buffer with stderr output.
|
||||
"
|
||||
" Options:
|
||||
"
|
||||
" g:go_fmt_commands [default=1]
|
||||
"
|
||||
" Flag to indicate whether to enable the commands listed above.
|
||||
"
|
||||
" g:gofmt_command [default="gofmt"]
|
||||
"
|
||||
" Flag naming the gofmt executable to use.
|
||||
"
|
||||
if exists("b:did_ftplugin_go_fmt")
|
||||
finish
|
||||
endif
|
||||
|
||||
command! -buffer Fmt call s:GoFormat()
|
||||
if !exists("g:go_fmt_commands")
|
||||
let g:go_fmt_commands = 1
|
||||
endif
|
||||
|
||||
if !exists("g:gofmt_command")
|
||||
let g:gofmt_command = "gofmt"
|
||||
endif
|
||||
|
||||
if g:go_fmt_commands
|
||||
command! -buffer Fmt call s:GoFormat()
|
||||
endif
|
||||
|
||||
function! s:GoFormat()
|
||||
let view = winsaveview()
|
||||
silent %!gofmt
|
||||
silent execute "%!" . g:gofmt_command
|
||||
if v:shell_error
|
||||
let errors = []
|
||||
for line in getline(1, line('$'))
|
||||
@@ -37,7 +57,7 @@ function! s:GoFormat()
|
||||
endif
|
||||
undo
|
||||
if !empty(errors)
|
||||
call setloclist(0, errors, 'r')
|
||||
call setqflist(errors, 'r')
|
||||
endif
|
||||
echohl Error | echomsg "Gofmt returned error" | echohl None
|
||||
endif
|
||||
|
||||
@@ -24,23 +24,40 @@
|
||||
" imported, an error will be displayed and the buffer will be
|
||||
" untouched.
|
||||
"
|
||||
" In addition to these commands, there are also two shortcuts mapped:
|
||||
" If you would like to add shortcuts, you can do so by doing the following:
|
||||
"
|
||||
" \f - Runs :Import fmt
|
||||
" \F - Runs :Drop fmt
|
||||
" Import fmt
|
||||
" au Filetype go nnoremap <buffer> <LocalLeader>f :Import fmt<CR>
|
||||
"
|
||||
" The backslash is the default maplocalleader, so it is possible that
|
||||
" Drop fmt
|
||||
" au Filetype go nnoremap <buffer> <LocalLeader>F :Drop fmt<CR>
|
||||
"
|
||||
" Import the word under your cursor
|
||||
" au Filetype go nnoremap <buffer> <LocalLeader>k
|
||||
" \ :exe 'Import ' . expand('<cword>')<CR>
|
||||
"
|
||||
" The backslash '\' is the default maplocalleader, so it is possible that
|
||||
" your vim is set to use a different character (:help maplocalleader).
|
||||
"
|
||||
" Options:
|
||||
"
|
||||
" g:go_import_commands [default=1]
|
||||
"
|
||||
" Flag to indicate whether to enable the commands listed above.
|
||||
"
|
||||
if exists("b:did_ftplugin_go_import")
|
||||
finish
|
||||
endif
|
||||
|
||||
command! -buffer -nargs=? -complete=customlist,go#complete#Package Drop call s:SwitchImport(0, '', <f-args>)
|
||||
command! -buffer -nargs=1 -complete=customlist,go#complete#Package Import call s:SwitchImport(1, '', <f-args>)
|
||||
command! -buffer -nargs=* -complete=customlist,go#complete#Package ImportAs call s:SwitchImport(1, <f-args>)
|
||||
map <buffer> <LocalLeader>f :Import fmt<CR>
|
||||
map <buffer> <LocalLeader>F :Drop fmt<CR>
|
||||
if !exists("g:go_import_commands")
|
||||
let g:go_import_commands = 1
|
||||
endif
|
||||
|
||||
if g:go_import_commands
|
||||
command! -buffer -nargs=? -complete=customlist,go#complete#Package Drop call s:SwitchImport(0, '', <f-args>)
|
||||
command! -buffer -nargs=1 -complete=customlist,go#complete#Package Import call s:SwitchImport(1, '', <f-args>)
|
||||
command! -buffer -nargs=* -complete=customlist,go#complete#Package ImportAs call s:SwitchImport(1, <f-args>)
|
||||
endif
|
||||
|
||||
function! s:SwitchImport(enabled, localname, path)
|
||||
let view = winsaveview()
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
" Taken from https://github.com/juvenn/mustache.vim/blob/master/ftplugin/mustache.vim
|
||||
|
||||
let s:cpo_save = &cpo
|
||||
set cpo&vim
|
||||
|
||||
" Matchit support for Handlebars
|
||||
" extending HTML matchit groups
|
||||
if exists("loaded_matchit") && exists("b:match_words")
|
||||
let b:match_words = b:match_words
|
||||
\ . ',{:},[:],(:),'
|
||||
\ . '\%({{\)\@<=#\s*\%(if\|unless\)\s*.\{-}}}'
|
||||
\ . ':'
|
||||
\ . '\%({{\)\@<=\s*else\s*}}'
|
||||
\ . ':'
|
||||
\ . '\%({{\)\@<=/\s*\%(if\|unless\)\s*}},'
|
||||
\ . '\%({{\)\@<=[#^]\s*\([-0-9a-zA-Z_?!/.]\+\).\{-}}}'
|
||||
\ . ':'
|
||||
\ . '\%({{\)\@<=/\s*\1\s*}}'
|
||||
endif
|
||||
|
||||
let &cpo = s:cpo_save
|
||||
unlet s:cpo_save
|
||||
55
ftplugin/jade.vim
Normal file
55
ftplugin/jade.vim
Normal file
@@ -0,0 +1,55 @@
|
||||
" Vim filetype plugin
|
||||
" Language: Jade
|
||||
" Maintainer: Joshua Borton
|
||||
" Credits: Tim Pope
|
||||
|
||||
" Only do this when not done yet for this buffer
|
||||
if exists("b:did_ftplugin")
|
||||
finish
|
||||
endif
|
||||
|
||||
let s:save_cpo = &cpo
|
||||
set cpo-=C
|
||||
|
||||
" Define some defaults in case the included ftplugins don't set them.
|
||||
let s:undo_ftplugin = ""
|
||||
let s:browsefilter = "All Files (*.*)\t*.*\n"
|
||||
let s:match_words = ""
|
||||
|
||||
runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
|
||||
unlet! b:did_ftplugin
|
||||
|
||||
" Override our defaults if these were set by an included ftplugin.
|
||||
if exists("b:undo_ftplugin")
|
||||
let s:undo_ftplugin = b:undo_ftplugin
|
||||
unlet b:undo_ftplugin
|
||||
endif
|
||||
if exists("b:browsefilter")
|
||||
let s:browsefilter = b:browsefilter
|
||||
unlet b:browsefilter
|
||||
endif
|
||||
if exists("b:match_words")
|
||||
let s:match_words = b:match_words
|
||||
unlet b:match_words
|
||||
endif
|
||||
|
||||
" Change the browse dialog on Win32 to show mainly Haml-related files
|
||||
if has("gui_win32")
|
||||
let b:browsefilter="Jade Files (*.jade)\t*.jade\n" . s:browsefilter
|
||||
endif
|
||||
|
||||
" Load the combined list of match_words for matchit.vim
|
||||
if exists("loaded_matchit")
|
||||
let b:match_words = s:match_words
|
||||
endif
|
||||
|
||||
setlocal comments=://-,:// commentstring=//\ %s
|
||||
|
||||
setlocal suffixesadd+=.jade
|
||||
|
||||
let b:undo_ftplugin = "setl cms< com< "
|
||||
\ " | unlet! b:browsefilter b:match_words | " . s:undo_ftplugin
|
||||
|
||||
let &cpo = s:save_cpo
|
||||
|
||||
" vim:set sw=2:
|
||||
360
ftplugin/latex-box/common.vim
Normal file
360
ftplugin/latex-box/common.vim
Normal file
@@ -0,0 +1,360 @@
|
||||
" LaTeX Box common functions
|
||||
|
||||
" Error Format {{{
|
||||
" Note: The error formats assume we're using the -file-line-error with
|
||||
" [pdf]latex.
|
||||
" Note: See |errorformat-LaTeX| for more info.
|
||||
|
||||
" Check for options
|
||||
if !exists("g:LatexBox_show_warnings")
|
||||
let g:LatexBox_show_warnings=1
|
||||
endif
|
||||
if !exists("g:LatexBox_ignore_warnings")
|
||||
let g:LatexBox_ignore_warnings =
|
||||
\['Underfull',
|
||||
\ 'Overfull',
|
||||
\ 'specifier changed to']
|
||||
endif
|
||||
|
||||
" Standard error message formats
|
||||
" Note: We consider statements that starts with "!" as errors
|
||||
setlocal efm=%E!\ LaTeX\ %trror:\ %m
|
||||
setlocal efm+=%E%f:%l:\ %m
|
||||
setlocal efm+=%E!\ %m
|
||||
|
||||
" More info for undefined control sequences
|
||||
setlocal efm+=%Z<argument>\ %m
|
||||
|
||||
" Show or ignore warnings
|
||||
if g:LatexBox_show_warnings
|
||||
for w in g:LatexBox_ignore_warnings
|
||||
let warning = escape(substitute(w, '[\,]', '%\\\\&', 'g'), ' ')
|
||||
exe 'setlocal efm+=%-G%.%#'. warning .'%.%#'
|
||||
endfor
|
||||
setlocal efm+=%+WLaTeX\ %.%#Warning:\ %.%#line\ %l%.%#
|
||||
setlocal efm+=%+W%.%#\ at\ lines\ %l--%*\\d
|
||||
setlocal efm+=%+WLaTeX\ %.%#Warning:\ %m
|
||||
setlocal efm+=%+W%.%#Warning:\ %m
|
||||
else
|
||||
setlocal efm+=%-WLaTeX\ %.%#Warning:\ %.%#line\ %l%.%#
|
||||
setlocal efm+=%-W%.%#\ at\ lines\ %l--%*\\d
|
||||
setlocal efm+=%-WLaTeX\ %.%#Warning:\ %m
|
||||
setlocal efm+=%-W%.%#Warning:\ %m
|
||||
endif
|
||||
|
||||
" Push file to file stack
|
||||
setlocal efm+=%+P**%f
|
||||
|
||||
" Ignore unmatched lines
|
||||
setlocal efm+=%-G%.%#
|
||||
" }}}
|
||||
|
||||
" Vim Windows {{{
|
||||
|
||||
" Width of vertical splits
|
||||
if !exists('g:LatexBox_split_width')
|
||||
let g:LatexBox_split_width = 30
|
||||
endif
|
||||
|
||||
" Where vertical splits appear
|
||||
if !exists('g:LatexBox_split_side')
|
||||
let g:LatexBox_split_side = "leftabove"
|
||||
endif
|
||||
|
||||
" Resize when split?
|
||||
if !exists('g:LatexBox_split_resize')
|
||||
let g:LatexBox_split_resize = 0
|
||||
endif
|
||||
|
||||
" Toggle help info
|
||||
if !exists('g:LatexBox_toc_hidehelp')
|
||||
let g:LatexBox_toc_hidehelp = 0
|
||||
endif
|
||||
" }}}
|
||||
|
||||
" Filename utilities {{{
|
||||
function! LatexBox_GetMainTexFile()
|
||||
|
||||
" 1. check for the b:main_tex_file variable
|
||||
if exists('b:main_tex_file') && filereadable(b:main_tex_file)
|
||||
return b:main_tex_file
|
||||
endif
|
||||
|
||||
|
||||
" 2. scan the first few lines of the file for root = filename
|
||||
for linenum in range(1,5)
|
||||
let linecontents = getline(linenum)
|
||||
if linecontents =~ 'root\s*='
|
||||
" Remove everything but the filename
|
||||
let b:main_tex_file = substitute(linecontents,
|
||||
\ '.*root\s*=\s*', "", "")
|
||||
let b:main_tex_file = substitute(b:main_tex_file, '\s*$', "", "")
|
||||
" Prepend current directory if this isn't an absolute path
|
||||
if b:main_tex_file !~ '^/'
|
||||
let b:main_tex_file = expand('%:p:h') . '/' . b:main_tex_file
|
||||
endif
|
||||
let b:main_tex_file = fnamemodify(b:main_tex_file, ":p")
|
||||
if b:main_tex_file !~ '\.tex$'
|
||||
let b:main_tex_file .= '.tex'
|
||||
endif
|
||||
return b:main_tex_file
|
||||
endif
|
||||
endfor
|
||||
|
||||
" 3. scan current file for "\begin{document}"
|
||||
if &filetype == 'tex' && search('\C\\begin\_\s*{document}', 'nw') != 0
|
||||
return expand('%:p')
|
||||
endif
|
||||
|
||||
" 4. use 'main.tex' if it exists in the same directory (and is readable)
|
||||
let s:main_dot_tex_file=expand('%:p:h') . '/main.tex'
|
||||
if filereadable(s:main_dot_tex_file)
|
||||
let b:main_tex_file=s:main_dot_tex_file
|
||||
return b:main_tex_file
|
||||
endif
|
||||
|
||||
" 5. borrow the Vim-Latex-Suite method of finding it
|
||||
if Tex_GetMainFileName() != expand('%:p')
|
||||
let b:main_tex_file = Tex_GetMainFileName()
|
||||
return b:main_tex_file
|
||||
endif
|
||||
|
||||
" 6. prompt for file with completion
|
||||
let b:main_tex_file = s:PromptForMainFile()
|
||||
return b:main_tex_file
|
||||
endfunction
|
||||
|
||||
function! s:PromptForMainFile()
|
||||
let saved_dir = getcwd()
|
||||
execute 'cd ' . fnameescape(expand('%:p:h'))
|
||||
let l:file = ''
|
||||
while !filereadable(l:file)
|
||||
let l:file = input('main LaTeX file: ', '', 'file')
|
||||
if l:file !~ '\.tex$'
|
||||
let l:file .= '.tex'
|
||||
endif
|
||||
endwhile
|
||||
let l:file = fnamemodify(l:file, ':p')
|
||||
execute 'cd ' . fnameescape(saved_dir)
|
||||
return l:file
|
||||
endfunction
|
||||
|
||||
" Return the directory of the main tex file
|
||||
function! LatexBox_GetTexRoot()
|
||||
return fnamemodify(LatexBox_GetMainTexFile(), ':h')
|
||||
endfunction
|
||||
|
||||
function! LatexBox_GetTexBasename(with_dir)
|
||||
if a:with_dir
|
||||
return fnamemodify(LatexBox_GetMainTexFile(), ':r')
|
||||
else
|
||||
return fnamemodify(LatexBox_GetMainTexFile(), ':t:r')
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! LatexBox_GetAuxFile()
|
||||
" 1. check for b:build_dir variable
|
||||
if exists('b:build_dir') && isdirectory(b:build_dir)
|
||||
return b:build_dir . '/' . LatexBox_GetTexBasename(0) . '.aux'
|
||||
endif
|
||||
|
||||
" 2. check for g:LatexBox_build_dir variable
|
||||
if exists('g:LatexBox_build_dir') && isdirectory(g:LatexBox_build_dir)
|
||||
return g:LatexBox_build_dir . '/' . LatexBox_GetTexBasename(0) . '.aux'
|
||||
endif
|
||||
|
||||
" 3. use the base name of main tex file
|
||||
return LatexBox_GetTexBasename(1) . '.aux'
|
||||
endfunction
|
||||
|
||||
function! LatexBox_GetLogFile()
|
||||
" 1. check for b:build_dir variable
|
||||
if exists('b:build_dir') && isdirectory(b:build_dir)
|
||||
return b:build_dir . '/' . LatexBox_GetTexBasename(0) . '.log'
|
||||
endif
|
||||
|
||||
" 2. check for g:LatexBox_build_dir variable
|
||||
if exists('g:LatexBox_build_dir') && isdirectory(g:LatexBox_build_dir)
|
||||
return g:LatexBox_build_dir . '/' . LatexBox_GetTexBasename(0) . '.log'
|
||||
endif
|
||||
|
||||
" 3. use the base name of main tex file
|
||||
return LatexBox_GetTexBasename(1) . '.log'
|
||||
endfunction
|
||||
|
||||
function! LatexBox_GetOutputFile()
|
||||
" 1. check for b:build_dir variable
|
||||
if exists('b:build_dir') && isdirectory(b:build_dir)
|
||||
return b:build_dir . '/' . LatexBox_GetTexBasename(0)
|
||||
\ . '.' . g:LatexBox_output_type
|
||||
endif
|
||||
|
||||
" 2. check for g:LatexBox_build_dir variable
|
||||
if exists('g:LatexBox_build_dir') && isdirectory(g:LatexBox_build_dir)
|
||||
return g:LatexBox_build_dir . '/' . LatexBox_GetTexBasename(0)
|
||||
\ . '.' . g:LatexBox_output_type
|
||||
endif
|
||||
|
||||
" 3. use the base name of main tex file
|
||||
return LatexBox_GetTexBasename(1) . '.' . g:LatexBox_output_type
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" View Output {{{
|
||||
|
||||
" Default pdf viewer
|
||||
if !exists('g:LatexBox_viewer')
|
||||
if has('win32')
|
||||
" On windows, 'running' a file will open it with the default program
|
||||
let g:LatexBox_viewer = ''
|
||||
else
|
||||
let g:LatexBox_viewer = 'xdg-open'
|
||||
endif
|
||||
endif
|
||||
|
||||
function! LatexBox_View()
|
||||
let outfile = LatexBox_GetOutputFile()
|
||||
if !filereadable(outfile)
|
||||
echomsg fnamemodify(outfile, ':.') . ' is not readable'
|
||||
return
|
||||
endif
|
||||
let cmd = g:LatexBox_viewer . ' ' . shellescape(outfile)
|
||||
if has('win32')
|
||||
let cmd = '!start /b' . cmd . ' >nul'
|
||||
else
|
||||
let cmd = '!' . cmd . ' &>/dev/null &'
|
||||
endif
|
||||
silent execute cmd
|
||||
if !has("gui_running")
|
||||
redraw!
|
||||
endif
|
||||
endfunction
|
||||
|
||||
command! LatexView call LatexBox_View()
|
||||
" }}}
|
||||
|
||||
" In Comment {{{
|
||||
|
||||
" LatexBox_InComment([line], [col])
|
||||
" return true if inside comment
|
||||
function! LatexBox_InComment(...)
|
||||
let line = a:0 >= 1 ? a:1 : line('.')
|
||||
let col = a:0 >= 2 ? a:2 : col('.')
|
||||
return synIDattr(synID(line, col, 0), "name") =~# '^texComment'
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" Get Current Environment {{{
|
||||
|
||||
" LatexBox_GetCurrentEnvironment([with_pos])
|
||||
" Returns:
|
||||
" - environment
|
||||
" if with_pos is not given
|
||||
" - [envirnoment, lnum_begin, cnum_begin, lnum_end, cnum_end]
|
||||
" if with_pos is nonzero
|
||||
function! LatexBox_GetCurrentEnvironment(...)
|
||||
if a:0 > 0
|
||||
let with_pos = a:1
|
||||
else
|
||||
let with_pos = 0
|
||||
endif
|
||||
|
||||
let begin_pat = '\C\\begin\_\s*{[^}]*}\|\\\@<!\\\[\|\\\@<!\\('
|
||||
let end_pat = '\C\\end\_\s*{[^}]*}\|\\\@<!\\\]\|\\\@<!\\)'
|
||||
let saved_pos = getpos('.')
|
||||
|
||||
" move to the left until on a backslash
|
||||
let [bufnum, lnum, cnum, off] = getpos('.')
|
||||
let line = getline(lnum)
|
||||
while cnum > 1 && line[cnum - 1] != '\'
|
||||
let cnum -= 1
|
||||
endwhile
|
||||
call cursor(lnum, cnum)
|
||||
|
||||
" match begin/end pairs but skip comments
|
||||
let flags = 'bnW'
|
||||
if strpart(getline('.'), col('.') - 1) =~ '^\%(' . begin_pat . '\)'
|
||||
let flags .= 'c'
|
||||
endif
|
||||
let [lnum1, cnum1] = searchpairpos(begin_pat, '', end_pat, flags,
|
||||
\ 'LatexBox_InComment()')
|
||||
|
||||
let env = ''
|
||||
|
||||
if lnum1
|
||||
let line = strpart(getline(lnum1), cnum1 - 1)
|
||||
|
||||
if empty(env)
|
||||
let env = matchstr(line, '^\C\\begin\_\s*{\zs[^}]*\ze}')
|
||||
endif
|
||||
if empty(env)
|
||||
let env = matchstr(line, '^\\\[')
|
||||
endif
|
||||
if empty(env)
|
||||
let env = matchstr(line, '^\\(')
|
||||
endif
|
||||
endif
|
||||
|
||||
if with_pos == 1
|
||||
let flags = 'nW'
|
||||
if !(lnum1 == lnum && cnum1 == cnum)
|
||||
let flags .= 'c'
|
||||
endif
|
||||
|
||||
let [lnum2, cnum2] = searchpairpos(begin_pat, '', end_pat, flags,
|
||||
\ 'LatexBox_InComment()')
|
||||
|
||||
call setpos('.', saved_pos)
|
||||
return [env, lnum1, cnum1, lnum2, cnum2]
|
||||
else
|
||||
call setpos('.', saved_pos)
|
||||
return env
|
||||
endif
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" Tex To Tree {{{
|
||||
" stores nested braces in a tree structure
|
||||
function! LatexBox_TexToTree(str)
|
||||
let tree = []
|
||||
let i1 = 0
|
||||
let i2 = -1
|
||||
let depth = 0
|
||||
while i2 < len(a:str)
|
||||
let i2 = match(a:str, '[{}]', i2 + 1)
|
||||
if i2 < 0
|
||||
let i2 = len(a:str)
|
||||
endif
|
||||
if i2 >= len(a:str) || a:str[i2] == '{'
|
||||
if depth == 0
|
||||
let item = substitute(strpart(a:str, i1, i2 - i1),
|
||||
\ '^\s*\|\s*$', '', 'g')
|
||||
if !empty(item)
|
||||
call add(tree, item)
|
||||
endif
|
||||
let i1 = i2 + 1
|
||||
endif
|
||||
let depth += 1
|
||||
else
|
||||
let depth -= 1
|
||||
if depth == 0
|
||||
call add(tree, LatexBox_TexToTree(strpart(a:str, i1, i2 - i1)))
|
||||
let i1 = i2 + 1
|
||||
endif
|
||||
endif
|
||||
endwhile
|
||||
return tree
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" Tree To Tex {{{
|
||||
function! LatexBox_TreeToTex(tree)
|
||||
if type(a:tree) == type('')
|
||||
return a:tree
|
||||
else
|
||||
return '{' . join(map(a:tree, 'LatexBox_TreeToTex(v:val)'), '') . '}'
|
||||
endif
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
|
||||
861
ftplugin/latex-box/complete.vim
Normal file
861
ftplugin/latex-box/complete.vim
Normal file
@@ -0,0 +1,861 @@
|
||||
" LaTeX Box completion
|
||||
|
||||
setlocal omnifunc=LatexBox_Complete
|
||||
|
||||
" <SID> Wrap {{{
|
||||
function! s:GetSID()
|
||||
return matchstr(expand('<sfile>'), '\zs<SNR>\d\+_\ze.*$')
|
||||
endfunction
|
||||
let s:SID = s:GetSID()
|
||||
function! s:SIDWrap(func)
|
||||
return s:SID . a:func
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" Completion {{{
|
||||
if !exists('g:LatexBox_completion_close_braces')
|
||||
let g:LatexBox_completion_close_braces = 1
|
||||
endif
|
||||
if !exists('g:LatexBox_bibtex_wild_spaces')
|
||||
let g:LatexBox_bibtex_wild_spaces = 1
|
||||
endif
|
||||
|
||||
if !exists('g:LatexBox_cite_pattern')
|
||||
let g:LatexBox_cite_pattern = '\C\\\a*cite\a*\*\?\(\[[^\]]*\]\)*\_\s*{'
|
||||
endif
|
||||
if !exists('g:LatexBox_ref_pattern')
|
||||
let g:LatexBox_ref_pattern = '\C\\v\?\(eq\|page\|[cC]\|labelc\)\?ref\*\?\_\s*{'
|
||||
endif
|
||||
|
||||
if !exists('g:LatexBox_completion_environments')
|
||||
let g:LatexBox_completion_environments = [
|
||||
\ {'word': 'itemize', 'menu': 'bullet list' },
|
||||
\ {'word': 'enumerate', 'menu': 'numbered list' },
|
||||
\ {'word': 'description', 'menu': 'description' },
|
||||
\ {'word': 'center', 'menu': 'centered text' },
|
||||
\ {'word': 'figure', 'menu': 'floating figure' },
|
||||
\ {'word': 'table', 'menu': 'floating table' },
|
||||
\ {'word': 'equation', 'menu': 'equation (numbered)' },
|
||||
\ {'word': 'align', 'menu': 'aligned equations (numbered)' },
|
||||
\ {'word': 'align*', 'menu': 'aligned equations' },
|
||||
\ {'word': 'document' },
|
||||
\ {'word': 'abstract' },
|
||||
\ ]
|
||||
endif
|
||||
|
||||
if !exists('g:LatexBox_completion_commands')
|
||||
let g:LatexBox_completion_commands = [
|
||||
\ {'word': '\begin{' },
|
||||
\ {'word': '\end{' },
|
||||
\ {'word': '\item' },
|
||||
\ {'word': '\label{' },
|
||||
\ {'word': '\ref{' },
|
||||
\ {'word': '\eqref{eq:' },
|
||||
\ {'word': '\cite{' },
|
||||
\ {'word': '\chapter{' },
|
||||
\ {'word': '\section{' },
|
||||
\ {'word': '\subsection{' },
|
||||
\ {'word': '\subsubsection{' },
|
||||
\ {'word': '\paragraph{' },
|
||||
\ {'word': '\nonumber' },
|
||||
\ {'word': '\bibliography' },
|
||||
\ {'word': '\bibliographystyle' },
|
||||
\ ]
|
||||
endif
|
||||
|
||||
if !exists('g:LatexBox_complete_inlineMath')
|
||||
let g:LatexBox_complete_inlineMath = 0
|
||||
endif
|
||||
|
||||
if !exists('g:LatexBox_eq_env_patterns')
|
||||
let g:LatexBox_eq_env_patterns = 'equation\|gather\|multiline\|align\|flalign\|alignat\|eqnarray'
|
||||
endif
|
||||
|
||||
" }}}
|
||||
|
||||
"LatexBox_kpsewhich {{{
|
||||
function! LatexBox_kpsewhich(file)
|
||||
let old_dir = getcwd()
|
||||
execute 'lcd ' . fnameescape(LatexBox_GetTexRoot())
|
||||
let out = system('kpsewhich "' . a:file . '"')
|
||||
|
||||
" If kpsewhich has found something, it returns a non-empty string with a
|
||||
" newline at the end; otherwise the string is empty
|
||||
if len(out)
|
||||
" Remove the trailing newline
|
||||
let out = fnamemodify(out[:-2], ':p')
|
||||
endif
|
||||
|
||||
execute 'lcd ' . fnameescape(old_dir)
|
||||
|
||||
return out
|
||||
endfunction
|
||||
"}}}
|
||||
|
||||
" Omni Completion {{{
|
||||
|
||||
let s:completion_type = ''
|
||||
|
||||
function! LatexBox_Complete(findstart, base)
|
||||
if a:findstart
|
||||
" return the starting position of the word
|
||||
let line = getline('.')
|
||||
let pos = col('.') - 1
|
||||
while pos > 0 && line[pos - 1] !~ '\\\|{'
|
||||
let pos -= 1
|
||||
endwhile
|
||||
|
||||
let line_start = line[:pos-1]
|
||||
if line_start =~ '\C\\begin\_\s*{$'
|
||||
let s:completion_type = 'begin'
|
||||
elseif line_start =~ '\C\\end\_\s*{$'
|
||||
let s:completion_type = 'end'
|
||||
elseif line_start =~ g:LatexBox_ref_pattern . '$'
|
||||
let s:completion_type = 'ref'
|
||||
elseif line_start =~ g:LatexBox_cite_pattern . '$'
|
||||
let s:completion_type = 'bib'
|
||||
" check for multiple citations
|
||||
let pos = col('.') - 1
|
||||
while pos > 0 && line[pos - 1] !~ '{\|,'
|
||||
let pos -= 1
|
||||
endwhile
|
||||
elseif s:LatexBox_complete_inlineMath_or_not()
|
||||
let s:completion_type = 'inlineMath'
|
||||
let pos = s:eq_pos
|
||||
else
|
||||
let s:completion_type = 'command'
|
||||
if line[pos - 1] == '\'
|
||||
let pos -= 1
|
||||
endif
|
||||
endif
|
||||
return pos
|
||||
else
|
||||
" return suggestions in an array
|
||||
let suggestions = []
|
||||
|
||||
if s:completion_type == 'begin'
|
||||
" suggest known environments
|
||||
for entry in g:LatexBox_completion_environments
|
||||
if entry.word =~ '^' . escape(a:base, '\')
|
||||
if g:LatexBox_completion_close_braces && !s:NextCharsMatch('^}')
|
||||
" add trailing '}'
|
||||
let entry = copy(entry)
|
||||
let entry.abbr = entry.word
|
||||
let entry.word = entry.word . '}'
|
||||
endif
|
||||
call add(suggestions, entry)
|
||||
endif
|
||||
endfor
|
||||
elseif s:completion_type == 'end'
|
||||
" suggest known environments
|
||||
let env = LatexBox_GetCurrentEnvironment()
|
||||
if env != ''
|
||||
if g:LatexBox_completion_close_braces && !s:NextCharsMatch('^\s*[,}]')
|
||||
call add(suggestions, {'word': env . '}', 'abbr': env})
|
||||
else
|
||||
call add(suggestions, env)
|
||||
endif
|
||||
endif
|
||||
elseif s:completion_type == 'command'
|
||||
" suggest known commands
|
||||
for entry in g:LatexBox_completion_commands
|
||||
if entry.word =~ '^' . escape(a:base, '\')
|
||||
" do not display trailing '{'
|
||||
if entry.word =~ '{'
|
||||
let entry.abbr = entry.word[0:-2]
|
||||
endif
|
||||
call add(suggestions, entry)
|
||||
endif
|
||||
endfor
|
||||
elseif s:completion_type == 'ref'
|
||||
let suggestions = s:CompleteLabels(a:base)
|
||||
elseif s:completion_type == 'bib'
|
||||
" suggest BibTeX entries
|
||||
let suggestions = LatexBox_BibComplete(a:base)
|
||||
elseif s:completion_type == 'inlineMath'
|
||||
let suggestions = s:LatexBox_inlineMath_completion(a:base)
|
||||
endif
|
||||
if !has('gui_running')
|
||||
redraw!
|
||||
endif
|
||||
return suggestions
|
||||
endif
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" BibTeX search {{{
|
||||
|
||||
" find the \bibliography{...} commands
|
||||
" the optional argument is the file name to be searched
|
||||
|
||||
function! s:FindBibData(...)
|
||||
if a:0 == 0
|
||||
let file = LatexBox_GetMainTexFile()
|
||||
else
|
||||
let file = a:1
|
||||
endif
|
||||
|
||||
if !filereadable(file)
|
||||
return []
|
||||
endif
|
||||
let lines = readfile(file)
|
||||
let bibdata_list = []
|
||||
|
||||
"
|
||||
" Search for added bibliographies
|
||||
"
|
||||
let bibliography_cmds = [
|
||||
\ '\\bibliography',
|
||||
\ '\\addbibresource',
|
||||
\ '\\addglobalbib',
|
||||
\ '\\addsectionbib',
|
||||
\ ]
|
||||
for cmd in bibliography_cmds
|
||||
let filtered = filter(copy(lines),
|
||||
\ 'v:val =~ ''\C' . cmd . '\s*{[^}]\+}''')
|
||||
let files = map(filtered,
|
||||
\ 'matchstr(v:val, ''\C' . cmd . '\s*{\zs[^}]\+\ze}'')')
|
||||
for file in files
|
||||
let bibdata_list += map(split(file, ','),
|
||||
\ 'fnamemodify(v:val, '':r'')')
|
||||
endfor
|
||||
endfor
|
||||
|
||||
"
|
||||
" Also search included files
|
||||
"
|
||||
for input in filter(lines,
|
||||
\ 'v:val =~ ''\C\\\%(input\|include\)\s*{[^}]\+}''')
|
||||
let bibdata_list += s:FindBibData(LatexBox_kpsewhich(
|
||||
\ matchstr(input,
|
||||
\ '\C\\\%(input\|include\)\s*{\zs[^}]\+\ze}')))
|
||||
endfor
|
||||
|
||||
return bibdata_list
|
||||
endfunction
|
||||
|
||||
let s:bstfile = expand('<sfile>:p:h') . '/vimcomplete'
|
||||
|
||||
function! LatexBox_BibSearch(regexp)
|
||||
let res = []
|
||||
|
||||
" Find data from bib files
|
||||
let bibdata = join(s:FindBibData(), ',')
|
||||
if bibdata != ''
|
||||
|
||||
" write temporary aux file
|
||||
let tmpbase = LatexBox_GetTexRoot() . '/_LatexBox_BibComplete'
|
||||
let auxfile = tmpbase . '.aux'
|
||||
let bblfile = tmpbase . '.bbl'
|
||||
let blgfile = tmpbase . '.blg'
|
||||
|
||||
call writefile(['\citation{*}', '\bibstyle{' . s:bstfile . '}',
|
||||
\ '\bibdata{' . bibdata . '}'], auxfile)
|
||||
|
||||
if has('win32')
|
||||
let l:old_shellslash = &l:shellslash
|
||||
setlocal noshellslash
|
||||
silent execute '! cd ' shellescape(LatexBox_GetTexRoot()) .
|
||||
\ ' & bibtex -terse '
|
||||
\ . fnamemodify(auxfile, ':t') . ' >nul'
|
||||
let &l:shellslash = l:old_shellslash
|
||||
else
|
||||
silent execute '! cd ' shellescape(LatexBox_GetTexRoot()) .
|
||||
\ ' ; bibtex -terse '
|
||||
\ . fnamemodify(auxfile, ':t') . ' >/dev/null'
|
||||
endif
|
||||
|
||||
let lines = split(substitute(join(readfile(bblfile), "\n"),
|
||||
\ '\n\n\@!\(\s\=\)\s*\|{\|}', '\1', 'g'), "\n")
|
||||
|
||||
for line in filter(lines, 'v:val =~ a:regexp')
|
||||
let matches = matchlist(line,
|
||||
\ '^\(.*\)||\(.*\)||\(.*\)||\(.*\)||\(.*\)')
|
||||
if !empty(matches) && !empty(matches[1])
|
||||
let s:type_length = max([s:type_length,
|
||||
\ len(matches[2]) + 3])
|
||||
call add(res, {
|
||||
\ 'key': matches[1],
|
||||
\ 'type': matches[2],
|
||||
\ 'author': matches[3],
|
||||
\ 'year': matches[4],
|
||||
\ 'title': matches[5],
|
||||
\ })
|
||||
endif
|
||||
endfor
|
||||
|
||||
call delete(auxfile)
|
||||
call delete(bblfile)
|
||||
call delete(blgfile)
|
||||
endif
|
||||
|
||||
" Find data from 'thebibliography' environments
|
||||
let lines = readfile(LatexBox_GetMainTexFile())
|
||||
if match(lines, '\C\\begin{thebibliography}') >= 0
|
||||
for line in filter(filter(lines, 'v:val =~ ''\C\\bibitem'''),
|
||||
\ 'v:val =~ a:regexp')
|
||||
let match = matchlist(line, '\\bibitem{\([^}]*\)')[1]
|
||||
call add(res, {
|
||||
\ 'key': match,
|
||||
\ 'type': '',
|
||||
\ 'author': '',
|
||||
\ 'year': '',
|
||||
\ 'title': match,
|
||||
\ })
|
||||
endfor
|
||||
endif
|
||||
|
||||
return res
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" BibTeX completion {{{
|
||||
let s:type_length=0
|
||||
function! LatexBox_BibComplete(regexp)
|
||||
|
||||
" treat spaces as '.*' if needed
|
||||
if g:LatexBox_bibtex_wild_spaces
|
||||
"let regexp = substitute(a:regexp, '\s\+', '.*', 'g')
|
||||
let regexp = '.*' . substitute(a:regexp, '\s\+', '\\\&.*', 'g')
|
||||
else
|
||||
let regexp = a:regexp
|
||||
endif
|
||||
|
||||
let res = []
|
||||
let s:type_length = 4
|
||||
for m in LatexBox_BibSearch(regexp)
|
||||
let type = m['type'] == '' ? '[-]' : '[' . m['type'] . '] '
|
||||
let type = printf('%-' . s:type_length . 's', type)
|
||||
let auth = m['author'] == '' ? '' : m['author'][:20] . ' '
|
||||
let auth = substitute(auth, '\~', ' ', 'g')
|
||||
let year = m['year'] == '' ? '' : '(' . m['year'] . ')'
|
||||
let w = { 'word': m['key'],
|
||||
\ 'abbr': type . auth . year,
|
||||
\ 'menu': m['title'] }
|
||||
|
||||
" close braces if needed
|
||||
if g:LatexBox_completion_close_braces && !s:NextCharsMatch('^\s*[,}]')
|
||||
let w.word = w.word . '}'
|
||||
endif
|
||||
|
||||
call add(res, w)
|
||||
endfor
|
||||
return res
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" ExtractLabels {{{
|
||||
" Generate list of \newlabel commands in current buffer.
|
||||
"
|
||||
" Searches the current buffer for commands of the form
|
||||
" \newlabel{name}{{number}{page}.*
|
||||
" and returns list of [ name, number, page ] tuples.
|
||||
function! s:ExtractLabels()
|
||||
call cursor(1,1)
|
||||
|
||||
let matches = []
|
||||
let [lblline, lblbegin] = searchpos( '\\newlabel{', 'ecW' )
|
||||
|
||||
while [lblline, lblbegin] != [0,0]
|
||||
let [nln, nameend] = searchpairpos( '{', '', '}', 'W' )
|
||||
if nln != lblline
|
||||
let [lblline, lblbegin] = searchpos( '\\newlabel{', 'ecW' )
|
||||
continue
|
||||
endif
|
||||
let curname = strpart( getline( lblline ), lblbegin, nameend - lblbegin - 1 )
|
||||
|
||||
" Ignore cref entries (because they are duplicates)
|
||||
if curname =~ "\@cref\|cref\@"
|
||||
continue
|
||||
endif
|
||||
|
||||
if 0 == search( '{\w*{', 'ce', lblline )
|
||||
let [lblline, lblbegin] = searchpos( '\\newlabel{', 'ecW' )
|
||||
continue
|
||||
endif
|
||||
|
||||
let numberbegin = getpos('.')[2]
|
||||
let [nln, numberend] = searchpairpos( '{', '', '}', 'W' )
|
||||
if nln != lblline
|
||||
let [lblline, lblbegin] = searchpos( '\\newlabel{', 'ecW' )
|
||||
continue
|
||||
endif
|
||||
let curnumber = strpart( getline( lblline ), numberbegin, numberend - numberbegin - 1 )
|
||||
|
||||
if 0 == search( '\w*{', 'ce', lblline )
|
||||
let [lblline, lblbegin] = searchpos( '\\newlabel{', 'ecW' )
|
||||
continue
|
||||
endif
|
||||
|
||||
let pagebegin = getpos('.')[2]
|
||||
let [nln, pageend] = searchpairpos( '{', '', '}', 'W' )
|
||||
if nln != lblline
|
||||
let [lblline, lblbegin] = searchpos( '\\newlabel{', 'ecW' )
|
||||
continue
|
||||
endif
|
||||
let curpage = strpart( getline( lblline ), pagebegin, pageend - pagebegin - 1 )
|
||||
|
||||
let matches += [ [ curname, curnumber, curpage ] ]
|
||||
|
||||
let [lblline, lblbegin] = searchpos( '\\newlabel{', 'ecW' )
|
||||
endwhile
|
||||
|
||||
return matches
|
||||
endfunction
|
||||
"}}}
|
||||
|
||||
" ExtractInputs {{{
|
||||
" Generate list of \@input commands in current buffer.
|
||||
"
|
||||
" Searches the current buffer for \@input{file} entries and
|
||||
" returns list of all files.
|
||||
function! s:ExtractInputs()
|
||||
call cursor(1,1)
|
||||
|
||||
let matches = []
|
||||
let [inline, inbegin] = searchpos( '\\@input{', 'ecW' )
|
||||
|
||||
while [inline, inbegin] != [0,0]
|
||||
let [nln, inend] = searchpairpos( '{', '', '}', 'W' )
|
||||
if nln != inline
|
||||
let [inline, inbegin] = searchpos( '\\@input{', 'ecW' )
|
||||
continue
|
||||
endif
|
||||
let matches += [ LatexBox_kpsewhich(strpart( getline( inline ), inbegin, inend - inbegin - 1 )) ]
|
||||
|
||||
let [inline, inbegin] = searchpos( '\\@input{', 'ecW' )
|
||||
endwhile
|
||||
|
||||
" Remove empty strings for nonexistant .aux files
|
||||
return filter(matches, 'v:val != ""')
|
||||
endfunction
|
||||
"}}}
|
||||
|
||||
" LabelCache {{{
|
||||
" Cache of all labels.
|
||||
"
|
||||
" LabelCache is a dictionary mapping filenames to tuples
|
||||
" [ time, labels, inputs ]
|
||||
" where
|
||||
" * time is modification time of the cache entry
|
||||
" * labels is a list like returned by ExtractLabels
|
||||
" * inputs is a list like returned by ExtractInputs
|
||||
let s:LabelCache = {}
|
||||
"}}}
|
||||
|
||||
" GetLabelCache {{{
|
||||
" Extract labels from LabelCache and update it.
|
||||
"
|
||||
" Compares modification time of each entry in the label
|
||||
" cache and updates it, if necessary. During traversal of
|
||||
" the LabelCache, all current labels are collected and
|
||||
" returned.
|
||||
function! s:GetLabelCache(file)
|
||||
if !filereadable(a:file)
|
||||
return []
|
||||
endif
|
||||
|
||||
if !has_key(s:LabelCache , a:file) || s:LabelCache[a:file][0] != getftime(a:file)
|
||||
" Open file in temporary split window for label extraction.
|
||||
silent execute '1sp +let\ labels=s:ExtractLabels()|let\ inputs=s:ExtractInputs()|quit! ' . fnameescape(a:file)
|
||||
let s:LabelCache[a:file] = [ getftime(a:file), labels, inputs ]
|
||||
endif
|
||||
|
||||
" We need to create a copy of s:LabelCache[fid][1], otherwise all inputs'
|
||||
" labels would be added to the current file's label cache upon each
|
||||
" completion call, leading to duplicates/triplicates/etc. and decreased
|
||||
" performance.
|
||||
" Also, because we don't anything with the list besides matching copies,
|
||||
" we can get away with a shallow copy for now.
|
||||
let labels = copy(s:LabelCache[a:file][1])
|
||||
|
||||
for input in s:LabelCache[a:file][2]
|
||||
let labels += s:GetLabelCache(input)
|
||||
endfor
|
||||
|
||||
return labels
|
||||
endfunction
|
||||
"}}}
|
||||
|
||||
" Complete Labels {{{
|
||||
function! s:CompleteLabels(regex)
|
||||
let labels = s:GetLabelCache(LatexBox_GetAuxFile())
|
||||
|
||||
let matches = filter( copy(labels), 'match(v:val[0], "' . a:regex . '") != -1' )
|
||||
if empty(matches)
|
||||
" also try to match label and number
|
||||
let regex_split = split(a:regex)
|
||||
if len(regex_split) > 1
|
||||
let base = regex_split[0]
|
||||
let number = escape(join(regex_split[1:], ' '), '.')
|
||||
let matches = filter( copy(labels), 'match(v:val[0], "' . base . '") != -1 && match(v:val[1], "' . number . '") != -1' )
|
||||
endif
|
||||
endif
|
||||
if empty(matches)
|
||||
" also try to match number
|
||||
let matches = filter( copy(labels), 'match(v:val[1], "' . a:regex . '") != -1' )
|
||||
endif
|
||||
|
||||
let suggestions = []
|
||||
for m in matches
|
||||
let entry = {'word': m[0], 'menu': printf("%7s [p. %s]", '('.m[1].')', m[2])}
|
||||
if g:LatexBox_completion_close_braces && !s:NextCharsMatch('^\s*[,}]')
|
||||
" add trailing '}'
|
||||
let entry = copy(entry)
|
||||
let entry.abbr = entry.word
|
||||
let entry.word = entry.word . '}'
|
||||
endif
|
||||
call add(suggestions, entry)
|
||||
endfor
|
||||
|
||||
return suggestions
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" Complete Inline Math Or Not {{{
|
||||
" Return 1, when cursor is in a math env:
|
||||
" 1, there is a single $ in the current line on the left of cursor
|
||||
" 2, there is an open-eq-env on/above the current line
|
||||
" (open-eq-env : \(, \[, and \begin{eq-env} )
|
||||
" Return 0, when cursor is not in a math env
|
||||
function! s:LatexBox_complete_inlineMath_or_not()
|
||||
|
||||
" switch of inline math completion feature
|
||||
if g:LatexBox_complete_inlineMath == 0
|
||||
return 0
|
||||
endif
|
||||
|
||||
" env names that can't appear in an eq env
|
||||
if !exists('s:LatexBox_doc_structure_patterns')
|
||||
let s:LatexBox_doc_structure_patterns = '\%(' . '\\begin\s*{document}\|' .
|
||||
\ '\\\%(chapter\|section\|subsection\|subsubsection\)\*\?\s*{' . '\)'
|
||||
endif
|
||||
|
||||
if !exists('s:LatexBox_eq_env_open_patterns')
|
||||
let s:LatexBox_eq_env_open_patterns = ['\\(','\\\[']
|
||||
endif
|
||||
if !exists('s:LatexBox_eq_env_close_patterns')
|
||||
let s:LatexBox_eq_env_close_patterns = ['\\)','\\\]']
|
||||
endif
|
||||
|
||||
let notcomment = '\%(\%(\\\@<!\%(\\\\\)*\)\@<=%.*\)\@<!'
|
||||
|
||||
let lnum_saved = line('.')
|
||||
let cnum_saved = col('.') -1
|
||||
|
||||
let line = getline('.')
|
||||
let line_start_2_cnum_saved = line[:cnum_saved]
|
||||
|
||||
" determine whether there is a single $ before cursor
|
||||
let cursor_dollar_pair = 0
|
||||
while matchend(line_start_2_cnum_saved, '\$[^$]\+\$', cursor_dollar_pair) >= 0
|
||||
" find the end of dollar pair
|
||||
let cursor_dollar_pair = matchend(line_start_2_cnum_saved, '\$[^$]\+\$', cursor_dollar_pair)
|
||||
endwhile
|
||||
" find single $ after cursor_dollar_pair
|
||||
let cursor_single_dollar = matchend(line_start_2_cnum_saved, '\$', cursor_dollar_pair)
|
||||
|
||||
" if single $ is found
|
||||
if cursor_single_dollar >= 0
|
||||
" check whether $ is in \(...\), \[...\], or \begin{eq}...\end{eq}
|
||||
|
||||
" check current line,
|
||||
" search for LatexBox_eq_env_close_patterns: \[ and \(
|
||||
let lnum = line('.')
|
||||
for i in range(0, (len(s:LatexBox_eq_env_open_patterns)-1))
|
||||
call cursor(lnum_saved, cnum_saved)
|
||||
let cnum_close = searchpos(''. s:LatexBox_eq_env_close_patterns[i].'', 'cbW', lnum_saved)[1]
|
||||
let cnum_open = matchend(line_start_2_cnum_saved, s:LatexBox_eq_env_open_patterns[i], cnum_close)
|
||||
if cnum_open >= 0
|
||||
let s:eq_dollar_parenthesis_bracket_empty = ''
|
||||
let s:eq_pos = cursor_single_dollar - 1
|
||||
return 1
|
||||
end
|
||||
endfor
|
||||
|
||||
" check the lines above
|
||||
" search for s:LatexBox_doc_structure_patterns, and end-of-math-env
|
||||
let lnum -= 1
|
||||
while lnum > 0
|
||||
let line = getline(lnum)
|
||||
if line =~ notcomment . '\(' . s:LatexBox_doc_structure_patterns .
|
||||
\ '\|' . '\\end\s*{\(' . g:LatexBox_eq_env_patterns . '\)\*\?}\)'
|
||||
" when s:LatexBox_doc_structure_patterns or g:LatexBox_eq_env_patterns
|
||||
" are found first, complete math, leave with $ at both sides
|
||||
let s:eq_dollar_parenthesis_bracket_empty = '$'
|
||||
let s:eq_pos = cursor_single_dollar
|
||||
break
|
||||
elseif line =~ notcomment . '\\begin\s*{\(' . g:LatexBox_eq_env_patterns . '\)\*\?}'
|
||||
" g:LatexBox_eq_env_patterns is found, complete math, remove $
|
||||
let s:eq_dollar_parenthesis_bracket_empty = ''
|
||||
let s:eq_pos = cursor_single_dollar - 1
|
||||
break
|
||||
endif
|
||||
let lnum -= 1
|
||||
endwhile
|
||||
|
||||
return 1
|
||||
else
|
||||
" no $ is found, then search for \( or \[ in current line
|
||||
" 1, whether there is \(
|
||||
call cursor(lnum_saved, cnum_saved)
|
||||
let cnum_parenthesis_close = searchpos('\\)', 'cbW', lnum_saved)[1]
|
||||
let cnum_parenthesis_open = matchend(line_start_2_cnum_saved, '\\(', cnum_parenthesis_close)
|
||||
if cnum_parenthesis_open >= 0
|
||||
let s:eq_dollar_parenthesis_bracket_empty = '\)'
|
||||
let s:eq_pos = cnum_parenthesis_open
|
||||
return 1
|
||||
end
|
||||
|
||||
" 2, whether there is \[
|
||||
call cursor(lnum_saved, cnum_saved)
|
||||
let cnum_bracket_close = searchpos('\\\]', 'cbW', lnum_saved)[1]
|
||||
let cnum_bracket_open = matchend(line_start_2_cnum_saved, '\\\[', cnum_bracket_close)
|
||||
if cnum_bracket_open >= 0
|
||||
let s:eq_dollar_parenthesis_bracket_empty = '\]'
|
||||
let s:eq_pos = cnum_bracket_open
|
||||
return 1
|
||||
end
|
||||
|
||||
" not inline math completion
|
||||
return 0
|
||||
endif
|
||||
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" Complete inline euqation{{{
|
||||
function! s:LatexBox_inlineMath_completion(regex, ...)
|
||||
|
||||
if a:0 == 0
|
||||
let file = LatexBox_GetMainTexFile()
|
||||
else
|
||||
let file = a:1
|
||||
endif
|
||||
|
||||
if empty(glob(file, 1))
|
||||
return ''
|
||||
endif
|
||||
|
||||
if empty(s:eq_dollar_parenthesis_bracket_empty)
|
||||
let inline_pattern1 = '\$\s*\(' . escape(substitute(a:regex[1:], '^\s\+', '', ""), '\.*^') . '[^$]*\)\s*\$'
|
||||
let inline_pattern2 = '\\(\s*\(' . escape(substitute(a:regex[1:], '^\s\+', '', ""), '\.*^') . '.*\)\s*\\)'
|
||||
else
|
||||
let inline_pattern1 = '\$\s*\(' . escape(substitute(a:regex, '^\s\+', '', ""), '\.*^') . '[^$]*\)\s*\$'
|
||||
let inline_pattern2 = '\\(\s*\(' . escape(substitute(a:regex, '^\s\+', '', ""), '\.*^') . '.*\)\s*\\)'
|
||||
endif
|
||||
|
||||
|
||||
let suggestions = []
|
||||
let line_num = 0
|
||||
for line in readfile(file)
|
||||
let line_num = line_num + 1
|
||||
|
||||
let suggestions += s:LatexBox_inlineMath_mathlist(line,inline_pattern1 , line_num) + s:LatexBox_inlineMath_mathlist( line,inline_pattern2, line_num)
|
||||
|
||||
" search for included files
|
||||
let included_file = matchstr(line, '^\\@input{\zs[^}]*\ze}')
|
||||
if included_file != ''
|
||||
let included_file = LatexBox_kpsewhich(included_file)
|
||||
call extend(suggestions, s:LatexBox_inlineMath_completion(a:regex, included_file))
|
||||
endif
|
||||
endfor
|
||||
|
||||
return suggestions
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" Search for inline maths {{{
|
||||
" search for $ ... $ and \( ... \) in each line
|
||||
function! s:LatexBox_inlineMath_mathlist(line,inline_pattern, line_num)
|
||||
let col_start = 0
|
||||
let suggestions = []
|
||||
while 1
|
||||
let matches = matchlist(a:line, a:inline_pattern, col_start)
|
||||
if !empty(matches)
|
||||
|
||||
" show line number of inline math
|
||||
let entry = {'word': matches[1], 'menu': '[' . a:line_num . ']'}
|
||||
|
||||
if s:eq_dollar_parenthesis_bracket_empty != ''
|
||||
let entry = copy(entry)
|
||||
let entry.abbr = entry.word
|
||||
let entry.word = entry.word . s:eq_dollar_parenthesis_bracket_empty
|
||||
endif
|
||||
call add(suggestions, entry)
|
||||
|
||||
" update col_start
|
||||
let col_start = matchend(a:line, a:inline_pattern, col_start)
|
||||
else
|
||||
break
|
||||
endif
|
||||
endwhile
|
||||
|
||||
return suggestions
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" Close Current Environment {{{
|
||||
function! s:CloseCurEnv()
|
||||
" first, try with \left/\right pairs
|
||||
let [lnum, cnum] = searchpairpos('\C\\left\>', '', '\C\\right\>', 'bnW', 'LatexBox_InComment()')
|
||||
if lnum
|
||||
let line = strpart(getline(lnum), cnum - 1)
|
||||
let bracket = matchstr(line, '^\\left\zs\((\|\[\|\\{\||\|\.\)\ze')
|
||||
for [open, close] in [['(', ')'], ['\[', '\]'], ['\\{', '\\}'], ['|', '|'], ['\.', '|']]
|
||||
let bracket = substitute(bracket, open, close, 'g')
|
||||
endfor
|
||||
return '\right' . bracket
|
||||
endif
|
||||
|
||||
" second, try with environments
|
||||
let env = LatexBox_GetCurrentEnvironment()
|
||||
if env == '\['
|
||||
return '\]'
|
||||
elseif env == '\('
|
||||
return '\)'
|
||||
elseif env != ''
|
||||
return '\end{' . env . '}'
|
||||
endif
|
||||
return ''
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" Wrap Selection {{{
|
||||
function! s:WrapSelection(wrapper)
|
||||
keepjumps normal! `>a}
|
||||
execute 'keepjumps normal! `<i\' . a:wrapper . '{'
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" Wrap Selection in Environment with Prompt {{{
|
||||
function! s:PromptEnvWrapSelection(...)
|
||||
let env = input('environment: ', '', 'customlist,' . s:SIDWrap('GetEnvironmentList'))
|
||||
if empty(env)
|
||||
return
|
||||
endif
|
||||
" LaTeXBox's custom indentation can interfere with environment
|
||||
" insertion when environments are indented (common for nested
|
||||
" environments). Temporarily disable it for this operation:
|
||||
let ieOld = &indentexpr
|
||||
setlocal indentexpr=""
|
||||
if visualmode() ==# 'V'
|
||||
execute 'keepjumps normal! `>o\end{' . env . '}'
|
||||
execute 'keepjumps normal! `<O\begin{' . env . '}'
|
||||
" indent and format, if requested.
|
||||
if a:0 && a:1
|
||||
normal! gv>
|
||||
normal! gvgq
|
||||
endif
|
||||
else
|
||||
execute 'keepjumps normal! `>a\end{' . env . '}'
|
||||
execute 'keepjumps normal! `<i\begin{' . env . '}'
|
||||
endif
|
||||
exe "setlocal indentexpr=" . ieOld
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" Change Environment {{{
|
||||
function! s:ChangeEnvPrompt()
|
||||
|
||||
let [env, lnum, cnum, lnum2, cnum2] = LatexBox_GetCurrentEnvironment(1)
|
||||
|
||||
let new_env = input('change ' . env . ' for: ', '', 'customlist,' . s:SIDWrap('GetEnvironmentList'))
|
||||
if empty(new_env)
|
||||
return
|
||||
endif
|
||||
|
||||
if new_env == '\[' || new_env == '['
|
||||
let begin = '\['
|
||||
let end = '\]'
|
||||
elseif new_env == '\(' || new_env == '('
|
||||
let begin = '\('
|
||||
let end = '\)'
|
||||
else
|
||||
let l:begin = '\begin{' . new_env . '}'
|
||||
let l:end = '\end{' . new_env . '}'
|
||||
endif
|
||||
|
||||
if env == '\[' || env == '\('
|
||||
let line = getline(lnum2)
|
||||
let line = strpart(line, 0, cnum2 - 1) . l:end . strpart(line, cnum2 + 1)
|
||||
call setline(lnum2, line)
|
||||
|
||||
let line = getline(lnum)
|
||||
let line = strpart(line, 0, cnum - 1) . l:begin . strpart(line, cnum + 1)
|
||||
call setline(lnum, line)
|
||||
else
|
||||
let line = getline(lnum2)
|
||||
let line = strpart(line, 0, cnum2 - 1) . l:end . strpart(line, cnum2 + len(env) + 5)
|
||||
call setline(lnum2, line)
|
||||
|
||||
let line = getline(lnum)
|
||||
let line = strpart(line, 0, cnum - 1) . l:begin . strpart(line, cnum + len(env) + 7)
|
||||
call setline(lnum, line)
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! s:GetEnvironmentList(lead, cmdline, pos)
|
||||
let suggestions = []
|
||||
for entry in g:LatexBox_completion_environments
|
||||
let env = entry.word
|
||||
if env =~ '^' . a:lead
|
||||
call add(suggestions, env)
|
||||
endif
|
||||
endfor
|
||||
return suggestions
|
||||
endfunction
|
||||
|
||||
function! s:LatexToggleStarEnv()
|
||||
let [env, lnum, cnum, lnum2, cnum2] = LatexBox_GetCurrentEnvironment(1)
|
||||
|
||||
if env == '\('
|
||||
return
|
||||
elseif env == '\['
|
||||
let begin = '\begin{equation}'
|
||||
let end = '\end{equation}'
|
||||
elseif env[-1:] == '*'
|
||||
let begin = '\begin{' . env[:-2] . '}'
|
||||
let end = '\end{' . env[:-2] . '}'
|
||||
else
|
||||
let begin = '\begin{' . env . '*}'
|
||||
let end = '\end{' . env . '*}'
|
||||
endif
|
||||
|
||||
if env == '\['
|
||||
let line = getline(lnum2)
|
||||
let line = strpart(line, 0, cnum2 - 1) . l:end . strpart(line, cnum2 + 1)
|
||||
call setline(lnum2, line)
|
||||
|
||||
let line = getline(lnum)
|
||||
let line = strpart(line, 0, cnum - 1) . l:begin . strpart(line, cnum + 1)
|
||||
call setline(lnum, line)
|
||||
else
|
||||
let line = getline(lnum2)
|
||||
let line = strpart(line, 0, cnum2 - 1) . l:end . strpart(line, cnum2 + len(env) + 5)
|
||||
call setline(lnum2, line)
|
||||
|
||||
let line = getline(lnum)
|
||||
let line = strpart(line, 0, cnum - 1) . l:begin . strpart(line, cnum + len(env) + 7)
|
||||
call setline(lnum, line)
|
||||
endif
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" Next Charaters Match {{{
|
||||
function! s:NextCharsMatch(regex)
|
||||
let rest_of_line = strpart(getline('.'), col('.') - 1)
|
||||
return rest_of_line =~ a:regex
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" Mappings {{{
|
||||
inoremap <silent> <Plug>LatexCloseCurEnv <C-R>=<SID>CloseCurEnv()<CR>
|
||||
vnoremap <silent> <Plug>LatexWrapSelection :<c-u>call <SID>WrapSelection('')<CR>i
|
||||
vnoremap <silent> <Plug>LatexEnvWrapSelection :<c-u>call <SID>PromptEnvWrapSelection()<CR>
|
||||
vnoremap <silent> <Plug>LatexEnvWrapFmtSelection :<c-u>call <SID>PromptEnvWrapSelection(1)<CR>
|
||||
nnoremap <silent> <Plug>LatexChangeEnv :call <SID>ChangeEnvPrompt()<CR>
|
||||
nnoremap <silent> <Plug>LatexToggleStarEnv :call <SID>LatexToggleStarEnv()<CR>
|
||||
" }}}
|
||||
|
||||
" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
|
||||
64
ftplugin/latex-box/findmain.vim
Normal file
64
ftplugin/latex-box/findmain.vim
Normal file
@@ -0,0 +1,64 @@
|
||||
" Tex_GetMainFileName: gets the name of the main file being compiled. {{{
|
||||
" Description: returns the full path name of the main file.
|
||||
" This function checks for the existence of a .latexmain file
|
||||
" which might point to the location of a "main" latex file.
|
||||
" If .latexmain exists, then return the full path name of the
|
||||
" file being pointed to by it.
|
||||
"
|
||||
" Otherwise, return the full path name of the current buffer.
|
||||
"
|
||||
" You can supply an optional "modifier" argument to the
|
||||
" function, which will optionally modify the file name before
|
||||
" returning.
|
||||
" NOTE: From version 1.6 onwards, this function always trims
|
||||
" away the .latexmain part of the file name before applying the
|
||||
" modifier argument.
|
||||
function! Tex_GetMainFileName(...)
|
||||
if a:0 > 0
|
||||
let modifier = a:1
|
||||
else
|
||||
let modifier = ':p'
|
||||
endif
|
||||
|
||||
let s:origdir = fnameescape(getcwd())
|
||||
|
||||
let dirmodifier = '%:p:h'
|
||||
let dirLast = fnameescape(expand(dirmodifier))
|
||||
exe 'cd '.dirLast
|
||||
|
||||
" move up the directory tree until we find a .latexmain file.
|
||||
" TODO: Should we be doing this recursion by default, or should there be a
|
||||
" setting?
|
||||
while glob('*.latexmain') == ''
|
||||
let dirmodifier = dirmodifier.':h'
|
||||
let dirNew = fnameescape(expand(dirmodifier))
|
||||
" break from the loop if we cannot go up any further.
|
||||
if dirNew == dirLast
|
||||
break
|
||||
endif
|
||||
let dirLast = dirNew
|
||||
exe 'cd '.dirLast
|
||||
endwhile
|
||||
|
||||
let lheadfile = glob('*.latexmain')
|
||||
if lheadfile != ''
|
||||
" Remove the trailing .latexmain part of the filename... We never want
|
||||
" that.
|
||||
let lheadfile = fnamemodify(substitute(lheadfile, '\.latexmain$', '', ''), modifier)
|
||||
else
|
||||
" If we cannot find any main file, just modify the filename of the
|
||||
" current buffer.
|
||||
let lheadfile = expand('%'.modifier)
|
||||
endif
|
||||
|
||||
if lheadfile !~ '\.tex$'
|
||||
let lheadfile .= '.tex'
|
||||
endif
|
||||
exe 'cd '.s:origdir
|
||||
|
||||
" NOTE: The caller of this function needs to escape the file name with
|
||||
" fnameescape() . The reason its not done here is that escaping is not
|
||||
" safe if this file is to be used as part of an external command on
|
||||
" certain platforms.
|
||||
return lheadfile
|
||||
endfunction
|
||||
319
ftplugin/latex-box/folding.vim
Normal file
319
ftplugin/latex-box/folding.vim
Normal file
@@ -0,0 +1,319 @@
|
||||
" Folding support for LaTeX
|
||||
"
|
||||
" Options
|
||||
" g:LatexBox_Folding - Turn on/off folding
|
||||
" g:LatexBox_fold_preamble - Turn on/off folding of preamble
|
||||
" g:LatexBox_fold_parts - Define parts (eq. appendix, frontmatter) to fold
|
||||
" g:LatexBox_fold_sections - Define section levels to fold
|
||||
" g:LatexBox_fold_envs - Turn on/off folding of environments
|
||||
"
|
||||
|
||||
" {{{1 Set options
|
||||
if exists('g:LatexBox_Folding') && g:LatexBox_Folding == 1
|
||||
setl foldmethod=expr
|
||||
setl foldexpr=LatexBox_FoldLevel(v:lnum)
|
||||
setl foldtext=LatexBox_FoldText()
|
||||
"
|
||||
" The foldexpr function returns "=" for most lines, which means it can become
|
||||
" slow for large files. The following is a hack that is based on this reply to
|
||||
" a discussion on the Vim Developer list:
|
||||
" http://permalink.gmane.org/gmane.editors.vim.devel/14100
|
||||
"
|
||||
augroup FastFold
|
||||
autocmd!
|
||||
autocmd InsertEnter *.tex setlocal foldmethod=manual
|
||||
autocmd InsertLeave *.tex setlocal foldmethod=expr
|
||||
augroup end
|
||||
endif
|
||||
if !exists('g:LatexBox_fold_preamble')
|
||||
let g:LatexBox_fold_preamble=1
|
||||
endif
|
||||
if !exists('g:LatexBox_fold_envs')
|
||||
let g:LatexBox_fold_envs=1
|
||||
endif
|
||||
if !exists('g:LatexBox_fold_parts')
|
||||
let g:LatexBox_fold_parts=[
|
||||
\ "appendix",
|
||||
\ "frontmatter",
|
||||
\ "mainmatter",
|
||||
\ "backmatter"
|
||||
\ ]
|
||||
endif
|
||||
if !exists('g:LatexBox_fold_sections')
|
||||
let g:LatexBox_fold_sections=[
|
||||
\ "part",
|
||||
\ "chapter",
|
||||
\ "section",
|
||||
\ "subsection",
|
||||
\ "subsubsection"
|
||||
\ ]
|
||||
endif
|
||||
if !exists('g:LatexBox_fold_toc')
|
||||
let g:LatexBox_fold_toc=0
|
||||
endif
|
||||
if !exists('g:LatexBox_fold_toc_levels')
|
||||
let g:LatexBox_fold_toc_levels=1
|
||||
endif
|
||||
|
||||
|
||||
" {{{1 LatexBox_FoldLevel help functions
|
||||
|
||||
" This function parses the tex file to find the sections that are to be folded
|
||||
" and their levels, and then predefines the patterns for optimized folding.
|
||||
function! s:FoldSectionLevels()
|
||||
" Initialize
|
||||
let level = 1
|
||||
let foldsections = []
|
||||
|
||||
" If we use two or more of the *matter commands, we need one more foldlevel
|
||||
let nparts = 0
|
||||
for part in g:LatexBox_fold_parts
|
||||
let i = 1
|
||||
while i < line("$")
|
||||
if getline(i) =~ '^\s*\\' . part . '\>'
|
||||
let nparts += 1
|
||||
break
|
||||
endif
|
||||
let i += 1
|
||||
endwhile
|
||||
if nparts > 1
|
||||
let level = 2
|
||||
break
|
||||
endif
|
||||
endfor
|
||||
|
||||
" Combine sections and levels, but ignore unused section commands: If we
|
||||
" don't use the part command, then chapter should have the highest
|
||||
" level. If we don't use the chapter command, then section should be the
|
||||
" highest level. And so on.
|
||||
let ignore = 1
|
||||
for part in g:LatexBox_fold_sections
|
||||
" For each part, check if it is used in the file. We start adding the
|
||||
" part patterns to the fold sections array whenever we find one.
|
||||
let partpattern = '^\s*\(\\\|% Fake\)' . part . '\>'
|
||||
if ignore
|
||||
let i = 1
|
||||
while i < line("$")
|
||||
if getline(i) =~# partpattern
|
||||
call insert(foldsections, [partpattern, level])
|
||||
let level += 1
|
||||
let ignore = 0
|
||||
break
|
||||
endif
|
||||
let i += 1
|
||||
endwhile
|
||||
else
|
||||
call insert(foldsections, [partpattern, level])
|
||||
let level += 1
|
||||
endif
|
||||
endfor
|
||||
|
||||
return foldsections
|
||||
endfunction
|
||||
|
||||
" {{{1 LatexBox_FoldLevel
|
||||
|
||||
" Parse file to dynamically set the sectioning fold levels
|
||||
let b:LatexBox_FoldSections = s:FoldSectionLevels()
|
||||
|
||||
" Optimize by predefine common patterns
|
||||
let s:notbslash = '\%(\\\@<!\%(\\\\\)*\)\@<='
|
||||
let s:notcomment = '\%(\%(\\\@<!\%(\\\\\)*\)\@<=%.*\)\@<!'
|
||||
let s:envbeginpattern = s:notcomment . s:notbslash . '\\begin\s*{.\{-}}'
|
||||
let s:envendpattern = s:notcomment . s:notbslash . '\\end\s*{.\{-}}'
|
||||
let s:foldparts = '^\s*\\\%(' . join(g:LatexBox_fold_parts, '\|') . '\)'
|
||||
let s:folded = '\(% Fake\|\\\(document\|begin\|end\|'
|
||||
\ . 'front\|main\|back\|app\|sub\|section\|chapter\|part\)\)'
|
||||
|
||||
function! LatexBox_FoldLevel(lnum)
|
||||
" Check for normal lines first (optimization)
|
||||
let line = getline(a:lnum)
|
||||
if line !~ s:folded
|
||||
return "="
|
||||
endif
|
||||
|
||||
" Fold preamble
|
||||
if g:LatexBox_fold_preamble == 1
|
||||
if line =~# '\s*\\documentclass'
|
||||
return ">1"
|
||||
elseif line =~# '^\s*\\begin\s*{\s*document\s*}'
|
||||
return "0"
|
||||
endif
|
||||
endif
|
||||
|
||||
" Fold parts (\frontmatter, \mainmatter, \backmatter, and \appendix)
|
||||
if line =~# s:foldparts
|
||||
return ">1"
|
||||
endif
|
||||
|
||||
" Fold chapters and sections
|
||||
for [part, level] in b:LatexBox_FoldSections
|
||||
if line =~# part
|
||||
return ">" . level
|
||||
endif
|
||||
endfor
|
||||
|
||||
" Never fold \end{document}
|
||||
if line =~# '^\s*\\end{document}'
|
||||
return 0
|
||||
endif
|
||||
|
||||
" Fold environments
|
||||
if g:LatexBox_fold_envs == 1
|
||||
if line =~# s:envbeginpattern
|
||||
return "a1"
|
||||
elseif line =~# s:envendpattern
|
||||
return "s1"
|
||||
endif
|
||||
endif
|
||||
|
||||
" Return foldlevel of previous line
|
||||
return "="
|
||||
endfunction
|
||||
|
||||
" {{{1 LatexBox_FoldText help functions
|
||||
function! s:LabelEnv()
|
||||
let i = v:foldend
|
||||
while i >= v:foldstart
|
||||
if getline(i) =~ '^\s*\\label'
|
||||
return matchstr(getline(i), '^\s*\\label{\zs.*\ze}')
|
||||
end
|
||||
let i -= 1
|
||||
endwhile
|
||||
return ""
|
||||
endfunction
|
||||
|
||||
function! s:CaptionEnv()
|
||||
let i = v:foldend
|
||||
while i >= v:foldstart
|
||||
if getline(i) =~ '^\s*\\caption'
|
||||
return matchstr(getline(i), '^\s*\\caption\(\[.*\]\)\?{\zs.\+')
|
||||
end
|
||||
let i -= 1
|
||||
endwhile
|
||||
return ""
|
||||
endfunction
|
||||
|
||||
function! s:CaptionTable()
|
||||
let i = v:foldstart
|
||||
while i <= v:foldend
|
||||
if getline(i) =~ '^\s*\\caption'
|
||||
return matchstr(getline(i), '^\s*\\caption\(\[.*\]\)\?{\zs.\+')
|
||||
end
|
||||
let i += 1
|
||||
endwhile
|
||||
return ""
|
||||
endfunction
|
||||
|
||||
function! s:CaptionFrame(line)
|
||||
" Test simple variants first
|
||||
let caption1 = matchstr(a:line,'\\begin\*\?{.*}{\zs.\+\ze}')
|
||||
let caption2 = matchstr(a:line,'\\begin\*\?{.*}{\zs.\+')
|
||||
|
||||
if len(caption1) > 0
|
||||
return caption1
|
||||
elseif len(caption2) > 0
|
||||
return caption2
|
||||
else
|
||||
let i = v:foldstart
|
||||
while i <= v:foldend
|
||||
if getline(i) =~ '^\s*\\frametitle'
|
||||
return matchstr(getline(i),
|
||||
\ '^\s*\\frametitle\(\[.*\]\)\?{\zs.\+')
|
||||
end
|
||||
let i += 1
|
||||
endwhile
|
||||
|
||||
return ""
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" {{{1 LatexBox_FoldText
|
||||
function! LatexBox_FoldText()
|
||||
" Initialize
|
||||
let line = getline(v:foldstart)
|
||||
let nlines = v:foldend - v:foldstart + 1
|
||||
let level = ''
|
||||
let title = 'Not defined'
|
||||
|
||||
" Fold level
|
||||
let level = strpart(repeat('-', v:foldlevel-1) . '*',0,3)
|
||||
if v:foldlevel > 3
|
||||
let level = strpart(level, 1) . v:foldlevel
|
||||
endif
|
||||
let level = printf('%-3s', level)
|
||||
|
||||
" Preamble
|
||||
if line =~ '\s*\\documentclass'
|
||||
let title = "Preamble"
|
||||
endif
|
||||
|
||||
" Parts, sections and fakesections
|
||||
let sections = '\(\(sub\)*section\|part\|chapter\)'
|
||||
let secpat1 = '^\s*\\' . sections . '\*\?\s*{'
|
||||
let secpat2 = '^\s*\\' . sections . '\*\?\s*\['
|
||||
if line =~ '\\frontmatter'
|
||||
let title = "Frontmatter"
|
||||
elseif line =~ '\\mainmatter'
|
||||
let title = "Mainmatter"
|
||||
elseif line =~ '\\backmatter'
|
||||
let title = "Backmatter"
|
||||
elseif line =~ '\\appendix'
|
||||
let title = "Appendix"
|
||||
elseif line =~ secpat1 . '.*}'
|
||||
let title = matchstr(line, secpat1 . '\zs.*\ze}')
|
||||
elseif line =~ secpat1
|
||||
let title = matchstr(line, secpat1 . '\zs.*')
|
||||
elseif line =~ secpat2 . '.*\]'
|
||||
let title = matchstr(line, secpat2 . '\zs.*\ze\]')
|
||||
elseif line =~ secpat2
|
||||
let title = matchstr(line, secpat2 . '\zs.*')
|
||||
elseif line =~ 'Fake' . sections . ':'
|
||||
let title = matchstr(line,'Fake' . sections . ':\s*\zs.*')
|
||||
elseif line =~ 'Fake' . sections
|
||||
let title = matchstr(line, 'Fake' . sections)
|
||||
endif
|
||||
|
||||
" Environments
|
||||
if line =~ '\\begin'
|
||||
" Capture environment name
|
||||
let env = matchstr(line,'\\begin\*\?{\zs\w*\*\?\ze}')
|
||||
|
||||
" Set caption based on type of environment
|
||||
if env == 'frame'
|
||||
let label = ''
|
||||
let caption = s:CaptionFrame(line)
|
||||
elseif env == 'table'
|
||||
let label = s:LabelEnv()
|
||||
let caption = s:CaptionTable()
|
||||
else
|
||||
let label = s:LabelEnv()
|
||||
let caption = s:CaptionEnv()
|
||||
endif
|
||||
|
||||
" If no caption found, check for a caption comment
|
||||
if caption == ''
|
||||
let caption = matchstr(line,'\\begin\*\?{.*}\s*%\s*\zs.*')
|
||||
endif
|
||||
|
||||
" Create title based on caption and label
|
||||
if caption . label == ''
|
||||
let title = env
|
||||
elseif label == ''
|
||||
let title = printf('%-12s%s', env . ':',
|
||||
\ substitute(caption, '}\s*$', '',''))
|
||||
elseif caption == ''
|
||||
let title = printf('%-12s%56s', env, '(' . label . ')')
|
||||
else
|
||||
let title = printf('%-12s%-30s %21s', env . ':',
|
||||
\ strpart(substitute(caption, '}\s*$', '',''),0,34),
|
||||
\ '(' . label . ')')
|
||||
endif
|
||||
endif
|
||||
|
||||
let title = strpart(title, 0, 68)
|
||||
return printf('%-3s %-68s #%5d', level, title, nlines)
|
||||
endfunction
|
||||
|
||||
" {{{1 Footer
|
||||
" vim:fdm=marker:ff=unix:ts=4:sw=4
|
||||
500
ftplugin/latex-box/latexmk.vim
Normal file
500
ftplugin/latex-box/latexmk.vim
Normal file
@@ -0,0 +1,500 @@
|
||||
" LaTeX Box latexmk functions
|
||||
|
||||
" Options and variables {{{
|
||||
|
||||
if !exists('g:LatexBox_latexmk_options')
|
||||
let g:LatexBox_latexmk_options = ''
|
||||
endif
|
||||
if !exists('g:LatexBox_latexmk_env')
|
||||
let g:LatexBox_latexmk_env = ''
|
||||
endif
|
||||
if !exists('g:LatexBox_latexmk_async')
|
||||
let g:LatexBox_latexmk_async = 0
|
||||
endif
|
||||
if !exists('g:LatexBox_latexmk_preview_continuously')
|
||||
let g:LatexBox_latexmk_preview_continuously = 0
|
||||
endif
|
||||
if !exists('g:LatexBox_output_type')
|
||||
let g:LatexBox_output_type = 'pdf'
|
||||
endif
|
||||
if !exists('g:LatexBox_autojump')
|
||||
let g:LatexBox_autojump = 0
|
||||
endif
|
||||
if ! exists('g:LatexBox_quickfix')
|
||||
let g:LatexBox_quickfix = 1
|
||||
endif
|
||||
|
||||
" }}}
|
||||
|
||||
" Process ID management (used for asynchronous and continuous mode) {{{
|
||||
|
||||
" A dictionary of latexmk PID's (basename: pid)
|
||||
if !exists('g:latexmk_running_pids')
|
||||
let g:latexmk_running_pids = {}
|
||||
endif
|
||||
|
||||
" Set PID {{{
|
||||
function! s:LatexmkSetPID(basename, pid)
|
||||
let g:latexmk_running_pids[a:basename] = a:pid
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" kill_latexmk_process {{{
|
||||
function! s:kill_latexmk_process(pid)
|
||||
if has('win32')
|
||||
silent execute '!taskkill /PID ' . a:pid . ' /T /F'
|
||||
else
|
||||
if g:LatexBox_latexmk_async
|
||||
" vim-server mode
|
||||
let pids = []
|
||||
let tmpfile = tempname()
|
||||
silent execute '!ps x -o pgid,pid > ' . tmpfile
|
||||
for line in readfile(tmpfile)
|
||||
let new_pid = matchstr(line, '^\s*' . a:pid . '\s\+\zs\d\+\ze')
|
||||
if !empty(new_pid)
|
||||
call add(pids, new_pid)
|
||||
endif
|
||||
endfor
|
||||
call delete(tmpfile)
|
||||
if !empty(pids)
|
||||
silent execute '!kill ' . join(pids)
|
||||
endif
|
||||
else
|
||||
" single background process
|
||||
silent execute '!kill ' . a:pid
|
||||
endif
|
||||
endif
|
||||
if !has('gui_running')
|
||||
redraw!
|
||||
endif
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" kill_all_latexmk_processes {{{
|
||||
function! s:kill_all_latexmk_processes()
|
||||
for pid in values(g:latexmk_running_pids)
|
||||
call s:kill_latexmk_process(pid)
|
||||
endfor
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" }}}
|
||||
|
||||
" Setup for vim-server {{{
|
||||
function! s:SIDWrap(func)
|
||||
if !exists('s:SID')
|
||||
let s:SID = matchstr(expand('<sfile>'), '\zs<SNR>\d\+_\ze.*$')
|
||||
endif
|
||||
return s:SID . a:func
|
||||
endfunction
|
||||
|
||||
function! s:LatexmkCallback(basename, status)
|
||||
" Only remove the pid if not in continuous mode
|
||||
if !g:LatexBox_latexmk_preview_continuously
|
||||
call remove(g:latexmk_running_pids, a:basename)
|
||||
endif
|
||||
call LatexBox_LatexErrors(a:status, a:basename)
|
||||
endfunction
|
||||
|
||||
function! s:setup_vim_server()
|
||||
if !exists('g:vim_program')
|
||||
|
||||
" attempt autodetection of vim executable
|
||||
let g:vim_program = ''
|
||||
if has('win32')
|
||||
" Just drop through to the default for windows
|
||||
else
|
||||
if match(&shell, '\(bash\|zsh\)$') >= 0
|
||||
let ppid = '$PPID'
|
||||
else
|
||||
let ppid = '$$'
|
||||
endif
|
||||
|
||||
let tmpfile = tempname()
|
||||
silent execute '!ps -o command= -p ' . ppid . ' > ' . tmpfile
|
||||
for line in readfile(tmpfile)
|
||||
let line = matchstr(line, '^\S\+\>')
|
||||
if !empty(line) && executable(line)
|
||||
let g:vim_program = line . ' -g'
|
||||
break
|
||||
endif
|
||||
endfor
|
||||
call delete(tmpfile)
|
||||
endif
|
||||
|
||||
if empty(g:vim_program)
|
||||
if has('gui_macvim')
|
||||
let g:vim_program
|
||||
\ = '/Applications/MacVim.app/Contents/MacOS/Vim -g'
|
||||
else
|
||||
let g:vim_program = v:progname
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" Latexmk {{{
|
||||
|
||||
function! LatexBox_Latexmk(force)
|
||||
" Define often used names
|
||||
let basepath = LatexBox_GetTexBasename(1)
|
||||
let basename = fnamemodify(basepath, ':t')
|
||||
let texroot = shellescape(LatexBox_GetTexRoot())
|
||||
let mainfile = fnameescape(fnamemodify(LatexBox_GetMainTexFile(), ':t'))
|
||||
|
||||
" Check if latexmk is installed
|
||||
if !executable('latexmk')
|
||||
echomsg "Error: LaTeX-Box relies on latexmk for compilation, but it" .
|
||||
\ " is not installed!"
|
||||
return
|
||||
endif
|
||||
|
||||
" Check if already running
|
||||
if has_key(g:latexmk_running_pids, basepath)
|
||||
echomsg "latexmk is already running for `" . basename . "'"
|
||||
return
|
||||
endif
|
||||
|
||||
" Set wrap width in log file
|
||||
let max_print_line = 2000
|
||||
if has('win32')
|
||||
let env = 'set max_print_line=' . max_print_line . ' & '
|
||||
elseif match(&shell, '/tcsh$') >= 0
|
||||
let env = 'setenv max_print_line ' . max_print_line . '; '
|
||||
else
|
||||
let env = 'max_print_line=' . max_print_line
|
||||
endif
|
||||
|
||||
" Set environment options
|
||||
let env .= ' ' . g:LatexBox_latexmk_env . ' '
|
||||
|
||||
" Set latexmk command with options
|
||||
if has('win32')
|
||||
" Make sure to switch drive as well as directory
|
||||
let cmd = 'cd /D ' . texroot . ' && '
|
||||
else
|
||||
let cmd = 'cd ' . texroot . ' && '
|
||||
endif
|
||||
let cmd .= env . ' latexmk'
|
||||
let cmd .= ' -' . g:LatexBox_output_type
|
||||
let cmd .= ' -quiet '
|
||||
let cmd .= g:LatexBox_latexmk_options
|
||||
if a:force
|
||||
let cmd .= ' -g'
|
||||
endif
|
||||
if g:LatexBox_latexmk_preview_continuously
|
||||
let cmd .= ' -pvc'
|
||||
endif
|
||||
let cmd .= ' -e ' . shellescape('$pdflatex =~ s/ / -file-line-error /')
|
||||
let cmd .= ' -e ' . shellescape('$latex =~ s/ / -file-line-error /')
|
||||
if g:LatexBox_latexmk_preview_continuously
|
||||
let cmd .= ' -e ' . shellescape('$success_cmd = $ENV{SUCCESSCMD}')
|
||||
let cmd .= ' -e ' . shellescape('$failure_cmd = $ENV{FAILURECMD}')
|
||||
endif
|
||||
let cmd .= ' ' . mainfile
|
||||
|
||||
" Redirect output to null
|
||||
if has('win32')
|
||||
let cmd .= ' >nul'
|
||||
else
|
||||
let cmd .= ' &>/dev/null'
|
||||
endif
|
||||
|
||||
if g:LatexBox_latexmk_async
|
||||
" Check if VIM server exists
|
||||
if empty(v:servername)
|
||||
echoerr "cannot run latexmk in background without a VIM server"
|
||||
echoerr "set g:LatexBox_latexmk_async to 0 to change compiling mode"
|
||||
return
|
||||
endif
|
||||
|
||||
" Start vim server if necessary
|
||||
call s:setup_vim_server()
|
||||
|
||||
let setpidfunc = s:SIDWrap('LatexmkSetPID')
|
||||
let callbackfunc = s:SIDWrap('LatexmkCallback')
|
||||
if has('win32')
|
||||
let vim_program = substitute(g:vim_program,
|
||||
\ 'gvim\.exe$', 'vim.exe', '')
|
||||
|
||||
" Define callback to set the pid
|
||||
let callsetpid = setpidfunc . '(''' . basepath . ''', %CMDPID%)'
|
||||
let vimsetpid = vim_program . ' --servername ' . v:servername
|
||||
\ . ' --remote-expr ' . shellescape(callsetpid)
|
||||
|
||||
" Define callback after latexmk is finished
|
||||
let callback = callbackfunc . '(''' . basepath . ''', %LATEXERR%)'
|
||||
let vimcmd = vim_program . ' --servername ' . v:servername
|
||||
\ . ' --remote-expr ' . shellescape(callback)
|
||||
let scallback = callbackfunc . '(''' . basepath . ''', 0)'
|
||||
let svimcmd = vim_program . ' --servername ' . v:servername
|
||||
\ . ' --remote-expr ' . shellescape(scallback)
|
||||
let fcallback = callbackfunc . '(''' . basepath . ''', 1)'
|
||||
let fvimcmd = vim_program . ' --servername ' . v:servername
|
||||
\ . ' --remote-expr ' . shellescape(fcallback)
|
||||
|
||||
let asyncbat = tempname() . '.bat'
|
||||
if g:LatexBox_latexmk_preview_continuously
|
||||
call writefile(['setlocal',
|
||||
\ 'set T=%TEMP%\sthUnique.tmp',
|
||||
\ 'wmic process where (Name="WMIC.exe" AND CommandLine LIKE "%%%TIME%%%") '
|
||||
\ . 'get ParentProcessId /value | find "ParentProcessId" >%T%',
|
||||
\ 'set /P A=<%T%',
|
||||
\ 'set CMDPID=%A:~16% & del %T%',
|
||||
\ vimsetpid,
|
||||
\ 'set SUCCESSCMD='.svimcmd,
|
||||
\ 'set FAILURECMD='.fvimcmd,
|
||||
\ cmd,
|
||||
\ 'endlocal'], asyncbat)
|
||||
else
|
||||
call writefile(['setlocal',
|
||||
\ 'set T=%TEMP%\sthUnique.tmp',
|
||||
\ 'wmic process where (Name="WMIC.exe" AND CommandLine LIKE "%%%TIME%%%") '
|
||||
\ . 'get ParentProcessId /value | find "ParentProcessId" >%T%',
|
||||
\ 'set /P A=<%T%',
|
||||
\ 'set CMDPID=%A:~16% & del %T%',
|
||||
\ vimsetpid,
|
||||
\ cmd,
|
||||
\ 'set LATEXERR=%ERRORLEVEL%',
|
||||
\ vimcmd,
|
||||
\ 'endlocal'], asyncbat)
|
||||
endif
|
||||
|
||||
" Define command
|
||||
let cmd = '!start /b ' . asyncbat . ' & del ' . asyncbat
|
||||
else
|
||||
" Define callback to set the pid
|
||||
let callsetpid = shellescape(setpidfunc).'"(\"'.basepath.'\",$$)"'
|
||||
let vimsetpid = g:vim_program . ' --servername ' . v:servername
|
||||
\ . ' --remote-expr ' . callsetpid
|
||||
|
||||
" Define callback after latexmk is finished
|
||||
let callback = shellescape(callbackfunc).'"(\"'.basepath.'\",$?)"'
|
||||
let vimcmd = g:vim_program . ' --servername ' . v:servername
|
||||
\ . ' --remote-expr ' . callback
|
||||
let scallback = shellescape(callbackfunc).'"(\"'.basepath.'\",0)"'
|
||||
let svimcmd = g:vim_program . ' --servername ' . v:servername
|
||||
\ . ' --remote-expr ' . scallback
|
||||
let fcallback = shellescape(callbackfunc).'"(\"'.basepath.'\",1)"'
|
||||
let fvimcmd = g:vim_program . ' --servername ' . v:servername
|
||||
\ . ' --remote-expr ' . fcallback
|
||||
|
||||
" Define command
|
||||
" Note: Here we escape '%' because it may be given as a user option
|
||||
" through g:LatexBox_latexmk_options, for instance with
|
||||
" g:Latex..._options = "-pdflatex='pdflatex -synctex=1 \%O \%S'"
|
||||
if g:LatexBox_latexmk_preview_continuously
|
||||
let cmd = vimsetpid . ' ; '
|
||||
\ . 'export SUCCESSCMD=' . shellescape(svimcmd) . ' '
|
||||
\ . ' FAILURECMD=' . shellescape(fvimcmd) . ' ; '
|
||||
\ . escape(cmd, '%')
|
||||
else
|
||||
let cmd = vimsetpid . ' ; ' . escape(cmd, '%') . ' ; ' . vimcmd
|
||||
endif
|
||||
let cmd = '! (' . cmd . ') >/dev/null &'
|
||||
endif
|
||||
|
||||
if g:LatexBox_latexmk_preview_continuously
|
||||
echo 'Compiling to ' . g:LatexBox_output_type
|
||||
\ . ' with continuous preview.'
|
||||
else
|
||||
echo 'Compiling to ' . g:LatexBox_output_type . ' ...'
|
||||
endif
|
||||
silent execute cmd
|
||||
else
|
||||
if g:LatexBox_latexmk_preview_continuously
|
||||
if has('win32')
|
||||
let cmd = '!start /b cmd /s /c "' . cmd . '"'
|
||||
else
|
||||
let cmd = '!' . cmd . ' &'
|
||||
endif
|
||||
echo 'Compiling to ' . g:LatexBox_output_type . ' ...'
|
||||
silent execute cmd
|
||||
|
||||
" Save PID in order to be able to kill the process when wanted.
|
||||
if has('win32')
|
||||
let tmpfile = tempname()
|
||||
let pidcmd = 'cmd /c "wmic process where '
|
||||
\ . '(CommandLine LIKE "latexmk\%'.mainfile.'\%") '
|
||||
\ . 'get ProcessId /value | find "ProcessId" '
|
||||
\ . '>'.tmpfile.' "'
|
||||
silent execute '! ' . pidcmd
|
||||
let pids = readfile(tmpfile)
|
||||
let pid = strpart(pids[0], 10)
|
||||
let g:latexmk_running_pids[basepath] = pid
|
||||
else
|
||||
let pid = substitute(system('pgrep -f "perl.*'
|
||||
\ . mainfile . '" | head -n 1'),'\D','','')
|
||||
let g:latexmk_running_pids[basepath] = pid
|
||||
endif
|
||||
else
|
||||
" Execute command and check for errors
|
||||
echo 'Compiling to ' . g:LatexBox_output_type . ' ... (async off!)'
|
||||
call system(cmd)
|
||||
call LatexBox_LatexErrors(v:shell_error)
|
||||
endif
|
||||
endif
|
||||
|
||||
" Redraw screen if necessary
|
||||
if !has("gui_running")
|
||||
redraw!
|
||||
endif
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" LatexmkClean {{{
|
||||
function! LatexBox_LatexmkClean(cleanall)
|
||||
" Check if latexmk is installed
|
||||
if !executable('latexmk')
|
||||
echomsg "Error: LaTeX-Box relies on latexmk for compilation, but it" .
|
||||
\ " is not installed!"
|
||||
return
|
||||
endif
|
||||
|
||||
let basename = LatexBox_GetTexBasename(1)
|
||||
|
||||
if has_key(g:latexmk_running_pids, basename)
|
||||
echomsg "don't clean when latexmk is running"
|
||||
return
|
||||
endif
|
||||
|
||||
if has('win32')
|
||||
let cmd = 'cd /D ' . shellescape(LatexBox_GetTexRoot()) . ' & '
|
||||
else
|
||||
let cmd = 'cd ' . shellescape(LatexBox_GetTexRoot()) . ';'
|
||||
endif
|
||||
if a:cleanall
|
||||
let cmd .= 'latexmk -C '
|
||||
else
|
||||
let cmd .= 'latexmk -c '
|
||||
endif
|
||||
let cmd .= shellescape(LatexBox_GetMainTexFile())
|
||||
if has('win32')
|
||||
let cmd .= ' >nul'
|
||||
else
|
||||
let cmd .= ' >&/dev/null'
|
||||
endif
|
||||
|
||||
call system(cmd)
|
||||
if !has('gui_running')
|
||||
redraw!
|
||||
endif
|
||||
|
||||
echomsg "latexmk clean finished"
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" LatexErrors {{{
|
||||
function! LatexBox_LatexErrors(status, ...)
|
||||
if a:0 >= 1
|
||||
let log = a:1 . '.log'
|
||||
else
|
||||
let log = LatexBox_GetLogFile()
|
||||
endif
|
||||
|
||||
cclose
|
||||
|
||||
" set cwd to expand error file correctly
|
||||
let l:cwd = fnamemodify(getcwd(), ':p')
|
||||
execute 'lcd ' . fnameescape(LatexBox_GetTexRoot())
|
||||
try
|
||||
if g:LatexBox_autojump
|
||||
execute 'cfile ' . fnameescape(log)
|
||||
else
|
||||
execute 'cgetfile ' . fnameescape(log)
|
||||
endif
|
||||
finally
|
||||
" restore cwd
|
||||
execute 'lcd ' . fnameescape(l:cwd)
|
||||
endtry
|
||||
|
||||
" Always open window if started by LatexErrors command
|
||||
if a:status < 0
|
||||
botright copen
|
||||
else
|
||||
" Write status message to screen
|
||||
redraw
|
||||
if a:status > 0 || len(getqflist())>1
|
||||
echomsg 'Compiling to ' . g:LatexBox_output_type . ' ... failed!'
|
||||
else
|
||||
echomsg 'Compiling to ' . g:LatexBox_output_type . ' ... success!'
|
||||
endif
|
||||
|
||||
" Only open window when an error/warning is detected
|
||||
if g:LatexBox_quickfix
|
||||
belowright cw
|
||||
if g:LatexBox_quickfix==2
|
||||
wincmd p
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" LatexmkStatus {{{
|
||||
function! LatexBox_LatexmkStatus(detailed)
|
||||
if a:detailed
|
||||
if empty(g:latexmk_running_pids)
|
||||
echo "latexmk is not running"
|
||||
else
|
||||
let plist = ""
|
||||
for [basename, pid] in items(g:latexmk_running_pids)
|
||||
if !empty(plist)
|
||||
let plist .= '; '
|
||||
endif
|
||||
let plist .= fnamemodify(basename, ':t') . ':' . pid
|
||||
endfor
|
||||
echo "latexmk is running (" . plist . ")"
|
||||
endif
|
||||
else
|
||||
let basename = LatexBox_GetTexBasename(1)
|
||||
if has_key(g:latexmk_running_pids, basename)
|
||||
echo "latexmk is running"
|
||||
else
|
||||
echo "latexmk is not running"
|
||||
endif
|
||||
endif
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" LatexmkStop {{{
|
||||
function! LatexBox_LatexmkStop(silent)
|
||||
if empty(g:latexmk_running_pids)
|
||||
if !a:silent
|
||||
let basepath = LatexBox_GetTexBasename(1)
|
||||
let basename = fnamemodify(basepath, ':t')
|
||||
echoerr "latexmk is not running for `" . basename . "'"
|
||||
endif
|
||||
else
|
||||
let basepath = LatexBox_GetTexBasename(1)
|
||||
let basename = fnamemodify(basepath, ':t')
|
||||
if has_key(g:latexmk_running_pids, basepath)
|
||||
call s:kill_latexmk_process(g:latexmk_running_pids[basepath])
|
||||
call remove(g:latexmk_running_pids, basepath)
|
||||
if !a:silent
|
||||
echomsg "latexmk stopped for `" . basename . "'"
|
||||
endif
|
||||
elseif !a:silent
|
||||
echoerr "latexmk is not running for `" . basename . "'"
|
||||
endif
|
||||
endif
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" Commands {{{
|
||||
|
||||
command! -bang Latexmk call LatexBox_Latexmk(<q-bang> == "!")
|
||||
command! -bang LatexmkClean call LatexBox_LatexmkClean(<q-bang> == "!")
|
||||
command! -bang LatexmkStatus call LatexBox_LatexmkStatus(<q-bang> == "!")
|
||||
command! LatexmkStop call LatexBox_LatexmkStop(0)
|
||||
command! LatexErrors call LatexBox_LatexErrors(-1)
|
||||
|
||||
if g:LatexBox_latexmk_async || g:LatexBox_latexmk_preview_continuously
|
||||
autocmd BufUnload <buffer> call LatexBox_LatexmkStop(1)
|
||||
autocmd VimLeave * call <SID>kill_all_latexmk_processes()
|
||||
endif
|
||||
|
||||
" }}}
|
||||
|
||||
" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
|
||||
96
ftplugin/latex-box/mappings.vim
Normal file
96
ftplugin/latex-box/mappings.vim
Normal file
@@ -0,0 +1,96 @@
|
||||
" LaTeX Box mappings
|
||||
|
||||
if exists("g:LatexBox_no_mappings")
|
||||
finish
|
||||
endif
|
||||
|
||||
" latexmk {{{
|
||||
map <buffer> <LocalLeader>ll :Latexmk<CR>
|
||||
map <buffer> <LocalLeader>lL :Latexmk!<CR>
|
||||
map <buffer> <LocalLeader>lc :LatexmkClean<CR>
|
||||
map <buffer> <LocalLeader>lC :LatexmkClean!<CR>
|
||||
map <buffer> <LocalLeader>lg :LatexmkStatus<CR>
|
||||
map <buffer> <LocalLeader>lG :LatexmkStatus!<CR>
|
||||
map <buffer> <LocalLeader>lk :LatexmkStop<CR>
|
||||
map <buffer> <LocalLeader>le :LatexErrors<CR>
|
||||
" }}}
|
||||
|
||||
" View {{{
|
||||
map <buffer> <LocalLeader>lv :LatexView<CR>
|
||||
" }}}
|
||||
|
||||
" TOC {{{
|
||||
map <silent> <buffer> <LocalLeader>lt :LatexTOC<CR>
|
||||
" }}}
|
||||
|
||||
" Jump to match {{{
|
||||
if !exists('g:LatexBox_loaded_matchparen')
|
||||
nmap <buffer> % <Plug>LatexBox_JumpToMatch
|
||||
vmap <buffer> % <Plug>LatexBox_JumpToMatch
|
||||
omap <buffer> % <Plug>LatexBox_JumpToMatch
|
||||
endif
|
||||
" }}}
|
||||
|
||||
" Define text objects {{{
|
||||
vmap <buffer> ie <Plug>LatexBox_SelectCurrentEnvInner
|
||||
vmap <buffer> ae <Plug>LatexBox_SelectCurrentEnvOuter
|
||||
omap <buffer> ie :normal vie<CR>
|
||||
omap <buffer> ae :normal vae<CR>
|
||||
vmap <buffer> i$ <Plug>LatexBox_SelectInlineMathInner
|
||||
vmap <buffer> a$ <Plug>LatexBox_SelectInlineMathOuter
|
||||
omap <buffer> i$ :normal vi$<CR>
|
||||
omap <buffer> a$ :normal va$<CR>
|
||||
" }}}
|
||||
|
||||
" Jump between sections {{{
|
||||
function! s:LatexBoxNextSection(type, backwards, visual)
|
||||
" Restore visual mode if desired
|
||||
if a:visual
|
||||
normal! gv
|
||||
endif
|
||||
|
||||
" For the [] and ][ commands we move up or down before the search
|
||||
if a:type == 1
|
||||
if a:backwards
|
||||
normal! k
|
||||
else
|
||||
normal! j
|
||||
endif
|
||||
endif
|
||||
|
||||
" Define search pattern and do the search while preserving "/
|
||||
let save_search = @/
|
||||
let flags = 'W'
|
||||
if a:backwards
|
||||
let flags = 'b' . flags
|
||||
endif
|
||||
let notcomment = '\%(\%(\\\@<!\%(\\\\\)*\)\@<=%.*\)\@<!'
|
||||
let pattern = notcomment . '\v\s*\\(' . join([
|
||||
\ '(sub)*section',
|
||||
\ 'chapter',
|
||||
\ 'part',
|
||||
\ 'appendix',
|
||||
\ '(front|back|main)matter'], '|') . ')>'
|
||||
call search(pattern, flags)
|
||||
let @/ = save_search
|
||||
|
||||
" For the [] and ][ commands we move down or up after the search
|
||||
if a:type == 1
|
||||
if a:backwards
|
||||
normal! j
|
||||
else
|
||||
normal! k
|
||||
endif
|
||||
endif
|
||||
endfunction
|
||||
noremap <buffer> <silent> ]] :call <SID>LatexBoxNextSection(0,0,0)<CR>
|
||||
noremap <buffer> <silent> ][ :call <SID>LatexBoxNextSection(1,0,0)<CR>
|
||||
noremap <buffer> <silent> [] :call <SID>LatexBoxNextSection(1,1,0)<CR>
|
||||
noremap <buffer> <silent> [[ :call <SID>LatexBoxNextSection(0,1,0)<CR>
|
||||
vnoremap <buffer> <silent> ]] :<c-u>call <SID>LatexBoxNextSection(0,0,1)<CR>
|
||||
vnoremap <buffer> <silent> ][ :<c-u>call <SID>LatexBoxNextSection(1,0,1)<CR>
|
||||
vnoremap <buffer> <silent> [] :<c-u>call <SID>LatexBoxNextSection(1,1,1)<CR>
|
||||
vnoremap <buffer> <silent> [[ :<c-u>call <SID>LatexBoxNextSection(0,1,1)<CR>
|
||||
" }}}
|
||||
|
||||
" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
|
||||
531
ftplugin/latex-box/motion.vim
Normal file
531
ftplugin/latex-box/motion.vim
Normal file
@@ -0,0 +1,531 @@
|
||||
" LaTeX Box motion functions
|
||||
|
||||
" Motion options {{{
|
||||
" Opening and closing patterns
|
||||
if !exists('g:LatexBox_open_pats')
|
||||
let g:LatexBox_open_pats = [ '\\{','{','\\(','(','\\\[','\[',
|
||||
\ '\\begin\s*{.\{-}}', '\\left\s*\%([^\\]\|\\.\|\\\a*\)']
|
||||
let g:LatexBox_close_pats = [ '\\}','}','\\)',')','\\\]','\]',
|
||||
\ '\\end\s*{.\{-}}', '\\right\s*\%([^\\]\|\\.\|\\\a*\)']
|
||||
endif
|
||||
" }}}
|
||||
|
||||
" HasSyntax {{{
|
||||
" s:HasSyntax(syntaxName, [line], [col])
|
||||
function! s:HasSyntax(syntaxName, ...)
|
||||
let line = a:0 >= 1 ? a:1 : line('.')
|
||||
let col = a:0 >= 2 ? a:2 : col('.')
|
||||
return index(map(synstack(line, col),
|
||||
\ 'synIDattr(v:val, "name") == "' . a:syntaxName . '"'),
|
||||
\ 1) >= 0
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" Search and Skip Comments {{{
|
||||
" s:SearchAndSkipComments(pattern, [flags], [stopline])
|
||||
function! s:SearchAndSkipComments(pat, ...)
|
||||
let flags = a:0 >= 1 ? a:1 : ''
|
||||
let stopline = a:0 >= 2 ? a:2 : 0
|
||||
let saved_pos = getpos('.')
|
||||
|
||||
" search once
|
||||
let ret = search(a:pat, flags, stopline)
|
||||
|
||||
if ret
|
||||
" do not match at current position if inside comment
|
||||
let flags = substitute(flags, 'c', '', 'g')
|
||||
|
||||
" keep searching while in comment
|
||||
while LatexBox_InComment()
|
||||
let ret = search(a:pat, flags, stopline)
|
||||
if !ret
|
||||
break
|
||||
endif
|
||||
endwhile
|
||||
endif
|
||||
|
||||
if !ret
|
||||
" if no match found, restore position
|
||||
call setpos('.', saved_pos)
|
||||
endif
|
||||
|
||||
return ret
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" Finding Matching Pair {{{
|
||||
function! s:FindMatchingPair(mode)
|
||||
|
||||
if a:mode =~ 'h\|i'
|
||||
2match none
|
||||
elseif a:mode == 'v'
|
||||
normal! gv
|
||||
endif
|
||||
|
||||
if LatexBox_InComment() | return | endif
|
||||
|
||||
" open/close pairs (dollars signs are treated apart)
|
||||
let dollar_pat = '\$'
|
||||
let notbslash = '\%(\\\@<!\%(\\\\\)*\)\@<='
|
||||
let notcomment = '\%(\%(\\\@<!\%(\\\\\)*\)\@<=%.*\)\@<!'
|
||||
let anymatch = '\('
|
||||
\ . join(g:LatexBox_open_pats + g:LatexBox_close_pats, '\|')
|
||||
\ . '\|' . dollar_pat . '\)'
|
||||
|
||||
let lnum = line('.')
|
||||
let cnum = searchpos('\A', 'cbnW', lnum)[1]
|
||||
" if the previous char is a backslash
|
||||
if strpart(getline(lnum), cnum-2, 1) == '\'
|
||||
let cnum = cnum-1
|
||||
endif
|
||||
let delim = matchstr(getline(lnum), '\C^'. anymatch , cnum - 1)
|
||||
|
||||
if empty(delim) || strlen(delim)+cnum-1< col('.')
|
||||
if a:mode =~ 'n\|v\|o'
|
||||
" if not found, search forward
|
||||
let cnum = match(getline(lnum), '\C'. anymatch , col('.') - 1) + 1
|
||||
if cnum == 0 | return | endif
|
||||
call cursor(lnum, cnum)
|
||||
let delim = matchstr(getline(lnum), '\C^'. anymatch , cnum - 1)
|
||||
elseif a:mode =~ 'i'
|
||||
" if not found, move one char bacward and search
|
||||
let cnum = searchpos('\A', 'bnW', lnum)[1]
|
||||
" if the previous char is a backslash
|
||||
if strpart(getline(lnum), cnum-2, 1) == '\'
|
||||
let cnum = cnum-1
|
||||
endif
|
||||
let delim = matchstr(getline(lnum), '\C^'. anymatch , cnum - 1)
|
||||
if empty(delim) || strlen(delim)+cnum< col('.') | return | endif
|
||||
elseif a:mode =~ 'h'
|
||||
return
|
||||
endif
|
||||
endif
|
||||
|
||||
if delim =~ '^\$'
|
||||
|
||||
" match $-pairs
|
||||
" check if next character is in inline math
|
||||
let [lnum0, cnum0] = searchpos('.', 'nW')
|
||||
if lnum0 && s:HasSyntax('texMathZoneX', lnum0, cnum0)
|
||||
let [lnum2, cnum2] = searchpos(notcomment . notbslash. dollar_pat, 'nW', line('w$')*(a:mode =~ 'h\|i') , 200)
|
||||
else
|
||||
let [lnum2, cnum2] = searchpos('\%(\%'. lnum . 'l\%' . cnum . 'c\)\@!'. notcomment . notbslash . dollar_pat, 'bnW', line('w0')*(a:mode =~ 'h\|i') , 200)
|
||||
endif
|
||||
|
||||
if a:mode =~ 'h\|i'
|
||||
execute '2match MatchParen /\%(\%' . lnum . 'l\%' . cnum . 'c\$' . '\|\%' . lnum2 . 'l\%' . cnum2 . 'c\$\)/'
|
||||
elseif a:mode =~ 'n\|v\|o'
|
||||
call cursor(lnum2,cnum2)
|
||||
endif
|
||||
|
||||
else
|
||||
" match other pairs
|
||||
for i in range(len(g:LatexBox_open_pats))
|
||||
let open_pat = notbslash . g:LatexBox_open_pats[i]
|
||||
let close_pat = notbslash . g:LatexBox_close_pats[i]
|
||||
|
||||
if delim =~# '^' . open_pat
|
||||
" if on opening pattern, search for closing pattern
|
||||
let [lnum2, cnum2] = searchpairpos('\C' . open_pat, '', '\C'
|
||||
\ . close_pat, 'nW', 'LatexBox_InComment()',
|
||||
\ line('w$')*(a:mode =~ 'h\|i') , 200)
|
||||
if a:mode =~ 'h\|i'
|
||||
execute '2match MatchParen /\%(\%' . lnum . 'l\%' . cnum
|
||||
\ . 'c' . g:LatexBox_open_pats[i] . '\|\%'
|
||||
\ . lnum2 . 'l\%' . cnum2 . 'c'
|
||||
\ . g:LatexBox_close_pats[i] . '\)/'
|
||||
elseif a:mode =~ 'n\|v\|o'
|
||||
call cursor(lnum2,cnum2)
|
||||
if strlen(close_pat)>1 && a:mode =~ 'o'
|
||||
call cursor(lnum2, matchend(getline('.'), '\C'
|
||||
\ . close_pat, col('.')-1))
|
||||
endif
|
||||
endif
|
||||
break
|
||||
elseif delim =~# '^' . close_pat
|
||||
" if on closing pattern, search for opening pattern
|
||||
let [lnum2, cnum2] = searchpairpos('\C' . open_pat, '',
|
||||
\ '\C\%(\%'. lnum . 'l\%' . cnum . 'c\)\@!'
|
||||
\ . close_pat, 'bnW', 'LatexBox_InComment()',
|
||||
\ line('w0')*(a:mode =~ 'h\|i') , 200)
|
||||
if a:mode =~ 'h\|i'
|
||||
execute '2match MatchParen /\%(\%' . lnum2 . 'l\%' . cnum2
|
||||
\ . 'c' . g:LatexBox_open_pats[i] . '\|\%'
|
||||
\ . lnum . 'l\%' . cnum . 'c'
|
||||
\ . g:LatexBox_close_pats[i] . '\)/'
|
||||
elseif a:mode =~ 'n\|v\|o'
|
||||
call cursor(lnum2,cnum2)
|
||||
endif
|
||||
break
|
||||
endif
|
||||
endfor
|
||||
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" Allow to disable functionality if desired
|
||||
if !exists('g:LatexBox_loaded_matchparen')
|
||||
" Disable matchparen autocommands
|
||||
augroup LatexBox_HighlightPairs
|
||||
autocmd BufEnter * if !exists("g:loaded_matchparen") || !g:loaded_matchparen | runtime plugin/matchparen.vim | endif
|
||||
autocmd BufEnter *.tex 3match none | unlet! g:loaded_matchparen | au! matchparen
|
||||
autocmd! CursorMoved *.tex call s:FindMatchingPair('h')
|
||||
autocmd! CursorMovedI *.tex call s:FindMatchingPair('i')
|
||||
augroup END
|
||||
endif
|
||||
|
||||
" Use LatexBox'es FindMatchingPair as '%' (enable jump between e.g. $'s)
|
||||
nnoremap <silent> <Plug>LatexBox_JumpToMatch :call <SID>FindMatchingPair('n')<CR>
|
||||
vnoremap <silent> <Plug>LatexBox_JumpToMatch :call <SID>FindMatchingPair('v')<CR>
|
||||
onoremap <silent> <Plug>LatexBox_JumpToMatch v:call <SID>FindMatchingPair('o')<CR>
|
||||
|
||||
" }}}
|
||||
|
||||
" select inline math {{{
|
||||
" s:SelectInlineMath(seltype)
|
||||
" where seltype is either 'inner' or 'outer'
|
||||
function! s:SelectInlineMath(seltype)
|
||||
|
||||
let dollar_pat = '\\\@<!\$'
|
||||
|
||||
if s:HasSyntax('texMathZoneX')
|
||||
call s:SearchAndSkipComments(dollar_pat, 'cbW')
|
||||
elseif getline('.')[col('.') - 1] == '$'
|
||||
call s:SearchAndSkipComments(dollar_pat, 'bW')
|
||||
else
|
||||
return
|
||||
endif
|
||||
|
||||
if a:seltype == 'inner'
|
||||
normal! l
|
||||
endif
|
||||
|
||||
if visualmode() ==# 'V'
|
||||
normal! V
|
||||
else
|
||||
normal! v
|
||||
endif
|
||||
|
||||
call s:SearchAndSkipComments(dollar_pat, 'W')
|
||||
|
||||
if a:seltype == 'inner'
|
||||
normal! h
|
||||
endif
|
||||
endfunction
|
||||
|
||||
vnoremap <silent> <Plug>LatexBox_SelectInlineMathInner
|
||||
\ :<C-U>call <SID>SelectInlineMath('inner')<CR>
|
||||
vnoremap <silent> <Plug>LatexBox_SelectInlineMathOuter
|
||||
\ :<C-U>call <SID>SelectInlineMath('outer')<CR>
|
||||
" }}}
|
||||
|
||||
" select current environment {{{
|
||||
function! s:SelectCurrentEnv(seltype)
|
||||
let [env, lnum, cnum, lnum2, cnum2] = LatexBox_GetCurrentEnvironment(1)
|
||||
call cursor(lnum, cnum)
|
||||
if a:seltype == 'inner'
|
||||
if env =~ '^\'
|
||||
call search('\\.\_\s*\S', 'eW')
|
||||
else
|
||||
call search('}\(\_\s*\[\_[^]]*\]\)\?\_\s*\S', 'eW')
|
||||
endif
|
||||
endif
|
||||
if visualmode() ==# 'V'
|
||||
normal! V
|
||||
else
|
||||
normal! v
|
||||
endif
|
||||
call cursor(lnum2, cnum2)
|
||||
if a:seltype == 'inner'
|
||||
call search('\S\_\s*', 'bW')
|
||||
else
|
||||
if env =~ '^\'
|
||||
normal! l
|
||||
else
|
||||
call search('}', 'eW')
|
||||
endif
|
||||
endif
|
||||
endfunction
|
||||
vnoremap <silent> <Plug>LatexBox_SelectCurrentEnvInner :<C-U>call <SID>SelectCurrentEnv('inner')<CR>
|
||||
vnoremap <silent> <Plug>LatexBox_SelectCurrentEnvOuter :<C-U>call <SID>SelectCurrentEnv('outer')<CR>
|
||||
" }}}
|
||||
|
||||
" Jump to the next braces {{{
|
||||
"
|
||||
function! LatexBox_JumpToNextBraces(backward)
|
||||
let flags = ''
|
||||
if a:backward
|
||||
normal h
|
||||
let flags .= 'b'
|
||||
else
|
||||
let flags .= 'c'
|
||||
endif
|
||||
if search('[][}{]', flags) > 0
|
||||
normal l
|
||||
endif
|
||||
let prev = strpart(getline('.'), col('.') - 2, 1)
|
||||
let next = strpart(getline('.'), col('.') - 1, 1)
|
||||
if next =~ '[]}]' && prev !~ '[][{}]'
|
||||
return "\<Right>"
|
||||
else
|
||||
return ''
|
||||
endif
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" Table of Contents {{{
|
||||
|
||||
" Special UTF-8 conversion
|
||||
function! s:ConvertBack(line)
|
||||
let line = a:line
|
||||
if exists('g:LatexBox_plaintext_toc')
|
||||
"
|
||||
" Substitute stuff like '\IeC{\"u}' to plain 'u'
|
||||
"
|
||||
let line = substitute(line, '\\IeC\s*{\\.\(.\)}', '\1', 'g')
|
||||
else
|
||||
"
|
||||
" Substitute stuff like '\IeC{\"u}' to corresponding unicode symbols
|
||||
"
|
||||
for [pat, symbol] in s:ConvBackPats
|
||||
let line = substitute(line, pat, symbol, 'g')
|
||||
endfor
|
||||
endif
|
||||
return line
|
||||
endfunction
|
||||
|
||||
function! s:ReadTOC(auxfile, texfile, ...)
|
||||
let texfile = a:texfile
|
||||
let prefix = fnamemodify(a:auxfile, ':p:h')
|
||||
|
||||
if a:0 != 2
|
||||
let toc = []
|
||||
let fileindices = { texfile : [] }
|
||||
else
|
||||
let toc = a:1
|
||||
let fileindices = a:2
|
||||
let fileindices[ texfile ] = []
|
||||
endif
|
||||
|
||||
for line in readfile(a:auxfile)
|
||||
let included = matchstr(line, '^\\@input{\zs[^}]*\ze}')
|
||||
if included != ''
|
||||
" append the input TOX to `toc` and `fileindices`
|
||||
let newaux = prefix . '/' . included
|
||||
let newtex = fnamemodify(newaux, ':r') . '.tex'
|
||||
call s:ReadTOC(newaux, newtex, toc, fileindices)
|
||||
continue
|
||||
endif
|
||||
|
||||
" Parse statements like:
|
||||
" \@writefile{toc}{\contentsline {section}{\numberline {secnum}Section Title}{pagenumber}}
|
||||
" \@writefile{toc}{\contentsline {section}{\tocsection {}{1}{Section Title}}{pagenumber}}
|
||||
" \@writefile{toc}{\contentsline {section}{\numberline {secnum}Section Title}{pagenumber}{otherstuff}}
|
||||
|
||||
let line = matchstr(line,
|
||||
\ '\\@writefile{toc}{\\contentsline\s*\zs.*\ze}\s*$')
|
||||
if empty(line)
|
||||
continue
|
||||
endif
|
||||
|
||||
let tree = LatexBox_TexToTree(s:ConvertBack(line))
|
||||
|
||||
if len(tree) < 3
|
||||
" unknown entry type: just skip it
|
||||
continue
|
||||
endif
|
||||
|
||||
" parse level
|
||||
let level = tree[0][0]
|
||||
" parse page
|
||||
if !empty(tree[2])
|
||||
let page = tree[2][0]
|
||||
else
|
||||
let page = ''
|
||||
endif
|
||||
" parse section number
|
||||
let secnum = ''
|
||||
if len(tree[1]) > 3 && empty(tree[1][1])
|
||||
call remove(tree[1], 1)
|
||||
endif
|
||||
if len(tree[1]) > 1 && tree[1][0] =~ '\(numberline\|tocsection\)'
|
||||
if !empty(tree[1][1])
|
||||
let secnum = LatexBox_TreeToTex(tree[1][1])
|
||||
let secnum = substitute(secnum, '\\\S\+\s', '', 'g')
|
||||
let secnum = substitute(secnum, '\\\S\+{\(.\{-}\)}', '\1', 'g')
|
||||
let secnum = substitute(secnum, '^{\+\|}\+$', '', 'g')
|
||||
endif
|
||||
let tree = tree[1][2:]
|
||||
else
|
||||
let tree = tree[1]
|
||||
endif
|
||||
" parse section title
|
||||
let text = LatexBox_TreeToTex(tree)
|
||||
let text = substitute(text, '^{\+\|}\+$', '', 'g')
|
||||
let text = substitute(text, '\*', '', 'g')
|
||||
|
||||
" add TOC entry
|
||||
call add(fileindices[texfile], len(toc))
|
||||
call add(toc, {'file': texfile,
|
||||
\ 'level': level,
|
||||
\ 'number': secnum,
|
||||
\ 'text': text,
|
||||
\ 'page': page})
|
||||
endfor
|
||||
|
||||
return [toc, fileindices]
|
||||
|
||||
endfunction
|
||||
|
||||
function! LatexBox_TOC(...)
|
||||
|
||||
" Check if window already exists
|
||||
let winnr = bufwinnr(bufnr('LaTeX TOC'))
|
||||
if winnr >= 0
|
||||
if a:0 == 0
|
||||
silent execute winnr . 'wincmd w'
|
||||
else
|
||||
" Supplying an argument to this function causes toggling instead
|
||||
" of jumping to the TOC window
|
||||
if g:LatexBox_split_resize
|
||||
silent exe "set columns-=" . g:LatexBox_split_width
|
||||
endif
|
||||
silent execute 'bwipeout' . bufnr('LaTeX TOC')
|
||||
endif
|
||||
return
|
||||
endif
|
||||
|
||||
" Read TOC
|
||||
let [toc, fileindices] = s:ReadTOC(LatexBox_GetAuxFile(),
|
||||
\ LatexBox_GetMainTexFile())
|
||||
let calling_buf = bufnr('%')
|
||||
|
||||
" Find closest section in current buffer
|
||||
let closest_index = s:FindClosestSection(toc,fileindices)
|
||||
|
||||
" Create TOC window and set local settings
|
||||
if g:LatexBox_split_resize
|
||||
silent exe "set columns+=" . g:LatexBox_split_width
|
||||
endif
|
||||
silent exe g:LatexBox_split_side g:LatexBox_split_width . 'vnew LaTeX\ TOC'
|
||||
let b:toc = toc
|
||||
let b:toc_numbers = 1
|
||||
let b:calling_win = bufwinnr(calling_buf)
|
||||
setlocal filetype=latextoc
|
||||
|
||||
" Add TOC entries and jump to the closest section
|
||||
for entry in toc
|
||||
call append('$', entry['number'] . "\t" . entry['text'])
|
||||
endfor
|
||||
if !g:LatexBox_toc_hidehelp
|
||||
call append('$', "")
|
||||
call append('$', "<Esc>/q: close")
|
||||
call append('$', "<Space>: jump")
|
||||
call append('$', "<Enter>: jump and close")
|
||||
call append('$', "s: hide numbering")
|
||||
endif
|
||||
0delete _
|
||||
|
||||
execute 'normal! ' . (closest_index + 1) . 'G'
|
||||
|
||||
" Lock buffer
|
||||
setlocal nomodifiable
|
||||
endfunction
|
||||
|
||||
" Binary search for the closest section
|
||||
" return the index of the TOC entry
|
||||
function! s:FindClosestSection(toc, fileindices)
|
||||
let file = expand('%:p')
|
||||
if !has_key(a:fileindices, file)
|
||||
return 0
|
||||
endif
|
||||
|
||||
let imax = len(a:fileindices[file])
|
||||
if imax > 0
|
||||
let imin = 0
|
||||
while imin < imax - 1
|
||||
let i = (imax + imin) / 2
|
||||
let tocindex = a:fileindices[file][i]
|
||||
let entry = a:toc[tocindex]
|
||||
let titlestr = entry['text']
|
||||
let titlestr = escape(titlestr, '\')
|
||||
let titlestr = substitute(titlestr, ' ', '\\_\\s\\+', 'g')
|
||||
let [lnum, cnum] = searchpos('\\' . entry['level'] . '\_\s*{' . titlestr . '}', 'nW')
|
||||
if lnum
|
||||
let imax = i
|
||||
else
|
||||
let imin = i
|
||||
endif
|
||||
endwhile
|
||||
return a:fileindices[file][imin]
|
||||
else
|
||||
return 0
|
||||
endif
|
||||
endfunction
|
||||
|
||||
let s:ConvBackPats = map([
|
||||
\ ['\\''A}' , 'Á'],
|
||||
\ ['\\`A}' , 'À'],
|
||||
\ ['\\^A}' , 'À'],
|
||||
\ ['\\¨A}' , 'Ä'],
|
||||
\ ['\\"A}' , 'Ä'],
|
||||
\ ['\\''a}' , 'á'],
|
||||
\ ['\\`a}' , 'à'],
|
||||
\ ['\\^a}' , 'à'],
|
||||
\ ['\\¨a}' , 'ä'],
|
||||
\ ['\\"a}' , 'ä'],
|
||||
\ ['\\''E}' , 'É'],
|
||||
\ ['\\`E}' , 'È'],
|
||||
\ ['\\^E}' , 'Ê'],
|
||||
\ ['\\¨E}' , 'Ë'],
|
||||
\ ['\\"E}' , 'Ë'],
|
||||
\ ['\\''e}' , 'é'],
|
||||
\ ['\\`e}' , 'è'],
|
||||
\ ['\\^e}' , 'ê'],
|
||||
\ ['\\¨e}' , 'ë'],
|
||||
\ ['\\"e}' , 'ë'],
|
||||
\ ['\\''I}' , 'Í'],
|
||||
\ ['\\`I}' , 'Î'],
|
||||
\ ['\\^I}' , 'Ì'],
|
||||
\ ['\\¨I}' , 'Ï'],
|
||||
\ ['\\"I}' , 'Ï'],
|
||||
\ ['\\''i}' , 'í'],
|
||||
\ ['\\`i}' , 'î'],
|
||||
\ ['\\^i}' , 'ì'],
|
||||
\ ['\\¨i}' , 'ï'],
|
||||
\ ['\\"i}' , 'ï'],
|
||||
\ ['\\''{\?\\i }' , 'í'],
|
||||
\ ['\\''O}' , 'Ó'],
|
||||
\ ['\\`O}' , 'Ò'],
|
||||
\ ['\\^O}' , 'Ô'],
|
||||
\ ['\\¨O}' , 'Ö'],
|
||||
\ ['\\"O}' , 'Ö'],
|
||||
\ ['\\''o}' , 'ó'],
|
||||
\ ['\\`o}' , 'ò'],
|
||||
\ ['\\^o}' , 'ô'],
|
||||
\ ['\\¨o}' , 'ö'],
|
||||
\ ['\\"o}' , 'ö'],
|
||||
\ ['\\''U}' , 'Ú'],
|
||||
\ ['\\`U}' , 'Ù'],
|
||||
\ ['\\^U}' , 'Û'],
|
||||
\ ['\\¨U}' , 'Ü'],
|
||||
\ ['\\"U}' , 'Ü'],
|
||||
\ ['\\''u}' , 'ú'],
|
||||
\ ['\\`u}' , 'ù'],
|
||||
\ ['\\^u}' , 'û'],
|
||||
\ ['\\¨u}' , 'ü'],
|
||||
\ ['\\"u}' , 'ü'],
|
||||
\ ['\\`N}' , 'Ǹ'],
|
||||
\ ['\\\~N}' , 'Ñ'],
|
||||
\ ['\\''n}' , 'ń'],
|
||||
\ ['\\`n}' , 'ǹ'],
|
||||
\ ['\\\~n}' , 'ñ'],
|
||||
\], '[''\C\(\\IeC\s*{\)\?'' . v:val[0], v:val[1]]')
|
||||
" }}}
|
||||
|
||||
" TOC Command {{{
|
||||
command! LatexTOC call LatexBox_TOC()
|
||||
command! LatexTOCToggle call LatexBox_TOC(1)
|
||||
" }}}
|
||||
|
||||
" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
|
||||
@@ -1,265 +0,0 @@
|
||||
"=============================================================================
|
||||
" File: bibtex.vim
|
||||
" Function: BibT
|
||||
" Author: Alan G Isaac <aisaac@american.edu>
|
||||
" modified by Srinath Avadhanula for latex-suite.
|
||||
" License: Vim Charityware license.
|
||||
"=============================================================================
|
||||
|
||||
" Fields:
|
||||
" Define what field type each letter denotes {{{
|
||||
"
|
||||
let s:w_standsfor = 'address'
|
||||
let s:a_standsfor = 'author'
|
||||
let s:b_standsfor = 'booktitle'
|
||||
let s:c_standsfor = 'chapter'
|
||||
let s:d_standsfor = 'edition'
|
||||
let s:e_standsfor = 'editor'
|
||||
let s:h_standsfor = 'howpublished'
|
||||
let s:i_standsfor = 'institution'
|
||||
let s:k_standsfor = 'isbn'
|
||||
let s:j_standsfor = 'journal'
|
||||
let s:m_standsfor = 'month'
|
||||
let s:n_standsfor = 'number'
|
||||
let s:o_standsfor = 'organization'
|
||||
let s:p_standsfor = 'pages'
|
||||
let s:q_standsfor = 'publisher'
|
||||
let s:r_standsfor = 'school'
|
||||
let s:s_standsfor = 'series'
|
||||
let s:t_standsfor = 'title'
|
||||
let s:u_standsfor = 'type'
|
||||
let s:v_standsfor = 'volume'
|
||||
let s:y_standsfor = 'year'
|
||||
let s:z_standsfor = 'note'
|
||||
|
||||
" }}}
|
||||
" Define the fields required for the various entry types {{{
|
||||
"
|
||||
" s:{type}_required defines the required fields
|
||||
" s:{type}_optional1 defines common optional fields
|
||||
" s:{type}_optional2 defines uncommmon optional fields
|
||||
" s:{type}_retval defines the first line of the formatted bib entry.
|
||||
"
|
||||
let s:key='<+key+>'
|
||||
|
||||
let s:{'article'}_required="atjy"
|
||||
let s:{'article'}_optional1="vnpm"
|
||||
let s:{'article'}_optional2="z" " z is note
|
||||
let s:{'article'}_retval = '@ARTICLE{' . s:key . ','."\n"
|
||||
|
||||
let s:{'book'}_required="aetqy" " requires author *or* editor
|
||||
let s:{'book'}_optional1="wd"
|
||||
let s:{'book'}_optional2="vnsmz" " w is address, d is edition
|
||||
let s:{'book'}_extras="k" " isbn
|
||||
let s:{'book'}_retval = '@BOOK{' . s:key . ','."\n"
|
||||
|
||||
let s:{'booklet'}_required="t"
|
||||
let s:{'booklet'}_optional1="ahy"
|
||||
let s:{'booklet'}_optional2="wmz" " w is address
|
||||
let s:{'booklet'}_retval = '@BOOKLET{' . s:key . ','."\n"
|
||||
|
||||
let s:{'inbook'}_required="aetcpqy"
|
||||
let s:{'inbook'}_optional1="w" " w is address
|
||||
let s:{'inbook'}_optional2="vnsudmz" " d is edition
|
||||
let s:{'inbook'}_extras="k" " isbn
|
||||
let s:{'inbook'}_retval = '@INBOOK{' . s:key . ','."\n"
|
||||
|
||||
let s:{'incollection'}_required="atbqy" " b is booktitle
|
||||
let s:{'incollection'}_optional1="cpw" " w is address, c is chapter
|
||||
let s:{'incollection'}_optional2="evnsudmz" " d is edition
|
||||
let s:{'incollection'}_extras="k" " isbn
|
||||
let s:{'incollection'}_retval = '@INCOLLECTION{' . s:key . ','."\n"
|
||||
|
||||
let s:{'inproceedings'}_required="atby" " b is booktitle
|
||||
let s:{'inproceedings'}_optional1="epwoq" " w is address, q is publisher
|
||||
let s:{'inproceedings'}_optional2="vnsmz"
|
||||
let s:{'inproceedings'}_extras="k" " isbn
|
||||
let s:{'inproceedings'}_retval = '@INPROCEEDINGS{' . s:key . ','."\n"
|
||||
|
||||
let s:{'conference'}_required="atby" " b is booktitle
|
||||
let s:{'conference'}_optional1="epwoq" " w is address, q is publisher
|
||||
let s:{'conference'}_optional2="vnsmz"
|
||||
let s:{'conference'}_extras="k" " isbn
|
||||
let s:{'conference'}_retval = '@CONFERENCE{' . s:key . ','."\n"
|
||||
|
||||
let s:{'manual'}_required="t"
|
||||
let s:{'manual'}_optional1="ow"
|
||||
let s:{'manual'}_optional2="admyz" " w is address
|
||||
let s:{'manual'}_retval = '@MANUAL{' . s:key . ','."\n"
|
||||
|
||||
let s:{'msthesis'}_required="atry" " r is school
|
||||
let s:{'msthesis'}_optional1="w" " w is address
|
||||
let s:{'msthesis'}_optional2="umz" " u is type, w is address
|
||||
let s:{'msthesis'}_retval = '@MASTERSTHESIS{' . s:key . ','."\n"
|
||||
|
||||
let s:{'misc'}_required=""
|
||||
let s:{'misc'}_optional1="ath"
|
||||
let s:{'misc'}_optional2="myz"
|
||||
let s:{'misc'}_retval = '@MISC{' . s:key . ','."\n"
|
||||
|
||||
let s:{'phdthesis'}_required="atry" " r is school
|
||||
let s:{'phdthesis'}_optional1="w" " w is address
|
||||
let s:{'phdthesis'}_optional2="umz" " u is type
|
||||
let s:{'phdthesis'}_retval = '@PHDTHESIS{' . s:key . ','."\n"
|
||||
|
||||
let s:{'proceedings'}_required="ty"
|
||||
let s:{'proceedings'}_optional1="ewo" " w is address
|
||||
let s:{'proceedings'}_optional2="vnsmqz" " q is publisher
|
||||
let s:{'proceedings'}_retval = '@PROCEEDINGS{' . s:key . ','."\n"
|
||||
|
||||
let s:{'techreport'}_required="atiy"
|
||||
let s:{'techreport'}_optional1="unw" " u is type, w is address
|
||||
let s:{'techreport'}_optional2="mz"
|
||||
let s:{'techreport'}_retval = '@TECHREPORT{' . s:key . ','."\n"
|
||||
|
||||
let s:{'unpublished'}_required="atz"
|
||||
let s:{'unpublished'}_optional1="y"
|
||||
let s:{'unpublished'}_optional2="m"
|
||||
let s:{'unpublished'}_retval = '@UNPUBLISHED{' . s:key . ','."\n"
|
||||
|
||||
" }}}
|
||||
|
||||
if exists('s:done')
|
||||
finish
|
||||
endif
|
||||
let s:done = 1
|
||||
|
||||
call IMAP ('BBB', "\<C-r>=BibT('', '', 0)\<CR>", 'bib')
|
||||
call IMAP ('BBL', "\<C-r>=BibT('', 'o', 0)\<CR>", 'bib')
|
||||
call IMAP ('BBH', "\<C-r>=BibT('', 'O', 0)\<CR>", 'bib')
|
||||
call IMAP ('BBX', "\<C-r>=BibT('', 'Ox', 0)\<CR>", 'bib')
|
||||
|
||||
" BibT: function to generate a formatted bibtex entry {{{
|
||||
" three sample usages:
|
||||
" :call BibT() will request type choice
|
||||
" :call BibT("article") preferred, provides most common fields
|
||||
" :call BibT("article","ox") more optional fields (o) and extras (x)
|
||||
"
|
||||
" Input Arguments:
|
||||
" type: is one of the types listed above. (this should be a complete name, not
|
||||
" the acronym).
|
||||
" options: a string containing 0 or more of the letters 'oOx'
|
||||
" where
|
||||
" o: include a bib entry with first set of options
|
||||
" O: include a bib entry with extended options
|
||||
" x: incude bib entry with extra options
|
||||
" prompt: whether the fields are asked to be filled on the command prompt or
|
||||
" whether place-holders are used. when prompt == 1, then comman line
|
||||
" questions are used.
|
||||
"
|
||||
" Returns:
|
||||
" a string containing a formatted bib entry
|
||||
function BibT(type, options, prompt)
|
||||
if a:type != ''
|
||||
let choosetype = a:type
|
||||
else
|
||||
let types =
|
||||
\ 'article'."\n".
|
||||
\ 'booklet'."\n".
|
||||
\ 'book'."\n".
|
||||
\ 'conference'."\n".
|
||||
\ 'inbook'."\n".
|
||||
\ 'incollection'."\n".
|
||||
\ 'inproceedings'."\n".
|
||||
\ 'manual'."\n".
|
||||
\ 'msthesis'."\n".
|
||||
\ 'misc'."\n".
|
||||
\ 'phdthesis'."\n".
|
||||
\ 'proceedings'."\n".
|
||||
\ 'techreport'."\n".
|
||||
\ 'unpublished'
|
||||
let choosetype = Tex_ChooseFromPrompt(
|
||||
\ "Choose the type of bibliographic entry: \n" .
|
||||
\ Tex_CreatePrompt(types, 3, "\n") .
|
||||
\ "\nEnter number or filename :",
|
||||
\ types, "\n")
|
||||
if choosetype == ''
|
||||
let choosetype = 'article'
|
||||
endif
|
||||
if types !~ '^\|\n'.choosetype.'$\|\n'
|
||||
echomsg 'Please choose only one of the given types'
|
||||
return
|
||||
endif
|
||||
endif
|
||||
if a:options != ''
|
||||
let options = a:options
|
||||
else
|
||||
let options = ""
|
||||
endif
|
||||
|
||||
let fields = ''
|
||||
let extras=""
|
||||
let retval = ""
|
||||
|
||||
" define fields
|
||||
let fields = s:{choosetype}_required
|
||||
if options =~ 'o' && exists('s:'.choosetype.'_optional1')
|
||||
let fields = fields . s:{choosetype}_optional1
|
||||
endif
|
||||
if options =~ "O" && exists('s:'.choosetype.'_optional2')
|
||||
if options !~ 'o'&& exists('s:'.choosetype.'_optional1')
|
||||
let fields = fields . s:{choosetype}_optional1
|
||||
endif
|
||||
let fields = fields . s:{choosetype}_optional2
|
||||
endif
|
||||
if options =~ "x" && exists('s:'.choosetype.'_extras')
|
||||
let fields = fields . extras
|
||||
endif
|
||||
if exists('g:Bib_'.choosetype.'_options')
|
||||
let fields = fields . g:Bib_{choosetype}_options
|
||||
endif
|
||||
|
||||
let retval = s:{choosetype}_retval
|
||||
|
||||
let i = 0
|
||||
while i < strlen(fields)
|
||||
let field = strpart(fields, i, 1)
|
||||
|
||||
if exists('s:'.field.'_standsfor')
|
||||
let field_name = s:{field}_standsfor
|
||||
let retval = retval.field_name." = {<++>},\n"
|
||||
endif
|
||||
|
||||
let i = i + 1
|
||||
endwhile
|
||||
|
||||
" If the user wants even more fine-tuning...
|
||||
if Tex_GetVarValue('Bib_'.choosetype.'_extrafields') != ''
|
||||
|
||||
let extrafields = Tex_GetVarValue('Bib_'.choosetype.'_extrafields')
|
||||
|
||||
let i = 1
|
||||
while 1
|
||||
let field_name = Tex_Strntok(extrafields, "\n", i)
|
||||
if field_name == ''
|
||||
break
|
||||
endif
|
||||
|
||||
let retval = retval.field_name." = {<++>},\n"
|
||||
|
||||
let i = i + 1
|
||||
endwhile
|
||||
|
||||
endif
|
||||
|
||||
let retval = retval.'otherinfo = {<++>}'."\n"
|
||||
let retval = retval."}<++>"."\n"
|
||||
|
||||
return IMAP_PutTextWithMovement(retval)
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
function! s:Input(prompt, ask) " {{{
|
||||
if a:ask == 1
|
||||
let retval = input(a:prompt)
|
||||
if retval == ''
|
||||
return "<++>"
|
||||
endif
|
||||
else
|
||||
return "<++>"
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
|
||||
" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
|
||||
@@ -1,144 +0,0 @@
|
||||
" ==============================================================================
|
||||
" History: This was originally part of auctex.vim by Carl Mueller.
|
||||
" Srinath Avadhanula incorporated it into latex-suite with
|
||||
" significant modifications.
|
||||
" Parts of this file may be copyrighted by others as noted.
|
||||
" Description:
|
||||
" This ftplugin provides the following maps:
|
||||
" . <M-b> encloses the previous character in \mathbf{}
|
||||
" . <M-c> is polymorphic as follows:
|
||||
" Insert mode:
|
||||
" 1. If the previous character is a letter or number, then capitalize it and
|
||||
" enclose it in \mathcal{}
|
||||
" 2. otherwise insert \cite{}
|
||||
" Visual Mode:
|
||||
" 1. Enclose selection in \mathcal{}
|
||||
" . <M-l> is also polymorphic as follows:
|
||||
" If the character before typing <M-l> is one of '([{|<q', then do the
|
||||
" following:
|
||||
" 1. (<M-l> \left(\right
|
||||
" similarly for [, |
|
||||
" {<M-l> \left\{\right\}
|
||||
" 2. <<M-l> \langle\rangle
|
||||
" 3. q<M-l> \lefteqn{}
|
||||
" otherwise insert \label{}
|
||||
" . <M-i> inserts \item commands at the current cursor location depending on
|
||||
" the surrounding environment. For example, inside itemize, it will
|
||||
" insert a simple \item, but within a description, it will insert
|
||||
" \item[<+label+>] etc.
|
||||
"
|
||||
" These functions make it extremeley easy to do all the \left \right stuff in
|
||||
" latex.
|
||||
" ==============================================================================
|
||||
|
||||
" Avoid reinclusion.
|
||||
if exists('b:did_brackets')
|
||||
finish
|
||||
endif
|
||||
let b:did_brackets = 1
|
||||
|
||||
" define the funtions only once.
|
||||
if exists('*Tex_MathBF')
|
||||
finish
|
||||
endif
|
||||
|
||||
" Tex_MathBF: encloses te previous letter/number in \mathbf{} {{{
|
||||
" Description:
|
||||
function! Tex_MathBF()
|
||||
return "\<Left>\\mathbf{\<Right>}"
|
||||
endfunction " }}}
|
||||
" Tex_MathCal: enclose the previous letter/number in \mathcal {{{
|
||||
" Description:
|
||||
" if the last character is not a letter/number, then insert \cite{}
|
||||
function! Tex_MathCal()
|
||||
let line = getline(line("."))
|
||||
let char = line[col(".")-2]
|
||||
|
||||
if char =~ '[a-zA-Z0-9]'
|
||||
return "\<BS>".'\mathcal{'.toupper(char).'}'
|
||||
else
|
||||
return IMAP_PutTextWithMovement('\cite{<++>}<++>')
|
||||
endif
|
||||
endfunction
|
||||
" }}}
|
||||
" Tex_LeftRight: maps <M-l> in insert mode. {{{
|
||||
" Description:
|
||||
" This is a polymorphic function, which maps the behaviour of <M-l> in the
|
||||
" following way:
|
||||
" If the character before typing <M-l> is one of '([{|<q', then do the
|
||||
" following:
|
||||
" 1. (<M-l> \left(<++>\right<++>
|
||||
" similarly for [, |
|
||||
" {<M-l> \left\{<++>\right\}<++>
|
||||
" 2. <<M-l> \langle<++>\rangle<++>
|
||||
" 3. q<M-l> \lefteqn{<++>}<++>
|
||||
" otherwise insert \label{<++>}<++>
|
||||
function! Tex_LeftRight()
|
||||
let line = getline(line("."))
|
||||
let char = line[col(".")-2]
|
||||
let previous = line[col(".")-3]
|
||||
|
||||
let matchedbrackets = '()[]{}||'
|
||||
if char =~ '(\|\[\|{\||'
|
||||
let add = ''
|
||||
if char =~ '{'
|
||||
let add = "\\"
|
||||
endif
|
||||
let rhs = matchstr(matchedbrackets, char.'\zs.\ze')
|
||||
return "\<BS>".IMAP_PutTextWithMovement('\left'.add.char.'<++>\right'.add.rhs.'<++>')
|
||||
elseif char == '<'
|
||||
return "\<BS>".IMAP_PutTextWithMovement('\langle <++>\rangle<++>')
|
||||
elseif char == 'q'
|
||||
return "\<BS>".IMAP_PutTextWithMovement('\lefteqn{<++>}<++>')
|
||||
else
|
||||
return IMAP_PutTextWithMovement('\label{<++>}<++>')
|
||||
endif
|
||||
endfunction " }}}
|
||||
" Tex_PutLeftRight: maps <M-l> in normal mode {{{
|
||||
" Description:
|
||||
" Put \left...\right in front of the matched brackets.
|
||||
function! Tex_PutLeftRight()
|
||||
let previous = getline(line("."))[col(".") - 2]
|
||||
let char = getline(line("."))[col(".") - 1]
|
||||
if previous == '\'
|
||||
if char == '{'
|
||||
exe "normal ileft\\\<Esc>l%iright\\\<Esc>l%"
|
||||
elseif char == '}'
|
||||
exe "normal iright\\\<Esc>l%ileft\\\<Esc>l%"
|
||||
endif
|
||||
elseif char =~ '\[\|('
|
||||
exe "normal i\\left\<Esc>l%i\\right\<Esc>l%"
|
||||
elseif char =~ '\]\|)'
|
||||
exe "normal i\\right\<Esc>l%i\\left\<Esc>l%"
|
||||
endif
|
||||
endfunction " }}}
|
||||
|
||||
" Provide <plug>'d mapping for easy user customization. {{{
|
||||
inoremap <silent> <Plug>Tex_MathBF <C-r>=Tex_MathBF()<CR>
|
||||
inoremap <silent> <Plug>Tex_MathCal <C-r>=Tex_MathCal()<CR>
|
||||
inoremap <silent> <Plug>Tex_LeftRight <C-r>=Tex_LeftRight()<CR>
|
||||
vnoremap <silent> <Plug>Tex_MathBF <C-C>`>a}<Esc>`<i\mathbf{<Esc>
|
||||
vnoremap <silent> <Plug>Tex_MathCal <C-C>`>a}<Esc>`<i\mathcal{<Esc>
|
||||
nnoremap <silent> <Plug>Tex_LeftRight :call Tex_PutLeftRight()<CR>
|
||||
|
||||
" }}}
|
||||
" Tex_SetBracketingMaps: create mappings for the current buffer {{{
|
||||
function! <SID>Tex_SetBracketingMaps()
|
||||
|
||||
call Tex_MakeMap('<M-b>', '<Plug>Tex_MathBF', 'i', '<buffer> <silent>')
|
||||
call Tex_MakeMap('<M-c>', '<Plug>Tex_MathCal', 'i', '<buffer> <silent>')
|
||||
call Tex_MakeMap('<M-l>', '<Plug>Tex_LeftRight', 'i', '<buffer> <silent>')
|
||||
call Tex_MakeMap('<M-b>', '<Plug>Tex_MathBF', 'v', '<buffer> <silent>')
|
||||
call Tex_MakeMap('<M-c>', '<Plug>Tex_MathCal', 'v', '<buffer> <silent>')
|
||||
call Tex_MakeMap('<M-l>', '<Plug>Tex_LeftRight', 'n', '<buffer> <silent>')
|
||||
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
augroup LatexSuite
|
||||
au LatexSuite User LatexSuiteFileType
|
||||
\ call Tex_Debug('brackets.vim: Catching LatexSuiteFileType event', 'brak') |
|
||||
\ call <SID>Tex_SetBracketingMaps()
|
||||
augroup END
|
||||
|
||||
" vim:fdm=marker
|
||||
@@ -1,874 +0,0 @@
|
||||
"=============================================================================
|
||||
" File: compiler.vim
|
||||
" Author: Srinath Avadhanula
|
||||
" Created: Tue Apr 23 05:00 PM 2002 PST
|
||||
"
|
||||
" Description: functions for compiling/viewing/searching latex documents
|
||||
"=============================================================================
|
||||
|
||||
" Tex_SetTeXCompilerTarget: sets the 'target' for the next call to Tex_RunLaTeX() {{{
|
||||
function! Tex_SetTeXCompilerTarget(type, target)
|
||||
call Tex_Debug("+Tex_SetTeXCompilerTarget: setting target to [".a:target."] for ".a:type."r", "comp")
|
||||
|
||||
if a:target == ''
|
||||
let target = Tex_GetVarValue('Tex_DefaultTargetFormat')
|
||||
let target = input('Enter the target format for '.a:type.'r: ', target)
|
||||
else
|
||||
let target = a:target
|
||||
endif
|
||||
if target == ''
|
||||
let target = 'dvi'
|
||||
endif
|
||||
|
||||
let targetRule = Tex_GetVarValue('Tex_'.a:type.'Rule_'.target)
|
||||
|
||||
if targetRule != ''
|
||||
if a:type == 'Compile'
|
||||
let &l:makeprg = escape(targetRule, Tex_GetVarValue('Tex_EscapeChars'))
|
||||
elseif a:type == 'View'
|
||||
let s:viewer = targetRule
|
||||
endif
|
||||
let s:target = target
|
||||
|
||||
elseif Tex_GetVarValue('Tex_'.a:type.'RuleComplete_'.target) != ''
|
||||
let s:target = target
|
||||
|
||||
elseif a:type == 'View' && has('macunix')
|
||||
" On the mac, we can have empty view rules, so do not complain when
|
||||
" both Tex_ViewRule_target and Tex_ViewRuleComplete_target are
|
||||
" empty. On other platforms, we will complain... see below.
|
||||
let s:target = target
|
||||
|
||||
else
|
||||
let s:origdir = fnameescape(getcwd())
|
||||
exe 'cd '.fnameescape(expand('%:p:h'))
|
||||
if !Tex_GetVarValue('Tex_UseMakefile') || (glob('makefile*') == '' && glob('Makefile*') == '')
|
||||
if has('gui_running')
|
||||
call confirm(
|
||||
\'No '.a:type.' rule defined for target '.target."\n".
|
||||
\'Please specify a rule in $VIMRUNTIME/ftplugin/tex/texrc'."\n".
|
||||
\' :help Tex_'.a:type.'Rule_format'."\n".
|
||||
\'for more information',
|
||||
\"&ok", 1, 'Warning')
|
||||
else
|
||||
call input(
|
||||
\'No '.a:type.' rule defined for target '.target."\n".
|
||||
\'Please specify a rule in $VIMRUNTIME/ftplugin/tex/texrc'."\n".
|
||||
\' :help Tex_'.a:type.'Rule_format'."\n".
|
||||
\'for more information'
|
||||
\)
|
||||
endif
|
||||
else
|
||||
echomsg 'Assuming target is for makefile'
|
||||
let s:target = target
|
||||
endif
|
||||
exe 'cd '.s:origdir
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! SetTeXTarget(...)
|
||||
if a:0 < 1
|
||||
let target = Tex_GetVarValue('Tex_DefaultTargetFormat')
|
||||
let target = input('Enter the target format for compiler and viewer: ', target)
|
||||
else
|
||||
let target = a:1
|
||||
endif
|
||||
if target == ''
|
||||
let target = 'dvi'
|
||||
endif
|
||||
|
||||
call Tex_SetTeXCompilerTarget('Compile', target)
|
||||
call Tex_SetTeXCompilerTarget('View', target)
|
||||
endfunction
|
||||
|
||||
com! -nargs=1 TCTarget :call Tex_SetTeXCompilerTarget('Compile', <f-args>)
|
||||
com! -nargs=1 TVTarget :call Tex_SetTeXCompilerTarget('View', <f-args>)
|
||||
com! -nargs=? TTarget :call SetTeXTarget(<f-args>)
|
||||
|
||||
" }}}
|
||||
" Tex_CompileLatex: compiles the present file. {{{
|
||||
" Description:
|
||||
function! Tex_CompileLatex()
|
||||
if &ft != 'tex'
|
||||
echo "calling Tex_RunLaTeX from a non-tex file"
|
||||
return
|
||||
end
|
||||
|
||||
" close any preview windows left open.
|
||||
pclose!
|
||||
|
||||
let s:origdir = fnameescape(getcwd())
|
||||
|
||||
" Find the main file corresponding to this file. Always cd to the
|
||||
" directory containing the file to avoid problems with the directory
|
||||
" containing spaces.
|
||||
" Latex on linux seems to be unable to handle file names with spaces at
|
||||
" all! Therefore for the moment, do not attempt to handle spaces in the
|
||||
" file name.
|
||||
if exists('b:fragmentFile')
|
||||
let mainfname = expand('%:p:t')
|
||||
call Tex_CD(expand('%:p:h'))
|
||||
else
|
||||
let mainfname = Tex_GetMainFileName(':p:t')
|
||||
call Tex_CD(Tex_GetMainFileName(':p:h'))
|
||||
end
|
||||
|
||||
call Tex_Debug('Tex_CompileLatex: getting mainfname = ['.mainfname.'] from Tex_GetMainFileName', 'comp')
|
||||
|
||||
" if a makefile exists and the user wants to use it, then use that
|
||||
" irrespective of whether *.latexmain exists or not. mainfname is still
|
||||
" extracted from *.latexmain (if possible) log file name depends on the
|
||||
" main file which will be compiled.
|
||||
if Tex_GetVarValue('Tex_UseMakefile') && (glob('makefile') != '' || glob('Makefile') != '')
|
||||
let _makeprg = &l:makeprg
|
||||
call Tex_Debug("Tex_CompileLatex: using the makefile in the current directory", "comp")
|
||||
let &l:makeprg = 'make $*'
|
||||
if exists('s:target')
|
||||
call Tex_Debug('Tex_CompileLatex: execing [make! '.s:target.']', 'comp')
|
||||
exec 'make! '.s:target
|
||||
else
|
||||
call Tex_Debug('Tex_CompileLatex: execing [make!]', 'comp')
|
||||
exec 'make!'
|
||||
endif
|
||||
let &l:makeprg = _makeprg
|
||||
else
|
||||
" If &makeprg has something like "$*.ps", it means that it wants the
|
||||
" file-name without the extension... Therefore remove it.
|
||||
if &makeprg =~ '\$\*\.\w\+'
|
||||
let mainfname = fnamemodify(mainfname, ':r')
|
||||
endif
|
||||
call Tex_Debug('Tex_CompileLatex: execing [make! '.mainfname.']', 'comp')
|
||||
exec 'make! '.mainfname
|
||||
endif
|
||||
redraw!
|
||||
|
||||
exe 'cd '.s:origdir
|
||||
endfunction " }}}
|
||||
" Tex_RunLaTeX: compilation function {{{
|
||||
" this function runs the latex command on the currently open file. often times
|
||||
" the file being currently edited is only a fragment being \input'ed into some
|
||||
" master tex file. in this case, make a file called mainfile.latexmain in the
|
||||
" directory containig the file. in other words, if the current file is
|
||||
" ~/thesis/chapter.tex
|
||||
" so that doing "latex chapter.tex" doesnt make sense, then make a file called
|
||||
" main.tex.latexmain
|
||||
" in the ~/thesis directory. this will then run "latex main.tex" when
|
||||
" Tex_RunLaTeX() is called.
|
||||
function! Tex_RunLaTeX()
|
||||
call Tex_Debug('+Tex_RunLaTeX, b:fragmentFile = '.exists('b:fragmentFile'), 'comp')
|
||||
|
||||
let dir = expand("%:p:h").'/'
|
||||
let s:origdir = fnameescape(getcwd())
|
||||
call Tex_CD(expand("%:p:h"))
|
||||
|
||||
let initTarget = s:target
|
||||
|
||||
" first get the dependency chain of this format.
|
||||
call Tex_Debug("Tex_RunLaTeX: compiling to target [".s:target."]", "comp")
|
||||
|
||||
if Tex_GetVarValue('Tex_FormatDependency_'.s:target) != ''
|
||||
let dependency = Tex_GetVarValue('Tex_FormatDependency_'.s:target)
|
||||
if dependency !~ ','.s:target.'$'
|
||||
let dependency = dependency.','.s:target
|
||||
endif
|
||||
else
|
||||
let dependency = s:target
|
||||
endif
|
||||
|
||||
call Tex_Debug('Tex_RunLaTeX: getting dependency chain = ['.dependency.']', 'comp')
|
||||
|
||||
" now compile to the final target format via each dependency.
|
||||
let i = 1
|
||||
while Tex_Strntok(dependency, ',', i) != ''
|
||||
let s:target = Tex_Strntok(dependency, ',', i)
|
||||
|
||||
call Tex_SetTeXCompilerTarget('Compile', s:target)
|
||||
call Tex_Debug('Tex_RunLaTeX: setting target to '.s:target, 'comp')
|
||||
|
||||
if Tex_GetVarValue('Tex_MultipleCompileFormats') =~ '\<'.s:target.'\>'
|
||||
call Tex_Debug("Tex_RunLaTeX: compiling file multiple times via Tex_CompileMultipleTimes", "comp")
|
||||
call Tex_CompileMultipleTimes()
|
||||
else
|
||||
call Tex_Debug("Tex_RunLaTeX: compiling file once via Tex_CompileLatex", "comp")
|
||||
call Tex_CompileLatex()
|
||||
endif
|
||||
|
||||
let errlist = Tex_GetErrorList()
|
||||
call Tex_Debug("Tex_RunLaTeX: errlist = [".errlist."]", "comp")
|
||||
|
||||
" If there are any errors, then break from the rest of the steps
|
||||
if errlist =~ '\v(error|warning)'
|
||||
call Tex_Debug('Tex_RunLaTeX: There were errors in compiling, breaking chain...', 'comp')
|
||||
break
|
||||
endif
|
||||
|
||||
let i = i + 1
|
||||
endwhile
|
||||
|
||||
let s:target = initTarget
|
||||
let s:origwinnum = winnr()
|
||||
call Tex_SetupErrorWindow()
|
||||
|
||||
exe 'cd '.s:origdir
|
||||
call Tex_Debug("-Tex_RunLaTeX", "comp")
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
" Tex_ViewLaTeX: opens viewer {{{
|
||||
" Description: opens the DVI viewer for the file being currently edited.
|
||||
" Again, if the current file is a \input in a master file, see text above
|
||||
" Tex_RunLaTeX() to see how to set this information.
|
||||
function! Tex_ViewLaTeX()
|
||||
if &ft != 'tex'
|
||||
echo "calling Tex_ViewLaTeX from a non-tex file"
|
||||
return
|
||||
end
|
||||
|
||||
let s:origdir = fnameescape(getcwd())
|
||||
|
||||
" If b:fragmentFile is set, it means this file was compiled as a fragment
|
||||
" using Tex_PartCompile, which means that we want to ignore any
|
||||
" *.latexmain or makefile's.
|
||||
if !exists('b:fragmentFile')
|
||||
" cd to the location of the file to avoid having to deal with spaces
|
||||
" in the directory name.
|
||||
let mainfname = Tex_GetMainFileName(':p:t:r')
|
||||
call Tex_CD(Tex_GetMainFileName(':p:h'))
|
||||
else
|
||||
let mainfname = expand("%:p:t:r")
|
||||
call Tex_CD(expand("%:p:h"))
|
||||
endif
|
||||
|
||||
if Tex_GetVarValue('Tex_ViewRuleComplete_'.s:target) != ''
|
||||
|
||||
let execString = Tex_GetVarValue('Tex_ViewRuleComplete_'.s:target)
|
||||
let execString = substitute(execString, '{v:servername}', v:servername, 'g')
|
||||
|
||||
elseif has('win32')
|
||||
" unfortunately, yap does not allow the specification of an external
|
||||
" editor from the command line. that would have really helped ensure
|
||||
" that this particular vim and yap are connected.
|
||||
let execString = 'start '.s:viewer.' "$*.'.s:target.'"'
|
||||
|
||||
elseif (has('macunix') && Tex_GetVarValue('Tex_TreatMacViewerAsUNIX') != 1)
|
||||
|
||||
if strlen(s:viewer)
|
||||
let appOpt = '-a '
|
||||
else
|
||||
let appOpt = ''
|
||||
endif
|
||||
let execString = 'open '.appOpt.s:viewer.' $*.'.s:target
|
||||
|
||||
else
|
||||
" taken from Dimitri Antoniou's tip on vim.sf.net (tip #225).
|
||||
" slight change to actually use the current servername instead of
|
||||
" hardcoding it as xdvi.
|
||||
" Using an option for specifying the editor in the command line
|
||||
" because that seems to not work on older bash'es.
|
||||
if s:target == 'dvi'
|
||||
|
||||
if Tex_GetVarValue('Tex_UseEditorSettingInDVIViewer') == 1 &&
|
||||
\ v:servername != '' &&
|
||||
\ s:viewer =~ '^ *xdvik\?\( \|$\)'
|
||||
|
||||
let execString = s:viewer.' -editor "gvim --servername '.v:servername.
|
||||
\ ' --remote-silent +\%l \%f" $*.dvi'
|
||||
|
||||
elseif Tex_GetVarValue('Tex_UseEditorSettingInDVIViewer') == 1 &&
|
||||
\ s:viewer =~ '^ *kdvi\( \|$\)'
|
||||
|
||||
let execString = s:viewer.' --unique $*.dvi'
|
||||
|
||||
else
|
||||
|
||||
let execString = s:viewer.' $*.dvi'
|
||||
|
||||
endif
|
||||
|
||||
else
|
||||
|
||||
let execString = s:viewer.' $*.'.s:target
|
||||
|
||||
endif
|
||||
|
||||
if( Tex_GetVarValue('Tex_ExecuteUNIXViewerInForeground') != 1 )
|
||||
let execString = execString.' &'
|
||||
endif
|
||||
|
||||
end
|
||||
|
||||
let execString = substitute(execString, '\V$*', mainfname, 'g')
|
||||
call Tex_Debug("Tex_ViewLaTeX: execString = ".execString, "comp")
|
||||
|
||||
exec 'silent! !'.execString
|
||||
|
||||
if !has('gui_running')
|
||||
redraw!
|
||||
endif
|
||||
|
||||
exe 'cd '.s:origdir
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
" Tex_ForwardSearchLaTeX: searches for current location in dvi file. {{{
|
||||
" Description: if the DVI viewer is compatible, then take the viewer to that
|
||||
" position in the dvi file. see docs for Tex_RunLaTeX() to set a
|
||||
" master file if this is an \input'ed file.
|
||||
" Tip: With YAP on Windows, it is possible to do forward and inverse searches
|
||||
" on DVI files. to do forward search, you'll have to compile the file
|
||||
" with the --src-specials option. then set the following as the command
|
||||
" line in the 'view/options/inverse search' dialog box:
|
||||
" gvim --servername LATEX --remote-silent +%l "%f"
|
||||
" For inverse search, if you are reading this, then just pressing \ls
|
||||
" will work.
|
||||
function! Tex_ForwardSearchLaTeX()
|
||||
if &ft != 'tex'
|
||||
echo "calling Tex_ForwardSeachLaTeX from a non-tex file"
|
||||
return
|
||||
end
|
||||
|
||||
if Tex_GetVarValue('Tex_ViewRule_'.s:target) == ''
|
||||
return
|
||||
endif
|
||||
let viewer = Tex_GetVarValue('Tex_ViewRule_'.s:target)
|
||||
|
||||
let s:origdir = fnameescape(getcwd())
|
||||
|
||||
let mainfname = Tex_GetMainFileName(':t')
|
||||
let mainfnameRoot = fnamemodify(Tex_GetMainFileName(), ':t:r')
|
||||
let mainfnameFull = Tex_GetMainFileName(':p:r')
|
||||
" cd to the location of the file to avoid problems with directory name
|
||||
" containing spaces.
|
||||
call Tex_CD(Tex_GetMainFileName(':p:h'))
|
||||
|
||||
" inverse search tips taken from Dimitri Antoniou's tip and Benji Fisher's
|
||||
" tips on vim.sf.net (vim.sf.net tip #225)
|
||||
if (has('win32') && (viewer =~? '^ *yap\( \|$\)'))
|
||||
|
||||
let execString = 'silent! !start '. viewer.' -s '.line('.').expand('%').' '.mainfnameRoot
|
||||
|
||||
|
||||
elseif (has('macunix') && (viewer =~ '^ *\(Skim\|PDFView\|TeXniscope\)\( \|$\)'))
|
||||
" We're on a Mac using a traditional Mac viewer
|
||||
|
||||
if viewer =~ '^ *Skim'
|
||||
|
||||
let execString = 'silent! !/Applications/Skim.app/Contents/SharedSupport/displayline '.
|
||||
\ line('.').' "'.mainfnameFull.'.'.s:target.'" "'.expand("%:p").'"'
|
||||
|
||||
elseif viewer =~ '^ *PDFView'
|
||||
|
||||
let execString = 'silent! !/Applications/PDFView.app/Contents/MacOS/gotoline.sh '.
|
||||
\ line('.').' "'.mainfnameFull.'.'.s:target.'" "'.expand("%:p").'"'
|
||||
|
||||
elseif viewer =~ '^ *TeXniscope'
|
||||
|
||||
let execString = 'silent! !/Applications/TeXniscope.app/Contents/Resources/forward-search.sh '.
|
||||
\ line('.').' "'.expand("%:p").'" "'.mainfnameFull.'.'.s:target.'"'
|
||||
|
||||
endif
|
||||
|
||||
else
|
||||
" We're either UNIX or Mac and using a UNIX-type viewer
|
||||
|
||||
" Check for the special DVI viewers first
|
||||
if viewer =~ '^ *\(xdvi\|xdvik\|kdvi\|okular\)\( \|$\)'
|
||||
|
||||
if Tex_GetVarValue('Tex_UseEditorSettingInDVIViewer') == 1 &&
|
||||
\ exists('v:servername') &&
|
||||
\ viewer =~ '^ *xdvik\?\( \|$\)'
|
||||
|
||||
let execString = 'silent! !'.viewer.' -name xdvi -sourceposition "'.line('.').' '.expand("%").'"'.
|
||||
\ ' -editor "gvim --servername '.v:servername.' --remote-silent +\%l \%f" '.
|
||||
\ mainfnameRoot.'.dvi'
|
||||
|
||||
elseif viewer =~ '^ *kdvi'
|
||||
|
||||
let execString = 'silent! !'.viewer.' --unique file:'.mainfnameRoot.'.dvi\#src:'.line('.').expand("%")
|
||||
|
||||
elseif viewer =~ '^ *xdvik\?\( \|$\)'
|
||||
|
||||
let execString = 'silent! !'.viewer.' -name xdvi -sourceposition "'.line('.').' '.expand("%").'" '.mainfnameRoot.'.dvi'
|
||||
|
||||
elseif viewer =~ '^ *okular'
|
||||
|
||||
let execString = 'silent! !'.viewer.' --unique '.mainfnameRoot.'.'.s:target.'\#src:'.line('.').expand("%:p")
|
||||
|
||||
endif
|
||||
|
||||
else
|
||||
" We must be using a generic UNIX viewer
|
||||
" syntax is: viewer TARGET_FILE LINE_NUMBER SOURCE_FILE
|
||||
|
||||
let execString = 'silent! !'.viewer.' "'.mainfnameRoot.'.'.s:target.'" '.line('.').' "'.expand('%').'"'
|
||||
|
||||
endif
|
||||
|
||||
" See if we should add &. On Mac (at least in MacVim), it seems
|
||||
" like this should NOT be added...
|
||||
if( Tex_GetVarValue('Tex_ExecuteUNIXViewerInForeground') != 1 )
|
||||
let execString = execString.' &'
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
call Tex_Debug("Tex_ForwardSearchLaTeX: execString = ".execString, "comp")
|
||||
execute execString
|
||||
if !has('gui_running')
|
||||
redraw!
|
||||
endif
|
||||
|
||||
exe 'cd '.s:origdir
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
|
||||
" ==============================================================================
|
||||
" Functions for compiling parts of a file.
|
||||
" ==============================================================================
|
||||
" Tex_PartCompile: compiles selected fragment {{{
|
||||
" Description: creates a temporary file from the selected fragment of text
|
||||
" prepending the preamble and \end{document} and then asks Tex_RunLaTeX() to
|
||||
" compile it.
|
||||
function! Tex_PartCompile() range
|
||||
call Tex_Debug('+Tex_PartCompile', 'comp')
|
||||
|
||||
" Get a temporary file in the same directory as the file from which
|
||||
" fragment is being extracted. This is to enable the use of relative path
|
||||
" names in the fragment.
|
||||
let tmpfile = Tex_GetTempName(expand('%:p:h'))
|
||||
|
||||
" Remember all the temp files and for each temp file created, remember
|
||||
" where the temp file came from.
|
||||
let s:Tex_NumTempFiles = (exists('s:Tex_NumTempFiles') ? s:Tex_NumTempFiles + 1 : 1)
|
||||
let s:Tex_TempFiles = (exists('s:Tex_TempFiles') ? s:Tex_TempFiles : '')
|
||||
\ . tmpfile."\n"
|
||||
let s:Tex_TempFile_{s:Tex_NumTempFiles} = tmpfile
|
||||
" TODO: For a function Tex_RestoreFragment which restores a temp file to
|
||||
" its original location.
|
||||
let s:Tex_TempFileOrig_{s:Tex_NumTempFiles} = expand('%:p')
|
||||
let s:Tex_TempFileRange_{s:Tex_NumTempFiles} = a:firstline.','.a:lastline
|
||||
|
||||
" Set up an autocmd to clean up the temp files when Vim exits.
|
||||
if Tex_GetVarValue('Tex_RemoveTempFiles')
|
||||
augroup RemoveTmpFiles
|
||||
au!
|
||||
au VimLeave * :call Tex_RemoveTempFiles()
|
||||
augroup END
|
||||
endif
|
||||
|
||||
" If mainfile exists open it in tiny window and extract preamble there,
|
||||
" otherwise do it from current file
|
||||
let mainfile = Tex_GetMainFileName(":p")
|
||||
exe 'bot 1 split '.escape(mainfile, ' ')
|
||||
exe '1,/\s*\\begin{document}/w '.tmpfile
|
||||
wincmd q
|
||||
|
||||
exe a:firstline.','.a:lastline."w! >> ".tmpfile
|
||||
|
||||
" edit the temporary file
|
||||
exec 'drop '.tmpfile
|
||||
|
||||
" append the \end{document} line.
|
||||
$ put ='\end{document}'
|
||||
w
|
||||
|
||||
" set this as a fragment file.
|
||||
let b:fragmentFile = 1
|
||||
|
||||
silent! call Tex_RunLaTeX()
|
||||
endfunction " }}}
|
||||
" Tex_RemoveTempFiles: cleans up temporary files created during part compilation {{{
|
||||
" Description: During part compilation, temporary files containing the
|
||||
" visually selected text are created. These files need to be
|
||||
" removed when Vim exits to avoid "file leakage".
|
||||
function! Tex_RemoveTempFiles()
|
||||
if !exists('s:Tex_NumTempFiles') || !Tex_GetVarValue('Tex_RemoveTempFiles')
|
||||
return
|
||||
endif
|
||||
let i = 1
|
||||
while i <= s:Tex_NumTempFiles
|
||||
let tmpfile = s:Tex_TempFile_{i}
|
||||
" Remove the tmp file and all other associated files such as the
|
||||
" .log files etc.
|
||||
call Tex_DeleteFile(fnamemodify(tmpfile, ':p:r').'.*')
|
||||
let i = i + 1
|
||||
endwhile
|
||||
endfunction " }}}
|
||||
|
||||
" ==============================================================================
|
||||
" Compiling a file multiple times to resolve references/citations etc.
|
||||
" ==============================================================================
|
||||
" Tex_CompileMultipleTimes: The main function {{{
|
||||
" Description: compiles a file multiple times to get cross-references right.
|
||||
function! Tex_CompileMultipleTimes()
|
||||
" Just extract the root without any extension because we want to construct
|
||||
" the log file names etc from it.
|
||||
let s:origdir = fnameescape(getcwd())
|
||||
let mainFileName_root = Tex_GetMainFileName(':p:t:r')
|
||||
call Tex_CD(Tex_GetMainFileName(':p:h'))
|
||||
|
||||
" First ignore undefined references and the
|
||||
" "rerun to get cross-references right" message from
|
||||
" the compiler output.
|
||||
let origlevel = Tex_GetVarValue('Tex_IgnoreLevel')
|
||||
let origpats = Tex_GetVarValue('Tex_IgnoredWarnings')
|
||||
|
||||
let g:Tex_IgnoredWarnings = g:Tex_IgnoredWarnings."\n"
|
||||
\ . 'Reference %.%# undefined'."\n"
|
||||
\ . 'Rerun to get cross-references right'
|
||||
TCLevel 1000
|
||||
|
||||
let idxFileName = mainFileName_root.'.idx'
|
||||
let auxFileName = mainFileName_root.'.aux'
|
||||
|
||||
let runCount = 0
|
||||
let needToRerun = 1
|
||||
while needToRerun == 1 && runCount < 5
|
||||
" assume we need to run only once.
|
||||
let needToRerun = 0
|
||||
|
||||
let idxlinesBefore = Tex_CatFile(idxFileName)
|
||||
let auxlinesBefore = Tex_GetAuxFile(auxFileName)
|
||||
|
||||
" first run latex.
|
||||
echomsg "latex run number : ".(runCount+1)
|
||||
call Tex_Debug("Tex_CompileMultipleTimes: latex run number : ".(runCount+1), "comp")
|
||||
silent! call Tex_CompileLatex()
|
||||
|
||||
" If there are errors in any latex compilation step, immediately
|
||||
" return. For now, do not bother with warnings because those might go
|
||||
" away after compiling again or after bibtex is run etc.
|
||||
let errlist = Tex_GetErrorList()
|
||||
call Tex_Debug("Tex_CompileMultipleTimes: errors = [".errlist."]", "comp")
|
||||
|
||||
if errlist =~ 'error'
|
||||
let g:Tex_IgnoredWarnings = origpats
|
||||
exec 'TCLevel '.origlevel
|
||||
|
||||
return
|
||||
endif
|
||||
|
||||
let idxlinesAfter = Tex_CatFile(idxFileName)
|
||||
|
||||
" If .idx file changed, then run makeindex to generate the new .ind
|
||||
" file and remember to rerun latex.
|
||||
if runCount == 0 && glob(idxFileName) != '' && idxlinesBefore != idxlinesAfter
|
||||
echomsg "Running makeindex..."
|
||||
let temp_mp = &mp | let &mp = Tex_GetVarValue('Tex_MakeIndexFlavor')
|
||||
exec 'silent! make '.mainFileName_root
|
||||
let &mp = temp_mp
|
||||
|
||||
let needToRerun = 1
|
||||
endif
|
||||
|
||||
" The first time we see if we need to run bibtex and if the .bbl file
|
||||
" changes, we will rerun latex.
|
||||
if runCount == 0 && Tex_IsPresentInFile('\\bibdata', mainFileName_root.'.aux')
|
||||
let bibFileName = mainFileName_root.'.bbl'
|
||||
|
||||
let biblinesBefore = Tex_CatFile(bibFileName)
|
||||
|
||||
echomsg "Running '".Tex_GetVarValue('Tex_BibtexFlavor')."' ..."
|
||||
let temp_mp = &mp | let &mp = Tex_GetVarValue('Tex_BibtexFlavor')
|
||||
exec 'silent! make '.mainFileName_root
|
||||
let &mp = temp_mp
|
||||
|
||||
let biblinesAfter = Tex_CatFile(bibFileName)
|
||||
|
||||
" If the .bbl file changed after running bibtex, we need to
|
||||
" latex again.
|
||||
if biblinesAfter != biblinesBefore
|
||||
echomsg 'Need to rerun because bibliography file changed...'
|
||||
call Tex_Debug('Tex_CompileMultipleTimes: Need to rerun because bibliography file changed...', 'comp')
|
||||
let needToRerun = 1
|
||||
endif
|
||||
endif
|
||||
|
||||
" check if latex asks us to rerun
|
||||
let auxlinesAfter = Tex_GetAuxFile(auxFileName)
|
||||
if auxlinesAfter != auxlinesBefore
|
||||
echomsg "Need to rerun because the AUX file changed..."
|
||||
call Tex_Debug("Tex_CompileMultipleTimes: Need to rerun to get cross-references right...", 'comp')
|
||||
let needToRerun = 1
|
||||
endif
|
||||
|
||||
let runCount = runCount + 1
|
||||
endwhile
|
||||
|
||||
redraw!
|
||||
call Tex_Debug("Tex_CompileMultipleTimes: Ran latex ".runCount." time(s)", "comp")
|
||||
echomsg "Ran latex ".runCount." time(s)"
|
||||
|
||||
let g:Tex_IgnoredWarnings = origpats
|
||||
exec 'TCLevel '.origlevel
|
||||
" After all compiler calls are done, reparse the .log file for
|
||||
" errors/warnings to handle the situation where the clist might have been
|
||||
" emptied because of bibtex/makeindex being run as the last step.
|
||||
exec 'silent! cfile '.mainFileName_root.'.log'
|
||||
|
||||
exe 'cd '.s:origdir
|
||||
endfunction " }}}
|
||||
" Tex_GetAuxFile: get the contents of the AUX file {{{
|
||||
" Description: get the contents of the AUX file recursively including any
|
||||
" @\input'ted AUX files.
|
||||
function! Tex_GetAuxFile(auxFile)
|
||||
if !filereadable(a:auxFile)
|
||||
return ''
|
||||
endif
|
||||
|
||||
let auxContents = Tex_CatFile(a:auxFile)
|
||||
let pattern = '@\input{\(.\{-}\)}'
|
||||
|
||||
let auxContents = substitute(auxContents, pattern, '\=Tex_GetAuxFile(submatch(1))', 'g')
|
||||
|
||||
return auxContents
|
||||
endfunction " }}}
|
||||
|
||||
" ==============================================================================
|
||||
" Helper functions for
|
||||
" . viewing the log file in preview mode.
|
||||
" . syncing the display between the quickfix window and preview window
|
||||
" . going to the correct line _and column_ number from from the quick fix
|
||||
" window.
|
||||
" ==============================================================================
|
||||
" Tex_SetupErrorWindow: sets up the cwindow and preview of the .log file {{{
|
||||
" Description:
|
||||
function! Tex_SetupErrorWindow()
|
||||
let mainfname = Tex_GetMainFileName()
|
||||
|
||||
let winnum = winnr()
|
||||
|
||||
" close the quickfix window before trying to open it again, otherwise
|
||||
" whether or not we end up in the quickfix window after the :cwindow
|
||||
" command is not fixed.
|
||||
cclose
|
||||
cwindow
|
||||
" create log file name from mainfname
|
||||
let mfnlog = fnamemodify(mainfname, ":t:r").'.log'
|
||||
call Tex_Debug('Tex_SetupErrorWindow: mfnlog = '.mfnlog, 'comp')
|
||||
" if we moved to a different window, then it means we had some errors.
|
||||
if winnum != winnr()
|
||||
if Tex_GetVarValue('Tex_ShowErrorContext')
|
||||
call Tex_UpdatePreviewWindow(mfnlog)
|
||||
exe 'nnoremap <buffer> <silent> j j:call Tex_UpdatePreviewWindow("'.mfnlog.'")<CR>'
|
||||
exe 'nnoremap <buffer> <silent> k k:call Tex_UpdatePreviewWindow("'.mfnlog.'")<CR>'
|
||||
exe 'nnoremap <buffer> <silent> <up> <up>:call Tex_UpdatePreviewWindow("'.mfnlog.'")<CR>'
|
||||
exe 'nnoremap <buffer> <silent> <down> <down>:call Tex_UpdatePreviewWindow("'.mfnlog.'")<CR>'
|
||||
endif
|
||||
exe 'nnoremap <buffer> <silent> <enter> :call Tex_GotoErrorLocation("'.mfnlog.'")<CR>'
|
||||
|
||||
setlocal nowrap
|
||||
|
||||
" resize the window to just fit in with the number of lines.
|
||||
exec ( line('$') < 4 ? line('$') : 4 ).' wincmd _'
|
||||
if Tex_GetVarValue('Tex_GotoError') == 1
|
||||
call Tex_GotoErrorLocation(mfnlog)
|
||||
else
|
||||
exec s:origwinnum.' wincmd w'
|
||||
endif
|
||||
endif
|
||||
|
||||
endfunction " }}}
|
||||
" Tex_PositionPreviewWindow: positions the preview window correctly. {{{
|
||||
" Description:
|
||||
" The purpose of this function is to count the number of times an error
|
||||
" occurs on the same line. or in other words, if the current line is
|
||||
" something like |10 error|, then we want to count the number of
|
||||
" lines in the quickfix window before this line which also contain lines
|
||||
" like |10 error|.
|
||||
"
|
||||
function! Tex_PositionPreviewWindow(filename)
|
||||
|
||||
if getline('.') !~ '|\d\+ \(error\|warning\)|'
|
||||
if !search('|\d\+ \(error\|warning\)|')
|
||||
call Tex_Debug("not finding error pattern anywhere in quickfix window :".bufname(bufnr('%')),
|
||||
\ 'comp')
|
||||
pclose!
|
||||
return
|
||||
endif
|
||||
endif
|
||||
|
||||
" extract the error pattern (something like 'file.tex|10 error|') on the
|
||||
" current line.
|
||||
let errpat = matchstr(getline('.'), '^\f*|\d\+ \(error\|warning\)|\ze')
|
||||
let errfile = matchstr(getline('.'), '^\f*\ze|\d\+ \(error\|warning\)|')
|
||||
" extract the line number from the error pattern.
|
||||
let linenum = matchstr(getline('.'), '|\zs\d\+\ze \(error\|warning\)|')
|
||||
|
||||
" if we are on an error, then count the number of lines before this in the
|
||||
" quickfix window with an error on the same line.
|
||||
if errpat =~ 'error|$'
|
||||
" our location in the quick fix window.
|
||||
let errline = line('.')
|
||||
|
||||
" goto the beginning of the quickfix window and begin counting the lines
|
||||
" which show an error on the same line.
|
||||
0
|
||||
let numrep = 0
|
||||
while 1
|
||||
" if we are on the same kind of error line, then means we have another
|
||||
" line containing the same error pattern.
|
||||
if getline('.') =~ errpat
|
||||
let numrep = numrep + 1
|
||||
normal! 0
|
||||
endif
|
||||
" if we have reached the original location in the quick fix window,
|
||||
" then break.
|
||||
if line('.') == errline
|
||||
break
|
||||
else
|
||||
" otherwise, search for the next line which contains the same
|
||||
" error pattern again. goto the end of the current line so we
|
||||
" dont count this line again.
|
||||
normal! $
|
||||
call search(errpat, 'W')
|
||||
endif
|
||||
endwhile
|
||||
else
|
||||
let numrep = 1
|
||||
endif
|
||||
|
||||
if getline('.') =~ '|\d\+ warning|'
|
||||
let searchpat = escape(matchstr(getline('.'), '|\d\+ warning|\s*\zs.*'), '\ ')
|
||||
else
|
||||
let searchpat = 'l\.'.linenum
|
||||
endif
|
||||
|
||||
" We first need to be in the scope of the correct file in the .log file.
|
||||
" This is important for example, when a.tex and b.tex both have errors on
|
||||
" line 9 of the file and we want to go to the error of b.tex. Merely
|
||||
" searching forward from the beginning of the log file for l.9 will always
|
||||
" land us on the error in a.tex.
|
||||
if errfile != ''
|
||||
exec 'silent! bot pedit +/(\\(\\f\\|\\[\\|\]\\|\\s\\)*'.errfile.'/ '.a:filename
|
||||
else
|
||||
exec 'bot pedit +0 '.a:filename
|
||||
endif
|
||||
" Goto the preview window
|
||||
" TODO: This is not robust enough. Check that a wincmd j actually takes
|
||||
" us to the preview window.
|
||||
wincmd j
|
||||
" now search forward from this position in the preview window for the
|
||||
" numrep^th error of the current line in the quickfix window.
|
||||
while numrep > 0
|
||||
call search(searchpat, 'W')
|
||||
let numrep = numrep - 1
|
||||
endwhile
|
||||
normal! z.
|
||||
|
||||
endfunction " }}}
|
||||
" Tex_UpdatePreviewWindow: updates the view of the log file {{{
|
||||
" Description:
|
||||
" This function should be called when focus is in a quickfix window.
|
||||
" It opens the log file in a preview window and makes it display that
|
||||
" part of the log file which corresponds to the error which the user is
|
||||
" currently on in the quickfix window. Control returns to the quickfix
|
||||
" window when the function returns.
|
||||
"
|
||||
function! Tex_UpdatePreviewWindow(filename)
|
||||
call Tex_PositionPreviewWindow(a:filename)
|
||||
|
||||
if &previewwindow
|
||||
6 wincmd _
|
||||
wincmd p
|
||||
endif
|
||||
endfunction " }}}
|
||||
" Tex_GotoErrorLocation: goes to the correct location of error in the tex file {{{
|
||||
" Description:
|
||||
" This function should be called when focus is in a quickfix window. This
|
||||
" function will first open the preview window of the log file (if it is not
|
||||
" already open), position the display of the preview to coincide with the
|
||||
" current error under the cursor and then take the user to the file in
|
||||
" which this error has occured.
|
||||
"
|
||||
" The position is both the correct line number and the column number.
|
||||
function! Tex_GotoErrorLocation(filename)
|
||||
|
||||
" first use vim's functionality to take us to the location of the error
|
||||
" accurate to the line (not column). This lets us go to the correct file
|
||||
" without applying any logic.
|
||||
exec "normal! \<enter>"
|
||||
" If the log file is not found, then going to the correct line number is
|
||||
" all we can do.
|
||||
if glob(a:filename) == ''
|
||||
return
|
||||
endif
|
||||
|
||||
let winnum = winnr()
|
||||
" then come back to the quickfix window
|
||||
wincmd w
|
||||
|
||||
" find out where in the file we had the error.
|
||||
let linenum = matchstr(getline('.'), '|\zs\d\+\ze \(warning\|error\)|')
|
||||
call Tex_PositionPreviewWindow(a:filename)
|
||||
|
||||
if getline('.') =~ 'l.\d\+'
|
||||
|
||||
let brokenline = matchstr(getline('.'), 'l.'.linenum.' \zs.*\ze')
|
||||
" If the line is of the form
|
||||
" l.10 ...and then there was some error
|
||||
" it means (most probably) that only part of the erroneous line is
|
||||
" shown. In this case, finding the length of the broken line is not
|
||||
" correct. Instead goto the beginning of the line and search forward
|
||||
" for the part which is displayed and then go to its end.
|
||||
if brokenline =~ '^\M...'
|
||||
let partline = matchstr(brokenline, '^\M...\m\zs.*')
|
||||
let normcmd = "0/\\V".escape(partline, "\\")."/e+1\<CR>"
|
||||
else
|
||||
let column = strlen(brokenline) + 1
|
||||
let normcmd = column.'|'
|
||||
endif
|
||||
|
||||
elseif getline('.') =~ 'LaTeX Warning: \(Citation\|Reference\) `.*'
|
||||
|
||||
let ref = matchstr(getline('.'), "LaTeX Warning: \\(Citation\\|Reference\\) `\\zs[^']\\+\\ze'")
|
||||
let normcmd = '0/'.ref."\<CR>"
|
||||
|
||||
else
|
||||
|
||||
let normcmd = '0'
|
||||
|
||||
endif
|
||||
|
||||
" go back to the window where we came from.
|
||||
exec winnum.' wincmd w'
|
||||
exec 'silent! '.linenum.' | normal! '.normcmd
|
||||
|
||||
if !Tex_GetVarValue('Tex_ShowErrorContext')
|
||||
pclose!
|
||||
endif
|
||||
endfunction " }}}
|
||||
" Tex_SetCompilerMaps: sets maps for compiling/viewing/searching {{{
|
||||
" Description:
|
||||
function! <SID>Tex_SetCompilerMaps()
|
||||
if exists('b:Tex_doneCompilerMaps')
|
||||
return
|
||||
endif
|
||||
let s:ml = '<Leader>'
|
||||
|
||||
nnoremap <buffer> <Plug>Tex_Compile :call Tex_RunLaTeX()<cr>
|
||||
vnoremap <buffer> <Plug>Tex_Compile :call Tex_PartCompile()<cr>
|
||||
nnoremap <buffer> <Plug>Tex_View :call Tex_ViewLaTeX()<cr>
|
||||
nnoremap <buffer> <Plug>Tex_ForwardSearch :call Tex_ForwardSearchLaTeX()<cr>
|
||||
|
||||
call Tex_MakeMap(s:ml."ll", "<Plug>Tex_Compile", 'n', '<buffer>')
|
||||
call Tex_MakeMap(s:ml."ll", "<Plug>Tex_Compile", 'v', '<buffer>')
|
||||
call Tex_MakeMap(s:ml."lv", "<Plug>Tex_View", 'n', '<buffer>')
|
||||
call Tex_MakeMap(s:ml."ls", "<Plug>Tex_ForwardSearch", 'n', '<buffer>')
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
augroup LatexSuite
|
||||
au LatexSuite User LatexSuiteFileType
|
||||
\ call Tex_Debug('compiler.vim: Catching LatexSuiteFileType event', 'comp') |
|
||||
\ call <SID>Tex_SetCompilerMaps()
|
||||
augroup END
|
||||
|
||||
command! -nargs=0 -range=% TPartCompile :<line1>, <line2> silent! call Tex_PartCompile()
|
||||
" Setting b:fragmentFile = 1 makes Tex_CompileLatex consider the present file
|
||||
" the _main_ file irrespective of the presence of a .latexmain file.
|
||||
command! -nargs=0 TCompileThis let b:fragmentFile = 1
|
||||
command! -nargs=0 TCompileMainFile let b:fragmentFile = 0
|
||||
|
||||
" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
|
||||
@@ -1,255 +0,0 @@
|
||||
"=============================================================================
|
||||
" File: custommacros.vim
|
||||
" Author: Mikolaj Machowski
|
||||
" Version: 1.0
|
||||
" Created: Tue Apr 23 05:00 PM 2002 PST
|
||||
"
|
||||
" Description: functions for processing custom macros in the
|
||||
" latex-suite/macros directory
|
||||
"=============================================================================
|
||||
|
||||
let s:path = expand('<sfile>:p:h')
|
||||
|
||||
" Set path to macros dir dependent on OS {{{
|
||||
if has("unix") || has("macunix")
|
||||
let s:macrodirpath = $HOME."/.vim/ftplugin/latex-suite/macros/"
|
||||
elseif has("win32")
|
||||
if exists("$HOME")
|
||||
let s:macrodirpath = $HOME."/vimfiles/ftplugin/latex-suite/macros/"
|
||||
else
|
||||
let s:macrodirpath = $VIM."/vimfiles/ftplugin/latex-suite/macros/"
|
||||
endif
|
||||
endif
|
||||
|
||||
" }}}
|
||||
" SetCustomMacrosMenu: sets up the menu for Macros {{{
|
||||
function! <SID>SetCustomMacrosMenu()
|
||||
let flist = Tex_FindInRtp('', 'macros')
|
||||
exe 'amenu '.g:Tex_MacrosMenuLocation.'&New :call <SID>NewMacro("FFFromMMMenu")<CR>'
|
||||
exe 'amenu '.g:Tex_MacrosMenuLocation.'&Redraw :call RedrawMacro()<CR>'
|
||||
|
||||
let i = 1
|
||||
while 1
|
||||
let fname = Tex_Strntok(flist, ',', i)
|
||||
if fname == ''
|
||||
break
|
||||
endif
|
||||
exe "amenu ".g:Tex_MacrosMenuLocation."&Delete.&".i.":<tab>".fname." :call <SID>DeleteMacro('".fname."')<CR>"
|
||||
exe "amenu ".g:Tex_MacrosMenuLocation."&Edit.&".i.":<tab>".fname." :call <SID>EditMacro('".fname."')<CR>"
|
||||
exe "imenu ".g:Tex_MacrosMenuLocation."&".i.":<tab>".fname." <C-r>=<SID>ReadMacro('".fname."')<CR>"
|
||||
exe "nmenu ".g:Tex_MacrosMenuLocation."&".i.":<tab>".fname." i<C-r>=<SID>ReadMacro('".fname."')<CR>"
|
||||
let i = i + 1
|
||||
endwhile
|
||||
endfunction
|
||||
|
||||
if g:Tex_Menus
|
||||
call <SID>SetCustomMacrosMenu()
|
||||
endif
|
||||
|
||||
" }}}
|
||||
" NewMacro: opens new file in macros directory {{{
|
||||
function! <SID>NewMacro(...)
|
||||
" Allow for calling :TMacroNew without argument or from menu and prompt
|
||||
" for name.
|
||||
if a:0 > 0
|
||||
let newmacroname = a:1
|
||||
else
|
||||
let newmacroname = input("Name of new macro: ")
|
||||
if newmacroname == ''
|
||||
return
|
||||
endif
|
||||
endif
|
||||
|
||||
if newmacroname == "FFFromMMMenu"
|
||||
" Check if NewMacro was called from menu and prompt for insert macro
|
||||
" name
|
||||
let newmacroname = input("Name of new macro: ")
|
||||
if newmacroname == ''
|
||||
return
|
||||
endif
|
||||
elseif Tex_FindInRtp(newmacroname, 'macros') != ''
|
||||
" If macro with this name already exists, prompt for another name.
|
||||
exe "echomsg 'Macro ".newmacroname." already exists. Try another name.'"
|
||||
let newmacroname = input("Name of new macro: ")
|
||||
if newmacroname == ''
|
||||
return
|
||||
endif
|
||||
endif
|
||||
exec 'split '.Tex_EscapeSpaces(s:macrodirpath.newmacroname)
|
||||
setlocal filetype=tex
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
" RedrawMacro: refreshes macro menu {{{
|
||||
function! RedrawMacro()
|
||||
aunmenu TeX-Suite.Macros
|
||||
call <SID>SetCustomMacrosMenu()
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
" ChooseMacro: choose a macro file {{{
|
||||
" " Description:
|
||||
function! s:ChooseMacro(ask)
|
||||
let filelist = Tex_FindInRtp('', 'macros')
|
||||
let filename = Tex_ChooseFromPrompt(
|
||||
\ a:ask."\n" .
|
||||
\ Tex_CreatePrompt(filelist, 2, ',') .
|
||||
\ "\nEnter number or filename :",
|
||||
\ filelist, ',')
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
" DeleteMacro: deletes macro file {{{
|
||||
function! <SID>DeleteMacro(...)
|
||||
if a:0 > 0
|
||||
let filename = a:1
|
||||
else
|
||||
let filename = s:ChooseMacro('Choose a macro file for deletion :')
|
||||
endif
|
||||
|
||||
if !filereadable(s:macrodirpath.filename)
|
||||
" When file is not in local directory decline to remove it.
|
||||
call confirm('This file is not in your local directory: '.filename."\n".
|
||||
\ 'It will not be deleted.' , '&OK', 1)
|
||||
|
||||
else
|
||||
let ch = confirm('Really delete '.filename.' ?', "&Yes\n&No", 2)
|
||||
if ch == 1
|
||||
call delete(s:macrodirpath.filename)
|
||||
endif
|
||||
call RedrawMacro()
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
" EditMacro: edits macro file {{{
|
||||
function! <SID>EditMacro(...)
|
||||
if a:0 > 0
|
||||
let filename = a:1
|
||||
else
|
||||
let filename = s:ChooseMacro('Choose a macro file for insertion:')
|
||||
endif
|
||||
|
||||
if filereadable(s:macrodirpath.filename)
|
||||
" If file exists in local directory open it.
|
||||
exec 'split '.Tex_EscapeSpaces(s:macrodirpath.filename)
|
||||
else
|
||||
" But if file doesn't exist in local dir it probably is in user
|
||||
" restricted area. Instead opening try to copy it to local dir.
|
||||
" Pity VimL doesn't have mkdir() function :)
|
||||
let ch = confirm("You are trying to edit file which is probably read-only.\n".
|
||||
\ "It will be copied to your local LaTeX-Suite macros directory\n".
|
||||
\ "and you will be operating on local copy with suffix -local.\n".
|
||||
\ "It will succeed only if ftplugin/latex-suite/macros dir exists.\n".
|
||||
\ "Do you agree?", "&Yes\n&No", 1)
|
||||
if ch == 1
|
||||
" But there is possibility we already created local modification.
|
||||
" Check it and offer opening this file.
|
||||
if filereadable(s:macrodirpath.filename.'-local')
|
||||
let ch = confirm('Local version of '.filename." already exists.\n".
|
||||
\ 'Do you want to open it or overwrite with original version?',
|
||||
\ "&Open\nOver&write\n&Cancel", 1)
|
||||
if ch == 1
|
||||
exec 'split '.Tex_EscapeSpaces(s:macrodirpath.filename.'-local')
|
||||
elseif ch == 2
|
||||
new
|
||||
exe '0read '.Tex_FindInRtp(filename, 'macros')
|
||||
" This is possible macro was edited before, wipe it out.
|
||||
if bufexists(s:macrodirpath.filename.'-local')
|
||||
exe 'bwipe '.s:macrodirpath.filename.'-local'
|
||||
endif
|
||||
exe 'write! '.s:macrodirpath.filename.'-local'
|
||||
else
|
||||
return
|
||||
endif
|
||||
else
|
||||
" If file doesn't exist, open new file, read in system macro and
|
||||
" save it in local macro dir with suffix -local
|
||||
new
|
||||
exe '0read '.Tex_FindInRtp(filename, 'macros')
|
||||
exe 'write '.s:macrodirpath.filename.'-local'
|
||||
endif
|
||||
endif
|
||||
|
||||
endif
|
||||
setlocal filetype=tex
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
" ReadMacro: reads in a macro from a macro file. {{{
|
||||
" allowing for placement via placeholders.
|
||||
function! <SID>ReadMacro(...)
|
||||
|
||||
if a:0 > 0
|
||||
let filename = a:1
|
||||
else
|
||||
let filelist = Tex_FindInRtp('', 'macros')
|
||||
let filename =
|
||||
\ Tex_ChooseFromPrompt("Choose a macro file:\n" .
|
||||
\ Tex_CreatePrompt(filelist, 2, ',') .
|
||||
\ "\nEnter number or name of file :",
|
||||
\ filelist, ',')
|
||||
endif
|
||||
|
||||
let fname = Tex_FindInRtp(filename, 'macros', ':p')
|
||||
|
||||
let markerString = '<---- Latex Suite End Macro ---->'
|
||||
let _a = @a
|
||||
silent! call append(line('.'), markerString)
|
||||
silent! exec "read ".fname
|
||||
silent! exec "normal! V/^".markerString."$/-1\<CR>\"ax"
|
||||
" This is kind of tricky: At this stage, we are one line after the one we
|
||||
" started from with the marker text on it. We need to
|
||||
" 1. remove the marker and the line.
|
||||
" 2. get focus to the previous line.
|
||||
" 3. not remove anything from the previous line.
|
||||
silent! exec "normal! $v0k$\"_x"
|
||||
|
||||
call Tex_CleanSearchHistory()
|
||||
|
||||
let @a = substitute(@a, '['."\n\r\t ".']*$', '', '')
|
||||
let textWithMovement = IMAP_PutTextWithMovement(@a)
|
||||
let @a = _a
|
||||
|
||||
return textWithMovement
|
||||
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
" commands for macros {{{
|
||||
com! -nargs=? TMacroNew :call <SID>NewMacro(<f-args>)
|
||||
|
||||
" This macros had to have 2 versions:
|
||||
if v:version >= 602
|
||||
com! -complete=custom,Tex_CompleteMacroName -nargs=? TMacro
|
||||
\ :let s:retVal = <SID>ReadMacro(<f-args>) <bar> normal! i<C-r>=s:retVal<CR>
|
||||
com! -complete=custom,Tex_CompleteMacroName -nargs=? TMacroEdit
|
||||
\ :call <SID>EditMacro(<f-args>)
|
||||
com! -complete=custom,Tex_CompleteMacroName -nargs=? TMacroDelete
|
||||
\ :call <SID>DeleteMacro(<f-args>)
|
||||
|
||||
" Tex_CompleteMacroName: for completing names in TMacro... commands {{{
|
||||
" Description: get list of macro names with Tex_FindInRtp(), remove full path
|
||||
" and return list of names separated with newlines.
|
||||
"
|
||||
function! Tex_CompleteMacroName(A,P,L)
|
||||
" Get name of macros from all runtimepath directories
|
||||
let macronames = Tex_FindInRtp('', 'macros')
|
||||
" Separate names with \n not ,
|
||||
let macronames = substitute(macronames,',','\n','g')
|
||||
return macronames
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
|
||||
else
|
||||
com! -nargs=? TMacro
|
||||
\ :let s:retVal = <SID>ReadMacro(<f-args>) <bar> normal! i<C-r>=s:retVal<CR>
|
||||
com! -nargs=? TMacroEdit :call <SID>EditMacro(<f-args>)
|
||||
com! -nargs=? TMacroDelete :call <SID>DeleteMacro(<f-args>)
|
||||
|
||||
endif
|
||||
|
||||
" }}}
|
||||
|
||||
" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
|
||||
@@ -1,124 +0,0 @@
|
||||
"=============================================================================
|
||||
" File: diacritics.vim
|
||||
" Author: Lubomir Host
|
||||
" Created: Tue Apr 23 07:00 PM 2002 PST
|
||||
"
|
||||
" Description: shortcuts for all diacritics.
|
||||
"=============================================================================
|
||||
|
||||
if !g:Tex_Diacritics
|
||||
finish
|
||||
endif
|
||||
|
||||
" \'{a} {{{
|
||||
call IMAP ('=a', "\\\'{a}", 'tex')
|
||||
call IMAP ('=b', "\\'{b}", 'tex')
|
||||
call IMAP ('=c', "\\'{c}", 'tex')
|
||||
call IMAP ('=d', "\\'{d}", 'tex')
|
||||
call IMAP ('=e', "\\'{e}", 'tex')
|
||||
call IMAP ('=f', "\\'{f}", 'tex')
|
||||
call IMAP ('=g', "\\'{g}", 'tex')
|
||||
call IMAP ('=h', "\\'{h}", 'tex')
|
||||
call IMAP ('=i', "\\'{\i}", 'tex')
|
||||
call IMAP ('=j', "\\'{j}", 'tex')
|
||||
call IMAP ('=k', "\\'{k}", 'tex')
|
||||
call IMAP ('=l', "\\'{l}", 'tex')
|
||||
call IMAP ('=m', "\\'{m}", 'tex')
|
||||
call IMAP ('=n', "\\'{n}", 'tex')
|
||||
call IMAP ('=o', "\\'{o}", 'tex')
|
||||
call IMAP ('=p', "\\'{p}", 'tex')
|
||||
call IMAP ('=q', "\\'{q}", 'tex')
|
||||
call IMAP ('=r', "\\'{r}", 'tex')
|
||||
call IMAP ('=s', "\\'{s}", 'tex')
|
||||
call IMAP ('=t', "\\'{t}", 'tex')
|
||||
call IMAP ('=u', "\\'{u}", 'tex')
|
||||
call IMAP ('=v', "\\'{v}", 'tex')
|
||||
call IMAP ('=w', "\\'{w}", 'tex')
|
||||
call IMAP ('=x', "\\'{x}", 'tex')
|
||||
call IMAP ('=y', "\\'{y}", 'tex')
|
||||
call IMAP ('=z', "\\'{z}", 'tex')
|
||||
call IMAP ('=A', "\\'{A}", 'tex')
|
||||
call IMAP ('=B', "\\'{B}", 'tex')
|
||||
call IMAP ('=C', "\\'{C}", 'tex')
|
||||
call IMAP ('=D', "\\'{D}", 'tex')
|
||||
call IMAP ('=E', "\\'{E}", 'tex')
|
||||
call IMAP ('=F', "\\'{F}", 'tex')
|
||||
call IMAP ('=G', "\\'{G}", 'tex')
|
||||
call IMAP ('=H', "\\'{H}", 'tex')
|
||||
call IMAP ('=I', "\\'{\I}", 'tex')
|
||||
call IMAP ('=J', "\\'{J}", 'tex')
|
||||
call IMAP ('=K', "\\'{K}", 'tex')
|
||||
call IMAP ('=L', "\\'{L}", 'tex')
|
||||
call IMAP ('=M', "\\'{M}", 'tex')
|
||||
call IMAP ('=N', "\\'{N}", 'tex')
|
||||
call IMAP ('=O', "\\'{O}", 'tex')
|
||||
call IMAP ('=P', "\\'{P}", 'tex')
|
||||
call IMAP ('=Q', "\\'{Q}", 'tex')
|
||||
call IMAP ('=R', "\\'{R}", 'tex')
|
||||
call IMAP ('=S', "\\'{S}", 'tex')
|
||||
call IMAP ('=T', "\\'{T}", 'tex')
|
||||
call IMAP ('=U', "\\'{U}", 'tex')
|
||||
call IMAP ('=V', "\\'{V}", 'tex')
|
||||
call IMAP ('=W', "\\'{W}", 'tex')
|
||||
call IMAP ('=X', "\\'{X}", 'tex')
|
||||
call IMAP ('=Y', "\\'{Y}", 'tex')
|
||||
call IMAP ('=Z', "\\'{Z}", 'tex')
|
||||
" }}}
|
||||
" \v{a} {{{
|
||||
call IMAP ('+a', "\\v{a}", 'tex')
|
||||
call IMAP ('+b', "\\v{b}", 'tex')
|
||||
call IMAP ('+c', "\\v{c}", 'tex')
|
||||
call IMAP ('+d', "\\v{d}", 'tex')
|
||||
call IMAP ('+e', "\\v{e}", 'tex')
|
||||
call IMAP ('+f', "\\v{f}", 'tex')
|
||||
call IMAP ('+g', "\\v{g}", 'tex')
|
||||
call IMAP ('+h', "\\v{h}", 'tex')
|
||||
call IMAP ('+i', "\\v{\i}", 'tex')
|
||||
call IMAP ('+j', "\\v{j}", 'tex')
|
||||
call IMAP ('+k', "\\v{k}", 'tex')
|
||||
call IMAP ('+l', "\\q l", 'tex')
|
||||
call IMAP ('+m', "\\v{m}", 'tex')
|
||||
call IMAP ('+n', "\\v{n}", 'tex')
|
||||
call IMAP ('+o', "\\v{o}", 'tex')
|
||||
call IMAP ('+p', "\\v{p}", 'tex')
|
||||
call IMAP ('+q', "\\v{q}", 'tex')
|
||||
call IMAP ('+r', "\\v{r}", 'tex')
|
||||
call IMAP ('+s', "\\v{s}", 'tex')
|
||||
call IMAP ('+t', "\\q t", 'tex')
|
||||
call IMAP ('+u', "\\v{u}", 'tex')
|
||||
call IMAP ('+v', "\\v{v}", 'tex')
|
||||
call IMAP ('+w', "\\v{w}", 'tex')
|
||||
call IMAP ('+x', "\\v{x}", 'tex')
|
||||
call IMAP ('+y', "\\v{y}", 'tex')
|
||||
call IMAP ('+z', "\\v{z}", 'tex')
|
||||
call IMAP ('+A', "\\v{A}", 'tex')
|
||||
call IMAP ('+B', "\\v{B}", 'tex')
|
||||
call IMAP ('+C', "\\v{C}", 'tex')
|
||||
call IMAP ('+D', "\\v{D}", 'tex')
|
||||
call IMAP ('+E', "\\v{E}", 'tex')
|
||||
call IMAP ('+F', "\\v{F}", 'tex')
|
||||
call IMAP ('+G', "\\v{G}", 'tex')
|
||||
call IMAP ('+H', "\\v{H}", 'tex')
|
||||
call IMAP ('+I', "\\v{\I}", 'tex')
|
||||
call IMAP ('+J', "\\v{J}", 'tex')
|
||||
call IMAP ('+K', "\\v{K}", 'tex')
|
||||
call IMAP ('+L', "\\v{L}", 'tex')
|
||||
call IMAP ('+M', "\\v{M}", 'tex')
|
||||
call IMAP ('+N', "\\v{N}", 'tex')
|
||||
call IMAP ('+O', "\\v{O}", 'tex')
|
||||
call IMAP ('+P', "\\v{P}", 'tex')
|
||||
call IMAP ('+Q', "\\v{Q}", 'tex')
|
||||
call IMAP ('+R', "\\v{R}", 'tex')
|
||||
call IMAP ('+S', "\\v{S}", 'tex')
|
||||
call IMAP ('+T', "\\v{T}", 'tex')
|
||||
call IMAP ('+U', "\\v{U}", 'tex')
|
||||
call IMAP ('+V', "\\v{V}", 'tex')
|
||||
call IMAP ('+W', "\\v{W}", 'tex')
|
||||
call IMAP ('+X', "\\v{X}", 'tex')
|
||||
call IMAP ('+Y', "\\v{Y}", 'tex')
|
||||
call IMAP ('+Z', "\\v{Z}", 'tex')
|
||||
" }}}
|
||||
call IMAP ('+}', "\\\"{a}", 'tex')
|
||||
call IMAP ('+:', "\\^{o}", 'tex')
|
||||
|
||||
" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
|
||||
@@ -1,330 +0,0 @@
|
||||
"=============================================================================
|
||||
" File: elementmacros.vim
|
||||
" Author: Mikolaj Machowski
|
||||
" Created: Tue Apr 23 06:00 PM 2002 PST
|
||||
"
|
||||
" Description: macros for dimensions/fonts/counters.
|
||||
" and various common commands such ref/label/footnote.
|
||||
"=============================================================================
|
||||
|
||||
nmap <silent> <script> <plug> i
|
||||
imap <silent> <script> <C-o><plug> <Nop>
|
||||
|
||||
if exists('s:lastElementsLocation') && g:Tex_ElementsMenuLocation == s:lastElementsLocation
|
||||
finish
|
||||
endif
|
||||
|
||||
if exists('s:lastElementsLocation')
|
||||
exe 'aunmenu '.s:lastElementsLocation.'Font.'
|
||||
exe 'aunmenu '.s:lastElementsLocation.'Dimension.'
|
||||
exe 'aunmenu '.s:lastElementsLocation.'Counters.'
|
||||
exe 'aunmenu '.s:lastElementsLocation.'Various.'
|
||||
endif
|
||||
|
||||
let s:lastElementsLocation = g:Tex_ElementsMenuLocation
|
||||
|
||||
let s:fontMenuLoc = g:Tex_ElementsMenuLocation.'Font.'
|
||||
let s:dimensionMenuLoc = g:Tex_ElementsMenuLocation.'Dimension.'
|
||||
let s:counterMenuLoc = g:Tex_ElementsMenuLocation.'Counters.'
|
||||
let s:variousMenuLoc = g:Tex_ElementsMenuLocation.'Various.'
|
||||
|
||||
" ==============================================================================
|
||||
" Set up the functions the first time.
|
||||
" ==============================================================================
|
||||
if !exists('s:definedFuncs') " {{{
|
||||
let s:definedFuncs = 1
|
||||
|
||||
" Tex_RemoveElementMenus: remove the elements menu {{{
|
||||
function! Tex_RemoveElementMenus()
|
||||
exe 'silent! aunmenu '.s:lastElementsLocation.'Font.'
|
||||
exe 'silent! aunmenu '.s:lastElementsLocation.'Dimension.'
|
||||
exe 'silent! aunmenu '.s:lastElementsLocation.'Counters.'
|
||||
exe 'silent! aunmenu '.s:lastElementsLocation.'Various.'
|
||||
endfunction " }}}
|
||||
" Tex_FontFamily: sets up font menus {{{
|
||||
function! <SID>Tex_FontFamily(font,fam)
|
||||
let vislhs = matchstr(tolower(a:font), '^.\zs.*')
|
||||
|
||||
" avoid redoing imaps and vmaps for every reconfiguration of menus.
|
||||
if !exists('s:doneOnce') && g:Tex_FontMaps
|
||||
exe "vnoremap <silent> ".g:Tex_Leader.vislhs.
|
||||
\" \<C-\\>\<C-N>:call VEnclose('\\text".vislhs."{', '}', '{\\".vislhs.a:fam." ', '}')<CR>"
|
||||
exe 'call IMAP ("'.a:font.'", "\\text'.vislhs.'{<++>}<++>", "tex")'
|
||||
endif
|
||||
|
||||
" menu entry.
|
||||
if g:Tex_Menus && g:Tex_FontMenus
|
||||
let location = s:fontMenuLoc.substitute(a:fam, '^.', '\u&', '').'.'.vislhs.a:fam.'<tab>'.a:font.'\ ('.g:Tex_Leader.vislhs.')'
|
||||
exe "amenu ".location.
|
||||
\" <plug><C-r>=IMAP_PutTextWithMovement('\\text".vislhs."{<++>}<++>')<CR>"
|
||||
exe "vmenu ".location.
|
||||
\" \<C-\\>\<C-N>:call VEnclose('\\text".vislhs."{', '}', '{\\".vislhs.a:fam." ', '}')<CR>"
|
||||
endif
|
||||
|
||||
endfunction " }}}
|
||||
" Tex_FontDiacritics: sets up menus for diacritics. {{{
|
||||
function! <SID>Tex_FontDiacritics(name, rhs)
|
||||
let location = s:fontMenuLoc.'&Diacritics.'.a:name.'<tab>'
|
||||
exe 'amenu '.location.
|
||||
\" <plug><C-r>=IMAP_PutTextWithMovement('\\".a:rhs."{<++>}<++>')<CR>"
|
||||
exe 'vmenu '.location.
|
||||
\" \<C-\\>\<C-n>:call VEnclose('\\".a:rhs."{', '}', '', '')<CR>"
|
||||
endfunction " }}}
|
||||
" Tex_FontSize: sets up size fonts {{{
|
||||
function! <SID>Tex_FontSize(name)
|
||||
let location = s:fontMenuLoc.'&Size.'.a:name.'<tab>'
|
||||
exe 'amenu '.location." <plug>\\".a:name
|
||||
exe 'vunmenu '.location
|
||||
endfunction " }}}
|
||||
" Tex_Fontfont: sets up the 'font' part of font menus {{{
|
||||
function! <SID>Tex_Fontfont(desc, lhs)
|
||||
let location = s:fontMenuLoc.'&font.'.a:desc.'<tab>'
|
||||
exe "amenu ".location." <plug><C-r>=IMAP_PutTextWithMovement('".a:lhs."')<CR>"
|
||||
exe "vunmenu ".location
|
||||
endfunction " }}}
|
||||
" Tex_DimMenus: set up dimension menus {{{
|
||||
function! <SID>Tex_DimMenus(submenu, rhs)
|
||||
let location = s:dimensionMenuLoc.a:submenu.'.'.a:rhs.'<tab>'
|
||||
exe "amenu ".location." <plug>\\".a:rhs
|
||||
exe "vunmenu ".location
|
||||
endfunction " }}}
|
||||
" Tex_CounterMenus: set up counters menus {{{
|
||||
function! <SID>Tex_CounterMenus(submenu, rhs)
|
||||
let location = s:counterMenuLoc.a:submenu.'.'.a:rhs.'<tab>'
|
||||
exe "amenu ".location." <plug>\\".a:rhs
|
||||
exe "vunmenu ".location
|
||||
endfunction " }}}
|
||||
" Tex_VariousMenus: set up various menus {{{
|
||||
function! <SID>Tex_VariousMenus(desc, lhs)
|
||||
let location = s:variousMenuLoc.a:desc.'<tab>'
|
||||
exe "amenu ".location." <plug><C-r>=IMAP_PutTextWithMovement('".a:lhs."')<CR>"
|
||||
exe "vunmenu ".location
|
||||
endfunction " }}}
|
||||
|
||||
endif
|
||||
" }}}
|
||||
|
||||
" ==============================================================================
|
||||
" Fonts
|
||||
" ==============================================================================
|
||||
" series/family/shape {{{
|
||||
call <SID>Tex_FontFamily("FBF","series")
|
||||
call <SID>Tex_FontFamily("FMD","series")
|
||||
|
||||
call <SID>Tex_FontFamily("FTT","family")
|
||||
call <SID>Tex_FontFamily("FSF","family")
|
||||
call <SID>Tex_FontFamily("FRM","family")
|
||||
|
||||
call <SID>Tex_FontFamily("FUP","shape")
|
||||
call <SID>Tex_FontFamily("FSL","shape")
|
||||
call <SID>Tex_FontFamily("FSC","shape")
|
||||
call <SID>Tex_FontFamily("FIT","shape")
|
||||
|
||||
" the \emph is special.
|
||||
if g:Tex_FontMaps | exe "vnoremap <silent> ".g:Tex_Leader."em \<C-\\>\<C-N>:call VEnclose('\\emph{', '}', '{\\em', '\\/}')<CR>" | endif
|
||||
if g:Tex_FontMaps | exe 'call IMAP ("FEM", "\\emph{<++>}<++>", "tex")' | endif
|
||||
|
||||
" }}}
|
||||
if g:Tex_Menus && g:Tex_FontMenus
|
||||
" {{{ diacritics
|
||||
call <SID>Tex_FontDiacritics('Acute', '"')
|
||||
call <SID>Tex_FontDiacritics('Breve', 'u')
|
||||
call <SID>Tex_FontDiacritics('Circle', 'r')
|
||||
call <SID>Tex_FontDiacritics('Circumflex', '^')
|
||||
call <SID>Tex_FontDiacritics('Umlaut', '"')
|
||||
call <SID>Tex_FontDiacritics('HUmlaut', 'H')
|
||||
call <SID>Tex_FontDiacritics('Dot\ over', '.')
|
||||
call <SID>Tex_FontDiacritics('Grave', '`')
|
||||
call <SID>Tex_FontDiacritics('Hacek', 'v')
|
||||
call <SID>Tex_FontDiacritics('Makron', '=')
|
||||
call <SID>Tex_FontDiacritics('Tilde', '~')
|
||||
call <SID>Tex_FontDiacritics('Underline', 'b')
|
||||
call <SID>Tex_FontDiacritics('Cedille', 'c')
|
||||
call <SID>Tex_FontDiacritics('Dot\ under', ' ')
|
||||
call <SID>Tex_FontDiacritics('Ligature', 't')
|
||||
" }}}
|
||||
" {{{ Si&ze.
|
||||
call <SID>Tex_FontSize('tiny')
|
||||
call <SID>Tex_FontSize('scriptsize')
|
||||
call <SID>Tex_FontSize('footnotesize')
|
||||
call <SID>Tex_FontSize('small')
|
||||
call <SID>Tex_FontSize('normalsize')
|
||||
call <SID>Tex_FontSize('large')
|
||||
call <SID>Tex_FontSize('Large')
|
||||
call <SID>Tex_FontSize('LARGE')
|
||||
call <SID>Tex_FontSize('huge')
|
||||
call <SID>Tex_FontSize('Huge')
|
||||
" }}}
|
||||
" {{{ &font.
|
||||
call s:Tex_Fontfont('fontencoding{}', '\fontencoding{<++>}<++>')
|
||||
call s:Tex_Fontfont('fontfamily{qtm}', '\fontfamily{<++>}<++>')
|
||||
call s:Tex_Fontfont('fontseries{m\ b\ bx\ sb\ c}', '\fontseries{<++>}<++>')
|
||||
call s:Tex_Fontfont('fontshape{n\ it\ sl\ sc\ ui}', '\fontshape{<++>}<++>')
|
||||
call s:Tex_Fontfont('fontsize{}{}', '\fontsize{<++>}{<++>}<++>')
|
||||
call s:Tex_Fontfont('selectfont', '\selectfont ')
|
||||
" }}}
|
||||
endif
|
||||
|
||||
" ==============================================================================
|
||||
" Dimensions
|
||||
" ==============================================================================
|
||||
if g:Tex_Menus
|
||||
" {{{ Static1
|
||||
call <SID>Tex_DimMenus('Static1', 'arraycolsep')
|
||||
call <SID>Tex_DimMenus('Static1', 'arrayrulewidth')
|
||||
call <SID>Tex_DimMenus('Static1', 'bibindent')
|
||||
call <SID>Tex_DimMenus('Static1', 'columnsep')
|
||||
call <SID>Tex_DimMenus('Static1', 'columnseprule')
|
||||
call <SID>Tex_DimMenus('Static1', 'columnwidth')
|
||||
call <SID>Tex_DimMenus('Static1', 'doublerulesep')
|
||||
call <SID>Tex_DimMenus('Static1', 'evensidemargin')
|
||||
call <SID>Tex_DimMenus('Static1', 'fboxrule')
|
||||
call <SID>Tex_DimMenus('Static1', 'fboxsep')
|
||||
call <SID>Tex_DimMenus('Static1', 'footheight')
|
||||
call <SID>Tex_DimMenus('Static1', 'footnotesep')
|
||||
call <SID>Tex_DimMenus('Static1', 'footskip')
|
||||
call <SID>Tex_DimMenus('Static1', 'headheight')
|
||||
call <SID>Tex_DimMenus('Static1', 'headsep')
|
||||
call <SID>Tex_DimMenus('Static1', 'itemindent')
|
||||
call <SID>Tex_DimMenus('Static1', 'labelsep')
|
||||
call <SID>Tex_DimMenus('Static1', 'labelwidth')
|
||||
call <SID>Tex_DimMenus('Static1', 'leftmargin')
|
||||
call <SID>Tex_DimMenus('Static1', 'leftmargini')
|
||||
call <SID>Tex_DimMenus('Static1', 'leftmarginii')
|
||||
call <SID>Tex_DimMenus('Static1', 'leftmarginiii')
|
||||
call <SID>Tex_DimMenus('Static1', 'leftmarginiv')
|
||||
call <SID>Tex_DimMenus('Static1', 'leftmarginv')
|
||||
call <SID>Tex_DimMenus('Static1', 'leftmarginvi')
|
||||
call <SID>Tex_DimMenus('Static1', 'linewidth')
|
||||
call <SID>Tex_DimMenus('Static1', 'listparindent')
|
||||
call <SID>Tex_DimMenus('Static1', 'marginparpush')
|
||||
call <SID>Tex_DimMenus('Static1', 'marginparsep')
|
||||
call <SID>Tex_DimMenus('Static1', 'marginparwidth')
|
||||
call <SID>Tex_DimMenus('Static1', 'mathindent')
|
||||
call <SID>Tex_DimMenus('Static1', 'oddsidemargin')
|
||||
" }}}
|
||||
" {{{ Static2
|
||||
call <SID>Tex_DimMenus('Static2', 'paperheight')
|
||||
call <SID>Tex_DimMenus('Static2', 'paperwidth')
|
||||
call <SID>Tex_DimMenus('Static2', 'parindent')
|
||||
call <SID>Tex_DimMenus('Static2', 'rightmargin')
|
||||
call <SID>Tex_DimMenus('Static2', 'tabbingsep')
|
||||
call <SID>Tex_DimMenus('Static2', 'tabcolsep')
|
||||
call <SID>Tex_DimMenus('Static2', 'textheight')
|
||||
call <SID>Tex_DimMenus('Static2', 'textwidth')
|
||||
call <SID>Tex_DimMenus('Static2', 'topmargin')
|
||||
call <SID>Tex_DimMenus('Static2', 'unitlength')
|
||||
" }}}
|
||||
" {{{ Dynamic
|
||||
call <SID>Tex_DimMenus('Dynamic', 'abovedisplayshortskip')
|
||||
call <SID>Tex_DimMenus('Dynamic', 'abovedisplayskip')
|
||||
call <SID>Tex_DimMenus('Dynamic', 'baselineskip')
|
||||
call <SID>Tex_DimMenus('Dynamic', 'belowdisplayshortskip')
|
||||
call <SID>Tex_DimMenus('Dynamic', 'belowdisplayskip')
|
||||
call <SID>Tex_DimMenus('Dynamic', 'dblfloatsep')
|
||||
call <SID>Tex_DimMenus('Dynamic', 'dbltextfloatsep')
|
||||
call <SID>Tex_DimMenus('Dynamic', 'floatsep')
|
||||
call <SID>Tex_DimMenus('Dynamic', 'intextsep')
|
||||
call <SID>Tex_DimMenus('Dynamic', 'itemsep')
|
||||
call <SID>Tex_DimMenus('Dynamic', 'parsep')
|
||||
call <SID>Tex_DimMenus('Dynamic', 'parskip')
|
||||
call <SID>Tex_DimMenus('Dynamic', 'partopsep')
|
||||
call <SID>Tex_DimMenus('Dynamic', 'textfloatsep')
|
||||
call <SID>Tex_DimMenus('Dynamic', 'topsep')
|
||||
call <SID>Tex_DimMenus('Dynamic', 'topskip')
|
||||
" }}}
|
||||
" {{{ Change
|
||||
call <SID>Tex_DimMenus('Change', 'setlength')
|
||||
call <SID>Tex_DimMenus('Change', 'addtolength')
|
||||
call <SID>Tex_DimMenus('Change', 'settoheight')
|
||||
call <SID>Tex_DimMenus('Change', 'settowidth')
|
||||
call <SID>Tex_DimMenus('Change', 'settolength')
|
||||
" }}}
|
||||
endif
|
||||
|
||||
" ==============================================================================
|
||||
" Counters
|
||||
" ==============================================================================
|
||||
if g:Tex_Menus
|
||||
" Counters {{{
|
||||
call <SID>Tex_CounterMenus('Counters', 'bottomnumber')
|
||||
call <SID>Tex_CounterMenus('Counters', 'chapter')
|
||||
call <SID>Tex_CounterMenus('Counters', 'dbltopnumber')
|
||||
call <SID>Tex_CounterMenus('Counters', 'enumi')
|
||||
call <SID>Tex_CounterMenus('Counters', 'enumii')
|
||||
call <SID>Tex_CounterMenus('Counters', 'enumiii')
|
||||
call <SID>Tex_CounterMenus('Counters', 'enumiv')
|
||||
call <SID>Tex_CounterMenus('Counters', 'equation')
|
||||
call <SID>Tex_CounterMenus('Counters', 'figure')
|
||||
call <SID>Tex_CounterMenus('Counters', 'footnote')
|
||||
call <SID>Tex_CounterMenus('Counters', 'mpfootnote')
|
||||
call <SID>Tex_CounterMenus('Counters', 'page')
|
||||
call <SID>Tex_CounterMenus('Counters', 'paragraph')
|
||||
call <SID>Tex_CounterMenus('Counters', 'part')
|
||||
call <SID>Tex_CounterMenus('Counters', 'secnumdepth')
|
||||
call <SID>Tex_CounterMenus('Counters', 'section')
|
||||
call <SID>Tex_CounterMenus('Counters', 'subparagraph')
|
||||
call <SID>Tex_CounterMenus('Counters', 'subsection')
|
||||
call <SID>Tex_CounterMenus('Counters', 'subsubsection')
|
||||
call <SID>Tex_CounterMenus('Counters', 'table')
|
||||
call <SID>Tex_CounterMenus('Counters', 'tocdepth')
|
||||
call <SID>Tex_CounterMenus('Counters', 'topnumber')
|
||||
call <SID>Tex_CounterMenus('Counters', 'totalnumber')
|
||||
" }}}
|
||||
" theCounters {{{
|
||||
call <SID>Tex_CounterMenus('theCounters', 'thebottomnumber')
|
||||
call <SID>Tex_CounterMenus('theCounters', 'thechapter')
|
||||
call <SID>Tex_CounterMenus('theCounters', 'thedbltopnumber')
|
||||
call <SID>Tex_CounterMenus('theCounters', 'theenumi')
|
||||
call <SID>Tex_CounterMenus('theCounters', 'theenumii')
|
||||
call <SID>Tex_CounterMenus('theCounters', 'theenumiii')
|
||||
call <SID>Tex_CounterMenus('theCounters', 'theenumiv')
|
||||
call <SID>Tex_CounterMenus('theCounters', 'theequation')
|
||||
call <SID>Tex_CounterMenus('theCounters', 'thefigure')
|
||||
call <SID>Tex_CounterMenus('theCounters', 'thefootnote')
|
||||
call <SID>Tex_CounterMenus('theCounters', 'thempfootnote')
|
||||
call <SID>Tex_CounterMenus('theCounters', 'thepage')
|
||||
call <SID>Tex_CounterMenus('theCounters', 'theparagraph')
|
||||
call <SID>Tex_CounterMenus('theCounters', 'thepart')
|
||||
call <SID>Tex_CounterMenus('theCounters', 'thesecnumdepth')
|
||||
call <SID>Tex_CounterMenus('theCounters', 'thesection')
|
||||
call <SID>Tex_CounterMenus('theCounters', 'thesubparagraph')
|
||||
call <SID>Tex_CounterMenus('theCounters', 'thesubsection')
|
||||
call <SID>Tex_CounterMenus('theCounters', 'thesubsubsection')
|
||||
call <SID>Tex_CounterMenus('theCounters', 'thetable')
|
||||
call <SID>Tex_CounterMenus('theCounters', 'thetocdepth')
|
||||
call <SID>Tex_CounterMenus('theCounters', 'thetopnumber')
|
||||
call <SID>Tex_CounterMenus('theCounters', 'thetotalnumber')
|
||||
" }}}
|
||||
" Type {{{
|
||||
call <SID>Tex_CounterMenus('Type', 'alph')
|
||||
call <SID>Tex_CounterMenus('Type', 'Alph')
|
||||
call <SID>Tex_CounterMenus('Type', 'arabic')
|
||||
call <SID>Tex_CounterMenus('Type', 'roman')
|
||||
call <SID>Tex_CounterMenus('Type', 'Roman')
|
||||
" }}}
|
||||
endif
|
||||
|
||||
" ==============================================================================
|
||||
" Various
|
||||
" ==============================================================================
|
||||
if g:Tex_Menus
|
||||
" Various {{{
|
||||
call <SID>Tex_VariousMenus('ref{}' , '\ref{<++>}<++>')
|
||||
call <SID>Tex_VariousMenus('pageref{}' , '\pageref{<++>}<++>')
|
||||
call <SID>Tex_VariousMenus('label{}' , '\label{<++>}<++>')
|
||||
call <SID>Tex_VariousMenus('footnote{}' , '\footnote{<++>}<++>')
|
||||
call <SID>Tex_VariousMenus('footnotemark{}', '\footnotemark{<++>}<++>')
|
||||
call <SID>Tex_VariousMenus('footnotemark{}', '\footnotetext{<++>}<++>')
|
||||
call <SID>Tex_VariousMenus('cite{}' , '\cite{<++>}<++>')
|
||||
call <SID>Tex_VariousMenus('nocite{}' , '\nocite{<++>}<++>')
|
||||
" }}}
|
||||
endif
|
||||
|
||||
if g:Tex_CatchVisMapErrors
|
||||
exe "vnoremap ".g:Tex_Leader." :\<C-u>call ExecMap('".g:Tex_Leader."', 'v')\<CR>"
|
||||
endif
|
||||
" this is for avoiding reinclusion of imaps from next time on.
|
||||
let s:doneOnce = 1
|
||||
|
||||
" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,400 +0,0 @@
|
||||
"=============================================================================
|
||||
" File: folding.vim
|
||||
" Author: Srinath Avadhanula
|
||||
" modifications/additions by Zhang Linbo
|
||||
" Created: Tue Apr 23 05:00 PM 2002 PST
|
||||
"
|
||||
" Description: functions to interact with Syntaxfolds.vim
|
||||
"=============================================================================
|
||||
|
||||
nnoremap <unique> <Plug>Tex_RefreshFolds :call MakeTexFolds(1)<cr>
|
||||
|
||||
augroup LatexSuite
|
||||
au LatexSuite User LatexSuiteFileType
|
||||
\ call Tex_Debug('folding.vim: catching LatexSuiteFileType', 'fold') |
|
||||
\ call Tex_SetFoldOptions()
|
||||
augroup END
|
||||
|
||||
" Tex_SetFoldOptions: sets maps for every buffer {{{
|
||||
" Description:
|
||||
function! Tex_SetFoldOptions()
|
||||
if exists('b:doneSetFoldOptions')
|
||||
return
|
||||
endif
|
||||
let b:doneSetFoldOptions = 1
|
||||
|
||||
setlocal foldtext=TexFoldTextFunction()
|
||||
|
||||
if g:Tex_Folding && g:Tex_AutoFolding
|
||||
call MakeTexFolds(0)
|
||||
endif
|
||||
|
||||
let s:ml = '<Leader>'
|
||||
|
||||
call Tex_MakeMap(s:ml."rf", "<Plug>Tex_RefreshFolds", 'n', '<silent> <buffer>')
|
||||
|
||||
endfunction " }}}
|
||||
" Tex_FoldSections: creates section folds {{{
|
||||
" Author: Zhang Linbo
|
||||
" Description:
|
||||
" This function takes a comma seperated list of "sections" and creates fold
|
||||
" definitions for them. The first item is supposed to be the "shallowest" field
|
||||
" and the last is the "deepest". See g:Tex_FoldedSections for the default
|
||||
" definition of the lst input argument.
|
||||
"
|
||||
" **works recursively**
|
||||
function! Tex_FoldSections(lst, endpat)
|
||||
let i = match(a:lst, ',')
|
||||
if i > 0
|
||||
let s = strpart(a:lst, 0, i)
|
||||
else
|
||||
let s = a:lst
|
||||
endif
|
||||
if s =~ '%%fakesection'
|
||||
let s = '^\s*' . s
|
||||
else
|
||||
let pattern = ''
|
||||
let prefix = ''
|
||||
for label in split(s, "|")
|
||||
let pattern .= prefix . '^\s*\\' . label . '\W\|^\s*%%fake' . label
|
||||
let prefix = '\W\|'
|
||||
endfor
|
||||
let s = pattern
|
||||
endif
|
||||
let endpat = s . '\|' . a:endpat
|
||||
if i > 0
|
||||
call Tex_FoldSections(strpart(a:lst,i+1), endpat)
|
||||
endif
|
||||
let endpat = '^\s*\\appendix\W\|' . endpat
|
||||
call AddSyntaxFoldItem(s, endpat, 0, -1)
|
||||
endfunction
|
||||
" }}}
|
||||
" MakeTexFolds: function to create fold items for latex. {{{
|
||||
"
|
||||
" used in conjunction with MakeSyntaxFolds().
|
||||
" see ../plugin/syntaxFolds.vim for documentation
|
||||
function! MakeTexFolds(force)
|
||||
if exists('g:Tex_Folding') && !g:Tex_Folding
|
||||
return
|
||||
endif
|
||||
if &ft != 'tex'
|
||||
return
|
||||
end
|
||||
|
||||
" Setup folded items lists g:Tex_Foldedxxxx
|
||||
" 1. Use default value if g:Tex_Foldedxxxxxx is not defined
|
||||
" 2. prepend default value to g:Tex_Foldedxxxxxx if it starts with ','
|
||||
" 3. append default value to g:Tex_Foldedxxxxxx if it ends with ','
|
||||
|
||||
" Folding items which are not caught in any of the standard commands,
|
||||
" environments or sections.
|
||||
let s = 'item,slide,preamble,<<<'
|
||||
if !exists('g:Tex_FoldedMisc')
|
||||
let g:Tex_FoldedMisc = s
|
||||
elseif g:Tex_FoldedMisc[0] == ','
|
||||
let g:Tex_FoldedMisc = s . g:Tex_FoldedMisc
|
||||
elseif g:Tex_FoldedMisc =~ ',$'
|
||||
let g:Tex_FoldedMisc = g:Tex_FoldedMisc . s
|
||||
endif
|
||||
|
||||
" By default do not fold any commands. It looks like trying to fold
|
||||
" commands is a difficult problem since commands can be arbitrarily nested
|
||||
" and the end patterns are not unique unlike the case of environments.
|
||||
" For this to work well, we need a regexp which will match a line only if
|
||||
" a command begins on that line but does not end on that line. This
|
||||
" requires a regexp which will match unbalanced curly braces and that is
|
||||
" apparently not doable with regexps.
|
||||
let s = ''
|
||||
if !exists('g:Tex_FoldedCommands')
|
||||
let g:Tex_FoldedCommands = s
|
||||
elseif g:Tex_FoldedCommands[0] == ','
|
||||
let g:Tex_FoldedCommands = s . g:Tex_FoldedCommands
|
||||
elseif g:Tex_FoldedCommands =~ ',$'
|
||||
let g:Tex_FoldedCommands = g:Tex_FoldedCommands . s
|
||||
endif
|
||||
|
||||
let s = 'verbatim,comment,eq,gather,align,figure,table,thebibliography,'
|
||||
\. 'keywords,abstract,titlepage'
|
||||
if !exists('g:Tex_FoldedEnvironments')
|
||||
let g:Tex_FoldedEnvironments = s
|
||||
elseif g:Tex_FoldedEnvironments[0] == ','
|
||||
let g:Tex_FoldedEnvironments = s . g:Tex_FoldedEnvironments
|
||||
elseif g:Tex_FoldedEnvironments =~ ',$'
|
||||
let g:Tex_FoldedEnvironments = g:Tex_FoldedEnvironments . s
|
||||
endif
|
||||
|
||||
if !exists('g:Tex_FoldedSections')
|
||||
let g:Tex_FoldedSections = 'part,chapter,section,'
|
||||
\. 'subsection,subsubsection,paragraph'
|
||||
endif
|
||||
|
||||
" the order in which these calls are made decides the nestedness. in
|
||||
" latex, a table environment will always be embedded in either an item or
|
||||
" a section etc. not the other way around. so we first fold up all the
|
||||
" tables. and then proceed with the other regions.
|
||||
|
||||
let b:numFoldItems = 0
|
||||
|
||||
" ========================================================================
|
||||
" How to add new folding items {{{
|
||||
" ========================================================================
|
||||
"
|
||||
" Each of the following function calls defines a syntax fold region. Each
|
||||
" definition consists of a call to the AddSyntaxFoldItem() function.
|
||||
"
|
||||
" The order in which the folds are defined is important. Juggling the
|
||||
" order of the function calls will create havoc with folding. The
|
||||
" "deepest" folding item needs to be called first. For example, if
|
||||
" the \begin{table} environment is a subset (or lies within) the \section
|
||||
" environment, then add the definition for the \table first.
|
||||
"
|
||||
" The AddSyntaxFoldItem() function takes either 4 or 6 arguments. When it
|
||||
" is called with 4 arguments, it is equivalent to calling it with 6
|
||||
" arguments with the last two left blank (i.e as empty strings)
|
||||
"
|
||||
" The explanation for each argument is as follows:
|
||||
" startpat: a line matching this pattern defines the beginning of a fold.
|
||||
" endpat : a line matching this pattern defines the end of a fold.
|
||||
" startoff: this is the offset from the starting line at which folding will
|
||||
" actually start
|
||||
" endoff : like startoff, but gives the offset of the actual fold end from
|
||||
" the line satisfying endpat.
|
||||
" startoff and endoff are necessary when the folding region does
|
||||
" not have a specific end pattern corresponding to a start
|
||||
" pattern. for example in latex,
|
||||
" \begin{section}
|
||||
" defines the beginning of a section, but its not necessary to
|
||||
" have a corresponding
|
||||
" \end{section}
|
||||
" the section is assumed to end 1 line _before_ another section
|
||||
" starts.
|
||||
" startskip: a pattern which defines the beginning of a "skipped" region.
|
||||
"
|
||||
" For example, suppose we define a \itemize fold as follows:
|
||||
" startpat = '^\s*\\item',
|
||||
" endpat = '^\s*\\item\|^\s*\\end{\(enumerate\|itemize\|description\)}',
|
||||
" startoff = 0,
|
||||
" endoff = -1
|
||||
"
|
||||
" This defines a fold which starts with a line beginning with an
|
||||
" \item and ending one line before a line beginning with an
|
||||
" \item or \end{enumerate} etc.
|
||||
"
|
||||
" Then, as long as \item's are not nested things are fine.
|
||||
" However, once items begin to nest, the fold started by one
|
||||
" \item can end because of an \item in an \itemize
|
||||
" environment within this \item. i.e, the following can happen:
|
||||
"
|
||||
" \begin{itemize}
|
||||
" \item Some text <------- fold will start here
|
||||
" This item will contain a nested item
|
||||
" \begin{itemize} <----- fold will end here because next line contains \item...
|
||||
" \item Hello
|
||||
" \end{itemize} <----- ... instead of here.
|
||||
" \item Next item of the parent itemize
|
||||
" \end{itemize}
|
||||
"
|
||||
" Therefore, in order to completely define a folding item which
|
||||
" allows nesting, we need to also define a "skip" pattern.
|
||||
" startskip and end skip do that.
|
||||
" Leave '' when there is no nesting.
|
||||
" endskip: the pattern which defines the end of the "skip" pattern for
|
||||
" nested folds.
|
||||
"
|
||||
" Example:
|
||||
" 1. A syntax fold region for a latex section is
|
||||
" startpat = "\\section{"
|
||||
" endpat = "\\section{"
|
||||
" startoff = 0
|
||||
" endoff = -1
|
||||
" startskip = ''
|
||||
" endskip = ''
|
||||
" Note that the start and end patterns are thus the same and endoff has a
|
||||
" negative value to capture the effect of a section ending one line before
|
||||
" the next starts.
|
||||
" 2. A syntax fold region for the \itemize environment is:
|
||||
" startpat = '^\s*\\item',
|
||||
" endpat = '^\s*\\item\|^\s*\\end{\(enumerate\|itemize\|description\)}',
|
||||
" startoff = 0,
|
||||
" endoff = -1,
|
||||
" startskip = '^\s*\\begin{\(enumerate\|itemize\|description\)}',
|
||||
" endskip = '^\s*\\end{\(enumerate\|itemize\|description\)}'
|
||||
" Note the use of startskip and endskip to allow nesting.
|
||||
"
|
||||
"
|
||||
" }}}
|
||||
" ========================================================================
|
||||
|
||||
" {{{ comment lines
|
||||
if g:Tex_FoldedMisc =~ '\<comments\>'
|
||||
call AddSyntaxFoldItem (
|
||||
\ '^%\([^%]\|[^f]\|[^a]\|[^k]\|[^e]\)',
|
||||
\ '^[^%]',
|
||||
\ 0,
|
||||
\ -1
|
||||
\ )
|
||||
endif
|
||||
" }}}
|
||||
|
||||
" {{{ items
|
||||
if g:Tex_FoldedMisc =~ '\<item\>'
|
||||
call AddSyntaxFoldItem (
|
||||
\ '^\s*\\item',
|
||||
\ '^\s*\\item\|^\s*\\end{\(enumerate\|itemize\|description\)}',
|
||||
\ 0,
|
||||
\ -1,
|
||||
\ '^\s*\\begin{\(enumerate\|itemize\|description\)}',
|
||||
\ '^\s*\\end{\(enumerate\|itemize\|description\)}'
|
||||
\ )
|
||||
endif
|
||||
" }}}
|
||||
|
||||
" {{{ title
|
||||
if g:Tex_FoldedMisc =~ '\<title\>'
|
||||
call AddSyntaxFoldItem (
|
||||
\ '^\s*\\title\W',
|
||||
\ '^\s*\\maketitle',
|
||||
\ 0,
|
||||
\ 0
|
||||
\ )
|
||||
endif
|
||||
" }}}
|
||||
|
||||
" Commands and Environments {{{
|
||||
" Fold the commands and environments in 2 passes.
|
||||
let pass = 0
|
||||
while pass < 2
|
||||
if pass == 0
|
||||
let lst = g:Tex_FoldedCommands
|
||||
else
|
||||
let lst = g:Tex_FoldedEnvironments
|
||||
endif
|
||||
while lst != ''
|
||||
let i = match(lst, ',')
|
||||
if i > 0
|
||||
let s = strpart(lst, 0, i)
|
||||
let lst = strpart(lst, i+1)
|
||||
else
|
||||
let s = lst
|
||||
let lst = ''
|
||||
endif
|
||||
if s != ''
|
||||
if pass == 0
|
||||
" NOTE: This pattern ensures that a command which is
|
||||
" terminated on the same line will not start a fold.
|
||||
" However, it will also refuse to fold certain commands
|
||||
" which have not terminated. eg:
|
||||
" \commandname{something \bf{text} and
|
||||
" will _not_ start a fold.
|
||||
" In other words, the pattern is safe, but not exact.
|
||||
call AddSyntaxFoldItem('^\s*\\'.s.'{[^{}]*$','^[^}]*}',0,0)
|
||||
else
|
||||
call AddSyntaxFoldItem('^\s*\\begin{'.s,'\(^\|\s\)\s*\\end{'.s,0,0)
|
||||
endif
|
||||
endif
|
||||
endwhile
|
||||
let pass = pass + 1
|
||||
endwhile
|
||||
" }}}
|
||||
|
||||
" Sections {{{
|
||||
if g:Tex_FoldedSections != ''
|
||||
call Tex_FoldSections(g:Tex_FoldedSections,
|
||||
\ '^\s*\\frontmatter\|^\s*\\mainmatter\|^\s*\\backmatter\|'
|
||||
\. '^\s*\\begin{thebibliography\|>>>\|^\s*\\endinput\|'
|
||||
\. '^\s*\\begin{slide\|^\s*\\end{document')
|
||||
endif
|
||||
" }}}
|
||||
|
||||
" {{{ slide
|
||||
if g:Tex_FoldedMisc =~ '\<slide\>'
|
||||
call AddSyntaxFoldItem (
|
||||
\ '^\s*\\begin{slide',
|
||||
\ '^\s*\\appendix\W\|^\s*\\chapter\W\|^\s*\\end{slide\|^\s*\\end{document',
|
||||
\ 0,
|
||||
\ 0
|
||||
\ )
|
||||
endif
|
||||
" }}}
|
||||
|
||||
" {{{ preamble
|
||||
if g:Tex_FoldedMisc =~ '\<preamble\>'
|
||||
call AddSyntaxFoldItem (
|
||||
\ '^\s*\\document\(class\|style\).*{',
|
||||
\ '^\s*\\begin{document}',
|
||||
\ 0,
|
||||
\ -1
|
||||
\ )
|
||||
endif
|
||||
" }}}
|
||||
|
||||
" Manually folded regions {{{
|
||||
if g:Tex_FoldedMisc =~ '\(^\|,\)<<<\(,\|$\)'
|
||||
call AddSyntaxFoldItem (
|
||||
\ '<<<',
|
||||
\ '>>>',
|
||||
\ 0,
|
||||
\ 0
|
||||
\ )
|
||||
endif
|
||||
" }}}
|
||||
|
||||
call MakeSyntaxFolds(a:force)
|
||||
normal! zv
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
" TexFoldTextFunction: create fold text for folds {{{
|
||||
function! TexFoldTextFunction()
|
||||
let leadingSpace = matchstr(' ', ' \{,'.indent(v:foldstart).'}')
|
||||
if getline(v:foldstart) =~ '^\s*\\begin{'
|
||||
let header = matchstr(getline(v:foldstart),
|
||||
\ '^\s*\\begin{\zs\([:alpha:]*\)[^}]*\ze}')
|
||||
let caption = ''
|
||||
let label = ''
|
||||
let i = v:foldstart
|
||||
while i <= v:foldend
|
||||
if getline(i) =~ '\\caption'
|
||||
" distinguish between
|
||||
" \caption{fulldesc} - fulldesc will be displayed
|
||||
" \caption[shortdesc]{fulldesc} - shortdesc will be displayed
|
||||
if getline(i) =~ '\\caption\['
|
||||
let caption = matchstr(getline(i), '\\caption\[\zs[^\]]*')
|
||||
let caption = substitute(caption, '\zs\]{.*}[^}]*$', '', '')
|
||||
else
|
||||
let caption = matchstr(getline(i), '\\caption{\zs.*')
|
||||
let caption = substitute(caption, '\zs}[^}]*$', '', '')
|
||||
end
|
||||
elseif getline(i) =~ '\\label'
|
||||
let label = matchstr(getline(i), '\\label{\zs.*')
|
||||
" :FIXME: this does not work when \label contains a
|
||||
" newline or a }-character
|
||||
let label = substitute(label, '\([^}]*\)}.*$', '\1', '')
|
||||
end
|
||||
|
||||
let i = i + 1
|
||||
endwhile
|
||||
|
||||
let ftxto = foldtext()
|
||||
" if no caption found, then use the second line.
|
||||
if caption == ''
|
||||
let caption = getline(v:foldstart + 1)
|
||||
end
|
||||
|
||||
let retText = matchstr(ftxto, '^[^:]*').': '.header.
|
||||
\ ' ('.label.'): '.caption
|
||||
return leadingSpace.retText
|
||||
|
||||
elseif getline(v:foldstart) =~ '^%' && getline(v:foldstart) !~ '^%%fake'
|
||||
let ftxto = foldtext()
|
||||
return leadingSpace.substitute(ftxto, ':', ': % ', '')
|
||||
elseif getline(v:foldstart) =~ '^\s*\\document\(class\|style\).*{'
|
||||
let ftxto = leadingSpace.foldtext()
|
||||
return substitute(ftxto, ':', ': Preamble: ', '')
|
||||
else
|
||||
return leadingSpace.foldtext()
|
||||
end
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,729 +0,0 @@
|
||||
"=============================================================================
|
||||
" File: mathmacros.vim
|
||||
" Author: Mikolaj Machowski
|
||||
" Created: Tue Apr 23 06:00 PM 2002 PST
|
||||
"
|
||||
" Description: macros for everything mathematical in latex.
|
||||
"=============================================================================
|
||||
|
||||
if !(has('gui_running') && g:Tex_MathMenus && g:Tex_Menus)
|
||||
finish
|
||||
endif
|
||||
|
||||
let s:MathMenuName = g:Tex_MenuPrefix.'Ma&th.'
|
||||
|
||||
function! Tex_MathMenuRemove()
|
||||
exe 'silent! aunmenu '.s:MathMenuName
|
||||
endfunction
|
||||
|
||||
let s:pA = 'amenu <silent> 85 '.s:MathMenuName
|
||||
|
||||
" brackets and dollars {{{
|
||||
exe s:pA.'\\&[\ \\] <plug><C-r>=IMAP_PutTextWithMovement("\\[<++>\\]<++>")<cr>'
|
||||
exe s:pA.'\\&(\ \\) <plug><C-r>=IMAP_PutTextWithMovement("\\(<++>\\)<++>")<cr>'
|
||||
exe s:pA.'&$\ $ <plug>$$'
|
||||
exe s:pA.'-sepmath1- :'
|
||||
" }}}
|
||||
" MATH arrows {{{
|
||||
let s:pA1 = s:pA."&Arrows."
|
||||
exe s:pA1.'Leftarrow<Tab>⇐ <plug>\Leftarrow '
|
||||
exe s:pA1.'leftarrow<Tab>← <plug>\leftarrow'
|
||||
exe s:pA1.'longleftarrow<Tab>← <plug>\longleftarrow '
|
||||
exe s:pA1.'Longleftarrow<Tab>⇐ <plug>\Longleftarrow '
|
||||
exe s:pA1.'rightarrow<Tab>→ <plug>\rightarrow '
|
||||
exe s:pA1.'longrightarrow<Tab>→ <plug>\longrightarrow '
|
||||
exe s:pA1.'Rightarrow<Tab>⇒ <plug>\Rightarrow '
|
||||
exe s:pA1.'Longrightarrow<Tab>⇒ <plug>\Longrightarrow '
|
||||
exe s:pA1.'leftrightarrow<Tab>⇆ <plug>\leftrightarrow '
|
||||
exe s:pA1.'longleftrightarrow<Tab>↔ <plug>\longleftrightarrow '
|
||||
exe s:pA1.'Leftrightarrow<Tab>⇔ <plug>\Leftrightarrow '
|
||||
exe s:pA1.'Longleftrightarrow<Tab>⇔ <plug>\Longleftrightarrow '
|
||||
exe s:pA1.'uparrow<Tab>↑ <plug>\uparrow '
|
||||
exe s:pA1.'Uparrow<Tab>⇑ <plug>\Uparrow '
|
||||
exe s:pA1.'downarrow<Tab>↓ <plug>\downarrow '
|
||||
exe s:pA1.'Downarrow<Tab>⇓ <plug>\Downarrow '
|
||||
exe s:pA1.'updownarrow<Tab>↕ <plug>\updownarrow '
|
||||
exe s:pA1.'Updownarrow<Tab>⇕ <plug>\Updownarrow '
|
||||
exe s:pA1.'nearrow<Tab>↗ <plug>\nearrow '
|
||||
exe s:pA1.'searrow<Tab>↘ <plug>\searrow '
|
||||
exe s:pA1.'swarrow<Tab>↙ <plug>\swarrow '
|
||||
exe s:pA1.'nwarrow<Tab>↖ <plug>\nwarrow '
|
||||
exe s:pA1.'mapsto<Tab>↦ <plug>\mapsto '
|
||||
exe s:pA1.'leadsto<Tab>↝ <plug>\leadsto '
|
||||
exe s:pA1.'longmapsto<Tab>⇖ <plug>\longmapsto '
|
||||
exe s:pA1.'hookleftarrow<Tab>↩ <plug>\hookleftarrow '
|
||||
exe s:pA1.'hookrightarrow<Tab>↪ <plug>\hookrightarrow '
|
||||
exe s:pA1.'leftharpoonup<Tab>↼ <plug>\leftharpoonup '
|
||||
exe s:pA1.'leftharpoondown<Tab>↽ <plug>\leftharpoondown '
|
||||
exe s:pA1.'rightharpoonup<Tab>⇀ <plug>\rightharpoonup '
|
||||
exe s:pA1.'rightharpoondown<Tab>⇁ <plug>\rightharpoondown '
|
||||
exe s:pA1.'rightleftharpoons<Tab>⇌ <plug>\rightleftharpoons '
|
||||
exe s:pA1.'overleftarrow<Tab> <plug>\overleftarrow '
|
||||
exe s:pA1.'overrightarrow<Tab> <plug>\overrightarrow '
|
||||
exe s:pA1.'overleftrightarrow<Tab> <plug>\overleftrightarrow '
|
||||
exe s:pA1.'underleftarrow<Tab> <plug>\underleftarrow '
|
||||
exe s:pA1.'underrightarrow<Tab> <plug>\underrightarrow '
|
||||
exe s:pA1.'underleftrightarrow<Tab> <plug>\underleftrightarrow '
|
||||
exe s:pA1.'xleftarrow<Tab> <plug>\xleftarrow '
|
||||
exe s:pA1.'xrightarrow<Tab> <plug>\xrightarrow '
|
||||
" }}}
|
||||
" MATH Arrows2 {{{
|
||||
let s:pA1a = s:pA."Arrows2."
|
||||
exe s:pA1a.'dashleftarrow<Tab>⇠ <plug>\dashleftarrow '
|
||||
exe s:pA1a.'leftleftarrows<Tab>⇇ <plug>\leftleftarrows '
|
||||
exe s:pA1a.'leftrightarrows<Tab>⇆ <plug>\leftrightarrows '
|
||||
exe s:pA1a.'Lleftarrow<Tab>⇚ <plug>\Lleftarrow '
|
||||
exe s:pA1a.'twoheadleftarrow<Tab>↞ <plug>\twoheadleftarrow '
|
||||
exe s:pA1a.'leftarrowtail<Tab>↢ <plug>\leftarrowtail '
|
||||
exe s:pA1a.'leftrightharpoons<Tab>⇋ <plug>\leftrightharpoons '
|
||||
exe s:pA1a.'Lsh<Tab>↰ <plug>\Lsh '
|
||||
exe s:pA1a.'looparrowleft<Tab>↫ <plug>\looparrowleft '
|
||||
exe s:pA1a.'curvearrowleft<Tab>↶ <plug>\curvearrowleft '
|
||||
exe s:pA1a.'circlearrowleft<Tab>↺ <plug>\circlearrowleft '
|
||||
exe s:pA1a.'dashrightarrow<Tab>⇢ <plug>\dashrightarrow '
|
||||
exe s:pA1a.'rightrightarrows<Tab>⇉ <plug>\rightrightarrows '
|
||||
exe s:pA1a.'rightleftarrows<Tab>⇄ <plug>\rightleftarrows '
|
||||
exe s:pA1a.'Rrightarrow<Tab>⇛ <plug>\Rrightarrow '
|
||||
exe s:pA1a.'twoheadrightarrow<Tab>↠ <plug>\twoheadrightarrow '
|
||||
exe s:pA1a.'rightarrowtail<Tab>↣ <plug>\rightarrowtail '
|
||||
exe s:pA1a.'rightleftharpoons<Tab>⇌ <plug>\rightleftharpoons '
|
||||
exe s:pA1a.'Rsh<Tab>↱ <plug>\Rsh '
|
||||
exe s:pA1a.'looparrowright<Tab>↬ <plug>\looparrowright '
|
||||
exe s:pA1a.'curvearrowright<Tab>↷ <plug>\curvearrowright '
|
||||
exe s:pA1a.'circlearrowright<Tab>↻ <plug>\circlearrowright '
|
||||
exe s:pA1a.'multimap<Tab>⊸ <plug>\multimap '
|
||||
exe s:pA1a.'upuparrows<Tab>⇈ <plug>\upuparrows '
|
||||
exe s:pA1a.'downdownarrows<Tab>⇊ <plug>\downdownarrows '
|
||||
exe s:pA1a.'upharpoonleft<Tab>↿ <plug>\upharpoonleft '
|
||||
exe s:pA1a.'upharpoonright<Tab>↾ <plug>\upharpoonright '
|
||||
exe s:pA1a.'downharpoonleft<Tab>⇃ <plug>\downharpoonleft '
|
||||
exe s:pA1a.'downharpoonright<Tab>⇂ <plug>\downharpoonright '
|
||||
exe s:pA1a.'rightsquigarrow<Tab>⇝ <plug>\rightsquigarrow '
|
||||
exe s:pA1a.'leftrightsquigarrow<Tab>↭ <plug>\leftrightsquigarrow '
|
||||
" }}}
|
||||
" MATH nArrows {{{
|
||||
let s:pA1b = s:pA."&nArrows."
|
||||
exe s:pA1b.'nleftarrow<Tab>↚ <plug>\nleftarrow '
|
||||
exe s:pA1b.'nLeftarrow<Tab>⇍ <plug>\nLeftarrow '
|
||||
exe s:pA1b.'nleftrightarrow<Tab>↮ <plug>\nleftrightarrow '
|
||||
exe s:pA1b.'nLeftrightarrow<Tab>⇎ <plug>\nleftrightarrow '
|
||||
exe s:pA1b.'nrightarrow<Tab>↛ <plug>\nrightarrow '
|
||||
exe s:pA1b.'nRightarrow<Tab>⇏ <plug>\nRightarrow '
|
||||
" }}}
|
||||
" MATH Fonts {{{
|
||||
let s:pA2a = s:pA."&MathFonts."
|
||||
exe s:pA2a.'mathbf{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathbf{<++>}<++>")<cr>'
|
||||
exe s:pA2a.'mathrm{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathrm{<++>}<++>")<cr>'
|
||||
exe s:pA2a.'mathsf{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathsf{<++>}<++>")<cr>'
|
||||
exe s:pA2a.'mathtt{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathtt{<++>}<++>")<cr>'
|
||||
exe s:pA2a.'mathit{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathit{<++>}<++>")<cr>'
|
||||
exe s:pA2a.'mathfrak{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathfrak{<++>}<++>")<cr>'
|
||||
exe s:pA2a.'mathcal{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathcal{<++>}<++>")<cr>'
|
||||
exe s:pA2a.'mathscr{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathscr{<++>}<++>")<cr>'
|
||||
exe s:pA2a.'mathbb{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathbb{<++>}<++>")<cr>'
|
||||
" }}}
|
||||
" Greek Letters small {{{
|
||||
let s:pA2 = s:pA."&Greek.&Small."
|
||||
exe s:pA2.'alpha<Tab>`a\ \ α <plug>\alpha '
|
||||
exe s:pA2.'beta<Tab>`b\ \ β <plug>\beta '
|
||||
exe s:pA2.'gamma<Tab>`g\ \ γ <plug>\gamma '
|
||||
exe s:pA2.'delta<Tab>`d\ \ δ <plug>\delta '
|
||||
exe s:pA2.'epsilon<Tab>∊ <plug>\epsilon '
|
||||
exe s:pA2.'varepsilon<Tab>`e\ \ ε <plug>\varepsilon '
|
||||
exe s:pA2.'zeta<Tab>`z\ \ ζ <plug>\zeta '
|
||||
exe s:pA2.'eta<Tab>`h\ \ η <plug>\eta '
|
||||
exe s:pA2.'theta<Tab>`q\ \ θ <plug>\theta '
|
||||
exe s:pA2.'vartheta<Tab>ϑ <plug>\vartheta '
|
||||
exe s:pA2.'iota<Tab>`i\ \ ι <plug>\iota '
|
||||
exe s:pA2.'kappa<Tab>`k\ \ κ <plug>\kappa '
|
||||
exe s:pA2.'lambda<Tab>`l\ \ λ <plug>\lambda '
|
||||
exe s:pA2.'mu<Tab>`m\ \ μ <plug>\mu '
|
||||
exe s:pA2.'nu<Tab>`n\ \ ν <plug>\nu '
|
||||
exe s:pA2.'xi<Tab>`x\ \ ξ <plug>\xi '
|
||||
exe s:pA2.'pi<Tab>`p\ \ π <plug>\pi '
|
||||
exe s:pA2.'varpi<Tab>ϖ <plug>\varpi '
|
||||
exe s:pA2.'rho<Tab>`r\ \ ρ <plug>\rho '
|
||||
exe s:pA2.'varrho<Tab>ϱ <plug>\varrho '
|
||||
exe s:pA2.'sigma<Tab>`s\ \ σ <plug>\sigma '
|
||||
exe s:pA2.'varsigma<Tab>`v\ \ ς <plug>\varsigma '
|
||||
exe s:pA2.'tau<Tab>`t\ \ τ <plug>\tau '
|
||||
exe s:pA2.'upsilon<Tab>`u\ \ υ <plug>\upsilon '
|
||||
exe s:pA2.'phi<Tab>φ <plug>\phi '
|
||||
exe s:pA2.'varphi<Tab>`f\ \ ϕ <plug>\varphi '
|
||||
exe s:pA2.'chi<Tab>`c\ \ χ <plug>\chi '
|
||||
exe s:pA2.'psi<Tab>`y\ \ ψ <plug>\psi '
|
||||
exe s:pA2.'omega<Tab>`w\ \ ω <plug>\omega '
|
||||
" }}}
|
||||
" Greek Letters big {{{
|
||||
let s:pA3 = s:pA.'&Greek.&Big.'
|
||||
exe s:pA3.'Alpha<Tab>`A\ \ A <plug>\Alpha '
|
||||
exe s:pA3.'Beta<Tab>`B\ \ B <plug>\Beta '
|
||||
exe s:pA3.'Gamma<Tab>`G\ \ Γ <plug>\Gamma '
|
||||
exe s:pA3.'Delta<Tab>`D\ \ Δ <plug>\Delta '
|
||||
exe s:pA3.'Epsilon<Tab>`E\ \ E <plug>\Epsilon '
|
||||
exe s:pA3.'Zeta<Tab>`Z\ \ Z <plug>\mathrm{Z} '
|
||||
exe s:pA3.'Eta<Tab>`H\ \ H <plug>\Eta '
|
||||
exe s:pA3.'Theta<Tab>Θ <plug>\Theta '
|
||||
exe s:pA3.'Iota<Tab>I <plug>\mathrm{I} '
|
||||
exe s:pA3.'Kappa<Tab>`K\ \ K <plug>\Kappa '
|
||||
exe s:pA3.'Lambda<Tab>`L\ \ Λ <plug>\Lambda '
|
||||
exe s:pA3.'Mu<Tab>`M\ \ M <plug>\Mu '
|
||||
exe s:pA3.'Nu<Tab>`N\ \ N <plug>\Nu '
|
||||
exe s:pA3.'Xi<Tab>`X\ \ Ξ <plug>\Xi '
|
||||
exe s:pA3.'Pi<Tab>`P\ \ Π <plug>\Pi '
|
||||
exe s:pA3.'Rho<Tab>`R\ \ P <plug>\Rho '
|
||||
exe s:pA3.'Sigma<Tab>`S\ \ Σ <plug>\Sigma '
|
||||
exe s:pA3.'Tau<Tab>`T\ \ T <plug>\Tau '
|
||||
exe s:pA3.'Upsilon<Tab>`U\ \ Y <plug>\Upsilon '
|
||||
exe s:pA3.'Phi<Tab>Φ <plug>\Phi '
|
||||
exe s:pA3.'Chi<Tab>`C\ \ X <plug>\Chi '
|
||||
exe s:pA3.'Psi<Tab>`Y\ \ Ψ <plug>\Psi '
|
||||
exe s:pA3.'Omega<Tab>`W\ \ Ω <plug>\Omega '
|
||||
" }}}
|
||||
" BinaryRel1 {{{
|
||||
let s:pA4 = s:pA."&BinaryRel1."
|
||||
exe s:pA4.'ll<Tab>≪ <plug>\ll '
|
||||
exe s:pA4.'lll<Tab>⋘ <plug>\lll '
|
||||
exe s:pA4.'leqslant<Tab>≤ <plug>\leqslant '
|
||||
exe s:pA4.'leq<Tab>≤ <plug>\leq '
|
||||
exe s:pA4.'leqq<Tab>≦ <plug>\leqq '
|
||||
exe s:pA4.'eqslantless<Tab>⋜ <plug>\eqslantless '
|
||||
exe s:pA4.'lessdot<Tab>⋖ <plug>\lessdot '
|
||||
exe s:pA4.'prec<Tab>≺ <plug>\prec '
|
||||
exe s:pA4.'preceq<Tab>≼ <plug>\preceq '
|
||||
exe s:pA4.'preccurlyeq<Tab>≼ <plug>\preccurlyeq '
|
||||
exe s:pA4.'curlyeqprec<Tab>⋞ <plug>\curlyeqprec '
|
||||
exe s:pA4.'lesssim<Tab>≲ <plug>\lesssim '
|
||||
exe s:pA4.'lessapprox<Tab> <plug>\lessapprox '
|
||||
exe s:pA4.'precsim<Tab>≾ <plug>\precsim '
|
||||
exe s:pA4.'precapprox<Tab> <plug>\precapprox '
|
||||
exe s:pA4.'in<Tab>∈ <plug>\in '
|
||||
exe s:pA4.'subset<Tab>`(\ \ ⊂ <plug>\subset '
|
||||
exe s:pA4.'Subset<Tab>`)\ \ ⋐ <plug>\Subset '
|
||||
exe s:pA4.'subseteq<Tab>⊆ <plug>\subseteq '
|
||||
exe s:pA4.'subseteqq<Tab> <plug>\subseteqq '
|
||||
exe s:pA4.'sqsubset<Tab>⊏ <plug>\sqsubset '
|
||||
exe s:pA4.'sqsubseteq<Tab>⊑ <plug>\sqsubseteq '
|
||||
exe s:pA4.'smile<Tab>⌣ <plug>\smile '
|
||||
exe s:pA4.'smallsmile<Tab>⌣ <plug>\smallsmile '
|
||||
exe s:pA4.'parallel<Tab>∥ <plug>\parallel '
|
||||
exe s:pA4.'shortparallel<Tab>∥ <plug>\shortparallel '
|
||||
exe s:pA4.'dashv<Tab>⊣ <plug>\dashv '
|
||||
exe s:pA4.'vdash<Tab>⊢ <plug>\vdash '
|
||||
exe s:pA4.'vDash<Tab>⊨ <plug>\vDash '
|
||||
exe s:pA4.'models<Tab>⊨ <plug>\models '
|
||||
exe s:pA4.'therefore<Tab>∴ <plug>\therefore '
|
||||
exe s:pA4.'backepsilon<Tab>∍ <plug>\backepsilon '
|
||||
" }}}
|
||||
" nBinaryRel1 {{{
|
||||
let s:pA4a = s:pA."&nBinaryRel1."
|
||||
exe s:pA4a.'nless<Tab>≮ <plug>\nless '
|
||||
exe s:pA4a.'nleqslant<Tab>≰ <plug>\nleqslant '
|
||||
exe s:pA4a.'nleq<Tab> <plug>\nleq '
|
||||
exe s:pA4a.'lneq<Tab> <plug>\lneq '
|
||||
exe s:pA4a.'nleqq<Tab> <plug>\nleqq '
|
||||
exe s:pA4a.'lneqq<Tab>≨ <plug>\lneqq '
|
||||
exe s:pA4a.'lvertneqq<Tab> <plug>\lvertneqq '
|
||||
exe s:pA4a.'nprec<Tab>⊀ <plug>\nprec '
|
||||
exe s:pA4a.'npreceq<Tab>⋠ <plug>\npreceq '
|
||||
exe s:pA4a.'precneqq<Tab> <plug>\precneqq '
|
||||
exe s:pA4a.'lnsim<Tab>⋦ <plug>\lnsim '
|
||||
exe s:pA4a.'lnapprox<Tab> <plug>\lnapprox '
|
||||
exe s:pA4a.'precnsim<Tab>⋨ <plug>\precnsim '
|
||||
exe s:pA4a.'precnapprox<Tab> <plug>\precnapprox '
|
||||
exe s:pA4a.'notin<Tab>∉ <plug>\notin '
|
||||
exe s:pA4a.'nsubseteq<Tab>⊈ <plug>\nsubseteq '
|
||||
exe s:pA4a.'varsubsetneq<Tab> <plug>\varsubsetneq '
|
||||
exe s:pA4a.'subsetneq<Tab>⊊ <plug>\subsetneq '
|
||||
exe s:pA4a.'nsubseteqq<Tab> <plug>\nsubseteqq '
|
||||
exe s:pA4a.'varsubsetneqq<Tab> <plug>\varsubsetneqq '
|
||||
exe s:pA4a.'subsetneqq<Tab>⊈ <plug>\subsetneqq '
|
||||
exe s:pA4a.'nparallel<Tab>∦ <plug>\nparallel '
|
||||
exe s:pA4a.'nshortparallel<Tab> <plug>\nshortparallel '
|
||||
exe s:pA4a.'nvdash<Tab>⊬ <plug>\nvdash '
|
||||
exe s:pA4a.'nvDash<Tab>⊭ <plug>\nvDash '
|
||||
" }}}
|
||||
" BinaryRel2 {{{
|
||||
let s:pA5 = s:pA."&BinaryRel2."
|
||||
exe s:pA5.'gg<Tab>≫ <plug>\gg '
|
||||
exe s:pA5.'ggg<Tab>⋙ <plug>\ggg '
|
||||
exe s:pA5.'gggtr<Tab>⋙ <plug>\gggtr '
|
||||
exe s:pA5.'geqslant<Tab> <plug>\geqslant '
|
||||
exe s:pA5.'geq<Tab>≥ <plug>\geq '
|
||||
exe s:pA5.'geqq<Tab>≧ <plug>\geqq '
|
||||
exe s:pA5.'eqslantgtr<Tab> <plug>\eqslantgtr '
|
||||
exe s:pA5.'gtrdot<Tab>⋗ <plug>\gtrdot '
|
||||
exe s:pA5.'succ<Tab>≻ <plug>\succ '
|
||||
exe s:pA5.'succeq<Tab>≽ <plug>\succeq '
|
||||
exe s:pA5.'succcurlyeq<Tab>≽ <plug>\succcurlyeq '
|
||||
exe s:pA5.'curlyeqsucc<Tab>⋟ <plug>\curlyeqsucc '
|
||||
exe s:pA5.'gtrsim<Tab>≳ <plug>\gtrsim '
|
||||
exe s:pA5.'gtrapprox<Tab> <plug>\gtrapprox '
|
||||
exe s:pA5.'succsim<Tab>≿ <plug>\succsim '
|
||||
exe s:pA5.'succapprox<Tab> <plug>\succapprox '
|
||||
exe s:pA5.'ni<Tab>∋ <plug>\ni '
|
||||
exe s:pA5.'owns<Tab> <plug>\owns '
|
||||
exe s:pA5.'supset<Tab>⊃ <plug>\supset '
|
||||
exe s:pA5.'Supset<Tab>⋑ <plug>\Supset '
|
||||
exe s:pA5.'supseteq<Tab>⊇ <plug>\supseteq '
|
||||
exe s:pA5.'supseteqq<Tab> <plug>\supseteqq '
|
||||
exe s:pA5.'sqsupset<Tab>⊐ <plug>\sqsupset '
|
||||
exe s:pA5.'sqsupseteq<Tab>⊒ <plug>\sqsupseteq '
|
||||
exe s:pA5.'frown<Tab>⌢ <plug>\frown '
|
||||
exe s:pA5.'smallfrown<Tab>⌢ <plug>\smallfrown '
|
||||
exe s:pA5.'mid<Tab>∣ <plug>\mid '
|
||||
exe s:pA5.'shortmid<Tab> <plug>\shortmid '
|
||||
exe s:pA5.'between<Tab>≬ <plug>\between '
|
||||
exe s:pA5.'Vdash<Tab>⊩ <plug>\Vdash '
|
||||
exe s:pA5.'bowtie<Tab>⋈ <plug>\bowtie '
|
||||
exe s:pA5.'Join<Tab>⋈ <plug>\Join '
|
||||
exe s:pA5.'pitchfork<Tab>⋔ <plug>\pitchfork '
|
||||
" }}}
|
||||
" {{{ nBinaryRel2
|
||||
let s:pA5a = s:pA."n&BinaryRel2." "TODO: dorobiæ logarytmy
|
||||
exe s:pA5a.'ngtr<Tab>≯ <plug>\ngtr '
|
||||
exe s:pA5a.'ngeqslant<Tab>≱ <plug>\ngeqslant '
|
||||
exe s:pA5a.'ngeq<Tab> <plug>\ngeq '
|
||||
exe s:pA5a.'gneq<Tab> <plug>\gneq '
|
||||
exe s:pA5a.'ngeqq<Tab> <plug>\ngeqq '
|
||||
exe s:pA5a.'gneqq<Tab>≩ <plug>\gneqq '
|
||||
exe s:pA5a.'nsucc<Tab>⊁ <plug>\nsucc '
|
||||
exe s:pA5a.'nsucceq<Tab>⋡ <plug>\nsucceq '
|
||||
exe s:pA5a.'succneqq<Tab> <plug>\succneqq '
|
||||
exe s:pA5a.'gnsim<Tab>⋧ <plug>\gnsim '
|
||||
exe s:pA5a.'gnapprox<Tab> <plug>\gnapprox '
|
||||
exe s:pA5a.'succnsim<Tab>⋩ <plug>\succnsim '
|
||||
exe s:pA5a.'succnapprox<Tab> <plug>\succnapprox '
|
||||
exe s:pA5a.'nsupseteq<Tab>⊉ <plug>\nsupseteq '
|
||||
exe s:pA5a.'varsupsetneq<Tab> <plug>\varsupsetneq '
|
||||
exe s:pA5a.'supsetneq<Tab>⊋ <plug>\supsetneq '
|
||||
exe s:pA5a.'nsupseteqq<Tab> <plug>\nsupseteqq '
|
||||
exe s:pA5a.'varsupsetneqq<Tab> <plug>\varsupsetneqq '
|
||||
exe s:pA5a.'supsetneqq<Tab> <plug>\supsetneqq '
|
||||
exe s:pA5a.'nmid<Tab>∤ <plug>\nmid '
|
||||
exe s:pA5a.'nshortmid<Tab> <plug>\nshortmid '
|
||||
exe s:pA5a.'nVdash<Tab>⊮ <plug>\nVdash '
|
||||
" }}}
|
||||
" {{{ BinaryRel3
|
||||
let s:pA6 = s:pA."&BinaryRel3."
|
||||
exe s:pA6.'doteq<Tab>≐ <plug>\doteq '
|
||||
exe s:pA6.'circeq<Tab>≗ <plug>\circeq '
|
||||
exe s:pA6.'eqcirc<Tab>≖ <plug>\eqcirc '
|
||||
exe s:pA6.'risingdotseq<Tab>≓ <plug>\risingdotseq '
|
||||
exe s:pA6.'doteqdot<Tab>≑ <plug>\doteqdot '
|
||||
exe s:pA6.'Doteq<Tab>≑ <plug>\Doteq '
|
||||
exe s:pA6.'fallingdotseq<Tab>≒ <plug>\fallingdotseq '
|
||||
exe s:pA6.'triangleq<Tab>≜ <plug>\triangleq '
|
||||
exe s:pA6.'bumpeq<Tab>≏ <plug>\bumpeq '
|
||||
exe s:pA6.'Bumpeq<Tab>≎ <plug>\Bumpeq '
|
||||
exe s:pA6.'equiv<Tab>`=\ \ ≡ <plug>\equiv '
|
||||
exe s:pA6.'sim<Tab>∼ <plug>\sim '
|
||||
exe s:pA6.'thicksim<Tab>∼ <plug>\thicksim '
|
||||
exe s:pA6.'backsim<Tab>∽ <plug>\backsim '
|
||||
exe s:pA6.'simeq<Tab>≃ <plug>\simeq '
|
||||
exe s:pA6.'backsimeq<Tab>⋍ <plug>\backsimeq '
|
||||
exe s:pA6.'cong<Tab>≅ <plug>\cong '
|
||||
exe s:pA6.'approx<tab>=~\ \ ≈ <plug>\approx '
|
||||
exe s:pA6.'thickapprox<Tab>≈ <plug>\thickapprox '
|
||||
exe s:pA6.'approxeq<Tab>≊ <plug>\approxeq '
|
||||
exe s:pA6.'blacktriangleleft<Tab>◀ <plug>\blacktriangleleft '
|
||||
exe s:pA6.'vartriangleleft<Tab>⊲ <plug>\vartriangleleft '
|
||||
exe s:pA6.'trianglelefteq<Tab>⊴ <plug>\trianglelefteq '
|
||||
exe s:pA6.'blacktriangleright<Tab>▶ <plug>\blacktriangleright '
|
||||
exe s:pA6.'vartriangleright<Tab>⊳ <plug>\vartriangleright '
|
||||
exe s:pA6.'trianglerighteq<Tab>⊵ <plug>\trianglerighteq '
|
||||
exe s:pA6.'perp<Tab>⊥ <plug>\perp '
|
||||
exe s:pA6.'asymp<Tab>≍ <plug>\asymp '
|
||||
exe s:pA6.'Vvdash<Tab>⊪ <plug>\Vvdash '
|
||||
exe s:pA6.'propto<Tab>∝ <plug>\propto '
|
||||
exe s:pA6.'varpropto<Tab>∝ <plug>\varpropto '
|
||||
exe s:pA6.'because<Tab>∵ <plug>\because '
|
||||
" }}}
|
||||
" {{{ nBinaryRel3
|
||||
let s:pA6a = s:pA."&nBinaryRel3."
|
||||
exe s:pA6a.'neq<Tab>≠ <plug>\neq '
|
||||
exe s:pA6a.'nsim<Tab>≁ <plug>\nsim '
|
||||
exe s:pA6a.'ncong<Tab>≆ <plug>\ncong '
|
||||
exe s:pA6a.'ntriangleleft<Tab>⋪ <plug>\ntriangleleft '
|
||||
exe s:pA6a.'ntrianglelefteq<Tab>⋬ <plug>\ntrianglelefteq '
|
||||
exe s:pA6a.'ntriangleright<Tab>⋫ <plug>\ntriangleright '
|
||||
exe s:pA6a.'ntrianglerighteq<Tab>⋭ <plug>\ntrianglerighteq '
|
||||
" }}}
|
||||
" {{{ BinaryRel4
|
||||
let s:pA7 = s:pA."&BinaryRel4."
|
||||
exe s:pA7.'lessgtr<Tab>≶ <plug>\lessgtr '
|
||||
exe s:pA7.'gtrless<Tab>≷ <plug>\gtrless '
|
||||
exe s:pA7.'lesseqgtr<Tab>⋚ <plug>\lesseqgtr '
|
||||
exe s:pA7.'gtreqless<Tab>⋛ <plug>\gtreqless '
|
||||
exe s:pA7.'lesseqqgtr<Tab> <plug>\lesseqqgtr '
|
||||
exe s:pA7.'gtreqqless<Tab> <plug>\gtreqqless '
|
||||
" }}}
|
||||
" {{{ BigOp
|
||||
let s:pA8a = s:pA."&BigOp."
|
||||
exe s:pA8a.'limits<Tab> <plug>\limits'
|
||||
exe s:pA8a.'nolimits<Tab> <plug>\nolimits'
|
||||
exe s:pA8a.'displaylimits<Tab> <plug>\displaylimits'
|
||||
exe s:pA8a.'-seplimits- :'
|
||||
exe s:pA8a.'bigcap<Tab>`-\ \ ⋂ <plug>\bigcap'
|
||||
exe s:pA8a.'bigcup<Tab>`+\ \ ⋃ <plug>\bigcup'
|
||||
exe s:pA8a.'bigodot<Tab>⊙ <plug>\bigodot'
|
||||
exe s:pA8a.'bigoplus<Tab>⊕ <plug>\bigoplus'
|
||||
exe s:pA8a.'bigotimes<Tab>⊗ <plug>\bigotimes'
|
||||
exe s:pA8a.'bigsqcup<Tab>⊔ <plug>\bigsqcup'
|
||||
exe s:pA8a.'biguplus<Tab>⊎ <plug>\biguplus'
|
||||
exe s:pA8a.'bigvee<Tab>⋁ <plug>\bigvee'
|
||||
exe s:pA8a.'bigwedge<Tab>⋀ <plug>\bigwedge'
|
||||
exe s:pA8a.'coprod<Tab>∐ <plug>\coprod'
|
||||
exe s:pA8a.'int<Tab>∫ <plug>\int'
|
||||
exe s:pA8a.'iint<Tab>∬ <plug>\int'
|
||||
exe s:pA8a.'iiint<Tab>∭ <plug>\int'
|
||||
exe s:pA8a.'oint<Tab>∮ <plug>\oint'
|
||||
exe s:pA8a.'prod<Tab>∏ <plug>\prod'
|
||||
exe s:pA8a.'sum<Tab>∑ <plug>\sum'
|
||||
" }}}
|
||||
" {{{ BinaryOp
|
||||
let s:pA8 = s:pA."&BinaryOp."
|
||||
exe s:pA8.'pm<Tab>± <plug>\pm '
|
||||
exe s:pA8.'mp<Tab>∓ <plug>\mp '
|
||||
exe s:pA8.'dotplus<Tab>∔ <plug>\dotplus '
|
||||
exe s:pA8.'cdot<Tab>`.\ \ ⋅ <plug>\cdot '
|
||||
exe s:pA8.'centerdot<Tab>⋅ <plug>\centerdot '
|
||||
exe s:pA8.'times<Tab>`*\ \ × <plug>\times '
|
||||
exe s:pA8.'ltimes<Tab>⋉ <plug>\ltimes '
|
||||
exe s:pA8.'rtimes<Tab>⋊ <plug>\rtimes '
|
||||
exe s:pA8.'leftthreetimes<Tab>⋋ <plug>\leftthreetimes '
|
||||
exe s:pA8.'rightthreetimes<Tab>⋌ <plug>\rightthreetimes '
|
||||
exe s:pA8.'div<Tab>÷ <plug>\div '
|
||||
exe s:pA8.'divideontimes<Tab>⋇ <plug>\divideontimes '
|
||||
exe s:pA8.'bmod<Tab> <plug>\bmod '
|
||||
exe s:pA8.'ast<Tab>∗ <plug>\ast '
|
||||
exe s:pA8.'star<Tab>⋆ <plug>\star '
|
||||
exe s:pA8.'setminus<Tab>`\\\ \ ∖ <plug>\setminus '
|
||||
exe s:pA8.'smallsetminus<Tab>∖ <plug>\smallsetminus '
|
||||
exe s:pA8.'diamond<Tab>⋄ <plug>\diamond '
|
||||
exe s:pA8.'wr<Tab>≀ <plug>\wr '
|
||||
exe s:pA8.'intercal<Tab>⊺ <plug>\intercal '
|
||||
exe s:pA8.'circ<Tab>`@\ \ ∘ <plug>\circ '
|
||||
exe s:pA8.'bigcirc<Tab>○ <plug>\bigcirc '
|
||||
exe s:pA8.'bullet<Tab>∙ <plug>\bullet '
|
||||
exe s:pA8.'cap<Tab>∩ <plug>\cap '
|
||||
exe s:pA8.'Cap<Tab>⋒ <plug>\Cap '
|
||||
exe s:pA8.'cup<Tab>∪ <plug>\cup '
|
||||
exe s:pA8.'Cup<Tab>⋓ <plug>\Cup '
|
||||
exe s:pA8.'sqcap<Tab>⊓ <plug>\sqcap '
|
||||
exe s:pA8.'sqcup<Tab>⊔ <plug>\sqcup'
|
||||
exe s:pA8.'amalg<Tab> <plug>\amalg '
|
||||
exe s:pA8.'uplus<Tab>⊎ <plug>\uplus '
|
||||
exe s:pA8.'triangleleft<Tab>◁ <plug>\triangleleft '
|
||||
exe s:pA8.'triangleright<Tab>▷ <plug>\triangleright '
|
||||
exe s:pA8.'bigtriangleup<Tab>△ <plug>\bigtriangleup '
|
||||
exe s:pA8.'bigtriangledown<Tab>▽ <plug>\bigtriangledown '
|
||||
exe s:pA8.'vee<Tab>∨ <plug>\vee '
|
||||
exe s:pA8.'veebar<Tab>⊻ <plug>\veebar '
|
||||
exe s:pA8.'curlyvee<Tab>⋎ <plug>\curlyvee '
|
||||
exe s:pA8.'wedge<Tab>`&\ \ ∧ <plug>\wedge '
|
||||
exe s:pA8.'barwedge<Tab>⊼ <plug>\barwedge '
|
||||
exe s:pA8.'doublebarwedge<Tab>⌆ <plug>\doublebarwedge '
|
||||
exe s:pA8.'curlywedge<Tab>⋏ <plug>\curlywedge '
|
||||
exe s:pA8.'oplus<Tab>⊕ <plug>\oplus '
|
||||
exe s:pA8.'ominus<Tab>⊖ <plug>\ominus '
|
||||
exe s:pA8.'otimes<Tab>⊗ <plug>\otimes '
|
||||
exe s:pA8.'oslash<Tab>⊘ <plug>\oslash '
|
||||
exe s:pA8.'boxplus<Tab>⊞ <plug>\boxplus '
|
||||
exe s:pA8.'boxminus<Tab>⊟ <plug>\boxminus '
|
||||
exe s:pA8.'boxtimes<Tab>⊠ <plug>\boxtimes '
|
||||
exe s:pA8.'boxdot<Tab>⊡ <plug>\boxdot '
|
||||
exe s:pA8.'odot<Tab>⊙ <plug>\odot '
|
||||
exe s:pA8.'circledast<Tab>⊛ <plug>\circledast '
|
||||
exe s:pA8.'circleddash<Tab>⊝ <plug>\circleddash '
|
||||
exe s:pA8.'circledcirc<Tab>⊚ <plug>\circledcirc '
|
||||
exe s:pA8.'dagger<Tab>† <plug>\dagger '
|
||||
exe s:pA8.'ddagger<Tab>‡ <plug>\ddagger '
|
||||
exe s:pA8.'lhd<Tab>⊲ <plug>\lhd '
|
||||
exe s:pA8.'unlhd<Tab>⊴ <plug>\unlhd '
|
||||
exe s:pA8.'rhd<Tab>⊳ <plug>\rhd '
|
||||
exe s:pA8.'unrhd<Tab>⊵ <plug>\unrhd '
|
||||
" }}}
|
||||
" {{{ Other1
|
||||
let s:pA9 = s:pA."&Other1."
|
||||
exe s:pA9.'hat<Tab>â <plug>\hat '
|
||||
exe s:pA9.'check<Tab>ǎ <plug>\check '
|
||||
exe s:pA9.'grave<Tab>à <plug>\grave '
|
||||
exe s:pA9.'acute<Tab>á <plug>\acute '
|
||||
exe s:pA9.'dot<Tab>ȧ <plug>\dot '
|
||||
exe s:pA9.'ddot<Tab>ä <plug>\ddot '
|
||||
exe s:pA9.'tilde<Tab>`,\ \ ã <plug>\tilde '
|
||||
exe s:pA9.'breve<Tab>ă <plug>\breve '
|
||||
exe s:pA9.'bar<Tab>ā <plug>\bar '
|
||||
exe s:pA9.'vec<Tab>a⃗ <plug>\vec '
|
||||
exe s:pA9.'aleph<Tab>א <plug>\aleph '
|
||||
exe s:pA9.'hbar<Tab>ℏ <plug>\hbar '
|
||||
exe s:pA9.'imath<Tab> <plug>\imath '
|
||||
exe s:pA9.'jmath<Tab> <plug>\jmath '
|
||||
exe s:pA9.'ell<Tab>ℓ <plug>\ell '
|
||||
exe s:pA9.'wp<Tab>℘ <plug>\wp '
|
||||
exe s:pA9.'Re<Tab>ℜ <plug>\Re '
|
||||
exe s:pA9.'Im<Tab>ℑ <plug>\Im '
|
||||
exe s:pA9.'partial<Tab>∂ <plug>\partial '
|
||||
exe s:pA9.'infty<Tab>`8\ \ ∞ <plug>\infty '
|
||||
exe s:pA9.'prime<Tab>′ <plug>\prime '
|
||||
exe s:pA9.'emptyset<Tab>∅ <plug>\emptyset '
|
||||
exe s:pA9.'nabla<Tab>∇ <plug>\nabla '
|
||||
exe s:pA9.'surd<Tab>√ <plug>\surd '
|
||||
exe s:pA9.'top<Tab>⊤ <plug>\top '
|
||||
exe s:pA9.'bot<Tab>⊥ <plug>\bot '
|
||||
exe s:pA9.'angle<Tab>∠ <plug>\angle '
|
||||
exe s:pA9.'triangle<Tab>△ <plug>\triangle '
|
||||
exe s:pA9.'backslash<Tab>\\ <plug>\backslash '
|
||||
exe s:pA9.'forall<Tab>∀ <plug>\forall '
|
||||
exe s:pA9.'exists<Tab>∃ <plug>\exists '
|
||||
exe s:pA9.'neg<Tab>¬ <plug>\neg '
|
||||
exe s:pA9.'flat<Tab>♭ <plug>\flat '
|
||||
exe s:pA9.'natural<Tab>♮ <plug>\natural '
|
||||
exe s:pA9.'sharp<Tab>♯ <plug>\sharp '
|
||||
exe s:pA9.'clubsuit<Tab>♣ <plug>\clubsuit '
|
||||
exe s:pA9.'diamondsuit<Tab>♢ <plug>\diamondsuit '
|
||||
exe s:pA9.'heartsuit<Tab>♡ <plug>\heartsuit '
|
||||
exe s:pA9.'spadesuit<Tab>♠ <plug>\spadesuit '
|
||||
exe s:pA9.'S<Tab>§ <plug>\S '
|
||||
exe s:pA9.'P<Tab>¶ <plug>\P'
|
||||
" }}}
|
||||
" {{{ MathCreating
|
||||
let s:pA10 = s:pA."&MathCreating."
|
||||
exe s:pA10.'not<Tab> <plug>\not'
|
||||
exe s:pA10.'mkern<Tab> <plug>\mkern'
|
||||
exe s:pA10.'mathbin<Tab> <plug>\mathbin'
|
||||
exe s:pA10.'mathrel<Tab> <plug>\mathrel'
|
||||
exe s:pA10.'stackrel<Tab> <plug>\stackrel'
|
||||
exe s:pA10.'mathord<Tab> <plug>\mathord'
|
||||
" }}}
|
||||
" {{{ Styles
|
||||
let s:pA11 = s:pA."&Styles."
|
||||
exe s:pA11.'displaystyle<Tab> <plug>\displaystyle'
|
||||
exe s:pA11.'textstyle<Tab> <plug>\textstyle'
|
||||
exe s:pA11.'scritpstyle<Tab> <plug>\scritpstyle'
|
||||
exe s:pA11.'scriptscriptstyle<Tab> <plug>\scriptscriptstyle'
|
||||
" }}}
|
||||
" {{{ MathDiacritics
|
||||
let s:pA12 = s:pA."&MathDiacritics."
|
||||
exe s:pA12.'acute{}<Tab>á <plug><C-r>=IMAP_PutTextWithMovement("\\acute{<++>}<++>")<cr>'
|
||||
exe s:pA12.'bar{}<Tab>`_\ \ ā <plug><C-r>=IMAP_PutTextWithMovement("\\bar{<++>}<++>")<cr>'
|
||||
exe s:pA12.'breve{}<Tab>ă <plug><C-r>=IMAP_PutTextWithMovement("\\breve{<++>}<++>")<cr>'
|
||||
exe s:pA12.'check{}<Tab>ǎ <plug><C-r>=IMAP_PutTextWithMovement("\\check{<++>}<++>")<cr>'
|
||||
exe s:pA12.'ddot{}<Tab>`:\ \ ä <plug><C-r>=IMAP_PutTextWithMovement("\\ddot{<++>}<++>")<cr>'
|
||||
exe s:pA12.'dot{}<Tab>`;\ \ ȧ <plug><C-r>=IMAP_PutTextWithMovement("\\dot{<++>}<++>")<cr>'
|
||||
exe s:pA12.'grave{}<Tab>à <plug><C-r>=IMAP_PutTextWithMovement("\\grave{<++>}<++>")<cr>'
|
||||
exe s:pA12.'hat{}<Tab>`^\ \ â <plug><C-r>=IMAP_PutTextWithMovement("\\hat{<++>}<++>")<cr>'
|
||||
exe s:pA12.'tilde{}<tab>`~\ \ ã <plug><C-r>=IMAP_PutTextWithMovement("\\tilde{<++>}<++>")<cr>'
|
||||
exe s:pA12.'vec{}<Tab>a⃗ <plug><C-r>=IMAP_PutTextWithMovement("\\vec{<++>}<++>")<cr>'
|
||||
exe s:pA12.'widehat{}<Tab> <plug><C-r>=IMAP_PutTextWithMovement("\\widehat{<++>}<++>")<cr>'
|
||||
exe s:pA12.'widetilde{}<Tab> <plug><C-r>=IMAP_PutTextWithMovement("\\widetilde{<++>}<++>")<cr>'
|
||||
exe s:pA12.'imath<Tab> <plug><C-r>=IMAP_PutTextWithMovement("\\imath")<cr>'
|
||||
exe s:pA12.'jmath<Tab> <plug><C-r>=IMAP_PutTextWithMovement("\\jmath")<cr>'
|
||||
" }}}
|
||||
" {{{ OverlineAndCo
|
||||
let s:pA13 = s:pA."&OverlineAndCo."
|
||||
exe s:pA13.'overline{} <plug><C-r>=IMAP_PutTextWithMovement("\\overline{}")<cr>'
|
||||
exe s:pA13.'underline{} <plug><C-r>=IMAP_PutTextWithMovement("\\underline{}")<cr>'
|
||||
exe s:pA13.'overrightarrow{} <plug><C-r>=IMAP_PutTextWithMovement("\\overrightarrow{}")<cr>'
|
||||
exe s:pA13.'overleftarrow{} <plug><C-r>=IMAP_PutTextWithMovement("\\overleftarrow{}")<cr>'
|
||||
exe s:pA13.'overbrace{} <plug><C-r>=IMAP_PutTextWithMovement("\\overbrace{}")<cr>'
|
||||
exe s:pA13.'underbrace{} <plug><C-r>=IMAP_PutTextWithMovement("\\underbrace{}")<cr>'
|
||||
" }}}
|
||||
" {{{ Symbols1
|
||||
let s:pA14a = s:pA."&Symbols1."
|
||||
exe s:pA14a.'forall<Tab>∀ <plug>\forall '
|
||||
exe s:pA14a.'exists<Tab>∃ <plug>\exists '
|
||||
exe s:pA14a.'nexists<Tab>∄ <plug>\nexists '
|
||||
exe s:pA14a.'neg<Tab>¬ <plug>\neg '
|
||||
exe s:pA14a.'top<Tab>⊤ <plug>\top '
|
||||
exe s:pA14a.'bot<Tab>⊥ <plug>\bot '
|
||||
exe s:pA14a.'emptyset<Tab>∅ <plug>\emptyset '
|
||||
exe s:pA14a.'varnothing<Tab>⌀ <plug>\varnothing '
|
||||
exe s:pA14a.'infty<Tab>∞ <plug>\infty '
|
||||
exe s:pA14a.'aleph<Tab>א <plug>\aleph '
|
||||
exe s:pA14a.'beth<Tab>ב <plug>\beth '
|
||||
exe s:pA14a.'gimel<Tab>ג <plug>\gimel '
|
||||
exe s:pA14a.'daleth<Tab>ד <plug>\daleth '
|
||||
exe s:pA14a.'hbar<Tab> <plug>\hbar '
|
||||
exe s:pA14a.'hslash<Tab>ℏ <plug>\hslash '
|
||||
exe s:pA14a.'diagup<Tab>⁄ <plug>\diagup '
|
||||
exe s:pA14a.'vert<Tab>\| <plug>\vert '
|
||||
exe s:pA14a.'Vert<Tab>∥ <plug>\Vert '
|
||||
exe s:pA14a.'backslash<Tab>\\ <plug>\backslash '
|
||||
exe s:pA14a.'diagdown<Tab> <plug>\diagdown '
|
||||
exe s:pA14a.'Bbbk<Tab>ᵕ <plug>\Bbbk '
|
||||
exe s:pA14a.'P<Tab>¶ <plug>\P '
|
||||
exe s:pA14a.'S<Tab>§ <plug>\S '
|
||||
" }}}
|
||||
" {{{ Symbols2
|
||||
let s:pA14b = s:pA."&Symbols2."
|
||||
exe s:pA14b.'# <plug>\# '
|
||||
exe s:pA14b.'% <plug>\% '
|
||||
exe s:pA14b.'_<Tab> <plug>\_ '
|
||||
exe s:pA14b.'$ <plug>\$ '
|
||||
exe s:pA14b.'& <plug>\& '
|
||||
exe s:pA14b.'imath<Tab> <plug>\imath '
|
||||
exe s:pA14b.'jmath<Tab> <plug>\jmath '
|
||||
exe s:pA14b.'ell<Tab>ℓ <plug>\ell '
|
||||
exe s:pA14b.'wp<Tab>℘ <plug>\wp '
|
||||
exe s:pA14b.'Re<Tab>ℜ <plug>\Re '
|
||||
exe s:pA14b.'Im<Tab>ℑ <plug>\Im '
|
||||
exe s:pA14b.'prime<Tab>′ <plug>\prime '
|
||||
exe s:pA14b.'backprime<Tab>‵ <plug>\backprime '
|
||||
exe s:pA14b.'nabla<Tab>∇ <plug>\nabla '
|
||||
exe s:pA14b.'surd<Tab>√ <plug>\surd '
|
||||
exe s:pA14b.'flat<Tab>♭ <plug>\flat '
|
||||
exe s:pA14b.'sharp<Tab>♯ <plug>\sharp '
|
||||
exe s:pA14b.'natural<Tab>♮ <plug>\natural '
|
||||
exe s:pA14b.'eth<Tab>ð <plug>\eth '
|
||||
exe s:pA14b.'bigstar<Tab>★ <plug>\bigstar '
|
||||
exe s:pA14b.'circledS<Tab>Ⓢ <plug>\circledS '
|
||||
exe s:pA14b.'Finv<Tab>Ⅎ <plug>\Finv '
|
||||
exe s:pA14b.'dag<Tab>† <plug>\dag '
|
||||
exe s:pA14b.'ddag<Tab>‡ <plug>\ddag '
|
||||
" }}}
|
||||
" {{{ Symbols3
|
||||
let s:pA14c = s:pA."&Symbols3."
|
||||
exe s:pA14c.'angle<Tab>∠ <plug>\angle '
|
||||
exe s:pA14c.'measuredangle<Tab>∡ <plug>\measuredangle '
|
||||
exe s:pA14c.'sphericalangle<Tab>∢ <plug>\sphericalangle '
|
||||
exe s:pA14c.'spadesuit<Tab>♠ <plug>\spadesuit '
|
||||
exe s:pA14c.'heartsuit<Tab>♡ <plug>\heartsuit '
|
||||
exe s:pA14c.'diamondsuit<Tab>♢ <plug>\diamondsuit '
|
||||
exe s:pA14c.'clubsuit<Tab>♣ <plug>\clubsuit '
|
||||
exe s:pA14c.'lozenge<Tab>◊ <plug>\lozenge '
|
||||
exe s:pA14c.'blacklozenge<Tab>◆ <plug>\blacklozenge '
|
||||
exe s:pA14c.'Diamond<Tab>◇ <plug>\Diamond '
|
||||
exe s:pA14c.'triangle<Tab>△ <plug>\triangle '
|
||||
exe s:pA14c.'vartriangle<Tab>△ <plug>\vartriangle '
|
||||
exe s:pA14c.'blacktriangle<Tab>▲ <plug>\blacktriangle '
|
||||
exe s:pA14c.'triangledown<Tab>▽ <plug>\triangledown '
|
||||
exe s:pA14c.'blacktriangledown<Tab>▼ <plug>\blacktriangledown '
|
||||
exe s:pA14c.'Box<Tab>□ <plug>\Box '
|
||||
exe s:pA14c.'square<Tab>□ <plug>\square '
|
||||
exe s:pA14c.'blacksquare<Tab>■ <plug>\blacksquare '
|
||||
exe s:pA14c.'complement<Tab>∁ <plug>\complement '
|
||||
exe s:pA14c.'mho<Tab>℧ <plug>\mho '
|
||||
exe s:pA14c.'Game<Tab>⅁ <plug>\Game '
|
||||
exe s:pA14c.'partial<Tab>`6\ \ ∂ <plug>\partial '
|
||||
exe s:pA14c.'smallint<Tab>∫ <plug>\smallint '
|
||||
" }}}
|
||||
" {{{ Logic
|
||||
let s:pA15 = s:pA."&Logic."
|
||||
exe s:pA15.'lnot<Tab>¬ <plug>\lnot '
|
||||
exe s:pA15.'lor<Tab>∨ <plug>\lor '
|
||||
exe s:pA15.'land<Tab>∧ <plug>\land '
|
||||
" }}}
|
||||
" {{{ Limits1
|
||||
let s:pA16 = s:pA."&Limits1."
|
||||
exe s:pA16.'left<Tab>( <plug>\left'
|
||||
exe s:pA16.'right<Tab>) <plug>\right'
|
||||
exe s:pA16.'-sepbigl- :'
|
||||
exe s:pA16.'bigl<Tab> <plug>\bigl'
|
||||
exe s:pA16.'Bigl<Tab> <plug>\Bigl'
|
||||
exe s:pA16.'biggl<Tab> <plug>\biggl'
|
||||
exe s:pA16.'Biggl<Tab> <plug>\Biggl'
|
||||
exe s:pA16.'-sepbigr- :'
|
||||
exe s:pA16.'bigr<Tab> <plug>\bigr'
|
||||
exe s:pA16.'Bigr<Tab> <plug>\Bigr'
|
||||
exe s:pA16.'biggr<Tab> <plug>\biggr'
|
||||
exe s:pA16.'Biggr<Tab> <plug>\Biggr'
|
||||
exe s:pA16.'-sepbig- :'
|
||||
exe s:pA16.'big<Tab> <plug>\big'
|
||||
exe s:pA16.'bigm<Tab> <plug>\bigm'
|
||||
exe s:pA16.'-sepfloor- :'
|
||||
exe s:pA16.'lfloor<Tab>⌊ <plug>\lfloor '
|
||||
exe s:pA16.'lceil<Tab>⌈ <plug>\lceil '
|
||||
exe s:pA16.'rfloor<Tab>⌋ <plug>\rfloor '
|
||||
exe s:pA16.'rceil<Tab>⌉ <plug>\rceil '
|
||||
exe s:pA16.'-sepangle- :'
|
||||
exe s:pA16.'langle<Tab>〈 <plug>\langle '
|
||||
exe s:pA16.'rangle<Tab>〉 <plug>\rangle '
|
||||
" }}}
|
||||
" {{{ Limits2
|
||||
let s:pA16a = s:pA."&Limits2."
|
||||
exe s:pA16a.'ulcorner<Tab>⌜ <plug>\ulcorner '
|
||||
exe s:pA16a.'urcorner<Tab>⌝ <plug>\urcorner '
|
||||
exe s:pA16a.'llcorner<Tab>⌞ <plug>\llcorner '
|
||||
exe s:pA16a.'rlcorner<Tab>⌟ <plug>\rlcorner '
|
||||
exe s:pA16a.'-sepcorner- :'
|
||||
exe s:pA16a.'vert<Tab>\| <plug>\vert '
|
||||
exe s:pA16a.'Vert<Tab>∥ <plug>\Vert '
|
||||
exe s:pA16a.'lvert<Tab> <plug>\lvert '
|
||||
exe s:pA16a.'lVert<Tab> <plug>\lVert '
|
||||
exe s:pA16a.'rvert<Tab> <plug>\rvert '
|
||||
exe s:pA16a.'rVert<Tab> <plug>\rVert '
|
||||
exe s:pA16a.'uparrow<Tab>↑ <plug>\uparrow '
|
||||
exe s:pA16a.'Uparrow<Tab>⇑ <plug>\Uparrow '
|
||||
exe s:pA16a.'downarrow<Tab>↓ <plug>\downarrow '
|
||||
exe s:pA16a.'Downarrow<Tab>⇓ <plug>\Downarrow '
|
||||
exe s:pA16a.'updownarrow<Tab>↕ <plug>\updownarrow '
|
||||
exe s:pA16a.'Updownarrow<Tab>⇕ <plug>\Updownarrow '
|
||||
exe s:pA16a.'lgroup<Tab> <plug>\lgroup '
|
||||
exe s:pA16a.'rgroup<Tab> <plug>\rgroup '
|
||||
exe s:pA16a.'lmoustache<Tab>∫ <plug>\lmoustache '
|
||||
exe s:pA16a.'rmoustache<Tab> <plug>\rmoustache '
|
||||
exe s:pA16a.'arrowvert<Tab> <plug>\arrowvert '
|
||||
exe s:pA16a.'Arrowvert<Tab> <plug>\Arrowvert '
|
||||
exe s:pA16a.'bracevert<Tab> <plug>\bracevert '
|
||||
" }}}
|
||||
" {{{ Log-likes
|
||||
let s:pA17 = s:pA."Lo&g-likes."
|
||||
exe s:pA17.'arccos<Tab> <plug>\arccos '
|
||||
exe s:pA17.'arcsin<Tab> <plug>\arcsin '
|
||||
exe s:pA17.'arctan<Tab> <plug>\arctan '
|
||||
exe s:pA17.'arg<Tab> <plug>\arg '
|
||||
exe s:pA17.'cos<Tab> <plug>\cos '
|
||||
exe s:pA17.'cosh<Tab> <plug>\cosh '
|
||||
exe s:pA17.'cot<Tab> <plug>\cot '
|
||||
exe s:pA17.'coth<Tab> <plug>\coth '
|
||||
exe s:pA17.'csc<Tab> <plug>\csc '
|
||||
exe s:pA17.'deg<Tab> <plug>\deg '
|
||||
exe s:pA17.'det<Tab> <plug>\det '
|
||||
exe s:pA17.'dim<Tab> <plug>\dim '
|
||||
exe s:pA17.'exp<Tab> <plug>\exp '
|
||||
exe s:pA17.'gcd<Tab> <plug>\gcd '
|
||||
exe s:pA17.'hom<Tab> <plug>\hom '
|
||||
exe s:pA17.'inf<Tab> <plug>\inf '
|
||||
exe s:pA17.'injlim<Tab> <plug>\injlim '
|
||||
exe s:pA17.'ker<Tab> <plug>\ker '
|
||||
exe s:pA17.'lg<Tab> <plug>\lg '
|
||||
exe s:pA17.'lim<Tab> <plug>\lim '
|
||||
exe s:pA17.'liminf<Tab> <plug>\liminf '
|
||||
exe s:pA17.'limsup<Tab> <plug>\limsup '
|
||||
exe s:pA17.'ln<Tab> <plug>\ln '
|
||||
exe s:pA17.'log<Tab> <plug>\log '
|
||||
exe s:pA17.'max<Tab> <plug>\max '
|
||||
exe s:pA17.'min<Tab> <plug>\min '
|
||||
exe s:pA17.'Pr<Tab> <plug>\Pr '
|
||||
exe s:pA17.'projlim<Tab> <plug>\projlim '
|
||||
exe s:pA17.'sec<Tab> <plug>\sec '
|
||||
exe s:pA17.'sin<Tab> <plug>\sin '
|
||||
exe s:pA17.'sinh<Tab> <plug>\sinh '
|
||||
exe s:pA17.'sup<Tab> <plug>\sup '
|
||||
exe s:pA17.'tan<Tab> <plug>\tan '
|
||||
exe s:pA17.'tanh<Tab> <plug>\tanh '
|
||||
exe s:pA17.'varlimsup<Tab> <plug>\varlimsup '
|
||||
exe s:pA17.'varliminf<Tab> <plug>\varliminf '
|
||||
exe s:pA17.'varinjlim<Tab> <plug>\varinjlim '
|
||||
exe s:pA17.'varprojlim<Tab> <plug>\varprojlim '
|
||||
" }}}
|
||||
" {{{ MathSpacing
|
||||
let s:pA18 = s:pA."MathSpacing."
|
||||
exe s:pA18.', <plug>\, '
|
||||
exe s:pA18.': <plug>\: '
|
||||
exe s:pA18.'; <plug>\; '
|
||||
exe s:pA18.'[space] <plug>\ '
|
||||
exe s:pA18.'quad<Tab> <plug>\quad '
|
||||
exe s:pA18.'qquad<Tab> <plug>\qquad '
|
||||
exe s:pA18.'! <plug>\! '
|
||||
exe s:pA18.'thinspace<Tab> <plug>\thinspace '
|
||||
exe s:pA18.'medspace<Tab> <plug>\medspace '
|
||||
exe s:pA18.'thickspace<Tab> <plug>\thickspace '
|
||||
exe s:pA18.'negthinspace<Tab> <plug>\negthinspace '
|
||||
exe s:pA18.'negmedspace<Tab> <plug>\negmedspace '
|
||||
exe s:pA18.'negthickspace<Tab> <plug>\negthickspace '
|
||||
" 1}}}
|
||||
|
||||
" vim:fdm=marker:ff=unix:noet:ts=4:sw=4:fenc=utf-8
|
||||
@@ -1,730 +0,0 @@
|
||||
"=============================================================================
|
||||
" File: mathmacros.vim
|
||||
" Author: Mikolaj Machowski
|
||||
" Created: Tue Apr 23 06:00 PM 2002 PST
|
||||
"
|
||||
" Description: macros for everything mathematical in latex.
|
||||
"=============================================================================
|
||||
|
||||
if !(has('gui_running') && g:Tex_MathMenus && g:Tex_Menus)
|
||||
finish
|
||||
endif
|
||||
|
||||
let s:MathMenuName = g:Tex_MenuPrefix.'&Math.'
|
||||
|
||||
function! Tex_MathMenuRemove()
|
||||
exe 'silent! aunmenu '.s:MathMenuName
|
||||
endfunction
|
||||
|
||||
let s:pA = 'amenu <silent> '.g:Tex_NextMenuLocation.' '.s:MathMenuName
|
||||
let g:Tex_NextMenuLocation = g:Tex_NextMenuLocation + 1
|
||||
|
||||
" brackets and dollars {{{
|
||||
exe s:pA.'\\&[\ \\] <plug><C-r>=IMAP_PutTextWithMovement("\\[<++>\\]<++>")<cr>'
|
||||
exe s:pA.'\\&(\ \\) <plug><C-r>=IMAP_PutTextWithMovement("\\(<++>\\)<++>")<cr>'
|
||||
exe s:pA.'&$\ $ <plug>$$'
|
||||
exe s:pA.'-sepmath1- :'
|
||||
" }}}
|
||||
" MATH arrows {{{
|
||||
let s:pA1 = s:pA."&Arrows."
|
||||
exe s:pA1.'Leftarrow <plug>\leftarrow '
|
||||
exe s:pA1.'leftarrow <plug>\leftarrow'
|
||||
exe s:pA1.'longleftarrow <plug>\longleftarrow '
|
||||
exe s:pA1.'Leftarrow <plug>\Leftarrow '
|
||||
exe s:pA1.'Longleftarrow <plug>\Longleftarrow '
|
||||
exe s:pA1.'rightarrow <plug>\rightarrow '
|
||||
exe s:pA1.'longrightarrow <plug>\longrightarrow '
|
||||
exe s:pA1.'Rightarrow <plug>\Rightarrow '
|
||||
exe s:pA1.'Longrightarrow <plug>\Longrightarrow '
|
||||
exe s:pA1.'leftrightarrow <plug>\leftrightarrow '
|
||||
exe s:pA1.'longleftrightarrow <plug>\longleftrightarrow '
|
||||
exe s:pA1.'Leftrightarrow <plug>\Leftrightarrow '
|
||||
exe s:pA1.'Longleftrightarrow <plug>\Longleftrightarrow '
|
||||
exe s:pA1.'uparrow <plug>\uparrow '
|
||||
exe s:pA1.'Uparrow <plug>\Uparrow '
|
||||
exe s:pA1.'downarrow <plug>\downarrow '
|
||||
exe s:pA1.'Downarrow <plug>\Downarrow '
|
||||
exe s:pA1.'updownarrow <plug>\updownarrow '
|
||||
exe s:pA1.'Updownarrow <plug>\Updownarrow '
|
||||
exe s:pA1.'nearrow <plug>\nearrow '
|
||||
exe s:pA1.'searrow <plug>\searrow '
|
||||
exe s:pA1.'swarrow <plug>\swarrow '
|
||||
exe s:pA1.'nwarrow <plug>\nwarrow '
|
||||
exe s:pA1.'mapsto <plug>\mapsto '
|
||||
exe s:pA1.'leadsto <plug>\leadsto '
|
||||
exe s:pA1.'longmapsto <plug>\longmapsto '
|
||||
exe s:pA1.'hookleftarrow <plug>\hookleftarrow '
|
||||
exe s:pA1.'hookrightarrow <plug>\hookrightarrow '
|
||||
exe s:pA1.'leftharpoonup <plug>\leftharpoonup '
|
||||
exe s:pA1.'leftharpoondown <plug>\leftharpoondown '
|
||||
exe s:pA1.'rightharpoonup <plug>\rightharpoonup '
|
||||
exe s:pA1.'rightharpoondown <plug>\rightharpoondown '
|
||||
exe s:pA1.'rightleftharpoons <plug>\rightleftharpoons '
|
||||
exe s:pA1.'overleftarrow <plug>\overleftarrow '
|
||||
exe s:pA1.'overrightarrow <plug>\overrightarrow '
|
||||
exe s:pA1.'overleftrightarrow <plug>\overleftrightarrow '
|
||||
exe s:pA1.'underleftarrow <plug>\underleftarrow '
|
||||
exe s:pA1.'underrightarrow <plug>\underrightarrow '
|
||||
exe s:pA1.'underleftrightarrow <plug>\underleftrightarrow '
|
||||
exe s:pA1.'xleftarrow <plug>\xleftarrow '
|
||||
exe s:pA1.'xrightarrow <plug>\xrightarrow '
|
||||
" }}}
|
||||
|
||||
|
||||
" MATH nArrows {{{
|
||||
let s:pA1a = s:pA."&nArrows."
|
||||
exe s:pA1a.'nleftarrow <plug>\nleftarrow '
|
||||
exe s:pA1a.'nLeftarrow <plug>\nLeftarrow '
|
||||
exe s:pA1a.'nleftrightarrow <plug>\nleftrightarrow '
|
||||
exe s:pA1a.'nrightarrow <plug>\nrightarrow '
|
||||
exe s:pA1a.'nRightarrow <plug>\nRightarrow '
|
||||
" }}}
|
||||
" MATH Arrows2 {{{
|
||||
let s:pA1a = s:pA."Arrows2."
|
||||
exe s:pA1a.'dashleftarrow <plug>\dashleftarrow '
|
||||
exe s:pA1a.'leftleftarrows <plug>\leftleftarrows '
|
||||
exe s:pA1a.'leftrightarrows <plug>\leftrightarrows '
|
||||
exe s:pA1a.'Lleftarrow <plug>\Lleftarrow '
|
||||
exe s:pA1a.'twoheadleftarrow <plug>\twoheadleftarrow '
|
||||
exe s:pA1a.'leftarrowtail <plug>\leftarrowtail '
|
||||
exe s:pA1a.'leftrightharpoons <plug>\leftrightharpoons '
|
||||
exe s:pA1a.'Lsh <plug>\Lsh '
|
||||
exe s:pA1a.'looparrowleft <plug>\looparrowleft '
|
||||
exe s:pA1a.'curvearrowleft <plug>\curvearrowleft '
|
||||
exe s:pA1a.'circlearrowleft <plug>\circlearrowleft '
|
||||
exe s:pA1a.'dashrightarrow <plug>\dashrightarrow '
|
||||
exe s:pA1a.'rightrightarrows <plug>\rightrightarrows '
|
||||
exe s:pA1a.'rightleftarrows <plug>\rightleftarrows '
|
||||
exe s:pA1a.'Rrightarrow <plug>\Rrightarrow '
|
||||
exe s:pA1a.'twoheadrightarrow <plug>\twoheadrightarrow '
|
||||
exe s:pA1a.'rightarrowtail <plug>\rightarrowtail '
|
||||
exe s:pA1a.'rightleftharpoons <plug>\rightleftharpoons '
|
||||
exe s:pA1a.'Rsh <plug>\Rsh '
|
||||
exe s:pA1a.'looparrowright <plug>\looparrowright '
|
||||
exe s:pA1a.'curvearrowright <plug>\curvearrowright '
|
||||
exe s:pA1a.'circlearrowright <plug>\circlearrowright '
|
||||
exe s:pA1a.'multimap <plug>\multimap '
|
||||
exe s:pA1a.'upuparrows <plug>\upuparrows '
|
||||
exe s:pA1a.'downdownarrows <plug>\downdownarrows '
|
||||
exe s:pA1a.'upharpoonleft <plug>\upharpoonleft '
|
||||
exe s:pA1a.'upharpoonright <plug>\upharpoonright '
|
||||
exe s:pA1a.'downharpoonleft <plug>\downharpoonleft '
|
||||
exe s:pA1a.'downharpoonright <plug>\downharpoonright '
|
||||
exe s:pA1a.'rightsquigarrow <plug>\rightsquigarrow '
|
||||
exe s:pA1a.'leftrightsquigarrow <plug>\leftrightsquigarrow '
|
||||
" }}}
|
||||
" MATH Fonts {{{
|
||||
let s:pA2a = s:pA."&MathFonts."
|
||||
exe s:pA2a.'mathbf{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathbf{<++>}<++>")<cr>'
|
||||
exe s:pA2a.'mathrm{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathrm{<++>}<++>")<cr>'
|
||||
exe s:pA2a.'mathsf{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathsf{<++>}<++>")<cr>'
|
||||
exe s:pA2a.'mathtt{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathtt{<++>}<++>")<cr>'
|
||||
exe s:pA2a.'mathit{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathit{<++>}<++>")<cr>'
|
||||
exe s:pA2a.'mathfrak{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathfrak{<++>}<++>")<cr>'
|
||||
exe s:pA2a.'mathcal{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathcal{<++>}<++>")<cr>'
|
||||
exe s:pA2a.'mathscr{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathscr{<++>}<++>")<cr>'
|
||||
exe s:pA2a.'mathbb{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathbb{<++>}<++>")<cr>'
|
||||
" }}}
|
||||
" Greek Letters small {{{
|
||||
let s:pA2 = s:pA."&Greek.&Small."
|
||||
exe s:pA2.'alpha<Tab>`a <plug>\alpha '
|
||||
exe s:pA2.'beta<Tab>`b <plug>\beta '
|
||||
exe s:pA2.'gamma<Tab>`g <plug>\gamma '
|
||||
exe s:pA2.'delta<Tab>`d <plug>\delta '
|
||||
exe s:pA2.'epsilon <plug>\epsilon '
|
||||
exe s:pA2.'varepsilon<Tab>`e <plug>\varepsilon '
|
||||
exe s:pA2.'zeta<Tab>`z <plug>\zeta '
|
||||
exe s:pA2.'eta<Tab>`h <plug>\eta '
|
||||
exe s:pA2.'theta<Tab>`q <plug>\theta '
|
||||
exe s:pA2.'vartheta <plug>\vartheta '
|
||||
exe s:pA2.'iota<Tab>`i <plug>\iota '
|
||||
exe s:pA2.'kappa<Tab>`k <plug>\kappa '
|
||||
exe s:pA2.'lambda<Tab>`l <plug>\lambda '
|
||||
exe s:pA2.'mu<Tab>`m <plug>\mu '
|
||||
exe s:pA2.'nu<Tab>`n <plug>\nu '
|
||||
exe s:pA2.'xi<Tab>`x <plug>\xi '
|
||||
exe s:pA2.'pi<Tab>`p <plug>\pi '
|
||||
exe s:pA2.'varpi <plug>\varpi '
|
||||
exe s:pA2.'rho<Tab>`r <plug>\rho '
|
||||
exe s:pA2.'varrho <plug>\varrho '
|
||||
exe s:pA2.'sigma<Tab>`s <plug>\sigma '
|
||||
exe s:pA2.'varsigma<Tab>`v <plug>\varsigma '
|
||||
exe s:pA2.'tau<Tab>`t <plug>\tau '
|
||||
exe s:pA2.'upsilon<Tab>`u <plug>\upsilon '
|
||||
exe s:pA2.'phi <plug>\phi '
|
||||
exe s:pA2.'varphi<Tab>`f <plug>\varphi '
|
||||
exe s:pA2.'chi<Tab>`c <plug>\chi '
|
||||
exe s:pA2.'psi<Tab>`y <plug>\psi '
|
||||
exe s:pA2.'omega<Tab>`w <plug>\omega '
|
||||
" }}}
|
||||
" Greek Letters big {{{
|
||||
let s:pA3 = s:pA.'&Greek.&Big.'
|
||||
exe s:pA3.'Alpha<Tab>`A <plug>\Alpha '
|
||||
exe s:pA3.'Beta<Tab>`B <plug>\Beta '
|
||||
exe s:pA3.'Gamma<Tab>`G <plug>\Gamma '
|
||||
exe s:pA3.'Delta<Tab>`D <plug>\Delta '
|
||||
exe s:pA3.'Epsilon<Tab>`E <plug>\Epsilon '
|
||||
exe s:pA3.'Zeta<Tab>`Z <plug>\mathrm{Z} '
|
||||
exe s:pA3.'Eta<Tab>`H <plug>\Eta '
|
||||
exe s:pA3.'Theta <plug>\Theta '
|
||||
exe s:pA3.'Iota <plug>\mathrm{I} '
|
||||
exe s:pA3.'Kappa<Tab>`K <plug>\Kappa '
|
||||
exe s:pA3.'Lambda<Tab>`L <plug>\Lambda '
|
||||
exe s:pA3.'Mu<Tab>`M <plug>\Mu '
|
||||
exe s:pA3.'Nu<Tab>`N <plug>\Nu '
|
||||
exe s:pA3.'Xi<Tab>`X <plug>\Xi '
|
||||
exe s:pA3.'Pi<Tab>`P <plug>\Pi '
|
||||
exe s:pA3.'Rho<Tab>`R <plug>\Rho '
|
||||
exe s:pA3.'Sigma<Tab>`S <plug>\Sigma '
|
||||
exe s:pA3.'Tau<Tab>`T <plug>\Tau '
|
||||
exe s:pA3.'Upsilon<Tab>`U <plug>\Upsilon '
|
||||
exe s:pA3.'Phi <plug>\Phi '
|
||||
exe s:pA3.'Chi<Tab>`C <plug>\Chi '
|
||||
exe s:pA3.'Psi<Tab>`Y <plug>\Psi '
|
||||
exe s:pA3.'Omega<Tab>`W <plug>\Omega '
|
||||
" }}}
|
||||
" BinaryRel1 {{{
|
||||
let s:pA4 = s:pA."&BinaryRel1."
|
||||
exe s:pA4.'ll <plug>\ll '
|
||||
exe s:pA4.'lll <plug>\lll '
|
||||
exe s:pA4.'leqslant <plug>\leqslant '
|
||||
exe s:pA4.'leq <plug>\leq '
|
||||
exe s:pA4.'leqq <plug>\leqq '
|
||||
exe s:pA4.'eqslantless <plug>\eqslantless '
|
||||
exe s:pA4.'lessdot <plug>\lessdot '
|
||||
exe s:pA4.'prec <plug>\prec '
|
||||
exe s:pA4.'preceq <plug>\preceq '
|
||||
exe s:pA4.'preccurlyeq <plug>\preccurlyeq '
|
||||
exe s:pA4.'curlyeqprec <plug>\curlyeqprec '
|
||||
exe s:pA4.'lesssim <plug>\lesssim '
|
||||
exe s:pA4.'lessapprox <plug>\lessapprox '
|
||||
exe s:pA4.'precsim <plug>\precsim '
|
||||
exe s:pA4.'precapprox <plug>\precapprox '
|
||||
exe s:pA4.'in <plug>\in '
|
||||
exe s:pA4.'subset<Tab>`( <plug>\subset '
|
||||
exe s:pA4.'Subset<Tab>`) <plug>\Subset '
|
||||
exe s:pA4.'subseteq <plug>\subseteq '
|
||||
exe s:pA4.'subseteqq <plug>\subseteqq '
|
||||
exe s:pA4.'sqsubset <plug>\sqsubset '
|
||||
exe s:pA4.'sqsubseteq <plug>\sqsubseteq '
|
||||
exe s:pA4.'smile <plug>\smile '
|
||||
exe s:pA4.'smallsmile <plug>\smallsmile '
|
||||
exe s:pA4.'parallel <plug>\parallel '
|
||||
exe s:pA4.'shortparallel <plug>\shortparallel '
|
||||
exe s:pA4.'dashv <plug>\dashv '
|
||||
exe s:pA4.'vdash <plug>\vdash '
|
||||
exe s:pA4.'vDash <plug>\vDash '
|
||||
exe s:pA4.'models <plug>\models '
|
||||
exe s:pA4.'therefore <plug>\therefore '
|
||||
exe s:pA4.'backepsilon <plug>\backepsilon '
|
||||
" }}}
|
||||
" nBinaryRel1 {{{
|
||||
let s:pA4a = s:pA."&nBinaryRel1."
|
||||
exe s:pA4a.'nless <plug>\nless '
|
||||
exe s:pA4a.'nleqslant <plug>\nleqslant '
|
||||
exe s:pA4a.'nleq <plug>\nleq '
|
||||
exe s:pA4a.'lneq <plug>\lneq '
|
||||
exe s:pA4a.'nleqq <plug>\nleqq '
|
||||
exe s:pA4a.'lneqq <plug>\lneqq '
|
||||
exe s:pA4a.'lvertneqq <plug>\lvertneqq '
|
||||
exe s:pA4a.'nprec <plug>\nprec '
|
||||
exe s:pA4a.'npreceq <plug>\npreceq '
|
||||
exe s:pA4a.'precneqq <plug>\precneqq '
|
||||
exe s:pA4a.'lnsim <plug>\lnsim '
|
||||
exe s:pA4a.'lnapprox <plug>\lnapprox '
|
||||
exe s:pA4a.'precnsim <plug>\precnsim '
|
||||
exe s:pA4a.'precnapprox <plug>\precnapprox '
|
||||
exe s:pA4a.'notin <plug>\notin '
|
||||
exe s:pA4a.'nsubseteq <plug>\nsubseteq '
|
||||
exe s:pA4a.'varsubsetneq <plug>\varsubsetneq '
|
||||
exe s:pA4a.'subsetneq <plug>\subsetneq '
|
||||
exe s:pA4a.'nsubseteqq <plug>\nsubseteqq '
|
||||
exe s:pA4a.'varsubsetneqq <plug>\varsubsetneqq '
|
||||
exe s:pA4a.'subsetneqq <plug>\subsetneqq '
|
||||
exe s:pA4a.'nparallel <plug>\nparallel '
|
||||
exe s:pA4a.'nshortparallel <plug>\nshortparallel '
|
||||
exe s:pA4a.'nvdash <plug>\nvdash '
|
||||
exe s:pA4a.'nvDash <plug>\nvDash '
|
||||
" }}}
|
||||
" BinaryRel2 {{{
|
||||
let s:pA5 = s:pA."&BinaryRel2."
|
||||
exe s:pA5.'gg <plug>\gg '
|
||||
exe s:pA5.'ggg <plug>\ggg '
|
||||
exe s:pA5.'gggtr <plug>\gggtr '
|
||||
exe s:pA5.'geqslant <plug>\geqslant '
|
||||
exe s:pA5.'geq <plug>\geq '
|
||||
exe s:pA5.'geqq <plug>\geqq '
|
||||
exe s:pA5.'eqslantgtr <plug>\eqslantgtr '
|
||||
exe s:pA5.'gtrdot <plug>\gtrdot '
|
||||
exe s:pA5.'succ <plug>\succ '
|
||||
exe s:pA5.'succeq <plug>\succeq '
|
||||
exe s:pA5.'succcurlyeq <plug>\succcurlyeq '
|
||||
exe s:pA5.'curlyeqsucc <plug>\curlyeqsucc '
|
||||
exe s:pA5.'gtrsim <plug>\gtrsim '
|
||||
exe s:pA5.'gtrapprox <plug>\gtrapprox '
|
||||
exe s:pA5.'succsim <plug>\succsim '
|
||||
exe s:pA5.'succapprox <plug>\succapprox '
|
||||
exe s:pA5.'ni <plug>\ni '
|
||||
exe s:pA5.'owns <plug>\owns '
|
||||
exe s:pA5.'supset <plug>\supset '
|
||||
exe s:pA5.'Supset <plug>\Supset '
|
||||
exe s:pA5.'supseteq <plug>\supseteq '
|
||||
exe s:pA5.'supseteqq <plug>\supseteqq '
|
||||
exe s:pA5.'sqsupset <plug>\sqsupset '
|
||||
exe s:pA5.'sqsupseteq <plug>\sqsupseteq '
|
||||
exe s:pA5.'frown <plug>\frown '
|
||||
exe s:pA5.'smallfrown <plug>\smallfrown '
|
||||
exe s:pA5.'mid <plug>\mid '
|
||||
exe s:pA5.'shortmid <plug>\shortmid '
|
||||
exe s:pA5.'between <plug>\between '
|
||||
exe s:pA5.'Vdash <plug>\Vdash '
|
||||
exe s:pA5.'bowtie <plug>\bowtie '
|
||||
exe s:pA5.'Join <plug>\Join '
|
||||
exe s:pA5.'pitchfork <plug>\pitchfork '
|
||||
" }}}
|
||||
" {{{ nBinaryRel2
|
||||
let s:pA5a = s:pA."n&BinaryRel2." "TODO: dorobi<62> logarytmy
|
||||
exe s:pA5a.'ngtr <plug>\ngtr '
|
||||
exe s:pA5a.'ngeqslant <plug>\ngeqslant '
|
||||
exe s:pA5a.'ngeq <plug>\ngeq '
|
||||
exe s:pA5a.'gneq <plug>\gneq '
|
||||
exe s:pA5a.'ngeqq <plug>\ngeqq '
|
||||
exe s:pA5a.'gneqq <plug>\gneqq '
|
||||
exe s:pA5a.'nsucc <plug>\nsucc '
|
||||
exe s:pA5a.'nsucceq <plug>\nsucceq '
|
||||
exe s:pA5a.'succneqq <plug>\succneqq '
|
||||
exe s:pA5a.'gnsim <plug>\gnsim '
|
||||
exe s:pA5a.'gnapprox <plug>\gnapprox '
|
||||
exe s:pA5a.'succnsim <plug>\succnsim '
|
||||
exe s:pA5a.'succnapprox <plug>\succnapprox '
|
||||
exe s:pA5a.'nsupseteq <plug>\nsupseteq '
|
||||
exe s:pA5a.'varsupsetneq <plug>\varsupsetneq '
|
||||
exe s:pA5a.'supsetneq <plug>\supsetneq '
|
||||
exe s:pA5a.'nsupseteqq <plug>\nsupseteqq '
|
||||
exe s:pA5a.'varsupsetneqq <plug>\varsupsetneqq '
|
||||
exe s:pA5a.'supsetneqq <plug>\supsetneqq '
|
||||
exe s:pA5a.'nmid <plug>\nmid '
|
||||
exe s:pA5a.'nshortmid <plug>\nshortmid '
|
||||
exe s:pA5a.'nVdash <plug>\nVdash '
|
||||
" }}}
|
||||
" {{{ BinaryRel3
|
||||
let s:pA6 = s:pA."&BinaryRel3."
|
||||
exe s:pA6.'doteq <plug>\doteq '
|
||||
exe s:pA6.'circeq <plug>\circeq '
|
||||
exe s:pA6.'eqcirc <plug>\eqcirc '
|
||||
exe s:pA6.'risingdotseq <plug>\risingdotseq '
|
||||
exe s:pA6.'doteqdot <plug>\doteqdot '
|
||||
exe s:pA6.'Doteq <plug>\Doteq '
|
||||
exe s:pA6.'fallingdotseq <plug>\fallingdotseq '
|
||||
exe s:pA6.'triangleq <plug>\triangleq '
|
||||
exe s:pA6.'bumpeq <plug>\bumpeq '
|
||||
exe s:pA6.'Bumpeq <plug>\Bumpeq '
|
||||
exe s:pA6.'equiv<Tab>`= <plug>\equiv '
|
||||
exe s:pA6.'sim <plug>\sim '
|
||||
exe s:pA6.'thicksim <plug>\thicksim '
|
||||
exe s:pA6.'backsim <plug>\backsim '
|
||||
exe s:pA6.'simeq <plug>\simeq '
|
||||
exe s:pA6.'backsimeq <plug>\backsimeq '
|
||||
exe s:pA6.'cong <plug>\cong '
|
||||
exe s:pA6.'approx<tab>=~ <plug>\approx '
|
||||
exe s:pA6.'thickapprox <plug>\thickapprox '
|
||||
exe s:pA6.'approxeq <plug>\approxeq '
|
||||
exe s:pA6.'blacktriangleleft <plug>\blacktriangleleft '
|
||||
exe s:pA6.'vartriangleleft <plug>\vartriangleleft '
|
||||
exe s:pA6.'trianglelefteq <plug>\trianglelefteq '
|
||||
exe s:pA6.'blacktriangleright <plug>\blacktriangleright '
|
||||
exe s:pA6.'vartriangleright <plug>\vartriangleright '
|
||||
exe s:pA6.'trianglerighteq <plug>\trianglerighteq '
|
||||
exe s:pA6.'perp <plug>\perp '
|
||||
exe s:pA6.'asymp <plug>\asymp '
|
||||
exe s:pA6.'Vvdash <plug>\Vvdash '
|
||||
exe s:pA6.'propto <plug>\propto '
|
||||
exe s:pA6.'varpropto <plug>\varpropto '
|
||||
exe s:pA6.'because <plug>\because '
|
||||
" }}}
|
||||
" {{{ nBinaryRel3
|
||||
let s:pA6a = s:pA."&nBinaryRel3."
|
||||
exe s:pA6a.'neq <plug>\neq '
|
||||
exe s:pA6a.'nsim <plug>\nsim '
|
||||
exe s:pA6a.'ncong <plug>\ncong '
|
||||
exe s:pA6a.'ntriangleleft <plug>\ntriangleleft '
|
||||
exe s:pA6a.'ntrianglelefteq <plug>\ntrianglelefteq '
|
||||
exe s:pA6a.'ntriangleright <plug>\ntriangleright '
|
||||
exe s:pA6a.'ntrianglerighteq <plug>\ntrianglerighteq '
|
||||
" }}}
|
||||
" {{{ BinaryRel4
|
||||
let s:pA7 = s:pA."&BinaryRel4."
|
||||
exe s:pA7.'lessgtr <plug>\lessgtr '
|
||||
exe s:pA7.'gtrless <plug>\gtrless '
|
||||
exe s:pA7.'lesseqgtr <plug>\lesseqgtr '
|
||||
exe s:pA7.'gtreqless <plug>\gtreqless '
|
||||
exe s:pA7.'lesseqqgtr <plug>\lesseqqgtr '
|
||||
exe s:pA7.'gtreqqless <plug>\gtreqqless '
|
||||
" }}}
|
||||
" {{{ BigOp
|
||||
let s:pA8a = s:pA."&BigOp."
|
||||
exe s:pA8a.'limits <plug>\limits'
|
||||
exe s:pA8a.'nolimits <plug>\nolimits'
|
||||
exe s:pA8a.'displaylimits <plug>\displaylimits'
|
||||
exe s:pA8a.'-seplimits- :'
|
||||
exe s:pA8a.'bigcap<Tab>`- <plug>\bigcap'
|
||||
exe s:pA8a.'bigcup<Tab>`+ <plug>\bigcup'
|
||||
exe s:pA8a.'bigodot <plug>\bigodot'
|
||||
exe s:pA8a.'bigoplus <plug>\bigoplus'
|
||||
exe s:pA8a.'bigotimes <plug>\bigotimes'
|
||||
exe s:pA8a.'bigsqcup <plug>\bigsqcup'
|
||||
exe s:pA8a.'biguplus <plug>\biguplus'
|
||||
exe s:pA8a.'bigvee <plug>\bigvee'
|
||||
exe s:pA8a.'bigwedge <plug>\bigwedge'
|
||||
exe s:pA8a.'coprod <plug>\coprod'
|
||||
exe s:pA8a.'int <plug>\int'
|
||||
exe s:pA8a.'oint <plug>\oint'
|
||||
exe s:pA8a.'prod <plug>\prod'
|
||||
exe s:pA8a.'sum <plug>\sum'
|
||||
" }}}
|
||||
" {{{ BinaryOp
|
||||
let s:pA8 = s:pA."&BinaryOp."
|
||||
exe s:pA8.'pm <plug>\pm '
|
||||
exe s:pA8.'mp <plug>\mp '
|
||||
exe s:pA8.'dotplus <plug>\dotplus '
|
||||
exe s:pA8.'cdot<Tab>`. <plug>\cdot '
|
||||
exe s:pA8.'centerdot <plug>\centerdot '
|
||||
exe s:pA8.'times<Tab>`* <plug>\times '
|
||||
exe s:pA8.'ltimes <plug>\ltimes '
|
||||
exe s:pA8.'rtimes <plug>\rtimes '
|
||||
exe s:pA8.'leftthreetimes <plug>\leftthreetimes '
|
||||
exe s:pA8.'rightthreetimes <plug>\rightthreetimes '
|
||||
exe s:pA8.'div <plug>\div '
|
||||
exe s:pA8.'divideontimes <plug>\divideontimes '
|
||||
exe s:pA8.'bmod <plug>\bmod '
|
||||
exe s:pA8.'ast <plug>\ast '
|
||||
exe s:pA8.'star <plug>\star '
|
||||
exe s:pA8.'setminus<Tab>`\\ <plug>\setminus '
|
||||
exe s:pA8.'smallsetminus <plug>\smallsetminus '
|
||||
exe s:pA8.'diamond <plug>\diamond '
|
||||
exe s:pA8.'wr <plug>\wr '
|
||||
exe s:pA8.'intercal <plug>\intercal '
|
||||
exe s:pA8.'circ<Tab>`@ <plug>\circ '
|
||||
exe s:pA8.'bigcirc <plug>\bigcirc '
|
||||
exe s:pA8.'bullet <plug>\bullet '
|
||||
exe s:pA8.'cap <plug>\cap '
|
||||
exe s:pA8.'Cap <plug>\Cap '
|
||||
exe s:pA8.'cup <plug>\cup '
|
||||
exe s:pA8.'Cup <plug>\Cup '
|
||||
exe s:pA8.'sqcap <plug>\sqcap '
|
||||
exe s:pA8.'sqcup <plug>\sqcup'
|
||||
exe s:pA8.'amalg <plug>\amalg '
|
||||
exe s:pA8.'uplus <plug>\uplus '
|
||||
exe s:pA8.'triangleleft <plug>\triangleleft '
|
||||
exe s:pA8.'triangleright <plug>\triangleright '
|
||||
exe s:pA8.'bigtriangleup <plug>\bigtriangleup '
|
||||
exe s:pA8.'bigtriangledown <plug>\bigtriangledown '
|
||||
exe s:pA8.'vee <plug>\vee '
|
||||
exe s:pA8.'veebar <plug>\veebar '
|
||||
exe s:pA8.'curlyvee <plug>\curlyvee '
|
||||
exe s:pA8.'wedge<Tab>`& <plug>\wedge '
|
||||
exe s:pA8.'barwedge <plug>\barwedge '
|
||||
exe s:pA8.'doublebarwedge <plug>\doublebarwedge '
|
||||
exe s:pA8.'curlywedge <plug>\curlywedge '
|
||||
exe s:pA8.'oplus <plug>\oplus '
|
||||
exe s:pA8.'ominus <plug>\ominus '
|
||||
exe s:pA8.'otimes <plug>\otimes '
|
||||
exe s:pA8.'oslash <plug>\oslash '
|
||||
exe s:pA8.'boxplus <plug>\boxplus '
|
||||
exe s:pA8.'boxminus <plug>\boxminus '
|
||||
exe s:pA8.'boxtimes <plug>\boxtimes '
|
||||
exe s:pA8.'boxdot <plug>\boxdot '
|
||||
exe s:pA8.'odot <plug>\odot '
|
||||
exe s:pA8.'circledast <plug>\circledast '
|
||||
exe s:pA8.'circleddash <plug>\circleddash '
|
||||
exe s:pA8.'circledcirc <plug>\circledcirc '
|
||||
exe s:pA8.'dagger <plug>\dagger '
|
||||
exe s:pA8.'ddagger <plug>\ddagger '
|
||||
exe s:pA8.'lhd <plug>\lhd '
|
||||
exe s:pA8.'unlhd <plug>\unlhd '
|
||||
exe s:pA8.'rhd <plug>\rhd '
|
||||
exe s:pA8.'unrhd <plug>\unrhd '
|
||||
" }}}
|
||||
" {{{ Other1
|
||||
let s:pA9 = s:pA."&Other1."
|
||||
exe s:pA9.'hat <plug>\hat '
|
||||
exe s:pA9.'check <plug>\check '
|
||||
exe s:pA9.'grave <plug>\grave '
|
||||
exe s:pA9.'acute <plug>\acute '
|
||||
exe s:pA9.'dot <plug>\dot '
|
||||
exe s:pA9.'ddot <plug>\ddot '
|
||||
exe s:pA9.'tilde<Tab>`, <plug>\tilde '
|
||||
exe s:pA9.'breve <plug>\breve '
|
||||
exe s:pA9.'bar <plug>\bar '
|
||||
exe s:pA9.'vec <plug>\vec '
|
||||
exe s:pA9.'aleph <plug>\aleph '
|
||||
exe s:pA9.'hbar <plug>\hbar '
|
||||
exe s:pA9.'imath <plug>\imath '
|
||||
exe s:pA9.'jmath <plug>\jmath '
|
||||
exe s:pA9.'ell <plug>\ell '
|
||||
exe s:pA9.'wp <plug>\wp '
|
||||
exe s:pA9.'Re <plug>\Re '
|
||||
exe s:pA9.'Im <plug>\Im '
|
||||
exe s:pA9.'partial <plug>\partial '
|
||||
exe s:pA9.'infty<Tab>`8 <plug>\infty '
|
||||
exe s:pA9.'prime <plug>\prime '
|
||||
exe s:pA9.'emptyset <plug>\emptyset '
|
||||
exe s:pA9.'nabla <plug>\nabla '
|
||||
exe s:pA9.'surd <plug>\surd '
|
||||
exe s:pA9.'top <plug>\top '
|
||||
exe s:pA9.'bot <plug>\bot '
|
||||
exe s:pA9.'angle <plug>\angle '
|
||||
exe s:pA9.'triangle <plug>\triangle '
|
||||
exe s:pA9.'backslash <plug>\backslash '
|
||||
exe s:pA9.'forall <plug>\forall '
|
||||
exe s:pA9.'exists <plug>\exists '
|
||||
exe s:pA9.'neg <plug>\neg '
|
||||
exe s:pA9.'flat <plug>\flat '
|
||||
exe s:pA9.'natural <plug>\natural '
|
||||
exe s:pA9.'sharp <plug>\sharp '
|
||||
exe s:pA9.'clubsuit <plug>\clubsuit '
|
||||
exe s:pA9.'diamondsuit <plug>\diamondsuit '
|
||||
exe s:pA9.'heartsuit <plug>\heartsuit '
|
||||
exe s:pA9.'spadesuit <plug>\spadesuit '
|
||||
exe s:pA9.'S <plug>\S '
|
||||
exe s:pA9.'P <plug>\P'
|
||||
" }}}
|
||||
" {{{ MathCreating
|
||||
let s:pA10 = s:pA."&MathCreating."
|
||||
exe s:pA10.'not <plug>\not'
|
||||
exe s:pA10.'mkern <plug>\mkern'
|
||||
exe s:pA10.'mathbin <plug>\mathbin'
|
||||
exe s:pA10.'mathrel <plug>\mathrel'
|
||||
exe s:pA10.'stackrel <plug>\stackrel'
|
||||
exe s:pA10.'mathord <plug>\mathord'
|
||||
" }}}
|
||||
" {{{ Styles
|
||||
let s:pA11 = s:pA."&Styles."
|
||||
exe s:pA11.'displaystyle <plug>\displaystyle'
|
||||
exe s:pA11.'textstyle <plug>\textstyle'
|
||||
exe s:pA11.'scritpstyle <plug>\scritpstyle'
|
||||
exe s:pA11.'scriptscriptstyle <plug>\scriptscriptstyle'
|
||||
" }}}
|
||||
" {{{ MathDiacritics
|
||||
let s:pA12 = s:pA."&MathDiacritics."
|
||||
exe s:pA12.'acute{} <plug><C-r>=IMAP_PutTextWithMovement("\\acute{<++>}<++>")<cr>'
|
||||
exe s:pA12.'bar{}<Tab>`_ <plug><C-r>=IMAP_PutTextWithMovement("\\bar{<++>}<++>")<cr>'
|
||||
exe s:pA12.'breve{} <plug><C-r>=IMAP_PutTextWithMovement("\\breve{<++>}<++>")<cr>'
|
||||
exe s:pA12.'check{} <plug><C-r>=IMAP_PutTextWithMovement("\\check{<++>}<++>")<cr>'
|
||||
exe s:pA12.'ddot{}<Tab>`: <plug><C-r>=IMAP_PutTextWithMovement("\\ddot{<++>}<++>")<cr>'
|
||||
exe s:pA12.'dot{}<Tab>`; <plug><C-r>=IMAP_PutTextWithMovement("\\dot{<++>}<++>")<cr>'
|
||||
exe s:pA12.'grave{} <plug><C-r>=IMAP_PutTextWithMovement("\\grave{<++>}<++>")<cr>'
|
||||
exe s:pA12.'hat{}<Tab>`^ <plug><C-r>=IMAP_PutTextWithMovement("\\hat{<++>}<++>")<cr>'
|
||||
exe s:pA12.'tilde{}<tab>`~ <plug><C-r>=IMAP_PutTextWithMovement("\\tilde{<++>}<++>")<cr>'
|
||||
exe s:pA12.'vec{} <plug><C-r>=IMAP_PutTextWithMovement("\\vec{<++>}<++>")<cr>'
|
||||
exe s:pA12.'widehat{} <plug><C-r>=IMAP_PutTextWithMovement("\\widehat{<++>}<++>")<cr>'
|
||||
exe s:pA12.'widetilde{} <plug><C-r>=IMAP_PutTextWithMovement("\\widetilde{<++>}<++>")<cr>'
|
||||
exe s:pA12.'imath <plug><C-r>=IMAP_PutTextWithMovement("\\imath")<cr>'
|
||||
exe s:pA12.'jmath <plug><C-r>=IMAP_PutTextWithMovement("\\jmath")<cr>'
|
||||
" }}}
|
||||
" {{{ OverlineAndCo
|
||||
let s:pA13 = s:pA."&OverlineAndCo."
|
||||
exe s:pA13.'overline{} <plug><C-r>=IMAP_PutTextWithMovement("\\overline{}")<cr>'
|
||||
exe s:pA13.'underline{} <plug><C-r>=IMAP_PutTextWithMovement("\\underline{}")<cr>'
|
||||
exe s:pA13.'overrightarrow{} <plug><C-r>=IMAP_PutTextWithMovement("\\overrightarrow{}")<cr>'
|
||||
exe s:pA13.'overleftarrow{} <plug><C-r>=IMAP_PutTextWithMovement("\\overleftarrow{}")<cr>'
|
||||
exe s:pA13.'overbrace{} <plug><C-r>=IMAP_PutTextWithMovement("\\overbrace{}")<cr>'
|
||||
exe s:pA13.'underbrace{} <plug><C-r>=IMAP_PutTextWithMovement("\\underbrace{}")<cr>'
|
||||
" }}}
|
||||
" {{{ Symbols1
|
||||
let s:pA14a = s:pA."&Symbols1."
|
||||
exe s:pA14a.'forall <plug>\forall '
|
||||
exe s:pA14a.'exists <plug>\exists '
|
||||
exe s:pA14a.'nexists <plug>\nexists '
|
||||
exe s:pA14a.'neg <plug>\neg '
|
||||
exe s:pA14a.'top <plug>\top '
|
||||
exe s:pA14a.'bot <plug>\bot '
|
||||
exe s:pA14a.'emptyset <plug>\emptyset '
|
||||
exe s:pA14a.'varnothing <plug>\varnothing '
|
||||
exe s:pA14a.'infty <plug>\infty '
|
||||
exe s:pA14a.'aleph <plug>\aleph '
|
||||
exe s:pA14a.'beth <plug>\beth '
|
||||
exe s:pA14a.'gimel <plug>\gimel '
|
||||
exe s:pA14a.'daleth <plug>\daleth '
|
||||
exe s:pA14a.'hbar <plug>\hbar '
|
||||
exe s:pA14a.'hslash <plug>\hslash '
|
||||
exe s:pA14a.'diagup <plug>\diagup '
|
||||
exe s:pA14a.'vert <plug>\vert '
|
||||
exe s:pA14a.'Vert <plug>\Vert '
|
||||
exe s:pA14a.'backslash <plug>\backslash '
|
||||
exe s:pA14a.'diagdown <plug>\diagdown '
|
||||
exe s:pA14a.'Bbbk <plug>\Bbbk '
|
||||
exe s:pA14a.'P <plug>\P '
|
||||
exe s:pA14a.'S <plug>\S '
|
||||
" }}}
|
||||
" {{{ Symbols2
|
||||
let s:pA14b = s:pA."&Symbols2."
|
||||
exe s:pA14b.'# <plug>\# '
|
||||
exe s:pA14b.'% <plug>\% '
|
||||
exe s:pA14b.'_ <plug>\_ '
|
||||
exe s:pA14b.'$ <plug>\$ '
|
||||
exe s:pA14b.'& <plug>\& '
|
||||
exe s:pA14b.'imath <plug>\imath '
|
||||
exe s:pA14b.'jmath <plug>\jmath '
|
||||
exe s:pA14b.'ell <plug>\ell '
|
||||
exe s:pA14b.'wp <plug>\wp '
|
||||
exe s:pA14b.'Re <plug>\Re '
|
||||
exe s:pA14b.'Im <plug>\Im '
|
||||
exe s:pA14b.'prime <plug>\prime '
|
||||
exe s:pA14b.'backprime <plug>\backprime '
|
||||
exe s:pA14b.'nabla <plug>\nabla '
|
||||
exe s:pA14b.'surd <plug>\surd '
|
||||
exe s:pA14b.'flat <plug>\flat '
|
||||
exe s:pA14b.'sharp <plug>\sharp '
|
||||
exe s:pA14b.'natural <plug>\natural '
|
||||
exe s:pA14b.'eth <plug>\eth '
|
||||
exe s:pA14b.'bigstar <plug>\bigstar '
|
||||
exe s:pA14b.'circledS <plug>\circledS '
|
||||
exe s:pA14b.'Finv <plug>\Finv '
|
||||
exe s:pA14b.'dag <plug>\dag '
|
||||
exe s:pA14b.'ddag <plug>\ddag '
|
||||
" }}}
|
||||
" {{{ Symbols3
|
||||
let s:pA14c = s:pA."&Symbols3."
|
||||
exe s:pA14c.'angle <plug>\angle '
|
||||
exe s:pA14c.'measuredangle <plug>\measuredangle '
|
||||
exe s:pA14c.'sphericalangle <plug>\sphericalangle '
|
||||
exe s:pA14c.'spadesuit <plug>\spadesuit '
|
||||
exe s:pA14c.'heartsuit <plug>\heartsuit '
|
||||
exe s:pA14c.'diamondsuit <plug>\diamondsuit '
|
||||
exe s:pA14c.'clubsuit <plug>\clubsuit '
|
||||
exe s:pA14c.'lozenge <plug>\lozenge '
|
||||
exe s:pA14c.'blacklozenge <plug>\blacklozenge '
|
||||
exe s:pA14c.'Diamond <plug>\Diamond '
|
||||
exe s:pA14c.'triangle <plug>\triangle '
|
||||
exe s:pA14c.'vartriangle <plug>\vartriangle '
|
||||
exe s:pA14c.'blacktriangle <plug>\blacktriangle '
|
||||
exe s:pA14c.'triangledown <plug>\triangledown '
|
||||
exe s:pA14c.'blacktriangledown <plug>\blacktriangledown '
|
||||
exe s:pA14c.'Box <plug>\Box '
|
||||
exe s:pA14c.'square <plug>\square '
|
||||
exe s:pA14c.'blacksquare <plug>\blacksquare '
|
||||
exe s:pA14c.'complement <plug>\complement '
|
||||
exe s:pA14c.'mho <plug>\mho '
|
||||
exe s:pA14c.'Game <plug>\Game '
|
||||
exe s:pA14c.'partial<Tab>`6 <plug>\partial '
|
||||
exe s:pA14c.'smallint <plug>\smallint '
|
||||
" }}}
|
||||
" {{{ Logic
|
||||
let s:pA15 = s:pA."&Logic."
|
||||
exe s:pA15.'lnot <plug>\lnot '
|
||||
exe s:pA15.'lor <plug>\lor '
|
||||
exe s:pA15.'land <plug>\land '
|
||||
" }}}
|
||||
" {{{ Limits1
|
||||
let s:pA16 = s:pA."&Limits1."
|
||||
exe s:pA16.'left <plug>\left'
|
||||
exe s:pA16.'right <plug>\right'
|
||||
exe s:pA16.'-sepbigl- :'
|
||||
exe s:pA16.'bigl <plug>\bigl'
|
||||
exe s:pA16.'Bigl <plug>\Bigl'
|
||||
exe s:pA16.'biggl <plug>\biggl'
|
||||
exe s:pA16.'Biggl <plug>\Biggl'
|
||||
exe s:pA16.'-sepbigr- :'
|
||||
exe s:pA16.'bigr <plug>\bigr'
|
||||
exe s:pA16.'Bigr <plug>\Bigr'
|
||||
exe s:pA16.'biggr <plug>\biggr'
|
||||
exe s:pA16.'Biggr <plug>\Biggr'
|
||||
exe s:pA16.'-sepbig- :'
|
||||
exe s:pA16.'big <plug>\big'
|
||||
exe s:pA16.'bigm <plug>\bigm'
|
||||
exe s:pA16.'-sepfloor- :'
|
||||
exe s:pA16.'lfloor <plug>\lfloor '
|
||||
exe s:pA16.'lceil <plug>\lceil '
|
||||
exe s:pA16.'rfloor <plug>\rfloor '
|
||||
exe s:pA16.'rceil <plug>\rceil '
|
||||
exe s:pA16.'-sepangle- :'
|
||||
exe s:pA16.'langle <plug>\langle '
|
||||
exe s:pA16.'rangle <plug>\rangle '
|
||||
" }}}
|
||||
" {{{ Limits2
|
||||
let s:pA16a = s:pA."&Limits2."
|
||||
exe s:pA16a.'ulcorner <plug>\ulcorner '
|
||||
exe s:pA16a.'urcorner <plug>\urcorner '
|
||||
exe s:pA16a.'llcorner <plug>\llcorner '
|
||||
exe s:pA16a.'rlcorner <plug>\rlcorner '
|
||||
exe s:pA16a.'-sepcorner- :'
|
||||
exe s:pA16a.'vert <plug>\vert '
|
||||
exe s:pA16a.'Vert <plug>\Vert '
|
||||
exe s:pA16a.'lvert <plug>\lvert '
|
||||
exe s:pA16a.'lVert <plug>\lVert '
|
||||
exe s:pA16a.'rvert <plug>\rvert '
|
||||
exe s:pA16a.'rVert <plug>\rVert '
|
||||
exe s:pA16a.'uparrow <plug>\uparrow '
|
||||
exe s:pA16a.'Uparrow <plug>\Uparrow '
|
||||
exe s:pA16a.'downarrow <plug>\downarrow '
|
||||
exe s:pA16a.'Downarrow <plug>\Downarrow '
|
||||
exe s:pA16a.'updownarrow <plug>\updownarrow '
|
||||
exe s:pA16a.'Updownarrow <plug>\Updownarrow '
|
||||
exe s:pA16a.'lgroup <plug>\lgroup '
|
||||
exe s:pA16a.'rgroup <plug>\rgroup '
|
||||
exe s:pA16a.'lmoustache <plug>\lmoustache '
|
||||
exe s:pA16a.'rmoustache <plug>\rmoustache '
|
||||
exe s:pA16a.'arrowvert <plug>\arrowvert '
|
||||
exe s:pA16a.'Arrowvert <plug>\Arrowvert '
|
||||
exe s:pA16a.'bracevert <plug>\bracevert '
|
||||
" }}}
|
||||
" {{{ Log-likes
|
||||
let s:pA17 = s:pA."Lo&g-likes."
|
||||
exe s:pA17.'arccos <plug>\arccos '
|
||||
exe s:pA17.'arcsin <plug>\arcsin '
|
||||
exe s:pA17.'arctan <plug>\arctan '
|
||||
exe s:pA17.'arg <plug>\arg '
|
||||
exe s:pA17.'cos <plug>\cos '
|
||||
exe s:pA17.'cosh <plug>\cosh '
|
||||
exe s:pA17.'cot <plug>\cot '
|
||||
exe s:pA17.'coth <plug>\coth '
|
||||
exe s:pA17.'csc <plug>\csc '
|
||||
exe s:pA17.'deg <plug>\deg '
|
||||
exe s:pA17.'det <plug>\det '
|
||||
exe s:pA17.'dim <plug>\dim '
|
||||
exe s:pA17.'exp <plug>\exp '
|
||||
exe s:pA17.'gcd <plug>\gcd '
|
||||
exe s:pA17.'hom <plug>\hom '
|
||||
exe s:pA17.'inf <plug>\inf '
|
||||
exe s:pA17.'injlim <plug>\injlim '
|
||||
exe s:pA17.'ker <plug>\ker '
|
||||
exe s:pA17.'lg <plug>\lg '
|
||||
exe s:pA17.'lim <plug>\lim '
|
||||
exe s:pA17.'liminf <plug>\liminf '
|
||||
exe s:pA17.'limsup <plug>\limsup '
|
||||
exe s:pA17.'ln <plug>\ln '
|
||||
exe s:pA17.'log <plug>\log '
|
||||
exe s:pA17.'max <plug>\max '
|
||||
exe s:pA17.'min <plug>\min '
|
||||
exe s:pA17.'Pr <plug>\Pr '
|
||||
exe s:pA17.'projlim <plug>\projlim '
|
||||
exe s:pA17.'sec <plug>\sec '
|
||||
exe s:pA17.'sin <plug>\sin '
|
||||
exe s:pA17.'sinh <plug>\sinh '
|
||||
exe s:pA17.'sup <plug>\sup '
|
||||
exe s:pA17.'tan <plug>\tan '
|
||||
exe s:pA17.'tanh <plug>\tanh '
|
||||
exe s:pA17.'varlimsup <plug>\varlimsup '
|
||||
exe s:pA17.'varliminf <plug>\varliminf '
|
||||
exe s:pA17.'varinjlim <plug>\varinjlim '
|
||||
exe s:pA17.'varprojlim <plug>\varprojlim '
|
||||
" }}}
|
||||
" {{{ MathSpacing
|
||||
let s:pA18 = s:pA."MathSpacing."
|
||||
exe s:pA18.', <plug>\, '
|
||||
exe s:pA18.': <plug>\: '
|
||||
exe s:pA18.'; <plug>\; '
|
||||
exe s:pA18.'[space] <plug>\ '
|
||||
exe s:pA18.'quad <plug>\quad '
|
||||
exe s:pA18.'qquad <plug>\qquad '
|
||||
exe s:pA18.'! <plug>\! '
|
||||
exe s:pA18.'thinspace <plug>\thinspace '
|
||||
exe s:pA18.'medspace <plug>\medspace '
|
||||
exe s:pA18.'thickspace <plug>\thickspace '
|
||||
exe s:pA18.'negthinspace <plug>\negthinspace '
|
||||
exe s:pA18.'negmedspace <plug>\negmedspace '
|
||||
exe s:pA18.'negthickspace <plug>\negthickspace '
|
||||
" 1}}}
|
||||
|
||||
" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
|
||||
@@ -1,16 +0,0 @@
|
||||
" ============================================================================
|
||||
" File: multicompile.vim
|
||||
" Author: Srinath Avadhanula
|
||||
" Created: Sat Jul 05 03:00 PM 2003
|
||||
" Description: compile a .tex file multiple times to get cross references
|
||||
" right.
|
||||
" License: Vim Charityware License
|
||||
" Part of vim-latexSuite: http://vim-latex.sourceforge.net
|
||||
" ============================================================================
|
||||
|
||||
" The contents of this file have been moved to compiler.vim, the file which
|
||||
" contains all functions relevant to compiling and viewing.
|
||||
" This file is kept empty on purpose so that it will over-write previous
|
||||
" versions of multicompile.vim, therby preventing conflicts.
|
||||
|
||||
" vim:fdm=marker:nowrap:noet:ff=unix:ts=4:sw=4
|
||||
@@ -1,676 +0,0 @@
|
||||
"=============================================================================
|
||||
" File: packages.vim
|
||||
" Author: Mikolaj Machowski
|
||||
" Created: Tue Apr 23 06:00 PM 2002 PST
|
||||
"
|
||||
" Description: handling packages from within vim
|
||||
"=============================================================================
|
||||
|
||||
" avoid reinclusion.
|
||||
if !g:Tex_PackagesMenu || exists('s:doneOnce')
|
||||
finish
|
||||
endif
|
||||
let s:doneOnce = 1
|
||||
|
||||
let s:path = fnameescape(expand("<sfile>:p:h"))
|
||||
|
||||
let s:menu_div = 20
|
||||
|
||||
com! -nargs=0 TPackageUpdate :silent! call Tex_pack_updateall(1)
|
||||
com! -nargs=0 TPackageUpdateAll :silent! call Tex_pack_updateall(1)
|
||||
|
||||
" Custom command-line completion of Tcommands is very useful but this feature
|
||||
" is available only in Vim 6.2 and above. Check number of version and choose
|
||||
" proper command and function.
|
||||
if v:version >= 602
|
||||
com! -complete=custom,Tex_CompletePackageName -nargs=* TPackage let s:retVal = Tex_pack_one(<f-args>) <bar> normal! i<C-r>=s:retVal<CR>
|
||||
|
||||
" Tex_CompletePackageName: for completing names in TPackage command {{{
|
||||
" Description: get list of package names with globpath(), remove full path
|
||||
" and return list of names separated with newlines.
|
||||
"
|
||||
function! Tex_CompletePackageName(A,P,L)
|
||||
" Get name of packages from all runtimepath directories
|
||||
let packnames = Tex_FindInRtp('', 'packages')
|
||||
let packnames = substitute(packnames, '^,', '', 'e')
|
||||
" Separate names with \n not ,
|
||||
let packnames = substitute(packnames,',','\n','g')
|
||||
return packnames
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
else
|
||||
com! -nargs=* TPackage let s:retVal = Tex_pack_one(<f-args>) <bar> normal! i<C-r>=s:retVal<CR>
|
||||
|
||||
endif
|
||||
|
||||
imap <silent> <plug> <Nop>
|
||||
nmap <silent> <plug> i
|
||||
|
||||
let g:Tex_package_supported = ''
|
||||
let g:Tex_package_detected = ''
|
||||
" Remember the defaults because we want g:Tex_PromptedEnvironments to contain
|
||||
" in addition to the default, \newenvironments, and the \newenvironments might
|
||||
" change...
|
||||
let g:Tex_PromptedEnvironmentsDefault = g:Tex_PromptedEnvironments
|
||||
let g:Tex_PromptedCommandsDefault = g:Tex_PromptedCommands
|
||||
|
||||
|
||||
" Tex_pack_check: creates the package menu and adds to 'dict' setting. {{{
|
||||
"
|
||||
function! Tex_pack_check(package)
|
||||
" Use Tex_FindInRtp() function to get first name from packages list in all
|
||||
" rtp directories conforming with latex-suite directories hierarchy
|
||||
" Store names in variables to process functions only once.
|
||||
let packname = Tex_FindInRtp(a:package, 'packages')
|
||||
if packname != ''
|
||||
exe 'runtime! ftplugin/latex-suite/packages/' . a:package
|
||||
if has("gui_running")
|
||||
call Tex_pack(a:package)
|
||||
endif
|
||||
if g:Tex_package_supported !~ a:package
|
||||
let g:Tex_package_supported = g:Tex_package_supported.','.a:package
|
||||
endif
|
||||
endif
|
||||
" Return full list of dictionaries (separated with ,) for package in &rtp
|
||||
call Tex_Debug("Tex_pack_check: searching for ".a:package." in dictionaries/ in &rtp", "pack")
|
||||
let dictname = Tex_FindInRtp(a:package, 'dictionaries', ':p')
|
||||
if dictname != ''
|
||||
exe 'setlocal dict^=' . dictname
|
||||
call Tex_Debug('Tex_pack_check: setlocal dict^=' . dictname, 'pack')
|
||||
if g:Tex_package_supported !~ a:package
|
||||
let g:Tex_package_supported = g:Tex_package_supported.','.a:package
|
||||
endif
|
||||
endif
|
||||
if g:Tex_package_detected !~ '\<'.a:package.'\>'
|
||||
let g:Tex_package_detected = g:Tex_package_detected.','.a:package
|
||||
endif
|
||||
let g:Tex_package_detected = substitute(g:Tex_package_detected, '^,', '', '')
|
||||
let g:Tex_package_supported = substitute(g:Tex_package_supported, '^,', '', '')
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
" Tex_pack_uncheck: removes package from menu and 'dict' settings. {{{
|
||||
function! Tex_pack_uncheck(package)
|
||||
if has("gui_running") && Tex_FindInRtp(a:package, 'packages') != ''
|
||||
exe 'silent! aunmenu '.g:Tex_PackagesMenuLocation.'-sep'.a:package.'-'
|
||||
exe 'silent! aunmenu '.g:Tex_PackagesMenuLocation.a:package.'\ Options'
|
||||
exe 'silent! aunmenu '.g:Tex_PackagesMenuLocation.a:package.'\ Commands'
|
||||
endif
|
||||
if Tex_FindInRtp(a:package, 'dictionaries') != ''
|
||||
exe 'setlocal dict-='.Tex_FindInRtp(a:package, 'dictionaries')
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
" Tex_pack_updateall: updates the TeX-Packages menu {{{
|
||||
" Description:
|
||||
" This function first calls Tex_pack_all to scan for \usepackage's etc if
|
||||
" necessary. After that, it 'supports' and 'unsupports' packages as needed
|
||||
" in such a way as to not repeat work.
|
||||
function! Tex_pack_updateall(force)
|
||||
call Tex_Debug('+Tex_pack_updateall', 'pack')
|
||||
|
||||
" Find out which file we need to scan.
|
||||
let fname = Tex_GetMainFileName(':p')
|
||||
|
||||
" If this is the same as last time, don't repeat.
|
||||
if !a:force && exists('s:lastScannedFile') &&
|
||||
\ s:lastScannedFile == fname
|
||||
return
|
||||
endif
|
||||
" Remember which file we scanned for next time.
|
||||
let s:lastScannedFile = fname
|
||||
|
||||
" Remember which packages we detected last time.
|
||||
if exists('g:Tex_package_detected')
|
||||
let oldpackages = g:Tex_package_detected
|
||||
else
|
||||
let oldpackages = ''
|
||||
endif
|
||||
|
||||
" This sets up a global variable of all detected packages.
|
||||
let g:Tex_package_detected = ''
|
||||
" reset the environments and commands.
|
||||
let g:Tex_PromptedEnvironments = g:Tex_PromptedEnvironmentsDefault
|
||||
let g:Tex_PromptedCommands = g:Tex_PromptedCommandsDefault
|
||||
|
||||
if expand('%:p') != fname
|
||||
call Tex_Debug(':Tex_pack_updateall: sview '.Tex_EscapeSpaces(fname), 'pack')
|
||||
exe 'sview '.Tex_EscapeSpaces(fname)
|
||||
else
|
||||
call Tex_Debug(':Tex_pack_updateall: split', 'pack')
|
||||
split
|
||||
endif
|
||||
|
||||
call Tex_ScanForPackages()
|
||||
q
|
||||
|
||||
call Tex_Debug(':Tex_pack_updateall: detected ['.g:Tex_package_detected.'] in first run', 'pack')
|
||||
|
||||
" Now for each package find out if this is a custom package and if so,
|
||||
" scan that as well. We will use the ':find' command in vim to let vim
|
||||
" search through the file paths for us.
|
||||
"
|
||||
" NOTE: This while loop will also take into account packages included
|
||||
" within packages to any level of recursion as long as
|
||||
" g:Tex_package_detected is always padded with new package names
|
||||
" from the end.
|
||||
"
|
||||
" First set the &path setting to the user's TEXINPUTS setting.
|
||||
let _path = &path
|
||||
let _suffixesadd = &suffixesadd
|
||||
|
||||
let &path = '.,'.g:Tex_TEXINPUTS
|
||||
let &suffixesadd = '.sty,.tex'
|
||||
|
||||
let scannedPackages = ''
|
||||
|
||||
let i = 1
|
||||
let packname = Tex_Strntok(g:Tex_package_detected, ',', i)
|
||||
while packname != ''
|
||||
|
||||
call Tex_Debug(':Tex_pack_updateall: scanning package '.packname, 'pack')
|
||||
|
||||
" Scan this package only if we have not scanned it before in this
|
||||
" run.
|
||||
if scannedPackages =~ '\<'.packname.'\>'
|
||||
let i = i + 1
|
||||
|
||||
call Tex_Debug(':Tex_pack_updateall: '.packname.' already scanned', 'pack')
|
||||
let packname = Tex_Strntok(g:Tex_package_detected, ',', i)
|
||||
continue
|
||||
endif
|
||||
|
||||
" Split this window in two. The packages/files being found will open
|
||||
" in this new window and we also need not bother with files being
|
||||
" modified etc.
|
||||
split
|
||||
|
||||
call Tex_Debug(':Tex_pack_updateall: silent! find '.Tex_EscapeSpaces(packname).'.sty', 'pack')
|
||||
let thisbufnum = bufnr('%')
|
||||
exec 'silent! find '.Tex_EscapeSpaces(packname).'.sty'
|
||||
call Tex_Debug(':Tex_pack_updateall: present file = '.bufname('%'), 'pack')
|
||||
|
||||
" If this file was not found, assume that it means its not a
|
||||
" custom package and mark it "scanned".
|
||||
" A package is not found if we stay in the same buffer as before and
|
||||
" its not the one where we want to go.
|
||||
if bufnr('%') == thisbufnum && bufnr('%') != bufnr(packname.'.sty')
|
||||
let scannedPackages = scannedPackages.','.packname
|
||||
q
|
||||
|
||||
call Tex_Debug(':Tex_pack_updateall: '.packname.' not found anywhere', 'pack')
|
||||
let i = i + 1
|
||||
let packname = Tex_Strntok(g:Tex_package_detected, ',', i)
|
||||
continue
|
||||
endif
|
||||
|
||||
" otherwise we are presently editing a custom package, scan it for
|
||||
" more \usepackage lines from the first line to the last.
|
||||
let packpath = expand('%:p')
|
||||
let &complete = &complete.'s'.packpath
|
||||
|
||||
call Tex_Debug(':Tex_pack_updateall: found custom package '.packpath, 'pack')
|
||||
call Tex_ScanForPackages(line('$'), line('$'))
|
||||
call Tex_Debug(':Tex_pack_updateall: After scanning, g:Tex_package_detected = '.g:Tex_package_detected, 'pack')
|
||||
|
||||
let scannedPackages = scannedPackages.','.packname
|
||||
" Do not use bwipe, but that leads to excessive buffer number
|
||||
" consumption. Besides, its intuitive for a custom package to remain
|
||||
" on the buffer list.
|
||||
q
|
||||
|
||||
let i = i + 1
|
||||
let packname = Tex_Strntok(g:Tex_package_detected, ',', i)
|
||||
endwhile
|
||||
|
||||
let &path = _path
|
||||
let &suffixesadd = _suffixesadd
|
||||
|
||||
" Now only support packages we didn't last time.
|
||||
" First remove packages which were used last time but are no longer used.
|
||||
let i = 1
|
||||
let oldPackName = Tex_Strntok(oldpackages, ',', i)
|
||||
while oldPackName != ''
|
||||
if g:Tex_package_detected !~ oldPackName
|
||||
call Tex_pack_uncheck(oldPackName)
|
||||
endif
|
||||
let i = i + 1
|
||||
let oldPackName = Tex_Strntok(oldpackages, ',', i)
|
||||
endwhile
|
||||
|
||||
" Then support packages which are used this time but weren't used last
|
||||
" time.
|
||||
let i = 1
|
||||
let newPackName = Tex_Strntok(g:Tex_package_detected, ',', i)
|
||||
while newPackName != ''
|
||||
if oldpackages !~ newPackName
|
||||
call Tex_pack_one(newPackName)
|
||||
endif
|
||||
let i = i + 1
|
||||
let newPackName = Tex_Strntok(g:Tex_package_detected, ',', i)
|
||||
endwhile
|
||||
|
||||
" Throw an event that we are done scanning packages. Some packages might
|
||||
" use this to change behavior based on which options have been used etc.
|
||||
call Tex_Debug(":Tex_pack_updateall: throwing LatexSuiteScannedPackages event", "pack")
|
||||
silent! do LatexSuite User LatexSuiteScannedPackages
|
||||
|
||||
call Tex_Debug("-Tex_pack_updateall", "pack")
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
" Tex_pack_one: supports each package in the argument list.{{{
|
||||
" Description:
|
||||
" If no arguments are supplied, then the user is asked to choose from the
|
||||
" packages found in the packages/ directory
|
||||
function! Tex_pack_one(...)
|
||||
if a:0 == 0 || (a:0 > 0 && a:1 == '')
|
||||
let packlist = Tex_FindInRtp('', 'packages')
|
||||
let packname = Tex_ChooseFromPrompt(
|
||||
\ "Choose a package: \n" .
|
||||
\ Tex_CreatePrompt(packlist, '3', ',') .
|
||||
\ "\nEnter number or filename :",
|
||||
\ packlist, ',')
|
||||
if packname != ''
|
||||
return Tex_pack_one(packname)
|
||||
else
|
||||
return ''
|
||||
endif
|
||||
else
|
||||
" Support the packages supplied. This function can be called with
|
||||
" multiple arguments in which case, support each of them in turn.
|
||||
let retVal = ''
|
||||
let omega = 1
|
||||
while omega <= a:0
|
||||
let packname = a:{omega}
|
||||
if Tex_FindInRtp(packname, 'packages') != ''
|
||||
call Tex_pack_check(packname)
|
||||
if exists('g:TeX_package_option_'.packname)
|
||||
\ && g:TeX_package_option_{packname} != ''
|
||||
let retVal = retVal.'\usepackage[<++>]{'.packname.'}<++>'
|
||||
else
|
||||
let retVal = retVal.'\usepackage{'.packname.'}'."\<CR>"
|
||||
endif
|
||||
else
|
||||
let retVal = retVal.'\usepackage{'.packname.'}'."\<CR>"
|
||||
endif
|
||||
let omega = omega + 1
|
||||
endwhile
|
||||
return IMAP_PutTextWithMovement(substitute(retVal, "\<CR>$", '', ''), '<+', '+>')
|
||||
endif
|
||||
endfunction
|
||||
" }}}
|
||||
" Tex_ScanForPackages: scans the current file for \usepackage{} lines {{{
|
||||
" and if supported, loads the options and commands found in the
|
||||
" corresponding package file. Also scans for \newenvironment and
|
||||
" \newcommand lines and adds names to g:Tex_Prompted variables, they can be
|
||||
" easy available through <F5> and <F7> shortcuts
|
||||
function! Tex_ScanForPackages(...)
|
||||
call Tex_Debug("+Tex_ScanForPackages", "pack")
|
||||
|
||||
let pos = Tex_GetPos()
|
||||
|
||||
" For package files without \begin and \end{document}, we might be told to
|
||||
" search from beginning to end.
|
||||
if a:0 < 2
|
||||
0
|
||||
let beginline = search('\\begin{document}', 'W')
|
||||
let endline = search('\\end{document}', 'W')
|
||||
0
|
||||
else
|
||||
let beginline = a:1
|
||||
let endline = a:2
|
||||
endif
|
||||
|
||||
call Tex_Debug(":Tex_ScanForPackages: Begining scans in [".bufname('%')."], beginline = ".beginline, "pack")
|
||||
|
||||
|
||||
" Scan the file. First open up all the folds, because the command
|
||||
" /somepattern
|
||||
" issued in a closed fold _always_ goes to the first match.
|
||||
let erm = v:errmsg
|
||||
silent! normal! ggVGzO
|
||||
let v:errmsg = erm
|
||||
|
||||
call Tex_Debug(":Tex_ScanForPackages: beginning scan for \\usepackage lines", "pack")
|
||||
" The wrap trick enables us to match \usepackage on the first line as
|
||||
" well.
|
||||
let wrap = 'w'
|
||||
while search('^\s*\\usepackage\_.\{-}{\_.\+}', wrap)
|
||||
let wrap = 'W'
|
||||
|
||||
if line('.') > beginline
|
||||
break
|
||||
endif
|
||||
|
||||
let saveUnnamed = @"
|
||||
let saveA = @a
|
||||
|
||||
" If there are options, then find those.
|
||||
if getline('.') =~ '\\usepackage\[.\{-}\]'
|
||||
let options = matchstr(getline('.'), '\\usepackage\[\zs.\{-}\ze\]')
|
||||
elseif getline('.') =~ '\\usepackage\['
|
||||
" Entering here means that the user has split the \usepackage
|
||||
" across newlines. Therefore, use yank.
|
||||
exec "normal! /{\<CR>\"ayi}"
|
||||
let options = @a
|
||||
else
|
||||
let options = ''
|
||||
endif
|
||||
|
||||
" The following statement puts the stuff between the { }'s of a
|
||||
" \usepackage{stuff,foo} into @a. Do not use matchstr() and the like
|
||||
" because we can have things split across lines and such.
|
||||
exec "normal! /{\<CR>\"ay/}\<CR>"
|
||||
|
||||
" now remove all whitespace from @a. We need to remove \n and \r
|
||||
" because we can encounter stuff like
|
||||
" \usepackage{pack1,
|
||||
" newpackonanotherline}
|
||||
let @a = substitute(@a, "[ \t\n\r]", '', 'g')
|
||||
|
||||
" Now we have something like pack1,pack2,pack3 with possibly commas
|
||||
" and stuff before the first package and after the last package name.
|
||||
" Remove those.
|
||||
let @a = substitute(@a, '\(^\W*\|\W*$\)', '', 'g')
|
||||
|
||||
" This gets us a string like 'pack1,pack2,pack3'
|
||||
" TODO: This will contain duplicates if the user has duplicates.
|
||||
" Should we bother taking care of this?
|
||||
let g:Tex_package_detected = g:Tex_package_detected.','.@a
|
||||
|
||||
" For each package found, form a global variable of the form
|
||||
" g:Tex_{packagename}_options
|
||||
" which contains a list of the options.
|
||||
let j = 1
|
||||
while Tex_Strntok(@a, ',', j) != ''
|
||||
let g:Tex_{Tex_Strntok(@a, ',', j)}_options = options
|
||||
let j = j + 1
|
||||
endwhile
|
||||
|
||||
" Finally convert @a into something like '"pack1","pack2"'
|
||||
let @a = substitute(@a, '^\|$', '"', 'g')
|
||||
let @a = substitute(@a, ',', '","', 'g')
|
||||
|
||||
call Tex_Debug(":Tex_ScanForPackages: found package(s) [".@a."] on line ".line('.'), "pack")
|
||||
|
||||
" restore @a
|
||||
let @a = saveA
|
||||
let @" = saveUnnamed
|
||||
endwhile
|
||||
call Tex_Debug(":Tex_ScanForPackages: End scan \\usepackage, detected packages = ".g:Tex_package_detected, "pack")
|
||||
|
||||
" TODO: This needs to be changed. In the future, we might have
|
||||
" functionality to remember the fold-state before opening up all the folds
|
||||
" and then re-creating them. Use mkview.vim.
|
||||
let erm = v:errmsg
|
||||
silent! normal! ggVGzC
|
||||
let v:errmsg = erm
|
||||
|
||||
" Because creating list of detected packages gives string
|
||||
" ',pack1,pack2,pack3' remove leading ,
|
||||
let g:Tex_package_detected = substitute(g:Tex_package_detected, '^,', '', '')
|
||||
|
||||
call Tex_Debug(":Tex_ScanForPackages: Beginning scan for \\newcommand's", "pack")
|
||||
" Scans whole file (up to \end{document}) for \newcommand and adds this
|
||||
" commands to g:Tex_PromptedCommands variable, it is easily available
|
||||
" through <F7>
|
||||
0
|
||||
while search('^\s*\\newcommand\*\?{.\{-}}', 'W')
|
||||
|
||||
if line('.') > endline
|
||||
break
|
||||
endif
|
||||
|
||||
let newcommand = matchstr(getline('.'), '\\newcommand\*\?{\\\zs.\{-}\ze}')
|
||||
let g:Tex_PromptedCommands = g:Tex_PromptedCommands . ',' . newcommand
|
||||
|
||||
endwhile
|
||||
|
||||
" Scans whole file (up to \end{document}) for \newenvironment and adds this
|
||||
" environments to g:Tex_PromptedEnvironments variable, it is easily available
|
||||
" through <F5>
|
||||
0
|
||||
call Tex_Debug(":Tex_ScanForPackages: Beginning scan for \\newenvironment's", 'pack')
|
||||
|
||||
while search('^\s*\\newenvironment\*\?{.\{-}}', 'W')
|
||||
call Tex_Debug('found newenvironment on '.line('.'), 'pack')
|
||||
|
||||
if line('.') > endline
|
||||
break
|
||||
endif
|
||||
|
||||
let newenvironment = matchstr(getline('.'), '\\newenvironment\*\?{\zs.\{-}\ze}')
|
||||
let g:Tex_PromptedEnvironments = g:Tex_PromptedEnvironments . ',' . newenvironment
|
||||
|
||||
endwhile
|
||||
|
||||
call Tex_SetPos(pos)
|
||||
" first make a random search so that we push at least one item onto the
|
||||
" search history. Since vim puts only one item in the history per function
|
||||
" call, this way we make sure that one and only item is put into the
|
||||
" search history.
|
||||
normal! /^<CR>
|
||||
" now delete it...
|
||||
call histdel('/', -1)
|
||||
|
||||
call Tex_Debug("-Tex_ScanForPackages", "pack")
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
" Tex_pack_supp_menu: sets up a menu for package files {{{
|
||||
" found in the packages directory groups the packages thus found into groups
|
||||
" of 20...
|
||||
function! Tex_pack_supp_menu()
|
||||
let suplist = Tex_FindInRtp('', 'packages')
|
||||
|
||||
call Tex_MakeSubmenu(suplist, g:Tex_PackagesMenuLocation.'Supported.',
|
||||
\ '<plug><C-r>=Tex_pack_one("', '")<CR>')
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
" Tex_pack: loads the options (and commands) for the given package {{{
|
||||
function! Tex_pack(pack)
|
||||
if exists('g:TeX_package_'.a:pack)
|
||||
|
||||
let optionList = g:TeX_package_option_{a:pack}.','
|
||||
let commandList = g:TeX_package_{a:pack}.','
|
||||
|
||||
" Don't create separator if in package file are only Vim commands.
|
||||
" Rare but possible.
|
||||
if !(commandList == ',' && optionList == ',')
|
||||
exec 'amenu '.g:Tex_PackagesMenuLocation.'-sep'.a:pack.'- <Nop>'
|
||||
endif
|
||||
|
||||
if optionList != ''
|
||||
|
||||
let mainMenuName = g:Tex_PackagesMenuLocation.a:pack.'\ Options.'
|
||||
call s:GroupPackageMenuItems(optionList, mainMenuName,
|
||||
\ '<plug><C-r>=IMAP_PutTextWithMovement("', ',")<CR>')
|
||||
|
||||
endif
|
||||
|
||||
if commandList != ''
|
||||
|
||||
let mainMenuName = g:Tex_PackagesMenuLocation.a:pack.'\ Commands.'
|
||||
call s:GroupPackageMenuItems(commandList, mainMenuName,
|
||||
\ '<plug><C-r>=Tex_ProcessPackageCommand("', '")<CR>',
|
||||
\ '<SID>FilterPackageMenuLHS')
|
||||
endif
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
|
||||
" ==============================================================================
|
||||
" Menu Functions
|
||||
" Creating menu items for the all the package files found in the packages/
|
||||
" directory as well as creating menus for each supported package found in the
|
||||
" preamble.
|
||||
" ==============================================================================
|
||||
" Tex_MakeSubmenu: makes a submenu given a list of items {{{
|
||||
" Description:
|
||||
" This function takes a comma seperated list of menu items and creates a
|
||||
" 'grouped' menu. i.e, it groups the items into s:menu_div items each and
|
||||
" puts them in submenus of the given mainMenu.
|
||||
" Each menu item is linked to the HandlerFunc.
|
||||
" If an additional argument is supplied, then it is used to filter each of
|
||||
" the menu items to generate better names for the menu display.
|
||||
"
|
||||
function! Tex_MakeSubmenu(menuList, mainMenuName,
|
||||
\ handlerFuncLHS, handlerFuncRHS, ...)
|
||||
|
||||
let extractFunction = (a:0 > 0 ? a:1 : '' )
|
||||
let menuList = substitute(a:menuList, '[^,]$', ',', '')
|
||||
|
||||
let doneMenuSubmenu = 0
|
||||
|
||||
while menuList != ''
|
||||
|
||||
" Extract upto s:menu_div menus at once.
|
||||
let menuBunch = matchstr(menuList, '\v(.{-},){,'.s:menu_div.'}')
|
||||
|
||||
" The remaining menus go into the list.
|
||||
let menuList = strpart(menuList, strlen(menuBunch))
|
||||
|
||||
let submenu = ''
|
||||
" If there is something remaining, then we got s:menu_div items.
|
||||
" therefore put these menu items into a submenu.
|
||||
if strlen(menuList) || doneMenuSubmenu
|
||||
exec 'let firstMenu = '.extractFunction."(matchstr(menuBunch, '\\v^.{-}\\ze,'))"
|
||||
exec 'let lastMenu = '.extractFunction."(matchstr(menuBunch, '\\v[^,]{-}\\ze,$'))"
|
||||
|
||||
let submenu = firstMenu.'\ \-\ '.lastMenu.'.'
|
||||
|
||||
let doneMenuSubmenu = 1
|
||||
endif
|
||||
|
||||
" Now for each menu create a menu under the submenu
|
||||
let i = 1
|
||||
let menuName = Tex_Strntok(menuBunch, ',', i)
|
||||
while menuName != ''
|
||||
exec 'let menuItem = '.extractFunction.'(menuName)'
|
||||
execute 'amenu '.a:mainMenuName.submenu.menuItem
|
||||
\ ' '.a:handlerFuncLHS.menuName.a:handlerFuncRHS
|
||||
|
||||
let i = i + 1
|
||||
let menuName = Tex_Strntok(menuBunch, ',', i)
|
||||
endwhile
|
||||
endwhile
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
" GroupPackageMenuItems: uses the sbr: to split menus into groups {{{
|
||||
" Description:
|
||||
" This function first splits up the menuList into groups based on the
|
||||
" special sbr: tag and then calls Tex_MakeSubmenu
|
||||
"
|
||||
function! <SID>GroupPackageMenuItems(menuList, menuName,
|
||||
\ handlerFuncLHS, handlerFuncRHS,...)
|
||||
|
||||
if a:0 > 0
|
||||
let extractFunction = a:1
|
||||
else
|
||||
let extractFunction = ''
|
||||
endif
|
||||
let menuList = a:menuList
|
||||
|
||||
while matchstr(menuList, 'sbr:') != ''
|
||||
let groupName = matchstr(menuList, '\v^sbr:\zs.{-}\ze,')
|
||||
let menuList = strpart(menuList, strlen('sbr:'.groupName.','))
|
||||
if matchstr(menuList, 'sbr:') != ''
|
||||
let menuGroup = matchstr(menuList, '\v^.{-},\zesbr:')
|
||||
else
|
||||
let menuGroup = menuList
|
||||
endif
|
||||
|
||||
call Tex_MakeSubmenu(menuGroup, a:menuName.groupName.'.',
|
||||
\ a:handlerFuncLHS, a:handlerFuncRHS, extractFunction)
|
||||
|
||||
let menuList = strpart(menuList, strlen(menuGroup))
|
||||
endwhile
|
||||
|
||||
call Tex_MakeSubmenu(menuList, a:menuName,
|
||||
\ a:handlerFuncLHS, a:handlerFuncRHS, extractFunction)
|
||||
|
||||
endfunction " }}}
|
||||
" Definition of what to do for various package commands {{{
|
||||
let s:CommandSpec_brs = '\<+replace+><++>'
|
||||
let s:CommandSpec_bra = '\<+replace+>{<++>}<++>'
|
||||
let s:CommandSpec_brd = '\<+replace+>{<++>}{<++>}<++>'
|
||||
|
||||
let s:CommandSpec_nor = '\<+replace+>'
|
||||
let s:CommandSpec_noo = '\<+replace+>[<++>]'
|
||||
let s:CommandSpec_nob = '\<+replace+>[<++>]{<++>}{<++>}<++>'
|
||||
|
||||
let s:CommandSpec_env = '\begin{<+replace+>}'."\<CR><++>\<CR>".'\end{<+replace+>}<++>'
|
||||
let s:CommandSpec_ens = '\begin{<+replace+>}<+extra+>'."\<CR><++>\<CR>".'\end{<+replace+>}<++>'
|
||||
let s:CommandSpec_eno = '\begin[<++>]{<+replace+>}'."\<CR><++>\<CR>".'\end{<+replace+>}'
|
||||
|
||||
let s:CommandSpec_spe = '<+replace+>'
|
||||
let s:CommandSpec_ = '\<+replace+>'
|
||||
|
||||
let s:MenuLHS_bra = '\\&<+replace+>{}'
|
||||
let s:MenuLHS_brs = '\\&<+replace+>{}'
|
||||
let s:MenuLHS_brd = '\\&<+replace+>{}{}'
|
||||
let s:MenuLHS_env = '&<+replace+>\ (E)'
|
||||
let s:MenuLHS_ens = '&<+replace+>\ (E)'
|
||||
let s:MenuLHS_eno = '&<+replace+>\ (E)'
|
||||
let s:MenuLHS_nor = '\\&<+replace+>'
|
||||
let s:MenuLHS_noo = '\\&<+replace+>[]'
|
||||
let s:MenuLHS_nob = '\\&<+replace+>[]{}{}'
|
||||
let s:MenuLHS_spe = '&<+replace+>'
|
||||
let s:MenuLHS_sep = '-sep<+replace+>-'
|
||||
let s:MenuLHS_ = '\\&<+replace+>'
|
||||
" }}}
|
||||
" Tex_ProcessPackageCommand: processes a command from the package menu {{{
|
||||
" Description:
|
||||
function! Tex_ProcessPackageCommand(command)
|
||||
if a:command =~ ':'
|
||||
let commandType = matchstr(a:command, '^\w\+\ze:')
|
||||
let commandName = matchstr(a:command, '^\w\+:\zs[^:]\+\ze:\?')
|
||||
let extrapart = strpart(a:command, strlen(commandType.':'.commandName.':'))
|
||||
else
|
||||
let commandType = ''
|
||||
let commandName = a:command
|
||||
let extrapart = ''
|
||||
endif
|
||||
|
||||
let command = s:CommandSpec_{commandType}
|
||||
let command = substitute(command, '<+replace+>', commandName, 'g')
|
||||
let command = substitute(command, '<+extra+>', extrapart, 'g')
|
||||
return IMAP_PutTextWithMovement(command)
|
||||
endfunction
|
||||
" }}}
|
||||
" FilterPackageMenuLHS: filters the command description to provide a better menu item {{{
|
||||
" Description:
|
||||
function! <SID>FilterPackageMenuLHS(command)
|
||||
let commandType = matchstr(a:command, '^\w\+\ze:')
|
||||
if commandType != ''
|
||||
let commandName = strpart(a:command, strlen(commandType.':'))
|
||||
else
|
||||
let commandName = a:command
|
||||
endif
|
||||
|
||||
return substitute(s:MenuLHS_{commandType}, '<+replace+>', commandName, 'g')
|
||||
endfunction " }}}
|
||||
|
||||
if g:Tex_Menus
|
||||
exe 'amenu '.g:Tex_PackagesMenuLocation.'&UpdatePackage :call Tex_pack(expand("<cword>"))<cr>'
|
||||
exe 'amenu '.g:Tex_PackagesMenuLocation.'&UpdateAll :call Tex_pack_updateall(1)<cr>'
|
||||
|
||||
call Tex_pack_supp_menu()
|
||||
endif
|
||||
|
||||
augroup LatexSuite
|
||||
au LatexSuite User LatexSuiteFileType
|
||||
\ call Tex_Debug('packages.vim: Catching LatexSuiteFileType event', 'pack') |
|
||||
\ let s:save_clipboard = &clipboard |
|
||||
\ set clipboard= |
|
||||
\ call Tex_pack_updateall(0) |
|
||||
\ let &clipboard=s:save_clipboard
|
||||
augroup END
|
||||
|
||||
" vim:fdm=marker:ts=4:sw=4:noet:ff=unix
|
||||
@@ -1,11 +0,0 @@
|
||||
" Project name
|
||||
" let g:projName = ''
|
||||
"
|
||||
" Project files
|
||||
" let g:projFiles = ''
|
||||
|
||||
|
||||
" Vim settings/maps/abbrs specific for this project
|
||||
|
||||
" Modeline for this file
|
||||
" vim:fdm=marker:ff=unix:noet:ts=4:sw=4:ft=vim
|
||||
@@ -1,102 +0,0 @@
|
||||
"=============================================================================
|
||||
" File: smartspace.vim
|
||||
" Author: Carl Muller
|
||||
" Created: Fri Dec 06 12:00 AM 2002 PST
|
||||
"
|
||||
" Description:
|
||||
" Maps the <space> key in insert mode so that mathematical formulaes are
|
||||
" always kept on the same line. i.e, $$'s dont get broken across multiple
|
||||
" lines.
|
||||
"=============================================================================
|
||||
|
||||
" Avoid reinclusion or if the user doesn't want us.
|
||||
if exists('b:done_smartspace')
|
||||
\ || (exists('g:Tex_SmartKeySpace') && !g:Tex_SmartKeySpace)
|
||||
finish
|
||||
endif
|
||||
let b:done_smartspace = 1
|
||||
|
||||
" Smart space relies on taking over vim's insertion of carriage returns in
|
||||
" order to keep $$'s on the same line. The only way to get vim not to break
|
||||
" lines is to set tw=0.
|
||||
"
|
||||
" NOTE: setting tw != 0 will break smartspace
|
||||
" the user's 'tw' setting is still respected in the insert mode.
|
||||
" However, normal mode actions which rely on 'tw' such as gqap will be
|
||||
" broken because of the faulty 'tw' setting.
|
||||
let b:tw = &l:tw
|
||||
setlocal tw=0
|
||||
|
||||
inoremap <buffer> <silent> <Space> <Space><Esc>:call <SID>TexFill(b:tw)<CR>a
|
||||
|
||||
" Do not redefine the function.
|
||||
if exists('*s:TexFill')
|
||||
finish
|
||||
endif
|
||||
|
||||
" TexFormatLine: format line retaining $$'s on the same line. {{{
|
||||
function! s:TexFill(width)
|
||||
if a:width != 0 && col(".") > a:width
|
||||
" For future use, record the current line and the number of the current column
|
||||
let current_line = getline(".")
|
||||
let current_column = col(".")
|
||||
exe "normal! a##\<Esc>"
|
||||
call <SID>TexFormatLine(a:width,current_line,current_column)
|
||||
exe "normal! ?##\<CR>2s\<Esc>"
|
||||
" Remove ## from the search history.
|
||||
call histdel("/", -1)|let @/=histget("/", -1)
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
function! s:TexFormatLine(width, current_line, current_column) " {{{
|
||||
" get the first non-blank character.
|
||||
let first = matchstr(getline('.'), '\S')
|
||||
normal! $
|
||||
let length = col('.')
|
||||
let go = 1
|
||||
while length > a:width+2 && go
|
||||
let between = 0
|
||||
let string = strpart(getline('.'), 0, a:width)
|
||||
" Count the dollar signs
|
||||
let number_of_dollars = 0
|
||||
let evendollars = 1
|
||||
let counter = 0
|
||||
while counter <= a:width-1
|
||||
" Pay attention to '$$'.
|
||||
if string[counter] == '$' && string[counter-1] != '$'
|
||||
let evendollars = 1 - evendollars
|
||||
let number_of_dollars = number_of_dollars + 1
|
||||
endif
|
||||
let counter = counter + 1
|
||||
endwhile
|
||||
" Get ready to split the line.
|
||||
exe 'normal! ' . (a:width + 1) . '|'
|
||||
if evendollars
|
||||
" Then you are not between dollars.
|
||||
exe "normal! ?\\$\\+\\| \<CR>W"
|
||||
else
|
||||
" Then you are between dollars.
|
||||
normal! F$
|
||||
if col(".") == 1 || getline('.')[col(".")-1] != "$"
|
||||
let go = 0
|
||||
endif
|
||||
endif
|
||||
if first == '$' && number_of_dollars == 1
|
||||
let go = 0
|
||||
else
|
||||
exe "normal! i\<CR>\<Esc>$"
|
||||
" get the first non-blank character.
|
||||
let first = matchstr(getline('.'), '\S')
|
||||
endif
|
||||
let length = col(".")
|
||||
endwhile
|
||||
if go == 0 && strpart(a:current_line, 0, a:current_column) =~ '.*\$.*\$.*'
|
||||
exe "normal! ^f$a\<CR>\<Esc>"
|
||||
call <SID>TexFormatLine(a:width, a:current_line, a:current_column)
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
|
||||
" vim:fdm=marker:ts=4:sw=4:noet
|
||||
@@ -1,148 +0,0 @@
|
||||
"=============================================================================
|
||||
" File: templates.vim
|
||||
" Author: Gergely Kontra
|
||||
" (minor modifications by Srinath Avadhanula)
|
||||
" (plus other modifications by Mikolaj Machowski)
|
||||
" Version: 1.0
|
||||
" Created: Tue Apr 23 05:00 PM 2002 PST
|
||||
"
|
||||
" Description: functions for handling templates in latex-suite/templates
|
||||
" directory.
|
||||
"=============================================================================
|
||||
|
||||
let s:path = fnameescape(expand("<sfile>:p:h"))
|
||||
|
||||
" SetTemplateMenu: sets up the menu for templates {{{
|
||||
function! <SID>SetTemplateMenu()
|
||||
let flist = Tex_FindInRtp('', 'templates')
|
||||
let i = 1
|
||||
while 1
|
||||
let fname = Tex_Strntok(flist, ',', i)
|
||||
if fname == ''
|
||||
break
|
||||
endif
|
||||
exe "amenu ".g:Tex_TemplatesMenuLocation."&".i.":<Tab>".fname." ".
|
||||
\":call <SID>ReadTemplate('".fname."')<CR>"
|
||||
let i = i + 1
|
||||
endwhile
|
||||
endfunction
|
||||
|
||||
if g:Tex_Menus
|
||||
call <SID>SetTemplateMenu()
|
||||
endif
|
||||
|
||||
" }}}
|
||||
" ReadTemplate: reads in the template file from the template directory. {{{
|
||||
function! <SID>ReadTemplate(...)
|
||||
if a:0 > 0
|
||||
let filename = a:1
|
||||
else
|
||||
let filelist = Tex_FindInRtp('', 'templates')
|
||||
let filename =
|
||||
\ Tex_ChooseFromPrompt("Choose a template file:\n" .
|
||||
\ Tex_CreatePrompt(filelist, 2, ',') .
|
||||
\ "\nEnter number or name of file :",
|
||||
\ filelist, ',')
|
||||
endif
|
||||
|
||||
let fname = Tex_FindInRtp(filename.'.tex', 'templates', ':p')
|
||||
call Tex_Debug("0read ".fname, 'templates')
|
||||
|
||||
silent! exe "0read ".fname
|
||||
|
||||
" The first line of the file contains the specifications of what the
|
||||
" placeholder characters and the other special characters are.
|
||||
let pattern = '\v(\S+)\t(\S+)\t(\S+)\t(\S+)'
|
||||
|
||||
let s:phsTemp = substitute(getline(1), pattern, '\1', '')
|
||||
let s:pheTemp = substitute(getline(1), pattern, '\2', '')
|
||||
let s:exeTemp = substitute(getline(1), pattern, '\3', '')
|
||||
let s:comTemp = substitute(getline(1), pattern, '\4', '')
|
||||
|
||||
0 d_
|
||||
|
||||
call s:ProcessTemplate()
|
||||
call Tex_pack_updateall(1)
|
||||
|
||||
" Do not handle the placeholders here. Let IMAP_PutTextWithMovement do it
|
||||
" because it handles UTF-8 character substitutions etc. Therefore delete
|
||||
" the text into @a and paste it using IMAP_PutTextWithMovement().
|
||||
let _a = @a
|
||||
normal! ggVG"ax
|
||||
|
||||
let _fo = &fo
|
||||
" Since IMAP_PutTextWithMovement simulates the key-presses, leading
|
||||
" indendatation can get duplicated in strange ways if ``fo`` is non-empty.
|
||||
" NOTE: the indentexpr thingie is still respected with an empty fo so that
|
||||
" environments etc are properly indented.
|
||||
set fo=
|
||||
|
||||
call Tex_Debug("normal! i\<C-r>=IMAP_PutTextWithMovement(@a, '".s:phsTemp."', '".s:pheTemp."')\<CR>", 'templates')
|
||||
exec "normal! i\<C-r>=IMAP_PutTextWithMovement(@a, '".s:phsTemp."', '".s:pheTemp."')\<CR>"
|
||||
|
||||
let &fo = _fo
|
||||
let @a = _a
|
||||
|
||||
call Tex_Debug('phs = '.s:phsTemp.', phe = '.s:pheTemp.', exe = '.s:exeTemp.', com = '.s:comTemp, 'templates')
|
||||
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
" ProcessTemplate: processes the special characters in template file. {{{
|
||||
" This implementation follows from Gergely Kontra's
|
||||
" mu-template.vim
|
||||
" http://vim.sourceforge.net/scripts/script.php?script_id=222
|
||||
function! <SID>ProcessTemplate()
|
||||
if exists('s:phsTemp') && s:phsTemp != ''
|
||||
|
||||
exec 'silent! %s/^'.s:comTemp.'\(\_.\{-}\)'.s:comTemp.'$/\=<SID>Compute(submatch(1))/ge'
|
||||
exec 'silent! %s/'.s:exeTemp.'\(.\{-}\)'.s:exeTemp.'/\=<SID>Exec(submatch(1))/ge'
|
||||
exec 'silent! g/'.s:comTemp.s:comTemp.'/d'
|
||||
|
||||
" A function only puts one item into the search history...
|
||||
call Tex_CleanSearchHistory()
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! <SID>Exec(what)
|
||||
exec 'return '.a:what
|
||||
endfunction
|
||||
|
||||
" Back-Door to trojans !!!
|
||||
function! <SID>Compute(what)
|
||||
exe a:what
|
||||
if exists('s:comTemp')
|
||||
return s:comTemp.s:comTemp
|
||||
else
|
||||
return ''
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
" Command definitions {{{
|
||||
if v:version >= 602
|
||||
com! -complete=custom,Tex_CompleteTemplateName -nargs=? TTemplate :call <SID>ReadTemplate(<f-args>)
|
||||
\| :startinsert
|
||||
|
||||
" Tex_CompleteTemplateName: for completing names in TTemplate command {{{
|
||||
" Description: get list of template names with Tex_FindInRtp(), remove full path
|
||||
" and return list of names separated with newlines.
|
||||
"
|
||||
function! Tex_CompleteTemplateName(A,P,L)
|
||||
" Get name of macros from all runtimepath directories
|
||||
let tmplnames = Tex_FindInRtp('', 'templates')
|
||||
" Separate names with \n not ,
|
||||
let tmplnames = substitute(tmplnames,',','\n','g')
|
||||
return tmplnames
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
else
|
||||
com! -nargs=? TTemplate :call <SID>ReadTemplate(<f-args>)
|
||||
\| :startinsert
|
||||
|
||||
endif
|
||||
|
||||
" }}}
|
||||
|
||||
" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
|
||||
@@ -1,130 +0,0 @@
|
||||
"=============================================================================
|
||||
" File: texmenuconf.vim
|
||||
" Author: Srinath Avadhanula
|
||||
" Copyright: Vim charityware license. :help license
|
||||
" Description:
|
||||
"
|
||||
"=============================================================================
|
||||
|
||||
" Paths, crucial for functions
|
||||
let s:path = fnameescape(expand("<sfile>:p:h"))
|
||||
let s:up_path = fnameescape(expand("<sfile>:p:h:h"))
|
||||
let s:mainmenuname = g:Tex_MenuPrefix.'S&uite.'
|
||||
let s:mapleader = exists('mapleader') ? mapleader : "\\"
|
||||
|
||||
" This glboal variable is incremented each time a top-level latex-suite menu
|
||||
" is created. We should always use this variable for setting the locations of
|
||||
" newly created top-level menus.
|
||||
let g:Tex_NextMenuLocation = g:Tex_MainMenuLocation
|
||||
|
||||
" The templates and macros menus are always nested within the main latex-suit
|
||||
" menu.
|
||||
let g:Tex_TemplatesMenuLocation = g:Tex_MainMenuLocation.'.20 '.s:mainmenuname.'&Templates.'
|
||||
let g:Tex_MacrosMenuLocation = g:Tex_MainMenuLocation.'.20 '.s:mainmenuname.'&Macros.'
|
||||
|
||||
" The packages menu can either be a child of the main menu or be a top-level
|
||||
" menu by itself.
|
||||
if g:Tex_NestPackagesMenu
|
||||
let g:Tex_PackagesMenuLocation = (g:Tex_MainMenuLocation).'.10 '.s:mainmenuname.'&Packages.'
|
||||
else
|
||||
let g:Tex_PackagesMenuLocation = (g:Tex_NextMenuLocation).'.10 '.g:Tex_MenuPrefix.'Packages.'
|
||||
let g:Tex_NextMenuLocation = g:Tex_NextMenuLocation + 1
|
||||
endif
|
||||
|
||||
" Environments are always a top-level menu.
|
||||
let g:Tex_EnvMenuLocation = (g:Tex_NextMenuLocation).'.20 '.g:Tex_MenuPrefix.'E&nvironments.'
|
||||
let g:Tex_NextMenuLocation = g:Tex_NextMenuLocation + 1
|
||||
|
||||
" Elements are always a top-level menu.
|
||||
" If we choose to nest elements, then the top-level &TeX-Elements menu
|
||||
" contains <Fonts / Counters / Dimensions>
|
||||
" otherwise, the Fonts, Counters and Dimensions menus become top-level menus.
|
||||
if g:Tex_NestElementMenus
|
||||
let g:Tex_ElementsMenuLocation = (g:Tex_NextMenuLocation).'.20 '.g:Tex_MenuPrefix.'E&lements.'
|
||||
else
|
||||
let g:Tex_ElementsMenuLocation = (g:Tex_NextMenuLocation).'.20 '.g:Tex_MenuPrefix
|
||||
endif
|
||||
let g:Tex_NextMenuLocation = g:Tex_NextMenuLocation + 1
|
||||
|
||||
|
||||
" Set up the compiler/viewer menus. {{{
|
||||
"
|
||||
if has('gui_running') && g:Tex_Menus
|
||||
exec 'anoremenu '.g:Tex_MainMenuLocation.'.25 '. s:mainmenuname.'-sepsuite0- :'
|
||||
|
||||
" menus for compiling / viewing etc.
|
||||
exec 'anoremenu '.g:Tex_MainMenuLocation.'.30 '.s:mainmenuname.'&Compile<tab>'.s:mapleader.'ll'.
|
||||
\' :silent! call Tex_RunLaTeX()<CR>'
|
||||
exec 'anoremenu '.g:Tex_MainMenuLocation.'.40 '.s:mainmenuname.'&View<tab>'.s:mapleader.'lv'.
|
||||
\' :silent! call Tex_ViewLaTeX()<CR>'
|
||||
exec 'anoremenu '.g:Tex_MainMenuLocation.'.50 '.s:mainmenuname.'&Search<tab>'.s:mapleader.'ls'.
|
||||
\' :silent! call ForwardSearchLaTeX()<CR>'
|
||||
exec 'anoremenu '.g:Tex_MainMenuLocation.'.60 '.s:mainmenuname.'&Target\ Format<tab>:TTarget'.
|
||||
\' :call SetTeXTarget()<CR>'
|
||||
exec 'anoremenu '.g:Tex_MainMenuLocation.'.70 '.s:mainmenuname.'&Compiler\ Target<tab>:TCTarget'.
|
||||
\' :call Tex_SetTeXCompilerTarget("Compile", "")<CR>'
|
||||
exec 'anoremenu '.g:Tex_MainMenuLocation.'.80 '.s:mainmenuname.'&Viewer\ Target<tab>:TVTarget'.
|
||||
\' :call Tex_SetTeXCompilerTarget("View", "")<CR>'
|
||||
exec 'anoremenu '.g:Tex_MainMenuLocation.'.90 '.s:mainmenuname.'Set\ &Ignore\ Level<tab>:TCLevel'.
|
||||
\' :TCLevel<CR>'
|
||||
exec 'imenu '.g:Tex_MainMenuLocation.'.100 '.s:mainmenuname.'C&omplete\ Ref/Cite'.
|
||||
\' <Plug>Tex_Completion'
|
||||
exec 'anoremenu '.g:Tex_MainMenuLocation.'.110 '.s:mainmenuname.'-sepsuite1- :'
|
||||
" refreshing folds
|
||||
if g:Tex_Folding
|
||||
exec 'anoremenu '.g:Tex_MainMenuLocation.'.120 '.s:mainmenuname.'&Refresh\ Folds<tab>'.s:mapleader.'rf'.
|
||||
\' :call MakeTexFolds(1)<CR>'
|
||||
exec 'anoremenu '.g:Tex_MainMenuLocation.'.130 '.s:mainmenuname.'-sepsuite2- :'
|
||||
endif
|
||||
endif
|
||||
|
||||
" }}}
|
||||
|
||||
" ==============================================================================
|
||||
" MenuConf: configure the menus as compact/extended, with/without math
|
||||
" ==============================================================================
|
||||
function! Tex_MenuConfigure(type, action) " {{{
|
||||
let menuloc = s:mainmenuname.'Configure\ Menu.'
|
||||
if a:type == 'math'
|
||||
if a:action == 1
|
||||
let g:Tex_MathMenus = 1
|
||||
exe 'source '.s:path.'/mathmacros.vim'
|
||||
exe 'amenu disable '.menuloc.'Add\ Math\ Menu'
|
||||
exe 'amenu enable '.menuloc.'Remove\ Math\ Menu'
|
||||
elseif a:action == 0
|
||||
call Tex_MathMenuRemove()
|
||||
exe 'amenu enable '.menuloc.'Add\ Math\ Menu'
|
||||
exe 'amenu disable '.menuloc.'Remove\ Math\ Menu'
|
||||
endif
|
||||
elseif a:type == 'elements'
|
||||
if a:action == 'expand'
|
||||
let g:Tex_ElementsMenuLocation = '80.20 '.g:Tex_MenuPrefix
|
||||
exe 'amenu disable '.menuloc.'Expand\ Elements'
|
||||
exe 'amenu enable '.menuloc.'Compress\ Elements'
|
||||
elseif a:action == 'nest'
|
||||
let g:Tex_ElementsMenuLocation = '80.20 '.g:Tex_MenuPrefix.'Elements.'
|
||||
exe 'amenu enable '.menuloc.'Expand\ Elements'
|
||||
exe 'amenu disable '.menuloc.'Compress\ Elements'
|
||||
endif
|
||||
exe 'source '.fnameescape(s:path.'/elementmacros.vim')
|
||||
elseif a:type == 'packages'
|
||||
if a:action == 1
|
||||
let g:Tex_PackagesMenu = 1
|
||||
exe 'source '.s:path.'/packages.vim'
|
||||
exe 'amenu disable '.menuloc.'Load\ Packages\ Menu'
|
||||
endif
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
|
||||
" configuration menu.
|
||||
if g:Tex_Menus
|
||||
exe 'amenu '.g:Tex_MainMenuLocation.'.900 '.s:mainmenuname.'Configure\ Menu.Add\ Math\ Menu :call Tex_MenuConfigure("math", 1)<cr>'
|
||||
exe 'amenu '.g:Tex_MainMenuLocation.'.900 '.s:mainmenuname.'Configure\ Menu.Remove\ Math\ Menu :call Tex_MenuConfigure("math", 0)<cr>'
|
||||
exe 'amenu '.g:Tex_MainMenuLocation.'.900 '.s:mainmenuname.'Configure\ Menu.Expand\ Elements :call Tex_MenuConfigure("elements", "expand")<cr>'
|
||||
exe 'amenu '.g:Tex_MainMenuLocation.'.900 '.s:mainmenuname.'Configure\ Menu.Compress\ Elements :call Tex_MenuConfigure("elements", "nest")<cr>'
|
||||
exe 'amenu '.g:Tex_MainMenuLocation.'.900 '.s:mainmenuname.'Configure\ Menu.Load\ Packages\ Menu :call Tex_MenuConfigure("packages", 1)<cr>'
|
||||
endif
|
||||
|
||||
" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
|
||||
@@ -1,54 +0,0 @@
|
||||
"=============================================================================
|
||||
" File: texproject.vim
|
||||
" Author: Mikolaj Machowski
|
||||
" Version: 1.0
|
||||
" Created: Wen Apr 16 05:00 PM 2003
|
||||
"
|
||||
" Description: Handling tex projects.
|
||||
"=============================================================================
|
||||
|
||||
let s:path = fnameescape(expand("<sfile>:p:h"))
|
||||
|
||||
command! -nargs=0 TProjectEdit :call <SID>Tex_ProjectEdit()
|
||||
|
||||
" Tex_ProjectEdit: Edit project file " {{{
|
||||
" Description: If project file exists (*.latexmain) open it in window created
|
||||
" with ':split', if no create ':new' window and read there
|
||||
" project template
|
||||
"
|
||||
function! s:Tex_ProjectEdit()
|
||||
|
||||
let file = expand("%:p")
|
||||
let mainfname = Tex_GetMainFileName()
|
||||
if glob(mainfname.'.latexmain') != ''
|
||||
exec 'split '.fnameescape(mainfname.'.latexmain')
|
||||
else
|
||||
echohl WarningMsg
|
||||
echomsg "Master file not found."
|
||||
echomsg " :help latex-master-file"
|
||||
echomsg "for more information"
|
||||
echohl None
|
||||
endif
|
||||
|
||||
endfunction " }}}
|
||||
" Tex_ProjectLoad: loads the .latexmain file {{{
|
||||
" Description: If a *.latexmain file exists, then sources it
|
||||
function! Tex_ProjectLoad()
|
||||
let s:origdir = fnameescape(getcwd())
|
||||
exe 'cd '.fnameescape(expand('%:p:h'))
|
||||
|
||||
if glob(Tex_GetMainFileName(':p').'.latexmain') != ''
|
||||
call Tex_Debug("Tex_ProjectLoad: sourcing [".Tex_GetMainFileName().".latexmain]", "proj")
|
||||
exec 'source '.fnameescape(Tex_GetMainFileName().'.latexmain')
|
||||
endif
|
||||
|
||||
exe 'cd '.s:origdir
|
||||
endfunction " }}}
|
||||
|
||||
augroup LatexSuite
|
||||
au LatexSuite User LatexSuiteFileType
|
||||
\ call Tex_Debug("texproject.vim: catching LatexSuiteFileType event", "proj") |
|
||||
\ call Tex_ProjectLoad()
|
||||
augroup END
|
||||
|
||||
" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,30 +0,0 @@
|
||||
" Tex_Version: returns a string which gives the current version number of latex-suite
|
||||
" Description:
|
||||
" Each time a bug fix/addition is done in any source file in latex-suite,
|
||||
" not just this file, the number below has to be incremented by the author.
|
||||
" This will ensure that there is a single 'global' version number for all of
|
||||
" latex-suite.
|
||||
"
|
||||
" If a change is done in the doc/ directory, i.e an addition/change in the
|
||||
" documentation, then this number should NOT be incremented.
|
||||
"
|
||||
" Latex-suite will follow a 3-tier system of versioning just as Vim. A
|
||||
" version number will be of the form:
|
||||
"
|
||||
" X.Y.ZZ
|
||||
"
|
||||
" 'X' will only be incremented for a major over-haul or feature addition.
|
||||
" 'Y' will be incremented for significant changes which do not qualify
|
||||
" as major.
|
||||
" 'ZZ' will be incremented for bug-fixes and very trivial additions such
|
||||
" as adding an option etc. Once ZZ reaches 50, then Y will be
|
||||
" incremented and ZZ will be reset to 01. Each time we have a
|
||||
" version number of the form X.Y.01, then we'll make a release on
|
||||
" vim.sf.net and also create a cvs tag at that point. We'll try to
|
||||
" "stabilize" that version by releasing a few pre-releases and then
|
||||
" keep that as a stable point.
|
||||
function! Tex_Version()
|
||||
return "Latex-Suite: version 1.8.23"
|
||||
endfunction
|
||||
|
||||
com! -nargs=0 TVersion echo Tex_Version()
|
||||
@@ -1,376 +0,0 @@
|
||||
" File: wizardfuncs.vim
|
||||
" Author: Mikolaj Machowski <mikmach@wp.pl>
|
||||
" Description:
|
||||
"
|
||||
" Installation:
|
||||
" History: pluginized by Srinath Avadhanula
|
||||
"=============================================================================
|
||||
|
||||
if exists('s:doneOnce')
|
||||
finish
|
||||
endif
|
||||
let s:doneOnce = 1
|
||||
|
||||
let s:mapleader = exists('mapleader') ? mapleader : "\\"
|
||||
" ==============================================================================
|
||||
" Specialized functions for handling sections from command line
|
||||
" ==============================================================================
|
||||
|
||||
com! -nargs=? TSection call Tex_section(<f-args>)
|
||||
com! -nargs=? TSectionAdvanced call Tex_section_adv(<f-args>)
|
||||
|
||||
" Tex_VisSecAdv: handles visual selection for sections {{{
|
||||
function! Tex_VisSecAdv(section)
|
||||
let shorttitle = input("Short title? ")
|
||||
let toc = input("Include in table of contents [y]/n ? ")
|
||||
let sstructure = "\\".a:section
|
||||
if ( toc == "" || toc == "y" )
|
||||
let toc = ""
|
||||
else
|
||||
let toc = "*"
|
||||
endif
|
||||
if shorttitle != ""
|
||||
let shorttitle = '['.shorttitle.']'
|
||||
endif
|
||||
exe "normal `>a}\<cr>\<esc>`<i".sstructure.toc.shorttitle."{"
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
" Tex_InsSecAdv: section wizard in insert mode {{{
|
||||
function! Tex_InsSecAdv(structure)
|
||||
let ttitle = input("Title? ")
|
||||
let shorttitle = input("Short title? ")
|
||||
let toc = input("Include in table of contents [y]/n ? ")
|
||||
"Structure
|
||||
let sstructure = "\\".a:structure
|
||||
"TOC
|
||||
if ( toc == "" || toc == "y" )
|
||||
let toc = ""
|
||||
else
|
||||
let toc = "*"
|
||||
endif
|
||||
"Shorttitle
|
||||
if shorttitle != ""
|
||||
let shorttitle = '['.shorttitle.']'
|
||||
endif
|
||||
"Title
|
||||
let ttitle = '{'.ttitle.'}'
|
||||
"Happy end?
|
||||
return sstructure.toc.shorttitle.ttitle
|
||||
endfunction
|
||||
|
||||
" }}}
|
||||
function! Tex_section(...) "{{{
|
||||
silent let pos = Tex_GetPos()
|
||||
silent let last_section_value = s:Tex_section_detection()
|
||||
if a:0 == 0
|
||||
silent let last_section_name = s:Tex_section_name(last_section_value)
|
||||
silent call s:Tex_section_call(last_section_name)
|
||||
elseif a:1 =~ "[+=\-]"
|
||||
silent let sec_arg = a:1
|
||||
silent let curr_section_value = s:Tex_section_curr_rel_value(sec_arg, last_section_value)
|
||||
silent let curr_section_name = s:Tex_section_name(curr_section_value)
|
||||
silent call s:Tex_section_call(curr_section_name)
|
||||
elseif a:1 == "?"
|
||||
echo s:last_section_line
|
||||
else
|
||||
silent let curr_section_value = s:Tex_section_curr_value(a:1)
|
||||
silent let curr_section_name = s:Tex_section_name(curr_section_value)
|
||||
silent call s:Tex_section_call(curr_section_name)
|
||||
endif
|
||||
silent call Tex_SetPos(pos)
|
||||
endfunction "}}}
|
||||
function! Tex_section_adv(...) "{{{
|
||||
let pos = Tex_GetPos()
|
||||
silent let last_section_value = s:Tex_section_detection()
|
||||
if a:0 == 0
|
||||
silent let last_section_name = s:Tex_section_name(last_section_value)
|
||||
let section = Tex_InsSecAdv(last_section_name)
|
||||
elseif a:1 =~ "[+=\-]"
|
||||
silent let sec_arg = a:1
|
||||
silent let curr_section_value = s:Tex_section_curr_rel_value(sec_arg, last_section_value)
|
||||
silent let curr_section_name = s:Tex_section_name(curr_section_value)
|
||||
let section = Tex_InsSecAdv(curr_section_name)
|
||||
else
|
||||
silent let curr_section_value = s:Tex_section_curr_value(a:1)
|
||||
silent let curr_section_name = s:Tex_section_name(curr_section_value)
|
||||
silent call s:Tex_section_call(curr_section_name)
|
||||
let section = Tex_InsSecAdv(curr_section_name)
|
||||
endif
|
||||
exe "normal i".section
|
||||
call Tex_SetPos(pos)
|
||||
endfunction "}}}
|
||||
function! s:Tex_section_detection() "{{{
|
||||
let pos = Tex_GetPos()
|
||||
let last_section1 = search("\\\\\subparagraph\\|\\\\paragraph\\|\\\\subsubsection\\|\\\\subsection\\|\\\\section\\|\\\\chapter\\|\\\part\)", "b")
|
||||
call Tex_SetPos(pos)
|
||||
let last_section2 = search("\\\\\part\\|\\\\chapter\\|\\\\section\\|\\\\subsection\\|\\\\subsubsection\\|\\\\paragraph\\|\\\subparagraph\)", "b")
|
||||
if last_section1 > last_section2
|
||||
let last_section = last_section1
|
||||
else
|
||||
let last_section = last_section2
|
||||
endif
|
||||
if last_section != 0
|
||||
exe last_section
|
||||
if getline(".") =~ "\\\\part"
|
||||
let last_section_value = 0
|
||||
elseif getline(".") =~ "\\\\chapter"
|
||||
let last_section_value = 1
|
||||
elseif getline(".") =~ "\\\\section"
|
||||
let last_section_value = 2
|
||||
elseif getline(".") =~ "\\\\subsection"
|
||||
let last_section_value = 3
|
||||
elseif getline(".") =~ "\\\\subsubsection"
|
||||
let last_section_value = 4
|
||||
elseif getline(".") =~ "\\\\paragraph"
|
||||
let last_section_value = 5
|
||||
elseif getline(".") =~ "\\\\subparagraph"
|
||||
let last_section_value = 6
|
||||
endif
|
||||
let s:last_section_line = getline(".")
|
||||
else
|
||||
let last_section_value = 0
|
||||
endif
|
||||
call Tex_SetPos(pos)
|
||||
return last_section_value
|
||||
endfunction "}}}
|
||||
function! s:Tex_section_curr_value(sec_arg) "{{{
|
||||
if a:sec_arg == "pa" || a:sec_arg == "0" || a:sec_arg == "part"
|
||||
let curr_section_value = 0
|
||||
elseif a:sec_arg == "ch" || a:sec_arg == "1" || a:sec_arg == "chapter"
|
||||
let curr_section_value = 1
|
||||
elseif a:sec_arg == "se" || a:sec_arg == "2" || a:sec_arg == "section"
|
||||
let curr_section_value = 2
|
||||
elseif a:sec_arg == "ss" || a:sec_arg == "3" || a:sec_arg == "subsection"
|
||||
let curr_section_value = 3
|
||||
elseif a:sec_arg == "s2" || a:sec_arg == "4" || a:sec_arg == "subsubsection"
|
||||
let curr_section_value = 4
|
||||
elseif a:sec_arg == "pr" || a:sec_arg == "5" || a:sec_arg == "paragraph"
|
||||
let curr_section_value = 5
|
||||
elseif a:sec_arg == "sp" || a:sec_arg == "6" || a:sec_arg == "subparagraph"
|
||||
let curr_section_value = 6
|
||||
endif
|
||||
return curr_section_value
|
||||
endfunction "}}}
|
||||
function! s:Tex_section_curr_rel_value(sec_arg, last_section_value) "{{{
|
||||
let last_section_value = a:last_section_value
|
||||
if a:sec_arg == "+" || a:sec_arg == "+1"
|
||||
let curr_section_value = last_section_value + 1
|
||||
elseif a:sec_arg == "++" || a:sec_arg == "+2"
|
||||
let curr_section_value = last_section_value + 2
|
||||
elseif a:sec_arg == "-" || a:sec_arg == "-1"
|
||||
let curr_section_value = last_section_value - 1
|
||||
elseif a:sec_arg == "--" || a:sec_arg == "-2"
|
||||
let curr_section_value = last_section_value - 2
|
||||
elseif a:sec_arg == "="
|
||||
let curr_section_value = last_section_value
|
||||
else
|
||||
exe "let curr_section_value = last_section_value".a:sec_arg
|
||||
endif
|
||||
if curr_section_value < 0
|
||||
let curr_section_value = 0
|
||||
elseif curr_section_value > 6
|
||||
let curr_section_value = 6
|
||||
endif
|
||||
return curr_section_value
|
||||
endfunction "}}}
|
||||
function! s:Tex_section_name(section_value) "{{{
|
||||
if a:section_value == 0
|
||||
let section_name = "part"
|
||||
elseif a:section_value == 1
|
||||
let section_name = "chapter"
|
||||
elseif a:section_value == 2
|
||||
let section_name = "section"
|
||||
elseif a:section_value == 3
|
||||
let section_name = "subsection"
|
||||
elseif a:section_value == 4
|
||||
let section_name = "subsubsection"
|
||||
elseif a:section_value == 5
|
||||
let section_name = "paragraph"
|
||||
elseif a:section_value == 6
|
||||
let section_name = "subparagraph"
|
||||
endif
|
||||
return section_name
|
||||
endfunction "}}}
|
||||
function! s:Tex_section_call(section_name) "{{{
|
||||
exe "normal! i\\".a:section_name."{<++>}<++>\<Esc>0\<C-j>"
|
||||
" let ret_section = "\\".a:section_name."{<++>}<++>"
|
||||
" exe "normal! i\<C-r>=IMAP_PutTextWithMovement(ret_section)\<CR>"
|
||||
" normal f}i
|
||||
endfunction "}}}
|
||||
|
||||
" ==============================================================================
|
||||
" Add looking help into latexhelp.txt
|
||||
" ==============================================================================
|
||||
|
||||
inoremap <silent> <Plug>Tex_Help <C-o>:call <SID>TexHelp()<CR>
|
||||
nnoremap <silent> <Plug>Tex_Help :call <SID>TexHelp()<CR>
|
||||
command! -nargs=0 THelp call <SID>TexHelp()
|
||||
call Tex_MakeMap('<F1>', '<Plug>Tex_Help', 'i', '')
|
||||
call Tex_MakeMap('<F1>', '<Plug>Tex_Help', 'n', '')
|
||||
|
||||
" TexHelp: Cursor being on LaTeX item check if exists help tag about it " {{{
|
||||
function! s:TexHelp()
|
||||
let syntax_item = synIDattr(synID(line('.'),col('.')-1,0),"name")
|
||||
if syntax_item =~ '^tex'
|
||||
setlocal isk+=\
|
||||
let curword = expand('<cword>')
|
||||
setlocal isk-=\
|
||||
let v:errmsg = ''
|
||||
if curword =~ "^\\" || syntax_item == 'texSectionName'
|
||||
exe 'silent! help '.curword
|
||||
if v:errmsg =~ '^E149:'
|
||||
echohl ErrorMsg
|
||||
exe "echomsg 'Sorry, no help for LaTeX: ".curword."'"
|
||||
echohl None
|
||||
let v:errmsg = ''
|
||||
endif
|
||||
else
|
||||
help
|
||||
endif
|
||||
else
|
||||
help
|
||||
endif
|
||||
endfunction " }}}
|
||||
|
||||
" ==============================================================================
|
||||
" Tables of shortcuts
|
||||
" ==============================================================================
|
||||
"
|
||||
command! -nargs=? Tshortcuts call Tex_shortcuts(<f-args>)<CR>
|
||||
|
||||
" Tex_shortcuts: Show shortcuts in terminal after : command {{{
|
||||
function! Tex_shortcuts(...)
|
||||
if a:0 == 0
|
||||
let shorts = input(" Allowed arguments are:"
|
||||
\."\n g General"
|
||||
\."\n e Environments"
|
||||
\."\n f Fonts"
|
||||
\."\n s Sections"
|
||||
\."\n m Math"
|
||||
\."\n a All"
|
||||
\."\n Enter your choice (<Enter> quits) : ")
|
||||
call Tex_shortcuts(shorts)
|
||||
elseif a:1 == 'g'
|
||||
echo g:generalshortcuts
|
||||
elseif a:1 == 'e'
|
||||
echo g:environmentshortcuts
|
||||
elseif a:1 == 'f'
|
||||
echo g:fontshortcuts
|
||||
elseif a:1 == 's'
|
||||
echo g:sectionshortcuts
|
||||
elseif a:1 == 'm'
|
||||
echo g:mathshortcuts
|
||||
elseif a:1 == 'a'
|
||||
echo g:generalshortcuts
|
||||
echo g:environmentshortcuts
|
||||
echo g:fontshortcuts
|
||||
echo g:sectionshortcuts
|
||||
echo g:mathshortcuts
|
||||
endif
|
||||
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" General shortcuts {{{
|
||||
let g:generalshortcuts = ''
|
||||
\."\n General shortcuts"
|
||||
\."\n <mapleader> is a value of <Leader>"
|
||||
\."\n ".s:mapleader.'ll compile whole document'
|
||||
\."\n ".s:mapleader.'lv view compiled document'
|
||||
\."\n ".s:mapleader.'ls forward searching (if possible)'
|
||||
\."\n ".s:mapleader.'rf refresh folds'
|
||||
" }}}
|
||||
" Environment shortcuts {{{
|
||||
let g:environmentshortcuts = ''
|
||||
\."\n Environment shortcuts"
|
||||
\."\n <mapleader> is a value of g:Tex_Leader2"
|
||||
\."\n I v&V I v&V"
|
||||
\."\n ELI ".g:Tex_Leader2."li list EQN ".g:Tex_Leader2."qn quotation"
|
||||
\."\n EDE ".g:Tex_Leader2."de description ESP ".g:Tex_Leader2."sb sloppypar"
|
||||
\."\n EEN ".g:Tex_Leader2."en enumerate ETI ".g:Tex_Leader2."ti theindex"
|
||||
\."\n EIT ".g:Tex_Leader2."it itemize ETP ".g:Tex_Leader2."tp titlepage"
|
||||
\."\n ETI ".g:Tex_Leader2."ti theindex EVM ".g:Tex_Leader2."vm verbatim"
|
||||
\."\n ETL ".g:Tex_Leader2."tl trivlist EVE ".g:Tex_Leader2."ve verse"
|
||||
\."\n ETE ".g:Tex_Leader2."te table ETB ".g:Tex_Leader2."tb thebibliography"
|
||||
\."\n ETG ".g:Tex_Leader2."tg tabbing ENO ".g:Tex_Leader2."no note"
|
||||
\."\n ETR ".g:Tex_Leader2."tr tabular EOV ".g:Tex_Leader2."ov overlay"
|
||||
\."\n EAR ".g:Tex_Leader2."ar array ESL ".g:Tex_Leader2."sl slide"
|
||||
\."\n EDM ".g:Tex_Leader2."dm displaymath EAB ".g:Tex_Leader2."ab abstract"
|
||||
\."\n EEA ".g:Tex_Leader2."ea eqnarray EAP ".g:Tex_Leader2."ap appendix"
|
||||
\."\n EEQ ".g:Tex_Leader2."eq equation ECE ".g:Tex_Leader2."ce center"
|
||||
\."\n EDO ".g:Tex_Leader2."do document EFI ".g:Tex_Leader2."fi figure"
|
||||
\."\n EFC ".g:Tex_Leader2."fc filecontents ELR ".g:Tex_Leader2."lr lrbox"
|
||||
\."\n EFL ".g:Tex_Leader2."fl flushleft EMP ".g:Tex_Leader2."mp minipage"
|
||||
\."\n EFR ".g:Tex_Leader2."fr flushright EPI ".g:Tex_Leader2."pi picture"
|
||||
\."\n EMA ".g:Tex_Leader2."ma math EQE ".g:Tex_Leader2."qe quote"
|
||||
" }}}
|
||||
" Font shortcuts {{{
|
||||
let g:fontshortcuts = ''
|
||||
\."\n Font shortcuts"
|
||||
\."\n <mapleader> is a value of g:Tex_Leader"
|
||||
\."\n Shortcuts Effects"
|
||||
\."\n I v&V I&v V"
|
||||
\."\n FBF ".g:Tex_Leader."bf \\textbf{} {\\bfseries }"
|
||||
\."\n FMD ".g:Tex_Leader."md \\textmd{} {\\mdseries }"
|
||||
\."\n"
|
||||
\."\n FTT ".g:Tex_Leader."tt \\texttt{} {\\ttfamily }"
|
||||
\."\n FSF ".g:Tex_Leader."sf \\textsf{} {\\sffamily }"
|
||||
\."\n FRM ".g:Tex_Leader."rm \\textrm{} {\\rmfamily }"
|
||||
\."\n"
|
||||
\."\n FUP ".g:Tex_Leader."up \\textup{} {\\upshape }"
|
||||
\."\n FSL ".g:Tex_Leader."sl \\textsl{} {\\slshape }"
|
||||
\."\n FSC ".g:Tex_Leader."sc \\textsc{} {\\scshape }"
|
||||
\."\n FIT ".g:Tex_Leader."it \\textit{} {\\itshape }"
|
||||
" }}}
|
||||
" Section shortcuts {{{
|
||||
let g:sectionshortcuts = ''
|
||||
\."\n Section shortcuts"
|
||||
\."\n <mapleader> is a value of g:Tex_Leader2"
|
||||
\."\n I v&V"
|
||||
\."\n SPA ".g:Tex_Leader2."pa part"
|
||||
\."\n SCH ".g:Tex_Leader2."ch chapter"
|
||||
\."\n SSE ".g:Tex_Leader2."se section"
|
||||
\."\n SSS ".g:Tex_Leader2."ss subsection"
|
||||
\."\n SS2 ".g:Tex_Leader2."s2 subsubsection"
|
||||
\."\n SPG ".g:Tex_Leader2."pg paragraph"
|
||||
\."\n SSP ".g:Tex_Leader2."sp subparagraph"
|
||||
" }}}
|
||||
" Math shortcuts {{{
|
||||
let g:mathshortcuts = ''
|
||||
\."\n Math shortcuts - Insert mode"
|
||||
\."\n `a \\alpha `b \\beta"
|
||||
\."\n `g \\gamma `d \\delta"
|
||||
\."\n `e \\varepsilon `z \\zeta"
|
||||
\."\n `h \\eta `q \\theta"
|
||||
\."\n `i \\iota `k \\kappa"
|
||||
\."\n `l \\lambda `m \\mu"
|
||||
\."\n `n \\nu `x \\xi"
|
||||
\."\n `p \\pi `r \\rho"
|
||||
\."\n `s \\sigma `v \\varsigma"
|
||||
\."\n `t \\tau `u \\upsilon"
|
||||
\."\n `f \\varphi `c \\chi"
|
||||
\."\n `y \\psi `w \\omega"
|
||||
\."\n `A \\Alpha `B \\Beta"
|
||||
\."\n `G \\Gamma `D \\Delta"
|
||||
\."\n `E \\Epsilon `Z \\mathrm{Z}"
|
||||
\."\n `H \\Eta `K \\Kappa"
|
||||
\."\n `L \\Lambda `M \\Mu"
|
||||
\."\n `N \\Nu `X \\Xi"
|
||||
\."\n `P \\Pi `R \\Rho"
|
||||
\."\n `S \\Sigma `T \\Tau"
|
||||
\."\n `U \\Upsilon `C \\Chi"
|
||||
\."\n `Y \\Psi `W \\Omega"
|
||||
\."\n `( \\subset `) \\Subset"
|
||||
\."\n `= \\equiv =~ \\approx"
|
||||
\."\n `- \\bigcap `+ \\bigcup"
|
||||
\."\n `. \\cdot `* \\times"
|
||||
\."\n `\\ \\setminus `@ \\circ"
|
||||
\."\n `& \\wedge `, \\nonumber"
|
||||
\."\n `8 \\infty `_ \\bar{}"
|
||||
\."\n `: \\ddot{} `; \\dot{}"
|
||||
\."\n `^ \\hat{} `~ \\tilde{}"
|
||||
\."\n `6 \\partial"
|
||||
" }}}
|
||||
|
||||
" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
|
||||
193
ftplugin/latextoc.vim
Normal file
193
ftplugin/latextoc.vim
Normal file
@@ -0,0 +1,193 @@
|
||||
" {{{1 Settings
|
||||
setlocal buftype=nofile
|
||||
setlocal bufhidden=wipe
|
||||
setlocal nobuflisted
|
||||
setlocal noswapfile
|
||||
setlocal nowrap
|
||||
setlocal nospell
|
||||
setlocal cursorline
|
||||
setlocal nonumber
|
||||
setlocal nolist
|
||||
setlocal tabstop=8
|
||||
setlocal cole=0
|
||||
setlocal cocu=nvic
|
||||
if g:LatexBox_fold_toc
|
||||
setlocal foldmethod=expr
|
||||
setlocal foldexpr=TOCFoldLevel(v:lnum)
|
||||
setlocal foldtext=TOCFoldText()
|
||||
endif
|
||||
" }}}1
|
||||
|
||||
" {{{1 Functions
|
||||
" {{{2 TOCClose
|
||||
function! s:TOCClose()
|
||||
if g:LatexBox_split_resize
|
||||
silent exe "set columns-=" . g:LatexBox_split_width
|
||||
endif
|
||||
bwipeout
|
||||
endfunction
|
||||
|
||||
" {{{2 TOCToggleNumbers
|
||||
function! s:TOCToggleNumbers()
|
||||
if b:toc_numbers
|
||||
setlocal conceallevel=3
|
||||
let b:toc_numbers = 0
|
||||
else
|
||||
setlocal conceallevel=0
|
||||
let b:toc_numbers = 1
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" {{{2 EscapeTitle
|
||||
function! s:EscapeTitle(titlestr)
|
||||
" Credit goes to Marcin Szamotulski for the following fix. It allows to
|
||||
" match through commands added by TeX.
|
||||
let titlestr = substitute(a:titlestr, '\\\w*\>\s*\%({[^}]*}\)\?', '.*', 'g')
|
||||
|
||||
let titlestr = escape(titlestr, '\')
|
||||
let titlestr = substitute(titlestr, ' ', '\\_\\s\\+', 'g')
|
||||
|
||||
return titlestr
|
||||
endfunction
|
||||
|
||||
" {{{2 TOCActivate
|
||||
function! s:TOCActivate(close)
|
||||
let n = getpos('.')[1] - 1
|
||||
|
||||
if n >= len(b:toc)
|
||||
return
|
||||
endif
|
||||
|
||||
let entry = b:toc[n]
|
||||
|
||||
let titlestr = s:EscapeTitle(entry['text'])
|
||||
|
||||
" Search for duplicates
|
||||
"
|
||||
let i=0
|
||||
let entry_hash = entry['level'].titlestr
|
||||
let duplicates = 0
|
||||
while i<n
|
||||
let i_entry = b:toc[n]
|
||||
let i_hash = b:toc[i]['level'].s:EscapeTitle(b:toc[i]['text'])
|
||||
if i_hash == entry_hash
|
||||
let duplicates += 1
|
||||
endif
|
||||
let i += 1
|
||||
endwhile
|
||||
let toc_bnr = bufnr('%')
|
||||
let toc_wnr = winnr()
|
||||
|
||||
execute b:calling_win . 'wincmd w'
|
||||
|
||||
let files = [entry['file']]
|
||||
for line in filter(readfile(entry['file']), 'v:val =~ ''\\input{''')
|
||||
call add(files, matchstr(line, '{\zs.*\ze\(\.tex\)\?}') . '.tex')
|
||||
endfor
|
||||
|
||||
" Find section in buffer (or inputted files)
|
||||
call s:TOCFindMatch('\\' . entry['level'] . '\_\s*{' . titlestr . '}',
|
||||
\ duplicates, files)
|
||||
|
||||
if a:close
|
||||
if g:LatexBox_split_resize
|
||||
silent exe "set columns-=" . g:LatexBox_split_width
|
||||
endif
|
||||
execute 'bwipeout ' . toc_bnr
|
||||
else
|
||||
execute toc_wnr . 'wincmd w'
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" {{{2 TOCFindMatch
|
||||
function! s:TOCFindMatch(strsearch,duplicates,files)
|
||||
|
||||
call s:TOCOpenBuf(a:files[0])
|
||||
let dups = a:duplicates
|
||||
|
||||
" Skip duplicates
|
||||
while dups > 0
|
||||
if search(a:strsearch, 'w')
|
||||
let dups -= 1
|
||||
else
|
||||
break
|
||||
endif
|
||||
endwhile
|
||||
|
||||
if search(a:strsearch, 'w')
|
||||
normal! zv
|
||||
return
|
||||
endif
|
||||
|
||||
call s:TOCFindMatch(a:strsearch,dups,a:files[1:])
|
||||
|
||||
endfunction
|
||||
|
||||
" {{{2 TOCFoldLevel
|
||||
function! TOCFoldLevel(lnum)
|
||||
let line = getline(a:lnum)
|
||||
let match_s1 = line =~# '^\w\+\s'
|
||||
let match_s2 = line =~# '^\w\+\.\w\+\s'
|
||||
let match_s3 = line =~# '^\w\+\.\w\+\.\w\+\s'
|
||||
|
||||
if g:LatexBox_fold_toc_levels >= 3
|
||||
if match_s3
|
||||
return ">3"
|
||||
endif
|
||||
endif
|
||||
|
||||
if g:LatexBox_fold_toc_levels >= 2
|
||||
if match_s2
|
||||
return ">2"
|
||||
endif
|
||||
endif
|
||||
|
||||
if match_s1
|
||||
return ">1"
|
||||
endif
|
||||
|
||||
" Don't fold options
|
||||
if line =~# '^\s*$'
|
||||
return 0
|
||||
endif
|
||||
|
||||
" Return previous fold level
|
||||
return "="
|
||||
endfunction
|
||||
|
||||
" {{{2 TOCFoldText
|
||||
function! TOCFoldText()
|
||||
let parts = matchlist(getline(v:foldstart), '^\(.*\)\t\(.*\)$')
|
||||
return printf('%-8s%-72s', parts[1], parts[2])
|
||||
endfunction
|
||||
|
||||
" {{{2 TOCOpenBuf
|
||||
function! s:TOCOpenBuf(file)
|
||||
|
||||
let bnr = bufnr(a:file)
|
||||
if bnr == -1
|
||||
execute 'badd ' . a:file
|
||||
let bnr = bufnr(a:file)
|
||||
endif
|
||||
execute 'buffer! ' . bnr
|
||||
|
||||
endfunction
|
||||
|
||||
" }}}1
|
||||
|
||||
" {{{1 Mappings
|
||||
nnoremap <buffer> <silent> s :call <SID>TOCToggleNumbers()<CR>
|
||||
nnoremap <buffer> <silent> q :call <SID>TOCClose()<CR>
|
||||
nnoremap <buffer> <silent> <Esc> :call <SID>TOCClose()<CR>
|
||||
nnoremap <buffer> <silent> <Space> :call <SID>TOCActivate(0)<CR>
|
||||
nnoremap <buffer> <silent> <CR> :call <SID>TOCActivate(1)<CR>
|
||||
nnoremap <buffer> <silent> <leftrelease> :call <SID>TOCActivate(0)<cr>
|
||||
nnoremap <buffer> <silent> <2-leftmouse> :call <SID>TOCActivate(1)<cr>
|
||||
nnoremap <buffer> <silent> G G4k
|
||||
nnoremap <buffer> <silent> <Esc>OA k
|
||||
nnoremap <buffer> <silent> <Esc>OB j
|
||||
nnoremap <buffer> <silent> <Esc>OC l
|
||||
nnoremap <buffer> <silent> <Esc>OD h
|
||||
" }}}1
|
||||
|
||||
" vim:fdm=marker:ff=unix:et:ts=4:sw=4
|
||||
@@ -1,6 +1,7 @@
|
||||
" Vim filetype plugin
|
||||
" Language: Markdown
|
||||
" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
|
||||
" Last Change: 2013 May 30
|
||||
|
||||
if exists("b:did_ftplugin")
|
||||
finish
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user