mirror of
https://github.com/sheerun/vim-polyglot.git
synced 2025-11-08 11:33:52 -05:00
Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
811fe888a6 | ||
|
|
2b19388166 | ||
|
|
a531f6b104 | ||
|
|
90d87abd30 | ||
|
|
d6710f1b57 | ||
|
|
0db9bdbfd6 | ||
|
|
c069f0661a | ||
|
|
235a5631f9 | ||
|
|
edf1aa4a1c | ||
|
|
88bd82d6c9 | ||
|
|
2686fb60f4 | ||
|
|
9d92f10375 | ||
|
|
fc0b11afe1 | ||
|
|
0fcd056648 | ||
|
|
78cd7e48cb | ||
|
|
ba1305772d | ||
|
|
ff3cc42bf3 |
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
|
||||
|
||||
11
README.md
11
README.md
@@ -26,7 +26,6 @@ Optionally download one of the [releases](https://github.com/sheerun/vim-polyglo
|
||||
## Language packs
|
||||
|
||||
- [arduino](https://github.com/sudar/vim-arduino-syntax) (syntax, ftdetect)
|
||||
- [bundler](https://github.com/tpope/vim-bundler) (compiler)
|
||||
- [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)
|
||||
@@ -34,8 +33,9 @@ Optionally download one of the [releases](https://github.com/sheerun/vim-polyglo
|
||||
- [css-color](https://github.com/ap/vim-css-color) (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/jimenezrick/vimerl) (syntax, indent, compiler, autoload, ftplugin)
|
||||
- [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)
|
||||
@@ -46,18 +46,20 @@ Optionally download one of the [releases](https://github.com/sheerun/vim-polyglo
|
||||
- [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/jcf/vim-latex) (indent, compiler, ftplugin)
|
||||
- [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)
|
||||
- [rspec](https://github.com/skwp/vim-rspec) (syntax)
|
||||
- [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)
|
||||
@@ -65,6 +67,7 @@ Optionally download one of the [releases](https://github.com/sheerun/vim-polyglo
|
||||
- [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)
|
||||
|
||||
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
|
||||
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'
|
||||
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
|
||||
2
after/syntax/tex.vim
Normal file
2
after/syntax/tex.vim
Normal file
@@ -0,0 +1,2 @@
|
||||
" adds support for cleverref package (`\cref` and `\Cref`)
|
||||
syn region texRefZone matchgroup=texStatement start="\\\(c\|C\)ref{" end="}\|%stopzone\>" contains=@texRefGroup
|
||||
@@ -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
|
||||
|
||||
27
build
27
build
@@ -4,8 +4,6 @@ set -E
|
||||
|
||||
DIRS="syntax indent compiler autoload ftplugin ftdetect after/syntax after/indent after/ftplugin after/ftdetect"
|
||||
|
||||
# Fetches syntax files from given Github repo
|
||||
|
||||
download() {
|
||||
for pack in $1; do
|
||||
path="$(printf "$pack" | cut -d ':' -f 2)"
|
||||
@@ -25,7 +23,6 @@ extract() {
|
||||
dir="tmp/$(printf "$path" | cut -d '/' -f 2)"
|
||||
printf -- "- [$name](https://github.com/$path) ("
|
||||
|
||||
# which tree > /dev/null && tree tmp
|
||||
subdirs=""
|
||||
for subdir in $DIRS; do
|
||||
if [ -d "$dir/$subdir" ]; then
|
||||
@@ -38,8 +35,19 @@ extract() {
|
||||
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
|
||||
}
|
||||
|
||||
copy_dir() {
|
||||
@@ -58,7 +66,6 @@ concat_ftdetect() {
|
||||
|
||||
PACKS="
|
||||
arduino:sudar/vim-arduino-syntax
|
||||
bundler:tpope/vim-bundler
|
||||
c++11:octol/vim-cpp-enhanced-highlight
|
||||
c/c++:vim-jp/cpp-vim
|
||||
clojure:guns/vim-clojure-static
|
||||
@@ -66,8 +73,9 @@ PACKS="
|
||||
css-color:ap/vim-css-color
|
||||
csv:chrisbra/csv.vim
|
||||
cucumber:tpope/vim-cucumber
|
||||
dockerfile:honza/dockerfile.vim
|
||||
elixir:elixir-lang/vim-elixir
|
||||
erlang:jimenezrick/vimerl
|
||||
erlang:oscarh/vimerl
|
||||
git:tpope/vim-git
|
||||
go:jnwhiteh/vim-golang
|
||||
haml:tpope/vim-haml
|
||||
@@ -78,18 +86,20 @@ PACKS="
|
||||
javascript:pangloss/vim-javascript
|
||||
json:leshill/vim-json
|
||||
jst:briancollins/vim-jst
|
||||
latex:jcf/vim-latex
|
||||
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
|
||||
rspec:skwp/vim-rspec
|
||||
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
|
||||
@@ -97,6 +107,7 @@ PACKS="
|
||||
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
|
||||
@@ -104,7 +115,7 @@ PACKS="
|
||||
|
||||
rm -rf tmp
|
||||
rm -rf $DIRS
|
||||
mkdir -p tmp
|
||||
mkdir tmp
|
||||
|
||||
printf "Downloading packs..."
|
||||
download "$PACKS"
|
||||
|
||||
@@ -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:
|
||||
@@ -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
|
||||
|
||||
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
|
||||
@@ -12,6 +12,7 @@ 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
|
||||
@@ -104,6 +105,7 @@ 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,*.rc set filetype=rust
|
||||
au BufRead,BufNewFile *.sbt set filetype=sbt
|
||||
fun! s:DetectScala()
|
||||
if getline(1) == '#!/usr/bin/env scala'
|
||||
@@ -119,3 +121,4 @@ 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,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
|
||||
@@ -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:
|
||||
@@ -45,6 +45,8 @@ endif
|
||||
|
||||
setlocal comments=://-,:// commentstring=//\ %s
|
||||
|
||||
setlocal suffixesadd=.jade
|
||||
|
||||
let b:undo_ftplugin = "setl cms< com< "
|
||||
\ " | unlet! b:browsefilter b:match_words | " . s:undo_ftplugin
|
||||
|
||||
|
||||
351
ftplugin/latex-box/common.vim
Normal file
351
ftplugin/latex-box/common.vim
Normal file
@@ -0,0 +1,351 @@
|
||||
" LaTeX Box common functions
|
||||
|
||||
" Error Format {{{
|
||||
" Note: The error formats assume we're using the -file-line-error with
|
||||
" [pdf]latex.
|
||||
|
||||
" 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
|
||||
|
||||
" See |errorformat-LaTeX|
|
||||
setlocal efm=%E!\ LaTeX\ %trror:\ %m
|
||||
setlocal efm+=%E%f:%l:\ %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
|
||||
|
||||
" Consider the remaining statements that starts with "!" as errors
|
||||
setlocal efm+=%E!\ %m
|
||||
|
||||
" Push file to file stack
|
||||
setlocal efm+=%+P**%f
|
||||
|
||||
" Ignore unmatched lines
|
||||
setlocal efm+=%-G\\s%#
|
||||
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 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
|
||||
|
||||
" 5. 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
|
||||
841
ftplugin/latex-box/complete.vim
Normal file
841
ftplugin/latex-box/complete.vim
Normal file
@@ -0,0 +1,841 @@
|
||||
" 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]\)\?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 bibliography_cmds = [
|
||||
\ '\\bibliography',
|
||||
\ '\\addbibresource',
|
||||
\ '\\addglobalbib',
|
||||
\ '\\addsectionbib',
|
||||
\ ]
|
||||
|
||||
let lines = readfile(file)
|
||||
|
||||
let bibdata_list = []
|
||||
|
||||
for cmd in bibliography_cmds
|
||||
let bibdata_list += map(filter(copy(lines),
|
||||
\ 'v:val =~ ''\C' . cmd . '\s*{[^}]\+}'''),
|
||||
\ 'matchstr(v:val, ''\C' . cmd . '\s*{\zs[^}]\+\ze}'')')
|
||||
endfor
|
||||
|
||||
let bibdata_list += map(filter(copy(lines),
|
||||
\ 'v:val =~ ''\C\\\%(input\|include\)\s*{[^}]\+}'''),
|
||||
\ 's:FindBibData(LatexBox_kpsewhich(matchstr(v:val,'
|
||||
\ . '''\C\\\%(input\|include\)\s*{\zs[^}]\+\ze}'')))')
|
||||
|
||||
let bibdata_list += map(filter(copy(lines),
|
||||
\ 'v:val =~ ''\C\\\%(input\|include\)\s\+\S\+'''),
|
||||
\ 's:FindBibData(LatexBox_kpsewhich(matchstr(v:val,'
|
||||
\ . '''\C\\\%(input\|include\)\s\+\zs\S\+\ze'')))')
|
||||
|
||||
return join(bibdata_list, ',')
|
||||
endfunction
|
||||
|
||||
let s:bstfile = expand('<sfile>:p:h') . '/vimcomplete'
|
||||
|
||||
function! LatexBox_BibSearch(regexp)
|
||||
let res = []
|
||||
|
||||
" Find data from bib files
|
||||
let bibdata = 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)
|
||||
|
||||
silent execute '! cd ' shellescape(LatexBox_GetTexRoot()) .
|
||||
\ ' ; bibtex -terse '
|
||||
\ . fnamemodify(auxfile, ':t') . ' >/dev/null'
|
||||
|
||||
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])
|
||||
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}')
|
||||
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 {{{
|
||||
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 = []
|
||||
for m in LatexBox_BibSearch(regexp)
|
||||
let type = m['type'] == '' ? '[-]' : '[' . m['type'] . '] '
|
||||
let auth = m['author'] == '' ? '' : m['author'][:20] . ' '
|
||||
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"
|
||||
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! ' . 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
|
||||
448
ftplugin/latex-box/latexmk.vim
Normal file
448
ftplugin/latex-box/latexmk.vim
Normal file
@@ -0,0 +1,448 @@
|
||||
" 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)
|
||||
call LatexBox_LatexErrors(a:status, a:basename)
|
||||
endif
|
||||
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 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 /')
|
||||
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 asyncbat = tempname() . '.bat'
|
||||
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)
|
||||
|
||||
" 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
|
||||
|
||||
" 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'"
|
||||
let cmd = vimsetpid . ' ; ' . escape(cmd, '%') . ' ; ' . vimcmd
|
||||
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 . '"'),'\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)
|
||||
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
|
||||
527
ftplugin/latex-box/motion.vim
Normal file
527
ftplugin/latex-box/motion.vim
Normal file
@@ -0,0 +1,527 @@
|
||||
" 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(fnamemodify(newaux, ':t:r') . '.tex', ':p')
|
||||
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
|
||||
if len(tree[1]) > 3 && empty(tree[1][1])
|
||||
call remove(tree[1], 1)
|
||||
endif
|
||||
if len(tree[1]) > 1
|
||||
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 secnum = ''
|
||||
let tree = tree[1]
|
||||
endif
|
||||
" parse section title
|
||||
let text = LatexBox_TreeToTex(tree)
|
||||
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)
|
||||
echoe 'Current file is not included in main tex file ' . LatexBox_GetMainTexFile() . '.'
|
||||
endif
|
||||
|
||||
let imax = len(a:fileindices[file])
|
||||
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]
|
||||
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
|
||||
166
ftplugin/latextoc.vim
Normal file
166
ftplugin/latextoc.vim
Normal file
@@ -0,0 +1,166 @@
|
||||
" {{{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 bnr = bufnr(entry['file'])
|
||||
if bnr == -1
|
||||
execute 'badd ' . entry['file']
|
||||
let bnr = bufnr(entry['file'])
|
||||
endif
|
||||
|
||||
execute 'buffer! ' . bnr
|
||||
|
||||
" skip duplicates
|
||||
while duplicates > 0
|
||||
if search('\\' . entry['level'] . '\_\s*{' . titlestr . '}', 'ws')
|
||||
let duplicates -= 1
|
||||
endif
|
||||
endwhile
|
||||
|
||||
if search('\\' . entry['level'] . '\_\s*{' . titlestr . '}', 'ws')
|
||||
normal zv
|
||||
endif
|
||||
|
||||
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 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
|
||||
|
||||
" }}}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
|
||||
88
ftplugin/perl.vim
Normal file
88
ftplugin/perl.vim
Normal file
@@ -0,0 +1,88 @@
|
||||
" Vim filetype plugin file
|
||||
" Language: Perl
|
||||
" Maintainer: vim-perl <vim-perl@googlegroups.com>
|
||||
" Homepage: http://github.com/vim-perl/vim-perl
|
||||
" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
|
||||
" Last Change: {{LAST_CHANGE}}
|
||||
|
||||
if exists("b:did_ftplugin") | finish | endif
|
||||
let b:did_ftplugin = 1
|
||||
|
||||
" Make sure the continuation lines below do not cause problems in
|
||||
" compatibility mode.
|
||||
let s:save_cpo = &cpo
|
||||
set cpo-=C
|
||||
|
||||
setlocal formatoptions-=t
|
||||
setlocal formatoptions+=crqol
|
||||
setlocal keywordprg=perldoc\ -f
|
||||
|
||||
setlocal comments=:#
|
||||
setlocal commentstring=#%s
|
||||
|
||||
" Change the browse dialog on Win32 to show mainly Perl-related files
|
||||
if has("gui_win32")
|
||||
let b:browsefilter = "Perl Source Files (*.pl)\t*.pl\n" .
|
||||
\ "Perl Modules (*.pm)\t*.pm\n" .
|
||||
\ "Perl Documentation Files (*.pod)\t*.pod\n" .
|
||||
\ "All Files (*.*)\t*.*\n"
|
||||
endif
|
||||
|
||||
" Provided by Ned Konz <ned at bike-nomad dot com>
|
||||
"---------------------------------------------
|
||||
setlocal include=\\<\\(use\\\|require\\)\\>
|
||||
setlocal includeexpr=substitute(substitute(substitute(v:fname,'::','/','g'),'->\*','',''),'$','.pm','')
|
||||
setlocal define=[^A-Za-z_]
|
||||
|
||||
" The following line changes a global variable but is necessary to make
|
||||
" gf and similar commands work. The change to iskeyword was incorrect.
|
||||
" Thanks to Andrew Pimlott for pointing out the problem. If this causes a
|
||||
" problem for you, add an after/ftplugin/perl.vim file that contains
|
||||
" set isfname-=:
|
||||
set isfname+=:
|
||||
set iskeyword+=:
|
||||
|
||||
" Set this once, globally.
|
||||
if !exists("perlpath")
|
||||
if executable("perl")
|
||||
try
|
||||
if &shellxquote != '"'
|
||||
let perlpath = system('perl -e "print join(q/,/,@INC)"')
|
||||
else
|
||||
let perlpath = system("perl -e 'print join(q/,/,@INC)'")
|
||||
endif
|
||||
let perlpath = substitute(perlpath,',.$',',,','')
|
||||
catch /E145:/
|
||||
let perlpath = ".,,"
|
||||
endtry
|
||||
else
|
||||
" If we can't call perl to get its path, just default to using the
|
||||
" current directory and the directory of the current file.
|
||||
let perlpath = ".,,"
|
||||
endif
|
||||
endif
|
||||
|
||||
" Append perlpath to the existing path value, if it is set. Since we don't
|
||||
" use += to do it because of the commas in perlpath, we have to handle the
|
||||
" global / local settings, too.
|
||||
if &l:path == ""
|
||||
if &g:path == ""
|
||||
let &l:path=perlpath
|
||||
else
|
||||
let &l:path=&g:path.",".perlpath
|
||||
endif
|
||||
else
|
||||
let &l:path=&l:path.",".perlpath
|
||||
endif
|
||||
"---------------------------------------------
|
||||
|
||||
" Undo the stuff we changed.
|
||||
let b:undo_ftplugin = "setlocal fo< com< cms< inc< inex< def< isf< kp< path<" .
|
||||
\ " | unlet! b:browsefilter"
|
||||
|
||||
" proper matching for matchit plugin
|
||||
let b:match_skip = 's:comment\|string\|perlQQ\|perlShellCommand\|perlHereDoc\|perlSubstitution\|perlTranslation\|perlMatch\|perlFormatField'
|
||||
|
||||
" Restore the saved compatibility options.
|
||||
let &cpo = s:save_cpo
|
||||
unlet s:save_cpo
|
||||
77
ftplugin/perl6.vim
Normal file
77
ftplugin/perl6.vim
Normal file
@@ -0,0 +1,77 @@
|
||||
" Vim filetype plugin file
|
||||
" Language: Perl 6
|
||||
" Maintainer: vim-perl <vim-perl@googlegroups.com>
|
||||
" Homepage: http://github.com/vim-perl/vim-perl
|
||||
" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
|
||||
" Last Change: {{LAST_CHANGE}}
|
||||
" Contributors: Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
|
||||
"
|
||||
" Based on ftplugin/perl.vim by Dan Sharp <dwsharp at hotmail dot com>
|
||||
|
||||
if exists("b:did_ftplugin") | finish | endif
|
||||
let b:did_ftplugin = 1
|
||||
|
||||
" Make sure the continuation lines below do not cause problems in
|
||||
" compatibility mode.
|
||||
let s:save_cpo = &cpo
|
||||
set cpo-=C
|
||||
|
||||
setlocal formatoptions-=t
|
||||
setlocal formatoptions+=crqol
|
||||
setlocal keywordprg=p6doc
|
||||
|
||||
setlocal comments=:#
|
||||
setlocal commentstring=#%s
|
||||
|
||||
" Change the browse dialog on Win32 to show mainly Perl-related files
|
||||
if has("gui_win32")
|
||||
let b:browsefilter = "Perl Source Files (*.pl)\t*.pl\n" .
|
||||
\ "Perl Modules (*.pm)\t*.pm\n" .
|
||||
\ "Perl Documentation Files (*.pod)\t*.pod\n" .
|
||||
\ "All Files (*.*)\t*.*\n"
|
||||
endif
|
||||
|
||||
" Provided by Ned Konz <ned at bike-nomad dot com>
|
||||
"---------------------------------------------
|
||||
setlocal include=\\<\\(use\\\|require\\)\\>
|
||||
setlocal includeexpr=substitute(substitute(v:fname,'::','/','g'),'$','.pm','')
|
||||
setlocal define=[^A-Za-z_]
|
||||
|
||||
" The following line changes a global variable but is necessary to make
|
||||
" gf and similar commands work. Thanks to Andrew Pimlott for pointing out
|
||||
" the problem. If this causes a " problem for you, add an
|
||||
" after/ftplugin/perl6.vim file that contains
|
||||
" set isfname-=:
|
||||
set isfname+=:
|
||||
setlocal iskeyword=48-57,_,A-Z,a-z,:,-
|
||||
|
||||
" Set this once, globally.
|
||||
if !exists("perlpath")
|
||||
if executable("perl6")
|
||||
try
|
||||
if &shellxquote != '"'
|
||||
let perlpath = system('perl6 -e "@*INC.join(q/,/).say"')
|
||||
else
|
||||
let perlpath = system("perl6 -e '@*INC.join(q/,/).say'")
|
||||
endif
|
||||
let perlpath = substitute(perlpath,',.$',',,','')
|
||||
catch /E145:/
|
||||
let perlpath = ".,,"
|
||||
endtry
|
||||
else
|
||||
" If we can't call perl to get its path, just default to using the
|
||||
" current directory and the directory of the current file.
|
||||
let perlpath = ".,,"
|
||||
endif
|
||||
endif
|
||||
|
||||
let &l:path=perlpath
|
||||
"---------------------------------------------
|
||||
|
||||
" Undo the stuff we changed.
|
||||
let b:undo_ftplugin = "setlocal fo< com< cms< inc< inex< def< isk<" .
|
||||
\ " | unlet! b:browsefilter"
|
||||
|
||||
" Restore the saved compatibility options.
|
||||
let &cpo = s:save_cpo
|
||||
unlet s:save_cpo
|
||||
45
ftplugin/rust.vim
Normal file
45
ftplugin/rust.vim
Normal file
@@ -0,0 +1,45 @@
|
||||
" Vim syntax file
|
||||
" Language: Rust
|
||||
" Maintainer: Chris Morgan <me@chrismorgan.info>
|
||||
" Last Change: 2013 Jul 10
|
||||
|
||||
if exists("b:did_ftplugin")
|
||||
finish
|
||||
endif
|
||||
let b:did_ftplugin = 1
|
||||
|
||||
" The rust source code at present seems to typically omit a leader on /*!
|
||||
" comments, so we'll use that as our default, but make it easy to switch.
|
||||
" This does not affect indentation at all (I tested it with and without
|
||||
" leader), merely whether a leader is inserted by default or not.
|
||||
if exists("g:rust_bang_comment_leader") && g:rust_bang_comment_leader == 1
|
||||
" Why is the `,s0:/*,mb:\ ,ex:*/` there, you ask? I don't understand why,
|
||||
" but without it, */ gets indented one space even if there were no
|
||||
" leaders. I'm fairly sure that's a Vim bug.
|
||||
setlocal comments=s1:/*,mb:*,ex:*/,s0:/*,mb:\ ,ex:*/,:///,://!,://
|
||||
else
|
||||
setlocal comments=s0:/*!,m:\ ,ex:*/,s1:/*,mb:*,ex:*/,:///,://!,://
|
||||
endif
|
||||
setlocal commentstring=//%s
|
||||
setlocal formatoptions-=t formatoptions+=croqnl
|
||||
" j was only added in 7.3.541, so stop complaints about its nonexistence
|
||||
silent! setlocal formatoptions+=j
|
||||
|
||||
" This includeexpr isn't perfect, but it's a good start
|
||||
setlocal includeexpr=substitute(v:fname,'::','/','g')
|
||||
|
||||
" NOT adding .rc as it's being phased out (0.7)
|
||||
setlocal suffixesadd=.rs
|
||||
|
||||
if exists("g:ftplugin_rust_source_path")
|
||||
let &l:path=g:ftplugin_rust_source_path . ',' . &l:path
|
||||
endif
|
||||
|
||||
if exists("g:loaded_delimitMate")
|
||||
if exists("b:delimitMate_excluded_regions")
|
||||
let b:rust_original_delimitMate_excluded_regions = b:delimitMate_excluded_regions
|
||||
endif
|
||||
let b:delimitMate_excluded_regions = delimitMate#Get("excluded_regions") . ',rustLifetimeCandidate,rustGenericLifetimeCandidate'
|
||||
endif
|
||||
|
||||
let b:undo_ftplugin = "setlocal formatoptions< comments< commentstring< includeexpr< suffixesadd< | if exists('b:rust_original_delimitMate_excluded_regions') | let b:delimitMate_excluded_regions = b:rust_original_delimitMate_excluded_regions | unlet b:rust_original_delimitMate_excluded_regions | elseif exists('b:delimitMate_excluded_regions') | unlet b:delimitMate_excluded_regions | endif"
|
||||
33
ftplugin/tex_LatexBox.vim
Normal file
33
ftplugin/tex_LatexBox.vim
Normal file
@@ -0,0 +1,33 @@
|
||||
" LaTeX Box plugin for Vim
|
||||
" Maintainer: David Munger
|
||||
" Email: mungerd@gmail.com
|
||||
" Version: 0.9.6
|
||||
|
||||
if exists('*fnameescape')
|
||||
function! s:FNameEscape(s)
|
||||
return fnameescape(a:s)
|
||||
endfunction
|
||||
else
|
||||
function! s:FNameEscape(s)
|
||||
return a:s
|
||||
endfunction
|
||||
endif
|
||||
|
||||
if !exists('b:LatexBox_loaded')
|
||||
|
||||
let prefix = expand('<sfile>:p:h') . '/latex-box/'
|
||||
|
||||
execute 'source ' . s:FNameEscape(prefix . 'common.vim')
|
||||
execute 'source ' . s:FNameEscape(prefix . 'complete.vim')
|
||||
execute 'source ' . s:FNameEscape(prefix . 'motion.vim')
|
||||
execute 'source ' . s:FNameEscape(prefix . 'latexmk.vim')
|
||||
execute 'source ' . s:FNameEscape(prefix . 'folding.vim')
|
||||
" added by AH to add main.tex file finder
|
||||
execute 'source ' . s:FNameEscape(prefix . 'findmain.vim')
|
||||
execute 'source ' . s:FNameEscape(prefix . 'mappings.vim')
|
||||
|
||||
let b:LatexBox_loaded = 1
|
||||
|
||||
endif
|
||||
|
||||
" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
|
||||
@@ -1,13 +0,0 @@
|
||||
" LaTeX filetype
|
||||
" Language: LaTeX (ft=tex)
|
||||
" Maintainer: Srinath Avadhanula
|
||||
" Email: srinath@fastmail.fm
|
||||
|
||||
if !exists('s:initLatexSuite')
|
||||
let s:initLatexSuite = 1
|
||||
exec 'so '.fnameescape(expand('<sfile>:p:h').'/latex-suite/main.vim')
|
||||
|
||||
silent! do LatexSuite User LatexSuiteInitPost
|
||||
endif
|
||||
|
||||
silent! do LatexSuite User LatexSuiteFileType
|
||||
13
ftplugin/tt2html.vim
Normal file
13
ftplugin/tt2html.vim
Normal file
@@ -0,0 +1,13 @@
|
||||
" Language: TT2 embedded with HTML
|
||||
" Maintainer: vim-perl <vim-perl@googlegroups.com>
|
||||
" Homepage: http://github.com/vim-perl/vim-perl
|
||||
" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
|
||||
" Last Change: {{LAST_CHANGE}}
|
||||
|
||||
" Only do this when not done yet for this buffer
|
||||
if exists("b:did_ftplugin")
|
||||
finish
|
||||
endif
|
||||
|
||||
" Just use the HTML plugin for now.
|
||||
runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
|
||||
8
ftplugin/typescript.vim
Normal file
8
ftplugin/typescript.vim
Normal file
@@ -0,0 +1,8 @@
|
||||
compiler typescript
|
||||
|
||||
setlocal autoindent
|
||||
setlocal cindent
|
||||
setlocal smartindent
|
||||
setlocal indentexpr&
|
||||
|
||||
setlocal commentstring=//\ %s
|
||||
14
ftplugin/xs.vim
Normal file
14
ftplugin/xs.vim
Normal file
@@ -0,0 +1,14 @@
|
||||
" Vim filetype plugin file
|
||||
" Language: XS (Perl extension interface language)
|
||||
" Maintainer: vim-perl <vim-perl@googlegroups.com>
|
||||
" Homepage: http://github.com/vim-perl/vim-perl
|
||||
" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
|
||||
" Last Change: {{LAST_CHANGE}}
|
||||
|
||||
" Only do this when not done yet for this buffer
|
||||
if exists("b:did_ftplugin")
|
||||
finish
|
||||
endif
|
||||
|
||||
" Just use the C plugin for now.
|
||||
runtime! ftplugin/c.vim ftplugin/c_*.vim ftplugin/c/*.vim
|
||||
@@ -99,6 +99,16 @@ let s:SYNTAX_COMMENT = 'coffee\%(Comment\|BlockComment\|HeregexComment\)'
|
||||
" Syntax names for strings and comments
|
||||
let s:SYNTAX_STRING_COMMENT = s:SYNTAX_STRING . '\|' . s:SYNTAX_COMMENT
|
||||
|
||||
" Compatibility code for shiftwidth() as recommended by the docs, but modified
|
||||
" so there isn't as much of a penalty if shiftwidth() exists.
|
||||
if exists('*shiftwidth')
|
||||
let s:ShiftWidth = function('shiftwidth')
|
||||
else
|
||||
function! s:ShiftWidth()
|
||||
return &shiftwidth
|
||||
endfunction
|
||||
endif
|
||||
|
||||
" Get the linked syntax name of a character.
|
||||
function! s:SyntaxName(lnum, col)
|
||||
return synIDattr(synID(a:lnum, a:col, 1), 'name')
|
||||
@@ -329,16 +339,16 @@ function! GetCoffeeIndent(curlnum)
|
||||
|
||||
" Always indent after these operators.
|
||||
if prevline =~ s:BEGIN_BLOCK_OP
|
||||
return indent(prevnlnum) + shiftwidth()
|
||||
return indent(prevnlnum) + s:ShiftWidth()
|
||||
endif
|
||||
|
||||
" Indent if the previous line starts a function block, but don't force
|
||||
" indenting if the line is non-blank (for empty function bodies.)
|
||||
if prevline =~ s:FUNCTION
|
||||
if strlen(getline(a:curlnum)) > indent(a:curlnum)
|
||||
return min([indent(prevnlnum) + shiftwidth(), indent(a:curlnum)])
|
||||
return min([indent(prevnlnum) + s:ShiftWidth(), indent(a:curlnum)])
|
||||
else
|
||||
return indent(prevnlnum) + shiftwidth()
|
||||
return indent(prevnlnum) + s:ShiftWidth()
|
||||
endif
|
||||
endif
|
||||
|
||||
@@ -365,7 +375,7 @@ function! GetCoffeeIndent(curlnum)
|
||||
endif
|
||||
|
||||
" Otherwise indent a level.
|
||||
return indent(prevnlnum) + shiftwidth()
|
||||
return indent(prevnlnum) + s:ShiftWidth()
|
||||
endif
|
||||
|
||||
" Check if the previous line starts with a keyword that begins a block.
|
||||
@@ -374,7 +384,7 @@ function! GetCoffeeIndent(curlnum)
|
||||
" isn't a single-line statement.
|
||||
if curline !~ '\C^\<then\>' && !s:SearchCode(prevnlnum, '\C\<then\>') &&
|
||||
\ prevline !~ s:SINGLE_LINE_ELSE
|
||||
return indent(prevnlnum) + shiftwidth()
|
||||
return indent(prevnlnum) + s:ShiftWidth()
|
||||
else
|
||||
exec 'return' s:GetDefaultPolicy(a:curlnum)
|
||||
endif
|
||||
@@ -383,7 +393,7 @@ function! GetCoffeeIndent(curlnum)
|
||||
" Indent a dot access if it's the first.
|
||||
if curline =~ s:DOT_ACCESS
|
||||
if prevline !~ s:DOT_ACCESS
|
||||
return indent(prevnlnum) + shiftwidth()
|
||||
return indent(prevnlnum) + s:ShiftWidth()
|
||||
else
|
||||
exec 'return' s:GetDefaultPolicy(a:curlnum)
|
||||
endif
|
||||
@@ -396,7 +406,7 @@ function! GetCoffeeIndent(curlnum)
|
||||
\ s:SearchCode(prevnlnum, '\C\<then\>') &&
|
||||
\ !s:SearchCode(prevnlnum, s:CONTAINED_THEN)
|
||||
" Don't force indenting.
|
||||
return min([indent(a:curlnum), indent(prevnlnum) - shiftwidth()])
|
||||
return min([indent(a:curlnum), indent(prevnlnum) - s:ShiftWidth()])
|
||||
else
|
||||
exec 'return' s:GetDefaultPolicy(a:curlnum)
|
||||
endif
|
||||
@@ -410,7 +420,7 @@ function! GetCoffeeIndent(curlnum)
|
||||
" If inside brackets, indent relative to the brackets, but don't outdent an
|
||||
" already indented line.
|
||||
if matchlnum
|
||||
return max([indent(a:curlnum), indent(matchlnum) + shiftwidth()])
|
||||
return max([indent(a:curlnum), indent(matchlnum) + s:ShiftWidth()])
|
||||
endif
|
||||
|
||||
" No special rules applied, so use the default policy.
|
||||
|
||||
@@ -39,8 +39,15 @@ function! GetElixirIndent(...)
|
||||
endif
|
||||
|
||||
if synIDattr(synID(v:lnum, 1, 1), "name") !~ '\(Comment\|String\)$'
|
||||
let splited_line = split(getline(lnum), '\zs')
|
||||
let opened_symbol = 0
|
||||
let opened_symbol += count(splited_line, '[') - count(splited_line, ']')
|
||||
let opened_symbol += count(splited_line, '{') - count(splited_line, '}')
|
||||
|
||||
let ind += opened_symbol * &sw
|
||||
|
||||
if getline(lnum) =~ s:indent_keywords .
|
||||
\ '\|^\s*\%(^.*[\[{(].*[,:]\|.*->\)$'
|
||||
\ '\|^\s*\%(.*->\)$'
|
||||
let ind += &sw
|
||||
endif
|
||||
|
||||
|
||||
@@ -1,58 +1,207 @@
|
||||
" Vim indent file
|
||||
" Language: Erlang
|
||||
" Author: Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
|
||||
" License: Vim license
|
||||
" Version: 2013/09/11
|
||||
" Language: Erlang
|
||||
" Maintainer: Csaba Hoch <csaba.hoch@gmail.com>
|
||||
" Contributor: Edwin Fine <efine145_nospam01 at usa dot net>
|
||||
" Contributor: Pawel 'kTT' Salata <rockplayer.pl@gmail.com>
|
||||
" Last Change: 2010 Aug 30
|
||||
|
||||
if !exists('g:erlang_force_use_vimerl_indent')
|
||||
let g:erlang_force_use_vimerl_indent = 0
|
||||
endif
|
||||
|
||||
if exists('b:did_indent') || (v:version >= 704 && !g:erlang_force_use_vimerl_indent)
|
||||
finish
|
||||
else
|
||||
let b:did_indent = 1
|
||||
" Only load this indent file when no other was loaded.
|
||||
if exists("b:did_indent")
|
||||
finish
|
||||
endif
|
||||
let b:did_indent = 1
|
||||
|
||||
setlocal indentexpr=ErlangIndent()
|
||||
setlocal indentkeys=!^F,o,O,=),=},=],=>>,=of,=catch,=after,=end
|
||||
setlocal indentkeys+==after,=end,=catch,=),=],=}
|
||||
|
||||
if exists('*ErlangIndent')
|
||||
finish
|
||||
" Only define the functions once.
|
||||
if exists("*ErlangIndent")
|
||||
finish
|
||||
endif
|
||||
|
||||
let s:erlang_indent_file = expand('<sfile>:p:h') . '/erlang_indent.erl'
|
||||
if filewritable(expand('<sfile>:p:h')) == 2
|
||||
let s:in_fifo = expand('<sfile>:p:h') . '/vimerl_in_fifo.' . getpid()
|
||||
let s:out_fifo = expand('<sfile>:p:h') . '/vimerl_out_fifo.' . getpid()
|
||||
else
|
||||
let s:in_fifo = '/tmp/vimerl_in_fifo.' . getpid()
|
||||
let s:out_fifo = '/tmp/vimerl_out_fifo.' . getpid()
|
||||
endif
|
||||
" The function go through the whole line, analyses it and sets the indentation
|
||||
" (ind variable).
|
||||
" l: the number of the line to be examined.
|
||||
function s:ErlangIndentAfterLine(l)
|
||||
let i = 0 " the index of the current character in the line
|
||||
let length = strlen(a:l) " the length of the line
|
||||
let ind = 0 " how much should be the difference between the indentation of
|
||||
" the current line and the indentation of the next line?
|
||||
" e.g. +1: the indentation of the next line should be equal to
|
||||
" the indentation of the current line plus one shiftwidth
|
||||
let lastFun = 0 " the last token was a 'fun'
|
||||
let lastReceive = 0 " the last token was a 'receive'; needed for 'after'
|
||||
let lastHashMark = 0 " the last token was a 'hashmark'
|
||||
|
||||
execute 'silent !mkfifo' s:in_fifo
|
||||
execute 'silent !mkfifo' s:out_fifo
|
||||
execute 'silent !' . s:erlang_indent_file s:out_fifo s:in_fifo '&'
|
||||
" ignore type annotation lines
|
||||
if a:l =~# '^\s*-type'
|
||||
return 0
|
||||
endif
|
||||
|
||||
autocmd VimLeave * call <SID>StopIndenter()
|
||||
while 0<= i && i < length
|
||||
|
||||
function s:StopIndenter()
|
||||
call writefile([], s:out_fifo)
|
||||
call delete(s:in_fifo)
|
||||
call delete(s:out_fifo)
|
||||
" m: the next value of the i
|
||||
if a:l[i] == '%'
|
||||
break
|
||||
elseif a:l[i] == '"'
|
||||
let m = matchend(a:l,'"\%([^"\\]\|\\.\)*"',i)
|
||||
let lastReceive = 0
|
||||
elseif a:l[i] == "'"
|
||||
let m = matchend(a:l,"'[^']*'",i)
|
||||
let lastReceive = 0
|
||||
elseif a:l[i] =~# "[a-z]"
|
||||
let m = matchend(a:l,".[[:alnum:]_]*",i)
|
||||
if lastFun
|
||||
let ind = ind - 1
|
||||
let lastFun = 0
|
||||
let lastReceive = 0
|
||||
elseif a:l[(i):(m-1)] =~# '^\%(case\|if\|try\)$'
|
||||
let ind = ind + 1
|
||||
elseif a:l[(i):(m-1)] =~# '^receive$'
|
||||
let ind = ind + 1
|
||||
let lastReceive = 1
|
||||
elseif a:l[(i):(m-1)] =~# '^begin$'
|
||||
let ind = ind + 2
|
||||
let lastReceive = 0
|
||||
elseif a:l[(i):(m-1)] =~# '^end$'
|
||||
let ind = ind - 2
|
||||
let lastReceive = 0
|
||||
elseif a:l[(i):(m-1)] =~# '^after$'
|
||||
if lastReceive == 0
|
||||
let ind = ind - 1
|
||||
else
|
||||
let ind = ind + 0
|
||||
endif
|
||||
let lastReceive = 0
|
||||
elseif a:l[(i):(m-1)] =~# '^fun$'
|
||||
let ind = ind + 1
|
||||
let lastFun = 1
|
||||
let lastReceive = 0
|
||||
endif
|
||||
elseif a:l[i] =~# "[A-Z_]"
|
||||
let m = matchend(a:l,".[[:alnum:]_]*",i)
|
||||
let lastReceive = 0
|
||||
elseif a:l[i] == '$'
|
||||
let m = i+2
|
||||
let lastReceive = 0
|
||||
elseif a:l[i] == "." && (i+1>=length || a:l[i+1]!~ "[0-9]")
|
||||
let m = i+1
|
||||
if lastHashMark
|
||||
let lastHashMark = 0
|
||||
else
|
||||
let ind = ind - 1
|
||||
endif
|
||||
let lastReceive = 0
|
||||
elseif a:l[i] == '-' && (i+1<length && a:l[i+1]=='>')
|
||||
let m = i+2
|
||||
let ind = ind + 1
|
||||
let lastReceive = 0
|
||||
elseif a:l[i] == ';' && a:l[(i):(length)] !~# '.*->.*'
|
||||
let m = i+1
|
||||
let ind = ind - 1
|
||||
let lastReceive = 0
|
||||
elseif a:l[i] == '#'
|
||||
let m = i+1
|
||||
let lastHashMark = 1
|
||||
elseif a:l[i] =~# '[({[]'
|
||||
let m = i+1
|
||||
let ind = ind + 1
|
||||
let lastFun = 0
|
||||
let lastReceive = 0
|
||||
let lastHashMark = 0
|
||||
elseif a:l[i] =~# '[)}\]]'
|
||||
let m = i+1
|
||||
let ind = ind - 1
|
||||
let lastReceive = 0
|
||||
else
|
||||
let m = i+1
|
||||
endif
|
||||
|
||||
let i = m
|
||||
|
||||
endwhile
|
||||
|
||||
return ind
|
||||
|
||||
endfunction
|
||||
|
||||
function s:FindPrevNonBlankNonComment(lnum)
|
||||
let lnum = prevnonblank(a:lnum)
|
||||
let line = getline(lnum)
|
||||
" continue to search above if the current line begins with a '%'
|
||||
while line =~# '^\s*%.*$'
|
||||
let lnum = prevnonblank(lnum - 1)
|
||||
if 0 == lnum
|
||||
return 0
|
||||
endif
|
||||
let line = getline(lnum)
|
||||
endwhile
|
||||
return lnum
|
||||
endfunction
|
||||
|
||||
function ErlangIndent()
|
||||
if v:lnum == 1
|
||||
return 0
|
||||
else
|
||||
call writefile([v:lnum] + getline(1, v:lnum), s:out_fifo)
|
||||
let indent = split(readfile(s:in_fifo)[0])
|
||||
|
||||
if len(indent) == 1 || !&expandtab
|
||||
return indent[0] * &shiftwidth
|
||||
else
|
||||
return indent[1]
|
||||
endif
|
||||
endif
|
||||
" Find a non-blank line above the current line.
|
||||
let lnum = prevnonblank(v:lnum - 1)
|
||||
|
||||
" Hit the start of the file, use zero indent.
|
||||
if lnum == 0
|
||||
return 0
|
||||
endif
|
||||
|
||||
let prevline = getline(lnum)
|
||||
let currline = getline(v:lnum)
|
||||
|
||||
let ind = indent(lnum) + &sw * s:ErlangIndentAfterLine(prevline)
|
||||
|
||||
" special cases:
|
||||
if prevline =~# '^\s*\%(after\|end\)\>'
|
||||
let ind = ind + 2*&sw
|
||||
endif
|
||||
if currline =~# '^\s*end\>'
|
||||
let ind = ind - 2*&sw
|
||||
endif
|
||||
if currline =~# '^\s*after\>'
|
||||
let plnum = s:FindPrevNonBlankNonComment(v:lnum-1)
|
||||
if getline(plnum) =~# '^[^%]*\<receive\>\s*\%(%.*\)\=$'
|
||||
let ind = ind - 1*&sw
|
||||
" If the 'receive' is not in the same line as the 'after'
|
||||
else
|
||||
let ind = ind - 2*&sw
|
||||
endif
|
||||
endif
|
||||
if prevline =~# '^\s*[)}\]]'
|
||||
let ind = ind + 1*&sw
|
||||
endif
|
||||
if currline =~# '^\s*[)}\]]'
|
||||
let ind = ind - 1*&sw
|
||||
endif
|
||||
if prevline =~# '^\s*\%(catch\)\s*\%(%\|$\)'
|
||||
let ind = ind + 1*&sw
|
||||
endif
|
||||
if currline =~# '^\s*\%(catch\)\s*\%(%\|$\)'
|
||||
let ind = ind - 1*&sw
|
||||
endif
|
||||
|
||||
if ind<0
|
||||
let ind = 0
|
||||
endif
|
||||
return ind
|
||||
|
||||
endfunction
|
||||
|
||||
" TODO:
|
||||
"
|
||||
" f() ->
|
||||
" x("foo
|
||||
" bar")
|
||||
" ,
|
||||
" bad_indent.
|
||||
"
|
||||
" fun
|
||||
" init/0,
|
||||
" bad_indent
|
||||
"
|
||||
" #rec
|
||||
" .field,
|
||||
" bad_indent
|
||||
|
||||
183
indent/perl.vim
Normal file
183
indent/perl.vim
Normal file
@@ -0,0 +1,183 @@
|
||||
" Vim indent file
|
||||
" Language: Perl 5
|
||||
" Maintainer: vim-perl <vim-perl@googlegroups.com>
|
||||
" Homepage: http://github.com/vim-perl/vim-perl
|
||||
" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
|
||||
" Last Change: {{LAST_CHANGE}}
|
||||
|
||||
" Suggestions and improvements by :
|
||||
" Aaron J. Sherman (use syntax for hints)
|
||||
" Artem Chuprina (play nice with folding)
|
||||
|
||||
" TODO things that are not or not properly indented (yet) :
|
||||
" - Continued statements
|
||||
" print "foo",
|
||||
" "bar";
|
||||
" print "foo"
|
||||
" if bar();
|
||||
" - Multiline regular expressions (m//x)
|
||||
" (The following probably needs modifying the perl syntax file)
|
||||
" - qw() lists
|
||||
" - Heredocs with terminators that don't match \I\i*
|
||||
|
||||
" Only load this indent file when no other was loaded.
|
||||
if exists("b:did_indent")
|
||||
finish
|
||||
endif
|
||||
let b:did_indent = 1
|
||||
|
||||
" Is syntax highlighting active ?
|
||||
let b:indent_use_syntax = has("syntax")
|
||||
|
||||
setlocal indentexpr=GetPerlIndent()
|
||||
setlocal indentkeys+=0=,0),0],0=or,0=and
|
||||
if !b:indent_use_syntax
|
||||
setlocal indentkeys+=0=EO
|
||||
endif
|
||||
|
||||
let s:cpo_save = &cpo
|
||||
set cpo-=C
|
||||
|
||||
function! GetPerlIndent()
|
||||
|
||||
" Get the line to be indented
|
||||
let cline = getline(v:lnum)
|
||||
|
||||
" Indent POD markers to column 0
|
||||
if cline =~ '^\s*=\L\@!'
|
||||
return 0
|
||||
endif
|
||||
|
||||
" Don't reindent comments on first column
|
||||
if cline =~ '^#.'
|
||||
return 0
|
||||
endif
|
||||
|
||||
" Get current syntax item at the line's first char
|
||||
let csynid = ''
|
||||
if b:indent_use_syntax
|
||||
let csynid = synIDattr(synID(v:lnum,1,0),"name")
|
||||
endif
|
||||
|
||||
" Don't reindent POD and heredocs
|
||||
if csynid == "perlPOD" || csynid == "perlHereDoc" || csynid =~ "^pod"
|
||||
return indent(v:lnum)
|
||||
endif
|
||||
|
||||
" Indent end-of-heredocs markers to column 0
|
||||
if b:indent_use_syntax
|
||||
" Assumes that an end-of-heredoc marker matches \I\i* to avoid
|
||||
" confusion with other types of strings
|
||||
if csynid == "perlStringStartEnd" && cline =~ '^\I\i*$'
|
||||
return 0
|
||||
endif
|
||||
else
|
||||
" Without syntax hints, assume that end-of-heredocs markers begin with EO
|
||||
if cline =~ '^\s*EO'
|
||||
return 0
|
||||
endif
|
||||
endif
|
||||
|
||||
" Now get the indent of the previous perl line.
|
||||
|
||||
" Find a non-blank line above the current line.
|
||||
let lnum = prevnonblank(v:lnum - 1)
|
||||
" Hit the start of the file, use zero indent.
|
||||
if lnum == 0
|
||||
return 0
|
||||
endif
|
||||
let line = getline(lnum)
|
||||
let ind = indent(lnum)
|
||||
" Skip heredocs, POD, and comments on 1st column
|
||||
if b:indent_use_syntax
|
||||
let skippin = 2
|
||||
while skippin
|
||||
let synid = synIDattr(synID(lnum,1,0),"name")
|
||||
if (synid == "perlStringStartEnd" && line =~ '^\I\i*$')
|
||||
\ || (skippin != 2 && synid == "perlPOD")
|
||||
\ || (skippin != 2 && synid == "perlHereDoc")
|
||||
\ || synid == "perlComment"
|
||||
\ || synid =~ "^pod"
|
||||
let lnum = prevnonblank(lnum - 1)
|
||||
if lnum == 0
|
||||
return 0
|
||||
endif
|
||||
let line = getline(lnum)
|
||||
let ind = indent(lnum)
|
||||
let skippin = 1
|
||||
else
|
||||
let skippin = 0
|
||||
endif
|
||||
endwhile
|
||||
else
|
||||
if line =~ "^EO"
|
||||
let lnum = search("<<[\"']\\=EO", "bW")
|
||||
let line = getline(lnum)
|
||||
let ind = indent(lnum)
|
||||
endif
|
||||
endif
|
||||
|
||||
" Indent blocks enclosed by {}, (), or []
|
||||
if b:indent_use_syntax
|
||||
" Find a real opening brace
|
||||
" NOTE: Unlike Perl character classes, we do NOT need to escape the
|
||||
" closing brackets with a backslash. Doing so just puts a backslash
|
||||
" in the character class and causes sorrow. Instead, put the closing
|
||||
" bracket as the first character in the class.
|
||||
let braceclass = '[][(){}]'
|
||||
let bracepos = match(line, braceclass, matchend(line, '^\s*[])}]'))
|
||||
while bracepos != -1
|
||||
let synid = synIDattr(synID(lnum, bracepos + 1, 0), "name")
|
||||
" If the brace is highlighted in one of those groups, indent it.
|
||||
" 'perlHereDoc' is here only to handle the case '&foo(<<EOF)'.
|
||||
if synid == ""
|
||||
\ || synid == "perlMatchStartEnd"
|
||||
\ || synid == "perlHereDoc"
|
||||
\ || synid == "perlBraces"
|
||||
\ || synid =~ "^perlFiledescStatement"
|
||||
\ || synid =~ '^perl\(Sub\|Block\|Package\)Fold'
|
||||
let brace = strpart(line, bracepos, 1)
|
||||
if brace == '(' || brace == '{' || brace == '['
|
||||
let ind = ind + &sw
|
||||
else
|
||||
let ind = ind - &sw
|
||||
endif
|
||||
endif
|
||||
let bracepos = match(line, braceclass, bracepos + 1)
|
||||
endwhile
|
||||
let bracepos = matchend(cline, '^\s*[])}]')
|
||||
if bracepos != -1
|
||||
let synid = synIDattr(synID(v:lnum, bracepos, 0), "name")
|
||||
if synid == ""
|
||||
\ || synid == "perlMatchStartEnd"
|
||||
\ || synid == "perlBraces"
|
||||
\ || synid =~ '^perl\(Sub\|Block\|Package\)Fold'
|
||||
let ind = ind - &sw
|
||||
endif
|
||||
endif
|
||||
else
|
||||
if line =~ '[{[(]\s*\(#[^])}]*\)\=$'
|
||||
let ind = ind + &sw
|
||||
endif
|
||||
if cline =~ '^\s*[])}]'
|
||||
let ind = ind - &sw
|
||||
endif
|
||||
endif
|
||||
|
||||
" Indent lines that begin with 'or' or 'and'
|
||||
if cline =~ '^\s*\(or\|and\)\>'
|
||||
if line !~ '^\s*\(or\|and\)\>'
|
||||
let ind = ind + &sw
|
||||
endif
|
||||
elseif line =~ '^\s*\(or\|and\)\>'
|
||||
let ind = ind - &sw
|
||||
endif
|
||||
|
||||
return ind
|
||||
|
||||
endfunction
|
||||
|
||||
let &cpo = s:cpo_save
|
||||
unlet s:cpo_save
|
||||
|
||||
" vim:ts=8:sts=4:sw=4:expandtab:ft=vim
|
||||
132
indent/perl6.vim
Normal file
132
indent/perl6.vim
Normal file
@@ -0,0 +1,132 @@
|
||||
" Vim indent file
|
||||
" Language: Perl 6
|
||||
" Maintainer: vim-perl <vim-perl@googlegroups.com>
|
||||
" Homepage: http://github.com/vim-perl/vim-perl
|
||||
" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
|
||||
" Last Change: {{LAST_CHANGE}}
|
||||
" Contributors: Andy Lester <andy@petdance.com>
|
||||
" Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
|
||||
"
|
||||
" Adapted from indent/perl.vim by Rafael Garcia-Suarez <rgarciasuarez@free.fr>
|
||||
|
||||
" Suggestions and improvements by :
|
||||
" Aaron J. Sherman (use syntax for hints)
|
||||
" Artem Chuprina (play nice with folding)
|
||||
" TODO:
|
||||
" This file still relies on stuff from the Perl 5 syntax file, which Perl 6
|
||||
" does not use.
|
||||
"
|
||||
" Things that are not or not properly indented (yet) :
|
||||
" - Continued statements
|
||||
" print "foo",
|
||||
" "bar";
|
||||
" print "foo"
|
||||
" if bar();
|
||||
" - Multiline regular expressions (m//x)
|
||||
" (The following probably needs modifying the perl syntax file)
|
||||
" - qw() lists
|
||||
" - Heredocs with terminators that don't match \I\i*
|
||||
|
||||
" Only load this indent file when no other was loaded.
|
||||
if exists("b:did_indent")
|
||||
finish
|
||||
endif
|
||||
let b:did_indent = 1
|
||||
|
||||
" Is syntax highlighting active ?
|
||||
let b:indent_use_syntax = has("syntax")
|
||||
|
||||
setlocal indentexpr=GetPerl6Indent()
|
||||
|
||||
" we reset it first because the Perl 5 indent file might have been loaded due
|
||||
" to a .pl/pm file extension, and indent files don't clean up afterwards
|
||||
setlocal indentkeys&
|
||||
|
||||
setlocal indentkeys+=0=,0),0],0>,0»,0=or,0=and
|
||||
if !b:indent_use_syntax
|
||||
setlocal indentkeys+=0=EO
|
||||
endif
|
||||
|
||||
let s:cpo_save = &cpo
|
||||
set cpo-=C
|
||||
|
||||
function! GetPerl6Indent()
|
||||
|
||||
" Get the line to be indented
|
||||
let cline = getline(v:lnum)
|
||||
|
||||
" Indent POD markers to column 0
|
||||
if cline =~ '^\s*=\L\@!'
|
||||
return 0
|
||||
endif
|
||||
|
||||
" Don't reindent coments on first column
|
||||
if cline =~ '^#'
|
||||
return 0
|
||||
endif
|
||||
|
||||
" Get current syntax item at the line's first char
|
||||
let csynid = ''
|
||||
if b:indent_use_syntax
|
||||
let csynid = synIDattr(synID(v:lnum,1,0),"name")
|
||||
endif
|
||||
|
||||
" Don't reindent POD and heredocs
|
||||
if csynid =~ "^p6Pod"
|
||||
return indent(v:lnum)
|
||||
endif
|
||||
|
||||
|
||||
" Now get the indent of the previous perl line.
|
||||
|
||||
" Find a non-blank line above the current line.
|
||||
let lnum = prevnonblank(v:lnum - 1)
|
||||
" Hit the start of the file, use zero indent.
|
||||
if lnum == 0
|
||||
return 0
|
||||
endif
|
||||
let line = getline(lnum)
|
||||
let ind = indent(lnum)
|
||||
" Skip heredocs, POD, and comments on 1st column
|
||||
if b:indent_use_syntax
|
||||
let skippin = 2
|
||||
while skippin
|
||||
let synid = synIDattr(synID(lnum,1,0),"name")
|
||||
if (synid =~ "^p6Pod" || synid =~ "p6Comment")
|
||||
let lnum = prevnonblank(lnum - 1)
|
||||
if lnum == 0
|
||||
return 0
|
||||
endif
|
||||
let line = getline(lnum)
|
||||
let ind = indent(lnum)
|
||||
let skippin = 1
|
||||
else
|
||||
let skippin = 0
|
||||
endif
|
||||
endwhile
|
||||
endif
|
||||
|
||||
if line =~ '[<«\[{(]\s*\(#[^)}\]»>]*\)\=$'
|
||||
let ind = ind + &sw
|
||||
endif
|
||||
if cline =~ '^\s*[)}\]»>]'
|
||||
let ind = ind - &sw
|
||||
endif
|
||||
|
||||
" Indent lines that begin with 'or' or 'and'
|
||||
if cline =~ '^\s*\(or\|and\)\>'
|
||||
if line !~ '^\s*\(or\|and\)\>'
|
||||
let ind = ind + &sw
|
||||
endif
|
||||
elseif line =~ '^\s*\(or\|and\)\>'
|
||||
let ind = ind - &sw
|
||||
endif
|
||||
|
||||
return ind
|
||||
|
||||
endfunction
|
||||
|
||||
let &cpo = s:cpo_save
|
||||
unlet s:cpo_save
|
||||
|
||||
" vim:ts=8:sts=4:sw=4:expandtab:ft=vim
|
||||
147
indent/rust.vim
Normal file
147
indent/rust.vim
Normal file
@@ -0,0 +1,147 @@
|
||||
" Vim indent file
|
||||
" Language: Rust
|
||||
" Author: Chris Morgan <me@chrismorgan.info>
|
||||
" Last Change: 2013 Jul 10
|
||||
|
||||
" Only load this indent file when no other was loaded.
|
||||
if exists("b:did_indent")
|
||||
finish
|
||||
endif
|
||||
let b:did_indent = 1
|
||||
|
||||
setlocal cindent
|
||||
setlocal cinoptions=L0,(0,Ws,JN,j1
|
||||
setlocal cinkeys=0{,0},!^F,o,O,0[,0]
|
||||
" Don't think cinwords will actually do anything at all... never mind
|
||||
setlocal cinwords=do,for,if,else,while,loop,impl,mod,unsafe,trait,struct,enum,fn,extern
|
||||
|
||||
" Some preliminary settings
|
||||
setlocal nolisp " Make sure lisp indenting doesn't supersede us
|
||||
setlocal autoindent " indentexpr isn't much help otherwise
|
||||
" Also do indentkeys, otherwise # gets shoved to column 0 :-/
|
||||
setlocal indentkeys=0{,0},!^F,o,O,0[,0]
|
||||
|
||||
setlocal indentexpr=GetRustIndent(v:lnum)
|
||||
|
||||
" Only define the function once.
|
||||
if exists("*GetRustIndent")
|
||||
finish
|
||||
endif
|
||||
|
||||
" Come here when loading the script the first time.
|
||||
|
||||
function s:get_line_trimmed(lnum)
|
||||
" Get the line and remove a trailing comment.
|
||||
" Use syntax highlighting attributes when possible.
|
||||
" NOTE: this is not accurate; /* */ or a line continuation could trick it
|
||||
let line = getline(a:lnum)
|
||||
let line_len = strlen(line)
|
||||
if has('syntax_items')
|
||||
" If the last character in the line is a comment, do a binary search for
|
||||
" the start of the comment. synID() is slow, a linear search would take
|
||||
" too long on a long line.
|
||||
if synIDattr(synID(a:lnum, line_len, 1), "name") =~ "Comment\|Todo"
|
||||
let min = 1
|
||||
let max = line_len
|
||||
while min < max
|
||||
let col = (min + max) / 2
|
||||
if synIDattr(synID(a:lnum, col, 1), "name") =~ "Comment\|Todo"
|
||||
let max = col
|
||||
else
|
||||
let min = col + 1
|
||||
endif
|
||||
endwhile
|
||||
let line = strpart(line, 0, min - 1)
|
||||
endif
|
||||
return substitute(line, "\s*$", "", "")
|
||||
else
|
||||
" Sorry, this is not complete, nor fully correct (e.g. string "//").
|
||||
" Such is life.
|
||||
return substitute(line, "\s*//.*$", "", "")
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function GetRustIndent(lnum)
|
||||
|
||||
" Starting assumption: cindent (called at the end) will do it right
|
||||
" normally. We just want to fix up a few cases.
|
||||
|
||||
let line = getline(a:lnum)
|
||||
|
||||
if has('syntax_items')
|
||||
let synname = synIDattr(synID(a:lnum, 1, 1), "name")
|
||||
if synname == "rustString"
|
||||
" If the start of the line is in a string, don't change the indent
|
||||
return -1
|
||||
elseif synname =~ "\\(Comment\\|Todo\\)"
|
||||
\ && line !~ "^\\s*/\\*" " not /* opening line
|
||||
if synname =~ "CommentML" " multi-line
|
||||
if line !~ "^\\s*\\*" && getline(a:lnum - 1) =~ "^\\s*/\\*"
|
||||
" This is (hopefully) the line after a /*, and it has no
|
||||
" leader, so the correct indentation is that of the
|
||||
" previous line.
|
||||
return GetRustIndent(a:lnum - 1)
|
||||
endif
|
||||
endif
|
||||
" If it's in a comment, let cindent take care of it now. This is
|
||||
" for cases like "/*" where the next line should start " * ", not
|
||||
" "* " as the code below would otherwise cause for module scope
|
||||
" Fun fact: " /*\n*\n*/" takes two calls to get right!
|
||||
return cindent(a:lnum)
|
||||
endif
|
||||
endif
|
||||
|
||||
" cindent gets second and subsequent match patterns/struct members wrong,
|
||||
" as it treats the comma as indicating an unfinished statement::
|
||||
"
|
||||
" match a {
|
||||
" b => c,
|
||||
" d => e,
|
||||
" f => g,
|
||||
" };
|
||||
|
||||
" Search backwards for the previous non-empty line.
|
||||
let prevline = s:get_line_trimmed(prevnonblank(a:lnum - 1))
|
||||
if prevline[len(prevline) - 1] == ","
|
||||
\ && s:get_line_trimmed(a:lnum) !~ "^\\s*[\\[\\]{}]"
|
||||
" Oh ho! The previous line ended in a comma! I bet cindent will try to
|
||||
" take this too far... For now, let's use the previous line's indent
|
||||
return GetRustIndent(a:lnum - 1)
|
||||
endif
|
||||
|
||||
" cindent doesn't do the module scope well at all; e.g.::
|
||||
"
|
||||
" static FOO : &'static [bool] = [
|
||||
" true,
|
||||
" false,
|
||||
" false,
|
||||
" true,
|
||||
" ];
|
||||
"
|
||||
" uh oh, next statement is indented further!
|
||||
|
||||
" Note that this does *not* apply the line continuation pattern properly;
|
||||
" that's too hard to do correctly for my liking at present, so I'll just
|
||||
" start with these two main cases (square brackets and not returning to
|
||||
" column zero)
|
||||
|
||||
call cursor(a:lnum, 1)
|
||||
if searchpair('{\|(', '', '}\|)', 'nbW') == 0
|
||||
if searchpair('\[', '', '\]', 'nbW') == 0
|
||||
" Global scope, should be zero
|
||||
return 0
|
||||
else
|
||||
" At the module scope, inside square brackets only
|
||||
"if getline(a:lnum)[0] == ']' || search('\[', '', '\]', 'nW') == a:lnum
|
||||
if line =~ "^\\s*]"
|
||||
" It's the closing line, dedent it
|
||||
return 0
|
||||
else
|
||||
return &shiftwidth
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
" Fall back on cindent, which does it mostly right
|
||||
return cindent(a:lnum)
|
||||
endfunction
|
||||
339
indent/tex.vim
339
indent/tex.vim
@@ -1,262 +1,93 @@
|
||||
" Vim indent file
|
||||
" Language: LaTeX
|
||||
" Maintainer: Johannes Tanzler <johannes.tanzler@gmail.com>
|
||||
" Version: 0.5
|
||||
" Created: Sat, 16 Feb 2002 16:50:19 +0100
|
||||
" Last Change: Mar, 27 Jun 2011 11:46:35 +0200
|
||||
" Last Update: 18th feb 2002, by LH :
|
||||
" (*) better support for the option
|
||||
" (*) use some regex instead of several '||'.
|
||||
" Oct 9th, 2003, by JT:
|
||||
" (*) don't change indentation of lines starting with '%'
|
||||
" 2005/06/15, Moshe Kaminsky <kaminsky@math.huji.ac.il>
|
||||
" (*) New variables:
|
||||
" g:tex_items, g:tex_itemize_env, g:tex_noindent_env
|
||||
" 2011/3/6, by Zhou Yi Chao <broken.zhou@gmail.com>
|
||||
" (*) Don't change indentation of lines starting with '%'
|
||||
" I don't see any code with '%' and it doesn't work properly
|
||||
" so I add some code.
|
||||
" (*) New features: Add smartindent-like indent
|
||||
" for "{}" and "[]".
|
||||
" (*) New variables: g:tex_indent_brace
|
||||
"
|
||||
" Options: {{{
|
||||
"
|
||||
" To set the following options (ok, currently it's just one), add a line like
|
||||
" let g:tex_indent_items = 1
|
||||
" to your ~/.vimrc.
|
||||
"
|
||||
" * g:tex_indent_brace
|
||||
"
|
||||
" If this variable is unset or non-zero, it will use smartindent-like style
|
||||
" for "{}" and "[]"
|
||||
"
|
||||
" * g:tex_indent_items
|
||||
"
|
||||
" If this variable is set, item-environments are indented like Emacs does
|
||||
" it, i.e., continuation lines are indented with a shiftwidth.
|
||||
"
|
||||
" NOTE: I've already set the variable below; delete the corresponding line
|
||||
" if you don't like this behaviour.
|
||||
"
|
||||
" Per default, it is unset.
|
||||
"
|
||||
" set unset
|
||||
" ----------------------------------------------------------------
|
||||
" \begin{itemize} \begin{itemize}
|
||||
" \item blablabla \item blablabla
|
||||
" bla bla bla bla bla bla
|
||||
" \item blablabla \item blablabla
|
||||
" bla bla bla bla bla bla
|
||||
" \end{itemize} \end{itemize}
|
||||
"
|
||||
"
|
||||
" * g:tex_items
|
||||
"
|
||||
" A list of tokens to be considered as commands for the beginning of an item
|
||||
" command. The tokens should be separated with '\|'. The initial '\' should
|
||||
" be escaped. The default is '\\bibitem\|\\item'.
|
||||
"
|
||||
" * g:tex_itemize_env
|
||||
"
|
||||
" A list of environment names, separated with '\|', where the items (item
|
||||
" commands matching g:tex_items) may appear. The default is
|
||||
" 'itemize\|description\|enumerate\|thebibliography'.
|
||||
"
|
||||
" * g:tex_noindent_env
|
||||
"
|
||||
" A list of environment names. separated with '\|', where no indentation is
|
||||
" required. The default is 'document\|verbatim\|comment\|lstlisting'.
|
||||
"
|
||||
" }}}
|
||||
"
|
||||
" License: {{{
|
||||
" Copyright (c) 2002-2011 Johannes Tanzler <johannes.tanzler@gmail.com>
|
||||
" LaTeX indent file (part of LaTeX Box)
|
||||
" Maintainer: David Munger (mungerd@gmail.com)
|
||||
|
||||
" Permission is hereby granted, free of charge, to any person obtaining
|
||||
" a copy of this software and associated documentation files (the
|
||||
" "Software"), to deal in the Software without restriction, including
|
||||
" without limitation the rights to use, copy, modify, merge, publish,
|
||||
" distribute, sublicense, and/or sell copies of the Software, and to
|
||||
" permit persons to whom the Software is furnished to do so, subject to
|
||||
" the following conditions:
|
||||
"
|
||||
" The above copyright notice and this permission notice shall be included
|
||||
" in all copies or substantial portions of the Software.
|
||||
"
|
||||
" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
" IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
" CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
" TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
" SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
" }}}
|
||||
|
||||
if exists("b:did_indent")
|
||||
finish
|
||||
if exists("g:LatexBox_custom_indent") && ! g:LatexBox_custom_indent
|
||||
finish
|
||||
endif
|
||||
if exists("b:did_indent")
|
||||
finish
|
||||
endif
|
||||
|
||||
let b:did_indent = 1
|
||||
|
||||
" Delete the next line to avoid the special indention of items
|
||||
if !exists("g:tex_indent_items")
|
||||
let g:tex_indent_items = 1
|
||||
endif
|
||||
if !exists("g:tex_indent_brace")
|
||||
let g:tex_indent_brace = 1
|
||||
endif
|
||||
if g:tex_indent_items
|
||||
if !exists("g:tex_itemize_env")
|
||||
let g:tex_itemize_env = 'itemize\|description\|enumerate\|thebibliography'
|
||||
endif
|
||||
if !exists('g:tex_items')
|
||||
let g:tex_items = '\\bibitem\|\\item'
|
||||
endif
|
||||
else
|
||||
let g:tex_items = ''
|
||||
endif
|
||||
setlocal indentexpr=LatexBox_TexIndent()
|
||||
setlocal indentkeys=0=\\end,0=\\end{enumerate},0=\\end{itemize},0=\\end{description},0=\\right,0=\\item,0=\\),0=\\],0},o,O,0\\
|
||||
|
||||
if !exists("g:tex_noindent_env")
|
||||
let g:tex_noindent_env = 'document\|verbatim\|comment\|lstlisting'
|
||||
endif
|
||||
let s:list_envs = ['itemize', 'enumerate', 'description']
|
||||
" indent on \left( and on \(, but not on (
|
||||
" indent on \left[ and on \[, but not on [
|
||||
" indent on \left\{ and on {, but not on \{
|
||||
let s:open_pat = '\\\@<!\%(\\begin\|\\left\|\\(\|\\\[\|{\)'
|
||||
let s:close_pat = '\\\@<!\%(\\end\|\\right\|\\)\|\\\]\|}\)'
|
||||
let s:list_open_pat = '\\\@<!\\begin{\%(' . join(s:list_envs, '\|') . '\)}'
|
||||
let s:list_close_pat = '\\\@<!\\end{\%(' . join(s:list_envs, '\|') . '\)}'
|
||||
|
||||
setlocal autoindent
|
||||
setlocal nosmartindent
|
||||
setlocal indentexpr=GetTeXIndent()
|
||||
exec 'setlocal indentkeys+=},]' . substitute(g:tex_items, '^\|\(\\|\)', ',=', 'g')
|
||||
let g:tex_items = '^\s*' . g:tex_items
|
||||
|
||||
|
||||
" Only define the function once
|
||||
if exists("*GetTeXIndent") | finish
|
||||
endif
|
||||
|
||||
|
||||
|
||||
function GetTeXIndent()
|
||||
|
||||
" Find a non-blank line above the current line.
|
||||
let lnum = prevnonblank(v:lnum - 1)
|
||||
|
||||
" New code for comments: Comments is not what we need.
|
||||
while lnum != 0
|
||||
if getline(lnum) !~ '^\s*%'
|
||||
break
|
||||
endif
|
||||
let lnum = prevnonblank(lnum - 1)
|
||||
endwhile
|
||||
|
||||
" At the start of the file use zero indent.
|
||||
if lnum == 0 | return 0
|
||||
endif
|
||||
|
||||
let ind = indent(lnum)
|
||||
let line = getline(lnum) " last line
|
||||
let cline = getline(v:lnum) " current line
|
||||
|
||||
" New code for comment: retain the indent of current line
|
||||
if cline =~ '^\s*%'
|
||||
return indent(v:lnum)
|
||||
endif
|
||||
|
||||
" Add a 'shiftwidth' after beginning of environments.
|
||||
" Don't add it for environments identified by
|
||||
" g:tex_noindent_env
|
||||
" LH modification : \begin does not always start a line
|
||||
let current_regexp = '\\begin'
|
||||
while 1
|
||||
let match_list = matchlist(line, current_regexp.'\s*{\(.*\)}')
|
||||
if (empty(match_list))
|
||||
break
|
||||
endif
|
||||
let environment_type = get(match_list, 1)
|
||||
if environment_type !~ g:tex_noindent_env
|
||||
let ind = ind + &sw
|
||||
|
||||
if g:tex_indent_items == 1
|
||||
" Add another sw for item-environments
|
||||
if line =~ g:tex_itemize_env
|
||||
let ind = ind + &sw
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
" Make the regexp match the following begin
|
||||
let current_regexp = current_regexp.'.*\\begin'
|
||||
endwhile
|
||||
|
||||
" Subtract a 'shiftwidth' when an environment ends
|
||||
if cline =~ '^\s*\\end' && cline !~ g:tex_noindent_env
|
||||
|
||||
if g:tex_indent_items == 1
|
||||
" Remove another sw for item-environments
|
||||
if cline =~ g:tex_itemize_env
|
||||
let ind = ind - &sw
|
||||
endif
|
||||
endif
|
||||
|
||||
let ind = ind - &sw
|
||||
endif
|
||||
|
||||
" Subtract a 'shiftwidth' when an environment ended
|
||||
" the previous line but the shiftwidth wasn't
|
||||
" applied because it didn't begin the line
|
||||
let current_regexp = '\\end'
|
||||
while 1
|
||||
let match_list = matchlist(line, current_regexp.'\s*{\(.*\)}')
|
||||
if (empty(match_list))
|
||||
break
|
||||
endif
|
||||
let environment_type = get(match_list, 1)
|
||||
if environment_type !~ g:tex_noindent_env
|
||||
\ && (current_regexp != '\\end' || line !~ '^\s*\\end')
|
||||
" If the end begin the line, the shift width has already
|
||||
" been subtracted at the previous line
|
||||
|
||||
let ind = ind - &sw
|
||||
|
||||
if g:tex_indent_items == 1
|
||||
" Add another sw for item-environments
|
||||
if line =~ g:tex_itemize_env
|
||||
let ind = ind - &sw
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
" Make the regexp match the following end
|
||||
let current_regexp = current_regexp.'.*\\end'
|
||||
endwhile
|
||||
|
||||
if g:tex_indent_brace
|
||||
" Add a 'shiftwidth' after a "{" or "[" while there are not "}" and "]"
|
||||
" after them. \m for magic
|
||||
if line =~ '\m\(\(\[[^\]]*\)\|\({[^}]*\)\)$'
|
||||
let ind = ind + &sw
|
||||
endif
|
||||
" Remove a 'shiftwidth' after a "}" or "]" while there are not "{" and "["
|
||||
" before them. \m for magic
|
||||
if cline =~ '\m^\(\([^[]*\]\)\|\([^{]*}\)\)'
|
||||
let ind = ind - &sw
|
||||
endif
|
||||
endif
|
||||
|
||||
|
||||
" Special treatment for 'item'
|
||||
" ----------------------------
|
||||
|
||||
if g:tex_indent_items
|
||||
|
||||
" '\item' or '\bibitem' itself:
|
||||
if cline =~ g:tex_items
|
||||
let ind = ind - &sw
|
||||
endif
|
||||
|
||||
" lines following to '\item' are intented once again:
|
||||
if line =~ g:tex_items
|
||||
let ind = ind + &sw
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
return ind
|
||||
function! s:CountMatches(str, pat)
|
||||
return len(substitute(substitute(a:str, a:pat, "\n", 'g'), "[^\n]", '', 'g'))
|
||||
endfunction
|
||||
|
||||
" vim: set sw=4 textwidth=78:
|
||||
|
||||
" TexIndent {{{
|
||||
function! LatexBox_TexIndent()
|
||||
|
||||
let lnum_curr = v:lnum
|
||||
let lnum_prev = prevnonblank(lnum_curr - 1)
|
||||
|
||||
if lnum_prev == 0
|
||||
return 0
|
||||
endif
|
||||
|
||||
let line_curr = getline(lnum_curr)
|
||||
let line_prev = getline(lnum_prev)
|
||||
|
||||
" remove \\
|
||||
let line_curr = substitute(line_curr, '\\\\', '', 'g')
|
||||
let line_prev = substitute(line_prev, '\\\\', '', 'g')
|
||||
|
||||
" strip comments
|
||||
let line_curr = substitute(line_curr, '\\\@<!%.*$', '', 'g')
|
||||
let line_prev = substitute(line_prev, '\\\@<!%.*$', '', 'g')
|
||||
|
||||
" find unmatched opening patterns on previous line
|
||||
let n = s:CountMatches(line_prev, s:open_pat)-s:CountMatches(line_prev, s:close_pat)
|
||||
let n += s:CountMatches(line_prev, s:list_open_pat)-s:CountMatches(line_prev, s:list_close_pat)
|
||||
|
||||
" reduce indentation if current line starts with a closing pattern
|
||||
if line_curr =~ '^\s*\%(' . s:close_pat . '\)'
|
||||
let n -= 1
|
||||
endif
|
||||
|
||||
" compensate indentation if previous line starts with a closing pattern
|
||||
if line_prev =~ '^\s*\%(' . s:close_pat . '\)'
|
||||
let n += 1
|
||||
endif
|
||||
|
||||
" reduce indentation if current line starts with a closing list
|
||||
if line_curr =~ '^\s*\%(' . s:list_close_pat . '\)'
|
||||
let n -= 1
|
||||
endif
|
||||
|
||||
" compensate indentation if previous line starts with a closing list
|
||||
if line_prev =~ '^\s*\%(' . s:list_close_pat . '\)'
|
||||
let n += 1
|
||||
endif
|
||||
|
||||
" reduce indentation if previous line is \begin{document}
|
||||
if line_prev =~ '\\begin\s*{document}'
|
||||
let n -= 1
|
||||
endif
|
||||
|
||||
" less shift for lines starting with \item
|
||||
let item_here = line_curr =~ '^\s*\\item'
|
||||
let item_above = line_prev =~ '^\s*\\item'
|
||||
if !item_here && item_above
|
||||
let n += 1
|
||||
elseif item_here && !item_above
|
||||
let n -= 1
|
||||
endif
|
||||
|
||||
return indent(lnum_prev) + n * &sw
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
|
||||
|
||||
@@ -75,7 +75,7 @@ syntax match clojureDispatch "\v#[\^'=<_]?"
|
||||
" Clojure permits no more than 20 params.
|
||||
syntax match clojureAnonArg "%\(20\|1\d\|[1-9]\|&\)\?"
|
||||
|
||||
syntax match clojureRegexpEscape "\v\\%([\\tnrfae()\[\]{}^$*?+]|c\u|0[0-3]?\o{1,2}|x%(\x{2}|\{\x{1,6}\})|u\x{4})" contained display
|
||||
syntax match clojureRegexpEscape "\v\\%([\\tnrfae.()\[\]{}^$*?+]|c\u|0[0-3]?\o{1,2}|x%(\x{2}|\{\x{1,6}\})|u\x{4})" contained display
|
||||
syntax region clojureRegexpQuoted start=/\\Q/ms=e+1 skip=/\\\\\|\\"/ end=/\\E/me=s-1 end=/"/me=s-1 contained
|
||||
syntax region clojureRegexpQuote start=/\\Q/ skip=/\\\\\|\\"/ end=/\\E/ end=/"/me=s-1 contains=clojureRegexpQuoted keepend contained
|
||||
|
||||
|
||||
22
syntax/dockerfile.vim
Normal file
22
syntax/dockerfile.vim
Normal file
@@ -0,0 +1,22 @@
|
||||
" dockerfile.vim - Syntax highlighting for Dockerfiles
|
||||
" Maintainer: Honza Pokorny <http://honza.ca>
|
||||
" Version: 0.5
|
||||
|
||||
|
||||
if exists("b:current_syntax")
|
||||
finish
|
||||
endif
|
||||
|
||||
let b:current_syntax = "dockerfile"
|
||||
|
||||
syntax case ignore
|
||||
|
||||
syntax match dockerfileKeyword /\v^\s*(FROM|MAINTAINER|RUN|CMD|EXPOSE|ENV|ADD)\s/
|
||||
syntax match dockerfileKeyword /\v^\s*(ENTRYPOINT|VOLUME|USER|WORKDIR)\s/
|
||||
highlight link dockerfileKeyword Keyword
|
||||
|
||||
syntax region dockerfileString start=/\v"/ skip=/\v\\./ end=/\v"/
|
||||
highlight link dockerfileString String
|
||||
|
||||
syntax match dockerfileComment "\v^\s*#.*$"
|
||||
highlight link dockerfileComment Comment
|
||||
@@ -1,35 +1,40 @@
|
||||
" Vim syntax file
|
||||
" Language: Erlang
|
||||
" Author: Oscar Hellström <oscar@oscarh.net> (http://oscar.hellstrom.st)
|
||||
" Contributors: Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
|
||||
" License: Vim license
|
||||
" Version: 2012/05/07
|
||||
" Language: Erlang
|
||||
" Maintainer: Oscar Hellstr<EFBFBD>m <oscar@oscarh.net>
|
||||
" URL: http://oscar.hellstrom.st
|
||||
" Version: 2010-08-09
|
||||
" ------------------------------------------------------------------------------
|
||||
" {{{1
|
||||
" Options:
|
||||
"
|
||||
" Erlang BIFs
|
||||
" g:erlangHighlightBif - highlight erlang built in functions (default: off)
|
||||
"
|
||||
" }}}
|
||||
" -----------------------------------------------------------------------------
|
||||
|
||||
if exists("b:current_syntax")
|
||||
finish
|
||||
else
|
||||
let b:current_syntax = "erlang"
|
||||
endif
|
||||
|
||||
if !exists("g:erlang_highlight_bif")
|
||||
let g:erlang_highlight_bif = 1
|
||||
" Setup {{{1
|
||||
" For version 5.x: Clear all syntax items
|
||||
" For version 6.x: Quit when a syntax file was already loaded
|
||||
if version < 600
|
||||
syntax clear
|
||||
elseif exists("b:current_syntax")
|
||||
finish
|
||||
endif
|
||||
|
||||
" Erlang is case sensitive
|
||||
syn case match
|
||||
|
||||
" Match groups
|
||||
" Match groups {{{1
|
||||
syn match erlangStringModifier /\\./ contained
|
||||
syn match erlangStringModifier /\~\%(-\?[0-9*]\+\)\?\%(\.[0-9*]*\%(\..\?t\?\)\?\)\?\%(\~\|c\|f\|e\|g\|s\|w\|p\|W\|P\|B\|X\|#\|b\|x\|+\|n\|i\)/ contained
|
||||
syn match erlangStringModifier /\~\%(-\?[0-9*]\+\)\?\%(\.[0-9*]\+\..\?\)\?\%(c\|f\|e\|g\|s\|w\|p\|W\|P\|B\|X\|#\|b\|+\|n\|i\)/ contained
|
||||
syn match erlangModifier /\$\\\?./
|
||||
|
||||
syn match erlangInteger /\<\%([0-9]\+#[0-9a-fA-F]\+\|[0-9]\+\)\>/
|
||||
syn match erlangFloat /\<[0-9]\+\.[0-9]\+\%(e-\?[0-9]\+\)\?\>/
|
||||
|
||||
syn keyword erlangTodo TODO FIXME XXX contained
|
||||
syn match erlangComment /%.*$/ contains=@Spell,erlangTodo,erlangAnnotation
|
||||
syn match erlangAnnotation /\%(%\s\)\@<=@\%(author\|clear\|copyright\|deprecated\|doc\|docfile\|end\|equiv\|headerfile\|hidden\|private\|reference\|see\|since\|spec\|throws\|title\|todo\|TODO\|type\|version\)/ contained
|
||||
syn match erlangAnnotation /`[^']\+'/ contained
|
||||
syn match erlangComment /%.*$/ contains=@Spell,erlangTodo
|
||||
|
||||
syn keyword erlangKeyword band bor bnot bsl bsr bxor div rem xor
|
||||
syn keyword erlangKeyword try catch begin receive after cond fun let query
|
||||
@@ -42,9 +47,9 @@ syn keyword erlangBoolean true false
|
||||
|
||||
syn keyword erlangGuard is_list is_alive is_atom is_binary is_bitstring is_boolean is_tuple is_number is_integer is_float is_function is_constant is_pid is_port is_reference is_record is_process_alive
|
||||
|
||||
syn match erlangOperator /\/\|*\|+\|-\|++\|--/
|
||||
syn match erlangOperator /->\|<-\|||\||\|!\|=/
|
||||
syn match erlangOperator /=:=\|==\|\/=\|=\/=\|<\|>\|=<\|>=/
|
||||
syn match erlangOperator /\/\|*\|+\|-\|++\|--/
|
||||
syn match erlangOperator /->\|<-\|||\||\|!\|=/
|
||||
syn match erlangOperator /=:=\|==\|\/=\|=\/=\|<\|>\|=<\|>=/
|
||||
syn keyword erlangOperator div rem
|
||||
|
||||
syn region erlangString start=/"/ end=/"/ skip=/\\/ contains=@Spell,erlangStringModifier
|
||||
@@ -58,69 +63,75 @@ syn match erlangRecord /#\w\+/
|
||||
syn match erlangTuple /{\|}/
|
||||
syn match erlangList /\[\|\]/
|
||||
|
||||
syn match erlangAttribute /^-\%(vsn\|author\|copyright\|compile\|deprecated\|module\|export\|import\|behaviour\|behavior\|export_type\|ignore_xref\|on_load\|mode\)\s*(\@=/
|
||||
syn match erlangAttribute /^-\%(vsn\|author\|copyright\|compile\|deprecated\|module\|export\|import\|behaviour\|export_type\|ignore_xref\) *(\@=/
|
||||
syn match erlangInclude /^-include\%(_lib\)\?\s*(\@=/
|
||||
syn match erlangRecordDef /^-record\s*(\@=/
|
||||
syn match erlangDefine /^-\%(define\|undef\)\s*(\@=/
|
||||
syn match erlangPreCondit /^-\%(ifdef\|ifndef\|else\|endif\)\%(\s*(\@=\)\?/
|
||||
|
||||
syn match erlangType /^-\%(spec\|type\|opaque\|callback\)[( ]\@=/
|
||||
syn match erlangType /^-\%(spec\|type\)[( ]\@=/
|
||||
|
||||
syn match erlangMacro /\%(-define(\)\@<=\w\+/
|
||||
syn match erlangMacro /?\??\w\+/
|
||||
syn match erlangMacro /?\w\+/
|
||||
|
||||
syn match erlangBitType /\%(\/\|-\)\@<=\%(bits\|bitstring\|binary\|integer\|float\|unit\)\>/
|
||||
syn match erlangBitSize /:\@<=[0-9]\+/
|
||||
|
||||
syn match erlangBinary /<<\|>>/
|
||||
syn match erlangBinary /<<\|>>/
|
||||
|
||||
" BIFs
|
||||
syn match erlangBIF /\%([^:0-9A-Za-z_]\|\<erlang:\|^\)\@<=\%(abs\|apply\|atom_to_binary\|atom_to_list\|binary_part\|binary_to_atom\|binary_to_existing_atom\|binary_to_list\|binary_to_term\|bit_size\|bitstring_to_list\|byte_size\|check_process_code\|date\|delete_module\|demonitor\|disconnect_node\|element\|erase\|error\|exit\|float\|float_to_list\|garbage_collect\|get\|get_keys\|group_leader\|halt\|hd\|integer_to_list\|iolist_size\|iolist_to_binary\|is_alive\|is_atom\|is_binary\|is_bitstring\|is_boolean\|is_float\|is_function\|is_integer\|is_list\|is_number\|is_pid\|is_port\|is_process_alive\|is_record\|is_reference\|is_tuple\|length\|link\|list_to_atom\|list_to_binary\|list_to_bitstring\|list_to_existing_atom\|list_to_float\|list_to_integer\|list_to_pid\|list_to_tuple\|load_module\|make_ref\|max\|min\|module_loaded\|monitor\|monitor_node\|node\|nodes\|now\|open_port\|pid_to_list\|port_close\|port_command\|port_connect\|port_control\|pre_loaded\|processes\|process_flag\|process_info\|purge_module\|put\|register\|registered\|round\|self\|setelement\|size\|spawn\|spawn_link\|spawn_monitor\|spawn_opt\|split_binary\|statistics\|term_to_binary\|throw\|time\|tl\|trunc\|tuple_size\|tuple_to_list\|unlink\|unregister\|whereis\)\%((\|\/[0-9]\)\@=/
|
||||
syn match erlangBIF /\%(\<erlang:\)\@<=\%(append_element\|bump_reductions\|cancel_timer\|decode_packet\|display\|function_exported\|fun_info\|fun_to_list\|get_cookie\|get_stacktrace\|hash\|is_builtin\|loaded\|load_nif\|localtime\|localtime_to_universaltime\|make_tuple\|memory\|monitor_node\|phash\|port_call\|port_info\|ports\|port_to_list\|process_display\|read_timer\|ref_to_list\|resume_process\|send\|send_after\|send_nosuspend\|set_cookie\|start_timer\|suspend_process\|system_flag\|system_info\|system_monitor\|system_profile\|trace\|trace_delivered\|trace_info\|trace_pattern\|universaltime\|universaltime_to_localtime\|yield\)(\@=/
|
||||
syn match erlangGBIF /\<erlang\%(:\w\)\@=/
|
||||
" BIFS
|
||||
syn match erlangBIF /\%([^:0-9A-Za-z_]\|\<erlang:\)\@<=\%(abs\|apply\|atom_to_list\|binary_part\|binary_to_list\|binary_to_term\|binary_to_atom\|binary_to_existing_atom\|bitstring_to_list\|check_process_code\|concat_binary\|date\|delete_module\|disconnect_node\|element\|erase\|error\|exit\|float\|float_to_list\|garbage_collect\|get\|get_keys\|group_leader\|halt\|hd\|integer_to_list\|iolist_to_binary\|iolist_size\|length\|link\|list_to_atom\|list_to_binary\|list_to_bitstring\|list_to_existing_atom\|list_to_float\|list_to_integer\|list_to_pid\|list_to_tuple\|load_module\|make_ref\|monitor_node\|node\|nodes\|now\|open_port\|pid_to_list\|port_close\|port_command\|port_connect\|port_control\|pre_loaded\|process_flag\|process_info\|processes\|purge_module\|put\|register\|registered\|round\|self\|setelement\|size\|bit_size\|byte_size\|spawn\|spawn_link\|spawn_opt\|split_binary\|statistics\|term_to_binary\|throw\|time\|tl\|trunc\|tuple_to_list\|unlink\|unregister\|whereis\)\((\|\/[0-9]\)\@=/
|
||||
syn match erlangBIF /\<\%(erlang:\)\@<=\%(append_element\|bump_reductions\|cancel_timer\|decode_packet\|demonitor\|display\|fault\|fun_info\|fun_to_list\|function_exported\|get_cookie\|get_stacktrace\|hash\|hibernate\|info\|is_builtin\|loaded\|localtime\|localtime_to_universaltime\|localtime_to_universaltime\|make_tuple\|md5\|md5_init\|md5_update\|memory\|monitor\|monitor_node\|phash\|phash2\|port_call\|port_info\|port_to_list\|ports\|process_display\|raise\|read_timer\|ref_to_list\|resume_process\|send\|send_after\|send_nosuspend\|set_cookie\|spawn_monitor\|start_timer\|suspend_process\|system_flag\|system_info\|system_monitor\|trace\|trace_delivered\|trace_info\|trace_pattern\|universaltime\|universaltime_to_localtime\|yield\)(\@=/
|
||||
syn match erlangGBIF /erlang\(:\w\)\@=/
|
||||
" }}}
|
||||
|
||||
" Link Erlang stuff to Vim groups
|
||||
hi def link erlangTodo Todo
|
||||
hi def link erlangString String
|
||||
hi def link erlangNoSpellString String
|
||||
hi def link erlangModifier SpecialChar
|
||||
hi def link erlangStringModifier SpecialChar
|
||||
hi def link erlangComment Comment
|
||||
hi def link erlangAnnotation Special
|
||||
hi def link erlangVariable Identifier
|
||||
hi def link erlangInclude Include
|
||||
hi def link erlangRecordDef Keyword
|
||||
hi def link erlangAttribute Keyword
|
||||
hi def link erlangKeyword Keyword
|
||||
hi def link erlangMacro Macro
|
||||
hi def link erlangDefine Define
|
||||
hi def link erlangPreCondit PreCondit
|
||||
hi def link erlangPreProc PreProc
|
||||
hi def link erlangDelimiter Delimiter
|
||||
hi def link erlangBitDelimiter Normal
|
||||
hi def link erlangOperator Operator
|
||||
hi def link erlangConditional Conditional
|
||||
hi def link erlangGuard Conditional
|
||||
hi def link erlangBoolean Boolean
|
||||
hi def link erlangAtom Constant
|
||||
hi def link erlangRecord Structure
|
||||
hi def link erlangInteger Number
|
||||
hi def link erlangFloat Number
|
||||
hi def link erlangFloat Number
|
||||
hi def link erlangFloat Number
|
||||
hi def link erlangFloat Number
|
||||
hi def link erlangHex Number
|
||||
hi def link erlangFun Keyword
|
||||
hi def link erlangList Delimiter
|
||||
hi def link erlangTuple Delimiter
|
||||
hi def link erlangBinary Keyword
|
||||
hi def link erlangBitVariable Identifier
|
||||
hi def link erlangBitType Type
|
||||
hi def link erlangType Type
|
||||
hi def link erlangBitSize Number
|
||||
" Link Erlang stuff to Vim groups {{{1
|
||||
hi link erlangTodo Todo
|
||||
hi link erlangString String
|
||||
hi link erlangNoSpellString String
|
||||
hi link erlangModifier SpecialChar
|
||||
hi link erlangStringModifier SpecialChar
|
||||
hi link erlangComment Comment
|
||||
hi link erlangVariable Identifier
|
||||
hi link erlangInclude Include
|
||||
hi link erlangRecordDef Keyword
|
||||
hi link erlangAttribute Keyword
|
||||
hi link erlangKeyword Keyword
|
||||
hi link erlangMacro Macro
|
||||
hi link erlangDefine Define
|
||||
hi link erlangPreCondit PreCondit
|
||||
hi link erlangPreProc PreProc
|
||||
hi link erlangDelimiter Delimiter
|
||||
hi link erlangBitDelimiter Normal
|
||||
hi link erlangOperator Operator
|
||||
hi link erlangConditional Conditional
|
||||
hi link erlangGuard Conditional
|
||||
hi link erlangBoolean Boolean
|
||||
hi link erlangAtom Constant
|
||||
hi link erlangRecord Structure
|
||||
hi link erlangInteger Number
|
||||
hi link erlangFloat Number
|
||||
hi link erlangFloat Number
|
||||
hi link erlangFloat Number
|
||||
hi link erlangFloat Number
|
||||
hi link erlangHex Number
|
||||
hi link erlangBIF Keyword
|
||||
hi link erlangFun Keyword
|
||||
hi link erlangList Delimiter
|
||||
hi link erlangTuple Delimiter
|
||||
hi link erlangBinary Keyword
|
||||
hi link erlangBitVariable Identifier
|
||||
hi link erlangBitType Type
|
||||
hi link erlangType Type
|
||||
hi link erlangBitSize Number
|
||||
" }}}
|
||||
|
||||
" Optional highlighting
|
||||
if g:erlang_highlight_bif
|
||||
hi def link erlangBIF Keyword
|
||||
hi def link erlangGBIF Keyword
|
||||
" Optional linkings {{{1
|
||||
if exists("g:erlangHighlightBif") && g:erlangHighlightBif
|
||||
hi link erlangGBIF Keyword
|
||||
endif
|
||||
" }}}
|
||||
|
||||
let b:current_syntax = "erlang"
|
||||
|
||||
" vim: set foldmethod=marker:
|
||||
|
||||
9
syntax/latextoc.vim
Normal file
9
syntax/latextoc.vim
Normal file
@@ -0,0 +1,9 @@
|
||||
syntax match helpText /^.*: .*/
|
||||
syntax match secNum /^\S\+\(\.\S\+\)\?\s*/ contained conceal
|
||||
syntax match secLine /^\S\+\t.\+/ contains=secNum
|
||||
syntax match mainSecLine /^[^\.]\+\t.*/ contains=secNum
|
||||
syntax match ssubSecLine /^[^\.]\+\.[^\.]\+\.[^\.]\+\t.*/ contains=secNum
|
||||
highlight link helpText PreProc
|
||||
highlight link secNum Number
|
||||
highlight link mainSecLine Title
|
||||
highlight link ssubSecLine Comment
|
||||
589
syntax/perl.vim
Normal file
589
syntax/perl.vim
Normal file
@@ -0,0 +1,589 @@
|
||||
" Vim syntax file
|
||||
" Language: Perl 5
|
||||
" Maintainer: vim-perl <vim-perl@googlegroups.com>
|
||||
" Homepage: http://github.com/vim-perl/vim-perl/tree/master
|
||||
" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
|
||||
" Last Change: {{LAST_CHANGE}}
|
||||
" Contributors: Andy Lester <andy@petdance.com>
|
||||
" Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
|
||||
" Lukas Mai <l.mai.web.de>
|
||||
" Nick Hibma <nick@van-laarhoven.org>
|
||||
" Sonia Heimann <niania@netsurf.org>
|
||||
" Rob Hoelz <rob@hoelz.ro>
|
||||
" and many others.
|
||||
"
|
||||
" Please download the most recent version first, before mailing
|
||||
" any comments.
|
||||
"
|
||||
" The following parameters are available for tuning the
|
||||
" perl syntax highlighting, with defaults given:
|
||||
"
|
||||
" let perl_include_pod = 1
|
||||
" unlet perl_no_scope_in_variables
|
||||
" unlet perl_no_extended_vars
|
||||
" unlet perl_string_as_statement
|
||||
" unlet perl_no_sync_on_sub
|
||||
" unlet perl_no_sync_on_global_var
|
||||
" let perl_sync_dist = 100
|
||||
" unlet perl_fold
|
||||
" unlet perl_fold_blocks
|
||||
" unlet perl_nofold_packages
|
||||
" let perl_nofold_subs = 1
|
||||
" unlet perl_fold_anonymous_subs
|
||||
|
||||
if exists("b:current_syntax")
|
||||
finish
|
||||
endif
|
||||
|
||||
let s:cpo_save = &cpo
|
||||
set cpo&vim
|
||||
|
||||
if exists('®expengine')
|
||||
let s:regexpengine=®expengine
|
||||
set regexpengine=1
|
||||
endif
|
||||
|
||||
" POD starts with ^=<word> and ends with ^=cut
|
||||
|
||||
if !exists("perl_include_pod") || perl_include_pod == 1
|
||||
" Include a while extra syntax file
|
||||
syn include @Pod syntax/pod.vim
|
||||
unlet b:current_syntax
|
||||
if exists("perl_fold")
|
||||
syn region perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,@Spell,perlTodo keepend fold extend
|
||||
syn region perlPOD start="^=cut" end="^=cut" contains=perlTodo keepend fold extend
|
||||
else
|
||||
syn region perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,@Spell,perlTodo keepend
|
||||
syn region perlPOD start="^=cut" end="^=cut" contains=perlTodo keepend
|
||||
endif
|
||||
else
|
||||
" Use only the bare minimum of rules
|
||||
if exists("perl_fold")
|
||||
syn region perlPOD start="^=[a-z]" end="^=cut" fold
|
||||
else
|
||||
syn region perlPOD start="^=[a-z]" end="^=cut"
|
||||
endif
|
||||
endif
|
||||
|
||||
|
||||
syn cluster perlTop contains=TOP
|
||||
|
||||
syn region perlBraces start="{" end="}" transparent extend
|
||||
|
||||
" All keywords
|
||||
"
|
||||
syn match perlConditional "\<\%(if\|elsif\|unless\|given\|when\|default\)\>"
|
||||
syn match perlConditional "\<else\%(\%(\_s\*if\>\)\|\>\)" contains=perlElseIfError skipwhite skipnl skipempty
|
||||
syn match perlRepeat "\<\%(while\|for\%(each\)\=\|do\|until\|continue\)\>"
|
||||
syn match perlOperator "\<\%(defined\|undef\|eq\|ne\|[gl][et]\|cmp\|not\|and\|or\|xor\|not\|bless\|ref\|do\)\>"
|
||||
" for some reason, adding this as the nextgroup for perlControl fixes BEGIN
|
||||
" folding issues...
|
||||
syn match perlFakeGroup "" contained
|
||||
syn match perlControl "\<\%(BEGIN\|CHECK\|INIT\|END\|UNITCHECK\)\>\_s*" nextgroup=perlFakeGroup
|
||||
|
||||
syn match perlStatementStorage "\<\%(my\|our\|local\|state\)\>"
|
||||
syn match perlStatementControl "\<\%(return\|last\|next\|redo\|goto\|break\)\>"
|
||||
syn match perlStatementScalar "\<\%(chom\=p\|chr\|crypt\|r\=index\|lc\%(first\)\=\|length\|ord\|pack\|sprintf\|substr\|uc\%(first\)\=\)\>"
|
||||
syn match perlStatementRegexp "\<\%(pos\|quotemeta\|split\|study\)\>"
|
||||
syn match perlStatementNumeric "\<\%(abs\|atan2\|cos\|exp\|hex\|int\|log\|oct\|rand\|sin\|sqrt\|srand\)\>"
|
||||
syn match perlStatementList "\<\%(splice\|unshift\|shift\|push\|pop\|join\|reverse\|grep\|map\|sort\|unpack\)\>"
|
||||
syn match perlStatementHash "\<\%(delete\|each\|exists\|keys\|values\)\>"
|
||||
syn match perlStatementIOfunc "\<\%(syscall\|dbmopen\|dbmclose\)\>"
|
||||
syn match perlStatementFiledesc "\<\%(binmode\|close\%(dir\)\=\|eof\|fileno\|getc\|lstat\|printf\=\|read\%(dir\|line\|pipe\)\|rewinddir\|say\|select\|stat\|tell\%(dir\)\=\|write\)\>" nextgroup=perlFiledescStatementNocomma skipwhite
|
||||
syn match perlStatementFiledesc "\<\%(fcntl\|flock\|ioctl\|open\%(dir\)\=\|read\|seek\%(dir\)\=\|sys\%(open\|read\|seek\|write\)\|truncate\)\>" nextgroup=perlFiledescStatementComma skipwhite
|
||||
syn match perlStatementVector "\<vec\>"
|
||||
syn match perlStatementFiles "\<\%(ch\%(dir\|mod\|own\|root\)\|glob\|link\|mkdir\|readlink\|rename\|rmdir\|symlink\|umask\|unlink\|utime\)\>"
|
||||
syn match perlStatementFiles "-[rwxoRWXOezsfdlpSbctugkTBMAC]\>"
|
||||
syn match perlStatementFlow "\<\%(caller\|die\|dump\|eval\|exit\|wantarray\)\>"
|
||||
syn match perlStatementInclude "\<\%(require\|import\)\>"
|
||||
syn match perlStatementInclude "\<\%(use\|no\)\s\+\%(\%(attributes\|attrs\|autouse\|parent\|base\|big\%(int\|num\|rat\)\|blib\|bytes\|charnames\|constant\|diagnostics\|encoding\%(::warnings\)\=\|feature\|fields\|filetest\|if\|integer\|less\|lib\|locale\|mro\|open\|ops\|overload\|re\|sigtrap\|sort\|strict\|subs\|threads\%(::shared\)\=\|utf8\|vars\|version\|vmsish\|warnings\%(::register\)\=\)\>\)\="
|
||||
syn match perlStatementProc "\<\%(alarm\|exec\|fork\|get\%(pgrp\|ppid\|priority\)\|kill\|pipe\|set\%(pgrp\|priority\)\|sleep\|system\|times\|wait\%(pid\)\=\)\>"
|
||||
syn match perlStatementSocket "\<\%(accept\|bind\|connect\|get\%(peername\|sock\%(name\|opt\)\)\|listen\|recv\|send\|setsockopt\|shutdown\|socket\%(pair\)\=\)\>"
|
||||
syn match perlStatementIPC "\<\%(msg\%(ctl\|get\|rcv\|snd\)\|sem\%(ctl\|get\|op\)\|shm\%(ctl\|get\|read\|write\)\)\>"
|
||||
syn match perlStatementNetwork "\<\%(\%(end\|[gs]et\)\%(host\|net\|proto\|serv\)ent\|get\%(\%(host\|net\)by\%(addr\|name\)\|protoby\%(name\|number\)\|servby\%(name\|port\)\)\)\>"
|
||||
syn match perlStatementPword "\<\%(get\%(pw\%(uid\|nam\)\|gr\%(gid\|nam\)\|login\)\)\|\%(end\|[gs]et\)\%(pw\|gr\)ent\>"
|
||||
syn match perlStatementTime "\<\%(gmtime\|localtime\|time\)\>"
|
||||
|
||||
syn match perlStatementMisc "\<\%(warn\|format\|formline\|reset\|scalar\|prototype\|lock\|tied\=\|untie\)\>"
|
||||
|
||||
syn keyword perlTodo TODO TODO: TBD TBD: FIXME FIXME: XXX XXX: NOTE NOTE: contained
|
||||
|
||||
syn region perlStatementIndirObjWrap matchgroup=perlStatementIndirObj start="\<\%(map\|grep\|sort\|printf\=\|say\|system\|exec\)\>\s*{" end="}" contains=@perlTop,perlBraces extend
|
||||
|
||||
syn match perlLabel "^\s*\h\w*\s*::\@!\%(\<v\d\+\s*:\)\@<!"
|
||||
|
||||
" Perl Identifiers.
|
||||
"
|
||||
" Should be cleaned up to better handle identifiers in particular situations
|
||||
" (in hash keys for example)
|
||||
"
|
||||
" Plain identifiers: $foo, @foo, $#foo, %foo, &foo and dereferences $$foo, @$foo, etc.
|
||||
" We do not process complex things such as @{${"foo"}}. Too complicated, and
|
||||
" too slow. And what is after the -> is *not* considered as part of the
|
||||
" variable - there again, too complicated and too slow.
|
||||
|
||||
" Special variables first ($^A, ...) and ($|, $', ...)
|
||||
syn match perlVarPlain "$^[ACDEFHILMNOPRSTVWX]\="
|
||||
syn match perlVarPlain "$[\\\"\[\]'&`+*.,;=%~!?@#$<>(-]"
|
||||
syn match perlVarPlain "%+"
|
||||
syn match perlVarPlain "$\%(0\|[1-9]\d*\)"
|
||||
" Same as above, but avoids confusion in $::foo (equivalent to $main::foo)
|
||||
syn match perlVarPlain "$::\@!"
|
||||
" These variables are not recognized within matches.
|
||||
syn match perlVarNotInMatches "$[|)]"
|
||||
" This variable is not recognized within matches delimited by m//.
|
||||
syn match perlVarSlash "$/"
|
||||
|
||||
" And plain identifiers
|
||||
syn match perlPackageRef "[$@#%*&]\%(\%(::\|'\)\=\I\i*\%(\%(::\|'\)\I\i*\)*\)\=\%(::\|'\)\I"ms=s+1,me=e-1 contained
|
||||
|
||||
" To not highlight packages in variables as a scope reference - i.e. in
|
||||
" $pack::var, pack:: is a scope, just set "perl_no_scope_in_variables"
|
||||
" If you don't want complex things like @{${"foo"}} to be processed,
|
||||
" just set the variable "perl_no_extended_vars"...
|
||||
|
||||
if !exists("perl_no_scope_in_variables")
|
||||
syn match perlVarPlain "\%([@$]\|\$#\)\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
|
||||
syn match perlVarPlain2 "%\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef
|
||||
syn match perlFunctionName "&\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
|
||||
else
|
||||
syn match perlVarPlain "\%([@$]\|\$#\)\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
|
||||
syn match perlVarPlain2 "%\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)"
|
||||
syn match perlFunctionName "&\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
|
||||
endif
|
||||
|
||||
if !exists("perl_no_extended_vars")
|
||||
syn cluster perlExpr contains=perlStatementIndirObjWrap,perlStatementScalar,perlStatementRegexp,perlStatementNumeric,perlStatementList,perlStatementHash,perlStatementFiles,perlStatementTime,perlStatementMisc,perlVarPlain,perlVarPlain2,perlVarNotInMatches,perlVarSlash,perlVarBlock,perlVarBlock2,perlShellCommand,perlFloat,perlNumber,perlStringUnexpanded,perlString,perlQQ,perlArrow,perlBraces
|
||||
syn region perlArrow matchgroup=perlArrow start="->\s*(" end=")" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
|
||||
syn region perlArrow matchgroup=perlArrow start="->\s*\[" end="\]" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
|
||||
syn region perlArrow matchgroup=perlArrow start="->\s*{" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
|
||||
syn match perlArrow "->\s*{\s*\I\i*\s*}" contains=perlVarSimpleMemberName nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
|
||||
syn region perlArrow matchgroup=perlArrow start="->\s*\$*\I\i*\s*(" end=")" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
|
||||
syn region perlVarBlock matchgroup=perlVarPlain start="\%($#\|[$@]\)\$*{" skip="\\}" end=+}\|\%(\%(<<\%('\|"\)\?\)\@=\)+ contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod extend
|
||||
syn region perlVarBlock2 matchgroup=perlVarPlain start="[%&*]\$*{" skip="\\}" end=+}\|\%(\%(<<\%('\|"\)\?\)\@=\)+ contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod extend
|
||||
syn match perlVarPlain2 "[%&*]\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod extend
|
||||
syn match perlVarPlain "\%(\$#\|[@$]\)\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod extend
|
||||
syn region perlVarMember matchgroup=perlVarPlain start="\%(->\)\={" skip="\\}" end="}" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod extend
|
||||
syn match perlVarSimpleMember "\%(->\)\={\s*\I\i*\s*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contains=perlVarSimpleMemberName contained extend
|
||||
syn match perlVarSimpleMemberName "\I\i*" contained
|
||||
syn region perlVarMember matchgroup=perlVarPlain start="\%(->\)\=\[" skip="\\]" end="]" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod extend
|
||||
syn match perlPackageConst "__PACKAGE__" nextgroup=perlMethod
|
||||
syn match perlMethod "->\$*\I\i*" contained nextgroup=perlVarSimpleMember,perlVarMember,perlMethod
|
||||
endif
|
||||
|
||||
" File Descriptors
|
||||
syn match perlFiledescRead "<\h\w*>"
|
||||
|
||||
syn match perlFiledescStatementComma "(\=\s*\u\w*\s*,"me=e-1 transparent contained contains=perlFiledescStatement
|
||||
syn match perlFiledescStatementNocomma "(\=\s*\u\w*\s*[^, \t]"me=e-1 transparent contained contains=perlFiledescStatement
|
||||
|
||||
syn match perlFiledescStatement "\u\w*" contained
|
||||
|
||||
" Special characters in strings and matches
|
||||
syn match perlSpecialString "\\\%(\o\{1,3}\|x\%({\x\+}\|\x\{1,2}\)\|c.\|[^cx]\)" contained extend
|
||||
syn match perlSpecialStringU2 "\\." extend contained contains=NONE
|
||||
syn match perlSpecialStringU "\\\\" contained
|
||||
syn match perlSpecialMatch "\\[1-9]" contained extend
|
||||
syn match perlSpecialMatch "\\g\%(\d\+\|{\%(-\=\d\+\|\h\w*\)}\)" contained
|
||||
syn match perlSpecialMatch "\\k\%(<\h\w*>\|'\h\w*'\)" contained
|
||||
syn match perlSpecialMatch "{\d\+\%(,\%(\d\+\)\=\)\=}" contained
|
||||
syn match perlSpecialMatch "\[[]-]\=[^\[\]]*[]-]\=\]" contained extend
|
||||
syn match perlSpecialMatch "[+*()?.]" contained
|
||||
syn match perlSpecialMatch "(?[#:=!]" contained
|
||||
syn match perlSpecialMatch "(?[impsx]*\%(-[imsx]\+\)\=)" contained
|
||||
syn match perlSpecialMatch "(?\%([-+]\=\d\+\|R\))" contained
|
||||
syn match perlSpecialMatch "(?\%(&\|P[>=]\)\h\w*)" contained
|
||||
syn match perlSpecialMatch "(\*\%(\%(PRUNE\|SKIP\|THEN\)\%(:[^)]*\)\=\|\%(MARK\|\):[^)]*\|COMMIT\|F\%(AIL\)\=\|ACCEPT\))" contained
|
||||
|
||||
" Possible errors
|
||||
"
|
||||
" Highlight lines with only whitespace (only in blank delimited here documents) as errors
|
||||
syn match perlNotEmptyLine "^\s\+$" contained
|
||||
" Highlight "} else if (...) {", it should be "} else { if (...) { " or "} elsif (...) {"
|
||||
syn match perlElseIfError "else\_s*if" containedin=perlConditional
|
||||
syn keyword perlElseIfError elseif containedin=perlConditional
|
||||
|
||||
" Variable interpolation
|
||||
"
|
||||
" These items are interpolated inside "" strings and similar constructs.
|
||||
syn cluster perlInterpDQ contains=perlSpecialString,perlVarPlain,perlVarNotInMatches,perlVarSlash,perlVarBlock
|
||||
" These items are interpolated inside '' strings and similar constructs.
|
||||
syn cluster perlInterpSQ contains=perlSpecialStringU,perlSpecialStringU2
|
||||
" These items are interpolated inside m// matches and s/// substitutions.
|
||||
syn cluster perlInterpSlash contains=perlSpecialString,perlSpecialMatch,perlVarPlain,perlVarBlock
|
||||
" These items are interpolated inside m## matches and s### substitutions.
|
||||
syn cluster perlInterpMatch contains=@perlInterpSlash,perlVarSlash
|
||||
|
||||
" Shell commands
|
||||
syn region perlShellCommand matchgroup=perlMatchStartEnd start="`" end="`" contains=@perlInterpDQ keepend
|
||||
|
||||
" Constants
|
||||
"
|
||||
" Numbers
|
||||
syn match perlNumber "\<\%(0\%(x\x[[:xdigit:]_]*\|b[01][01_]*\|\o[0-7_]*\|\)\|[1-9][[:digit:]_]*\)\>"
|
||||
syn match perlFloat "\<\d[[:digit:]_]*[eE][\-+]\=\d\+"
|
||||
syn match perlFloat "\<\d[[:digit:]_]*\.[[:digit:]_]*\%([eE][\-+]\=\d\+\)\="
|
||||
syn match perlFloat "\.[[:digit:]][[:digit:]_]*\%([eE][\-+]\=\d\+\)\="
|
||||
|
||||
syn match perlString "\<\%(v\d\+\%(\.\d\+\)*\|\d\+\%(\.\d\+\)\{2,}\)\>" contains=perlVStringV
|
||||
syn match perlVStringV "\<v" contained
|
||||
|
||||
|
||||
syn region perlParensSQ start=+(+ end=+)+ extend contained contains=perlParensSQ,@perlInterpSQ keepend
|
||||
syn region perlBracketsSQ start=+\[+ end=+\]+ extend contained contains=perlBracketsSQ,@perlInterpSQ keepend
|
||||
syn region perlBracesSQ start=+{+ end=+}+ extend contained contains=perlBracesSQ,@perlInterpSQ keepend
|
||||
syn region perlAnglesSQ start=+<+ end=+>+ extend contained contains=perlAnglesSQ,@perlInterpSQ keepend
|
||||
|
||||
syn region perlParensDQ start=+(+ end=+)+ extend contained contains=perlParensDQ,@perlInterpDQ keepend
|
||||
syn region perlBracketsDQ start=+\[+ end=+\]+ extend contained contains=perlBracketsDQ,@perlInterpDQ keepend
|
||||
syn region perlBracesDQ start=+{+ end=+}+ extend contained contains=perlBracesDQ,@perlInterpDQ keepend
|
||||
syn region perlAnglesDQ start=+<+ end=+>+ extend contained contains=perlAnglesDQ,@perlInterpDQ keepend
|
||||
|
||||
|
||||
" Simple version of searches and matches
|
||||
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1[msixpodualgc]*+ contains=@perlInterpMatch keepend extend
|
||||
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m#+ end=+#[msixpodualgc]*+ contains=@perlInterpMatch keepend extend
|
||||
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*'+ end=+'[msixpodualgc]*+ contains=@perlInterpSQ keepend extend
|
||||
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*/+ end=+/[msixpodualgc]*+ contains=@perlInterpSlash keepend extend
|
||||
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*(+ end=+)[msixpodualgc]*+ contains=@perlInterpMatch,perlParensDQ keepend extend
|
||||
|
||||
" A special case for m{}, m<> and m[] which allows for comments and extra whitespace in the pattern
|
||||
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*{+ end=+}[msixpodualgc]*+ contains=@perlInterpMatch,perlComment,perlBracesDQ extend
|
||||
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*<+ end=+>[msixpodualgc]*+ contains=@perlInterpMatch,perlAnglesDQ keepend extend
|
||||
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*\[+ end=+\][msixpodualgc]*+ contains=@perlInterpMatch,perlComment,perlBracketsDQ keepend extend
|
||||
|
||||
" Below some hacks to recognise the // variant. This is virtually impossible to catch in all
|
||||
" cases as the / is used in so many other ways, but these should be the most obvious ones.
|
||||
syn region perlMatch matchgroup=perlMatchStartEnd start="\%([$@%&*]\@<!\%(\<split\|\<while\|\<if\|\<unless\|\.\.\|[-+*!~(\[{=]\)\s*\)\@<=/\%(/=\)\@!" start=+^/\%(/=\)\@!+ start=+\s\@<=/\%(/=\)\@![^[:space:][:digit:]$@%=]\@=\%(/\_s*\%([([{$@%&*[:digit:]"'`]\|\_s\w\|[[:upper:]_abd-fhjklnqrt-wyz]\)\)\@!+ skip=+\\/+ end=+/[msixpodualgc]*+ contains=@perlInterpSlash extend
|
||||
|
||||
|
||||
" Substitutions
|
||||
" perlMatch is the first part, perlSubstitution* is the substitution part
|
||||
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionGQQ keepend extend
|
||||
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*'+ end=+'+me=e-1 contains=@perlInterpSQ nextgroup=perlSubstitutionSQ keepend extend
|
||||
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*/+ end=+/+me=e-1 contains=@perlInterpSlash nextgroup=perlSubstitutionGQQ keepend extend
|
||||
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s#+ end=+#+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionGQQ keepend extend
|
||||
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*(+ end=+)+ contains=@perlInterpMatch,perlParensDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend
|
||||
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*<+ end=+>+ contains=@perlInterpMatch,perlAnglesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend
|
||||
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*\[+ end=+\]+ contains=@perlInterpMatch,perlBracketsDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend
|
||||
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*{+ end=+}+ contains=@perlInterpMatch,perlBracesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend
|
||||
syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+\z([^[:space:]'([{<]\)+ end=+\z1[msixpodualgcer]*+ keepend contained contains=@perlInterpDQ extend
|
||||
syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+(+ end=+)[msixpodualgcer]*+ contained contains=@perlInterpDQ,perlParensDQ keepend extend
|
||||
syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+\[+ end=+\][msixpodualgcer]*+ contained contains=@perlInterpDQ,perlBracketsDQ keepend extend
|
||||
syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+{+ end=+}[msixpodualgcer]*+ contained contains=@perlInterpDQ,perlBracesDQ keepend extend extend
|
||||
syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+<+ end=+>[msixpodualgcer]*+ contained contains=@perlInterpDQ,perlAnglesDQ keepend extend
|
||||
syn region perlSubstitutionSQ matchgroup=perlMatchStartEnd start=+'+ end=+'[msixpodualgcer]*+ contained contains=@perlInterpSQ keepend extend
|
||||
|
||||
" Translations
|
||||
" perlMatch is the first part, perlTranslation* is the second, translator part.
|
||||
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\>\s*\z([^[:space:]([{<#]\)+ end=+\z1+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationGQ
|
||||
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)#+ end=+#+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationGQ
|
||||
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
|
||||
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
|
||||
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
|
||||
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
|
||||
syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+\z([^[:space:]([{<]\)+ end=+\z1[cdsr]*+ contained
|
||||
syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+(+ end=+)[cdsr]*+ contains=perlParensSQ contained
|
||||
syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+\[+ end=+\][cdsr]*+ contains=perlBracketsSQ contained
|
||||
syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+{+ end=+}[cdsr]*+ contains=perlBracesSQ contained
|
||||
syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+<+ end=+>[cdsr]*+ contains=perlAnglesSQ contained
|
||||
|
||||
|
||||
" Strings and q, qq, qw and qr expressions
|
||||
|
||||
syn region perlStringUnexpanded matchgroup=perlStringStartEnd start="'" end="'" contains=@perlInterpSQ keepend extend
|
||||
syn region perlString matchgroup=perlStringStartEnd start=+"+ end=+"+ contains=@perlInterpDQ keepend extend
|
||||
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpSQ keepend extend
|
||||
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q#+ end=+#+ contains=@perlInterpSQ keepend extend
|
||||
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ keepend extend
|
||||
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend extend
|
||||
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend extend
|
||||
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend extend
|
||||
|
||||
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpDQ keepend extend
|
||||
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]#+ end=+#+ contains=@perlInterpDQ keepend extend
|
||||
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*(+ end=+)+ contains=@perlInterpDQ,perlParensDQ keepend extend
|
||||
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*\[+ end=+\]+ contains=@perlInterpDQ,perlBracketsDQ keepend extend
|
||||
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*{+ end=+}+ contains=@perlInterpDQ,perlBracesDQ keepend extend
|
||||
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*<+ end=+>+ contains=@perlInterpDQ,perlAnglesDQ keepend extend
|
||||
|
||||
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpSQ keepend extend
|
||||
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw#+ end=+#+ contains=@perlInterpSQ keepend extend
|
||||
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ keepend extend
|
||||
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend extend
|
||||
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend extend
|
||||
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend extend
|
||||
|
||||
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\>\s*\z([^[:space:]#([{<'/]\)+ end=+\z1[imosx]*+ contains=@perlInterpMatch keepend extend
|
||||
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*/+ end=+/[imosx]*+ contains=@perlInterpSlash keepend extend
|
||||
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr#+ end=+#[imosx]*+ contains=@perlInterpMatch keepend extend
|
||||
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*'+ end=+'[imosx]*+ contains=@perlInterpSQ keepend extend
|
||||
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*(+ end=+)[imosx]*+ contains=@perlInterpMatch,perlParensDQ keepend extend
|
||||
|
||||
" A special case for qr{}, qr<> and qr[] which allows for comments and extra whitespace in the pattern
|
||||
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*{+ end=+}[imosx]*+ contains=@perlInterpMatch,perlBracesDQ,perlComment keepend extend
|
||||
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*<+ end=+>[imosx]*+ contains=@perlInterpMatch,perlAnglesDQ,perlComment keepend extend
|
||||
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*\[+ end=+\][imosx]*+ contains=@perlInterpMatch,perlBracketsDQ,perlComment keepend extend
|
||||
|
||||
" Constructs such as print <<EOF [...] EOF, 'here' documents
|
||||
"
|
||||
" XXX Any statements after the identifier are in perlString colour (i.e.
|
||||
" 'if $a' in 'print <<EOF if $a'). This is almost impossible to get right it
|
||||
" seems due to the 'auto-extending nature' of regions.
|
||||
if exists("perl_fold")
|
||||
syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\z(\I\i*\).*+ end=+^\z1$+ contains=@perlInterpDQ fold extend
|
||||
syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ end=+^\z1$+ contains=@perlInterpDQ fold extend
|
||||
syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ end=+^\z1$+ contains=@perlInterpSQ fold extend
|
||||
syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*""+ end=+^$+ contains=@perlInterpDQ,perlNotEmptyLine fold extend
|
||||
syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*''+ end=+^$+ contains=@perlInterpSQ,perlNotEmptyLine fold extend
|
||||
syn region perlAutoload matchgroup=perlStringStartEnd start=+<<\s*\(['"]\=\)\z(END_\%(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\z1$+ contains=ALL fold extend
|
||||
else
|
||||
syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\z(\I\i*\).*+ end=+^\z1$+ contains=@perlInterpDQ
|
||||
syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ end=+^\z1$+ contains=@perlInterpDQ
|
||||
syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ end=+^\z1$+ contains=@perlInterpSQ
|
||||
syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*""+ end=+^$+ contains=@perlInterpDQ,perlNotEmptyLine
|
||||
syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*''+ end=+^$+ contains=@perlInterpSQ,perlNotEmptyLine
|
||||
syn region perlAutoload matchgroup=perlStringStartEnd start=+<<\s*\(['"]\=\)\z(END_\%(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\z1$+ contains=ALL
|
||||
endif
|
||||
|
||||
|
||||
" Class declarations
|
||||
"
|
||||
syn match perlPackageDecl "\<package\s\+\%(\h\|::\)\%(\w\|::\)*" contains=perlStatementPackage
|
||||
syn keyword perlStatementPackage package contained
|
||||
|
||||
" Functions
|
||||
" sub [name] [(prototype)] {
|
||||
"
|
||||
syn match perlSubError "[^[:space:];{#]" contained
|
||||
if v:version == 701 && !has('patch221') " XXX I hope that's the right one
|
||||
syn match perlSubAttributes ":" contained
|
||||
else
|
||||
syn match perlSubAttributesCont "\h\w*\_s*\%(:\_s*\)\=" nextgroup=@perlSubAttrMaybe contained
|
||||
syn region perlSubAttributesCont matchgroup=perlSubAttributesCont start="\h\w*(" end=")\_s*\%(:\_s*\)\=" nextgroup=@perlSubAttrMaybe contained contains=@perlInterpSQ,perlParensSQ
|
||||
syn cluster perlSubAttrMaybe contains=perlSubAttributesCont,perlSubError,perlFakeGroup
|
||||
syn match perlSubAttributes "" contained nextgroup=perlSubError
|
||||
syn match perlSubAttributes ":\_s*" contained nextgroup=@perlSubAttrMaybe
|
||||
endif
|
||||
syn match perlSubPrototypeError "(\%(\_s*\%(\%(\\\%([$@%&*]\|\[[$@%&*]\+\]\)\|[$&*]\|[@%]\%(\_s*)\)\@=\|;\%(\_s*[)$@%&*\\]\)\@=\|_\%(\_s*[);]\)\@=\)\_s*\)*\)\@>\zs\_[^)]\+" contained
|
||||
syn match perlSubPrototype +(\_[^)]*)\_s*\|+ nextgroup=perlSubAttributes,perlComment contained contains=perlSubPrototypeError
|
||||
syn match perlSubName +\%(\h\|::\|'\w\)\%(\w\|::\|'\w\)*\_s*\|+ contained nextgroup=perlSubPrototype,perlComment
|
||||
|
||||
syn match perlFunction +\<sub\>\_s*+ nextgroup=perlSubName
|
||||
|
||||
if !exists("perl_no_scope_in_variables")
|
||||
syn match perlFunctionPRef "\h\w*::" contained
|
||||
syn match perlFunctionName "\h\w*[^:]" contained
|
||||
else
|
||||
syn match perlFunctionName "\h[[:alnum:]_:]*" contained
|
||||
endif
|
||||
|
||||
" The => operator forces a bareword to the left of it to be interpreted as
|
||||
" a string
|
||||
syn match perlString "\I\@<!-\?\I\i*\%(\s*=>\)\@="
|
||||
|
||||
" All other # are comments, except ^#!
|
||||
syn match perlComment "#.*" contains=perlTodo,@Spell extend
|
||||
syn match perlSharpBang "^#!.*"
|
||||
|
||||
" Formats
|
||||
syn region perlFormat matchgroup=perlStatementIOFunc start="^\s*\<format\s\+\k\+\s*=\s*$"rs=s+6 end="^\s*\.\s*$" contains=perlFormatName,perlFormatField,perlVarPlain,perlVarPlain2
|
||||
syn match perlFormatName "format\s\+\k\+\s*="lc=7,me=e-1 contained
|
||||
syn match perlFormatField "[@^][|<>~]\+\%(\.\.\.\)\=" contained
|
||||
syn match perlFormatField "[@^]#[#.]*" contained
|
||||
syn match perlFormatField "@\*" contained
|
||||
syn match perlFormatField "@[^A-Za-z_|<>~#*]"me=e-1 contained
|
||||
syn match perlFormatField "@$" contained
|
||||
|
||||
" __END__ and __DATA__ clauses
|
||||
if exists("perl_fold")
|
||||
syntax region perlDATA start="^__DATA__$" skip="." end="." fold
|
||||
syntax region perlDATA start="^__END__$" skip="." end="." contains=perlPOD,@perlDATA fold
|
||||
else
|
||||
syntax region perlDATA start="^__DATA__$" skip="." end="."
|
||||
syntax region perlDATA start="^__END__$" skip="." end="." contains=perlPOD,@perlDATA
|
||||
endif
|
||||
|
||||
"
|
||||
" Folding
|
||||
|
||||
if exists("perl_fold")
|
||||
" Note: this bit must come before the actual highlighting of the "package"
|
||||
" keyword, otherwise this will screw up Pod lines that match /^package/
|
||||
if !exists("perl_nofold_packages")
|
||||
syn region perlPackageFold start="^package \S\+;\s*\%(#.*\)\=$" end="^1;\=\s*\%(#.*\)\=$" end="\n\+package"me=s-1 transparent fold keepend
|
||||
endif
|
||||
if !exists("perl_nofold_subs")
|
||||
if exists("perl_fold_anonymous_subs") && perl_fold_anonymous_subs
|
||||
syn region perlSubFold start="\<sub\>[^\n;]*{" end="}" transparent fold keepend extend
|
||||
syn region perlSubFold start="\<\%(BEGIN\|END\|CHECK\|INIT\)\>\s*{" end="}" transparent fold keepend
|
||||
else
|
||||
syn region perlSubFold start="^\z(\s*\)\<sub\>.*[^};]$" end="^\z1}\s*\%(#.*\)\=$" transparent fold keepend
|
||||
syn region perlSubFold start="^\z(\s*\)\<\%(BEGIN\|END\|CHECK\|INIT\|UNITCHECK\)\>.*[^};]$" end="^\z1}\s*$" transparent fold keepend
|
||||
endif
|
||||
endif
|
||||
|
||||
if exists("perl_fold_blocks")
|
||||
syn region perlBlockFold start="^\z(\s*\)\%(if\|elsif\|unless\|for\|while\|until\|given\)\s*(.*)\%(\s*{\)\=\s*\%(#.*\)\=$" start="^\z(\s*\)foreach\s*\%(\%(my\|our\)\=\s*\S\+\s*\)\=(.*)\%(\s*{\)\=\s*\%(#.*\)\=$" end="^\z1}\s*;\=\%(#.*\)\=$" transparent fold keepend
|
||||
syn region perlBlockFold start="^\z(\s*\)\%(do\|else\)\%(\s*{\)\=\s*\%(#.*\)\=$" end="^\z1}\s*while" end="^\z1}\s*;\=\%(#.*\)\=$" transparent fold keepend
|
||||
endif
|
||||
|
||||
setlocal foldmethod=syntax
|
||||
syn sync fromstart
|
||||
else
|
||||
" fromstart above seems to set minlines even if perl_fold is not set.
|
||||
syn sync minlines=0
|
||||
endif
|
||||
|
||||
command -nargs=+ HiLink hi def link <args>
|
||||
|
||||
" NOTE: If you're linking new highlight groups to perlString, please also put
|
||||
" them into b:match_skip in ftplugin/perl.vim.
|
||||
|
||||
" The default highlighting.
|
||||
HiLink perlSharpBang PreProc
|
||||
HiLink perlControl PreProc
|
||||
HiLink perlInclude Include
|
||||
HiLink perlSpecial Special
|
||||
HiLink perlString String
|
||||
HiLink perlCharacter Character
|
||||
HiLink perlNumber Number
|
||||
HiLink perlFloat Float
|
||||
HiLink perlType Type
|
||||
HiLink perlIdentifier Identifier
|
||||
HiLink perlLabel Label
|
||||
HiLink perlStatement Statement
|
||||
HiLink perlConditional Conditional
|
||||
HiLink perlRepeat Repeat
|
||||
HiLink perlOperator Operator
|
||||
HiLink perlFunction Keyword
|
||||
HiLink perlSubName Function
|
||||
HiLink perlSubPrototype Type
|
||||
HiLink perlSubAttributes PreProc
|
||||
HiLink perlSubAttributesCont perlSubAttributes
|
||||
HiLink perlComment Comment
|
||||
HiLink perlTodo Todo
|
||||
if exists("perl_string_as_statement")
|
||||
HiLink perlStringStartEnd perlStatement
|
||||
else
|
||||
HiLink perlStringStartEnd perlString
|
||||
endif
|
||||
HiLink perlVStringV perlStringStartEnd
|
||||
HiLink perlList perlStatement
|
||||
HiLink perlMisc perlStatement
|
||||
HiLink perlVarPlain perlIdentifier
|
||||
HiLink perlVarPlain2 perlIdentifier
|
||||
HiLink perlArrow perlIdentifier
|
||||
HiLink perlFiledescRead perlIdentifier
|
||||
HiLink perlFiledescStatement perlIdentifier
|
||||
HiLink perlVarSimpleMember perlIdentifier
|
||||
HiLink perlVarSimpleMemberName perlString
|
||||
HiLink perlVarNotInMatches perlIdentifier
|
||||
HiLink perlVarSlash perlIdentifier
|
||||
HiLink perlQQ perlString
|
||||
HiLink perlHereDoc perlString
|
||||
HiLink perlStringUnexpanded perlString
|
||||
HiLink perlSubstitutionSQ perlString
|
||||
HiLink perlSubstitutionGQQ perlString
|
||||
HiLink perlTranslationGQ perlString
|
||||
HiLink perlMatch perlString
|
||||
HiLink perlMatchStartEnd perlStatement
|
||||
HiLink perlFormatName perlIdentifier
|
||||
HiLink perlFormatField perlString
|
||||
HiLink perlPackageDecl perlType
|
||||
HiLink perlStorageClass perlType
|
||||
HiLink perlPackageRef perlType
|
||||
HiLink perlStatementPackage perlStatement
|
||||
HiLink perlStatementStorage perlStatement
|
||||
HiLink perlStatementControl perlStatement
|
||||
HiLink perlStatementScalar perlStatement
|
||||
HiLink perlStatementRegexp perlStatement
|
||||
HiLink perlStatementNumeric perlStatement
|
||||
HiLink perlStatementList perlStatement
|
||||
HiLink perlStatementHash perlStatement
|
||||
HiLink perlStatementIOfunc perlStatement
|
||||
HiLink perlStatementFiledesc perlStatement
|
||||
HiLink perlStatementVector perlStatement
|
||||
HiLink perlStatementFiles perlStatement
|
||||
HiLink perlStatementFlow perlStatement
|
||||
HiLink perlStatementInclude perlStatement
|
||||
HiLink perlStatementProc perlStatement
|
||||
HiLink perlStatementSocket perlStatement
|
||||
HiLink perlStatementIPC perlStatement
|
||||
HiLink perlStatementNetwork perlStatement
|
||||
HiLink perlStatementPword perlStatement
|
||||
HiLink perlStatementTime perlStatement
|
||||
HiLink perlStatementMisc perlStatement
|
||||
HiLink perlStatementIndirObj perlStatement
|
||||
HiLink perlFunctionName perlIdentifier
|
||||
HiLink perlMethod perlIdentifier
|
||||
HiLink perlFunctionPRef perlType
|
||||
HiLink perlPOD perlComment
|
||||
HiLink perlShellCommand perlString
|
||||
HiLink perlSpecialAscii perlSpecial
|
||||
HiLink perlSpecialDollar perlSpecial
|
||||
HiLink perlSpecialString perlSpecial
|
||||
HiLink perlSpecialStringU perlSpecial
|
||||
HiLink perlSpecialMatch perlSpecial
|
||||
HiLink perlDATA perlComment
|
||||
|
||||
" NOTE: Due to a bug in Vim (or more likely, a misunderstanding on my part),
|
||||
" I had to remove the transparent property from the following regions
|
||||
" in order to get them to highlight correctly. Feel free to remove
|
||||
" these and reinstate the transparent property if you know how.
|
||||
HiLink perlParensSQ perlString
|
||||
HiLink perlBracketsSQ perlString
|
||||
HiLink perlBracesSQ perlString
|
||||
HiLink perlAnglesSQ perlString
|
||||
|
||||
HiLink perlParensDQ perlString
|
||||
HiLink perlBracketsDQ perlString
|
||||
HiLink perlBracesDQ perlString
|
||||
HiLink perlAnglesDQ perlString
|
||||
|
||||
HiLink perlSpecialStringU2 perlString
|
||||
|
||||
" Possible errors
|
||||
HiLink perlNotEmptyLine Error
|
||||
HiLink perlElseIfError Error
|
||||
HiLink perlSubPrototypeError Error
|
||||
HiLink perlSubError Error
|
||||
|
||||
delcommand HiLink
|
||||
|
||||
" Syncing to speed up processing
|
||||
"
|
||||
if !exists("perl_no_sync_on_sub")
|
||||
syn sync match perlSync grouphere NONE "^\s*\<package\s"
|
||||
syn sync match perlSync grouphere NONE "^\s*\<sub\>"
|
||||
syn sync match perlSync grouphere NONE "^}"
|
||||
endif
|
||||
|
||||
if !exists("perl_no_sync_on_global_var")
|
||||
syn sync match perlSync grouphere NONE "^$\I[[:alnum:]_:]+\s*=\s*{"
|
||||
syn sync match perlSync grouphere NONE "^[@%]\I[[:alnum:]_:]+\s*=\s*("
|
||||
endif
|
||||
|
||||
if exists("perl_sync_dist")
|
||||
execute "syn sync maxlines=" . perl_sync_dist
|
||||
else
|
||||
syn sync maxlines=100
|
||||
endif
|
||||
|
||||
syn sync match perlSyncPOD grouphere perlPOD "^=pod"
|
||||
syn sync match perlSyncPOD grouphere perlPOD "^=head"
|
||||
syn sync match perlSyncPOD grouphere perlPOD "^=item"
|
||||
syn sync match perlSyncPOD grouphere NONE "^=cut"
|
||||
|
||||
let b:current_syntax = "perl"
|
||||
|
||||
if exists('®expengine')
|
||||
let ®expengine=s:regexpengine
|
||||
unlet s:regexpengine
|
||||
endif
|
||||
|
||||
let &cpo = s:cpo_save
|
||||
unlet s:cpo_save
|
||||
|
||||
" XXX Change to sts=4:sw=4
|
||||
" vim:ts=8:sts=2:sw=2:expandtab:ft=vim
|
||||
2255
syntax/perl6.vim
Normal file
2255
syntax/perl6.vim
Normal file
File diff suppressed because it is too large
Load Diff
189
syntax/pod.vim
Normal file
189
syntax/pod.vim
Normal file
@@ -0,0 +1,189 @@
|
||||
" Vim syntax file
|
||||
" Language: Perl POD format
|
||||
" Maintainer: vim-perl <vim-perl@googlegroups.com>
|
||||
" Previously: Scott Bigham <dsb@killerbunnies.org>
|
||||
" Homepage: http://github.com/vim-perl/vim-perl
|
||||
" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
|
||||
" Last Change: {{LAST_CHANGE}}
|
||||
|
||||
" To add embedded POD documentation highlighting to your syntax file, add
|
||||
" the commands:
|
||||
"
|
||||
" syn include @Pod <sfile>:p:h/pod.vim
|
||||
" syn region myPOD start="^=pod" start="^=head" end="^=cut" keepend contained contains=@Pod
|
||||
"
|
||||
" and add myPod to the contains= list of some existing region, probably a
|
||||
" comment. The "keepend" flag is needed because "=cut" is matched as a
|
||||
" pattern in its own right.
|
||||
|
||||
|
||||
" Remove any old syntax stuff hanging around (this is suppressed
|
||||
" automatically by ":syn include" if necessary).
|
||||
" For version 5.x: Clear all syntax items
|
||||
" For version 6.x: Quit when a syntax file was already loaded
|
||||
if version < 600
|
||||
syntax clear
|
||||
elseif exists("b:current_syntax")
|
||||
finish
|
||||
endif
|
||||
|
||||
let s:cpo_save = &cpo
|
||||
set cpo&vim
|
||||
|
||||
" POD commands
|
||||
syn match podCommand "^=encoding" nextgroup=podCmdText contains=@NoSpell
|
||||
syn match podCommand "^=head[1234]" nextgroup=podCmdText contains=@NoSpell
|
||||
syn match podCommand "^=item" nextgroup=podCmdText contains=@NoSpell
|
||||
syn match podCommand "^=over" nextgroup=podOverIndent skipwhite contains=@NoSpell
|
||||
syn match podCommand "^=back" contains=@NoSpell
|
||||
syn match podCommand "^=cut" contains=@NoSpell
|
||||
syn match podCommand "^=pod" contains=@NoSpell
|
||||
syn match podCommand "^=for" nextgroup=podForKeywd skipwhite contains=@NoSpell
|
||||
syn match podCommand "^=begin" nextgroup=podForKeywd skipwhite contains=@NoSpell
|
||||
syn match podCommand "^=end" nextgroup=podForKeywd skipwhite contains=@NoSpell
|
||||
|
||||
" Text of a =head1, =head2 or =item command
|
||||
syn match podCmdText ".*$" contained contains=podFormat,@NoSpell
|
||||
|
||||
" Indent amount of =over command
|
||||
syn match podOverIndent "\d\+" contained contains=@NoSpell
|
||||
|
||||
" Formatter identifier keyword for =for, =begin and =end commands
|
||||
syn match podForKeywd "\S\+" contained contains=@NoSpell
|
||||
|
||||
" An indented line, to be displayed verbatim
|
||||
syn match podVerbatimLine "^\s.*$" contains=@NoSpell
|
||||
|
||||
" Inline textual items handled specially by POD
|
||||
syn match podSpecial "\(\<\|&\)\I\i*\(::\I\i*\)*([^)]*)" contains=@NoSpell
|
||||
syn match podSpecial "[$@%]\I\i*\(::\I\i*\)*\>" contains=@NoSpell
|
||||
|
||||
" Special formatting sequences
|
||||
syn region podFormat start="[IBSCLFX]<[^<]"me=e-1 end=">" oneline contains=podFormat,@NoSpell
|
||||
syn region podFormat start="[IBSCLFX]<<\s" end="\s>>" oneline contains=podFormat,@NoSpell
|
||||
syn match podFormat "Z<>"
|
||||
syn match podFormat "E<\(\d\+\|\I\i*\)>" contains=podEscape,podEscape2,@NoSpell
|
||||
syn match podEscape "\I\i*>"me=e-1 contained contains=@NoSpell
|
||||
syn match podEscape2 "\d\+>"me=e-1 contained contains=@NoSpell
|
||||
|
||||
" Define the default highlighting.
|
||||
" For version 5.7 and earlier: only when not done already
|
||||
" For version 5.8 and later: only when an item doesn't have highlighting yet
|
||||
if version >= 508 || !exists("did_pod_syntax_inits")
|
||||
if version < 508
|
||||
let did_pod_syntax_inits = 1
|
||||
command -nargs=+ HiLink hi link <args>
|
||||
else
|
||||
command -nargs=+ HiLink hi def link <args>
|
||||
endif
|
||||
|
||||
HiLink podCommand Statement
|
||||
HiLink podCmdText String
|
||||
HiLink podOverIndent Number
|
||||
HiLink podForKeywd Identifier
|
||||
HiLink podFormat Identifier
|
||||
HiLink podVerbatimLine PreProc
|
||||
HiLink podSpecial Identifier
|
||||
HiLink podEscape String
|
||||
HiLink podEscape2 Number
|
||||
|
||||
delcommand HiLink
|
||||
endif
|
||||
|
||||
if exists("perl_pod_spellcheck_headings")
|
||||
" Spell-check headings
|
||||
syn clear podCmdText
|
||||
syn match podCmdText ".*$" contained contains=podFormat
|
||||
endif
|
||||
|
||||
if exists("perl_pod_formatting")
|
||||
" By default, escapes like C<> are not checked for spelling. Remove B<>
|
||||
" and I<> from the list of escapes.
|
||||
syn clear podFormat
|
||||
syn region podFormat start="[CLF]<[^<]"me=e-1 end=">" oneline contains=podFormat,@NoSpell
|
||||
syn region podFormat start="[CLF]<<\s" end="\s>>" oneline contains=podFormat,@NoSpell
|
||||
|
||||
" Don't spell-check inside E<>, but ensure that the E< itself isn't
|
||||
" marked as a spelling mistake.
|
||||
syn match podFormat "E<\(\d\+\|\I\i*\)>" contains=podEscape,podEscape2,@NoSpell
|
||||
|
||||
" Z<> is a mock formatting code. Ensure Z<> on its own isn't marked as a
|
||||
" spelling mistake.
|
||||
syn match podFormat "Z<>" contains=podEscape,podEscape2,@NoSpell
|
||||
|
||||
" These are required so that whatever is *within* B<...>, I<...>, etc. is
|
||||
" spell-checked, but not the B, I, ... itself.
|
||||
syn match podBoldOpen "B<" contains=@NoSpell
|
||||
syn match podItalicOpen "I<" contains=@NoSpell
|
||||
syn match podNoSpaceOpen "S<" contains=@NoSpell
|
||||
syn match podIndexOpen "X<" contains=@NoSpell
|
||||
|
||||
" Same as above but for the << >> syntax.
|
||||
syn match podBoldAlternativeDelimOpen "B<< " contains=@NoSpell
|
||||
syn match podItalicAlternativeDelimOpen "I<< " contains=@NoSpell
|
||||
syn match podNoSpaceAlternativeDelimOpen "S<< " contains=@NoSpell
|
||||
syn match podIndexAlternativeDelimOpen "X<< " contains=@NoSpell
|
||||
|
||||
" Add support for spell checking text inside B<>, I<>, S<> and X<>.
|
||||
syn region podBold start="B<[^<]"me=e end=">" oneline contains=podBoldItalic,podBoldOpen
|
||||
syn region podBoldAlternativeDelim start="B<<\s" end="\s>>" oneline contains=podBoldAlternativeDelimOpen
|
||||
|
||||
syn region podItalic start="I<[^<]"me=e end=">" oneline contains=podItalicBold,podItalicOpen
|
||||
syn region podItalicAlternativeDelim start="I<<\s" end="\s>>" oneline contains=podItalicAlternativeDelimOpen
|
||||
|
||||
" Nested bold/italic and vice-versa
|
||||
syn region podBoldItalic contained start="I<[^<]"me=e end=">" oneline
|
||||
syn region podItalicBold contained start="B<[^<]"me=e end=">" oneline
|
||||
|
||||
syn region podNoSpace start="S<[^<]"ms=s-2 end=">"me=e oneline contains=podNoSpaceOpen
|
||||
syn region podNoSpaceAlternativeDelim start="S<<\s"ms=s-2 end="\s>>"me=e oneline contains=podNoSpaceAlternativeDelimOpen
|
||||
|
||||
syn region podIndex start="X<[^<]"ms=s-2 end=">"me=e oneline contains=podIndexOpen
|
||||
syn region podIndexAlternativeDelim start="X<<\s"ms=s-2 end="\s>>"me=e oneline contains=podIndexAlternativeDelimOpen
|
||||
|
||||
" Restore this (otherwise B<> is shown as bold inside verbatim)
|
||||
syn match podVerbatimLine "^\s.*$" contains=@NoSpell
|
||||
|
||||
" Ensure formatted text can be displayed in headings and items
|
||||
syn clear podCmdText
|
||||
|
||||
if exists("perl_pod_spellcheck_headings")
|
||||
syn match podCmdText ".*$" contained contains=podFormat,podBold,
|
||||
\podBoldAlternativeDelim,podItalic,podItalicAlternativeDelim,
|
||||
\podBoldOpen,podItalicOpen,podBoldAlternativeDelimOpen,
|
||||
\podItalicAlternativeDelimOpen,podNoSpaceOpen
|
||||
else
|
||||
syn match podCmdText ".*$" contained contains=podFormat,podBold,
|
||||
\podBoldAlternativeDelim,podItalic,podItalicAlternativeDelim,
|
||||
\@NoSpell
|
||||
endif
|
||||
|
||||
" Specify how to display these
|
||||
hi def podBold term=bold cterm=bold gui=bold
|
||||
|
||||
hi link podBoldAlternativeDelim podBold
|
||||
hi link podBoldAlternativeDelimOpen podBold
|
||||
hi link podBoldOpen podBold
|
||||
|
||||
hi link podNoSpace Identifier
|
||||
hi link podNoSpaceAlternativeDelim Identifier
|
||||
|
||||
hi link podIndex Identifier
|
||||
hi link podIndexAlternativeDelim Identifier
|
||||
|
||||
hi def podItalic term=italic cterm=italic gui=italic
|
||||
|
||||
hi link podItalicAlternativeDelim podItalic
|
||||
hi link podItalicAlternativeDelimOpen podItalic
|
||||
hi link podItalicOpen podItalic
|
||||
|
||||
hi def podBoldItalic term=italic,bold cterm=italic,bold gui=italic,bold
|
||||
hi def podItalicBold term=italic,bold cterm=italic,bold gui=italic,bold
|
||||
endif
|
||||
|
||||
let b:current_syntax = "pod"
|
||||
|
||||
let &cpo = s:cpo_save
|
||||
unlet s:cpo_save
|
||||
|
||||
" vim: ts=8
|
||||
251
syntax/rust.vim
Normal file
251
syntax/rust.vim
Normal file
@@ -0,0 +1,251 @@
|
||||
" Vim syntax file
|
||||
" Language: Rust
|
||||
" Maintainer: Patrick Walton <pcwalton@mozilla.com>
|
||||
" Maintainer: Ben Blum <bblum@cs.cmu.edu>
|
||||
" Maintainer: Chris Morgan <me@chrismorgan.info>
|
||||
" Last Change: 2013 Sep 4
|
||||
|
||||
if version < 600
|
||||
syntax clear
|
||||
elseif exists("b:current_syntax")
|
||||
finish
|
||||
endif
|
||||
|
||||
" Syntax definitions {{{1
|
||||
" Basic keywords {{{2
|
||||
syn keyword rustConditional match if else
|
||||
syn keyword rustOperator as
|
||||
|
||||
syn match rustAssert "\<assert\(\w\)*!" contained
|
||||
syn match rustFail "\<fail\(\w\)*!" contained
|
||||
syn keyword rustKeyword break do extern
|
||||
syn keyword rustKeyword in if impl let log
|
||||
syn keyword rustKeyword for impl let log
|
||||
syn keyword rustKeyword loop mod once priv pub
|
||||
syn keyword rustKeyword return
|
||||
syn keyword rustKeyword unsafe while
|
||||
syn keyword rustKeyword use nextgroup=rustModPath skipwhite
|
||||
" FIXME: Scoped impl's name is also fallen in this category
|
||||
syn keyword rustKeyword mod trait struct enum type nextgroup=rustIdentifier skipwhite
|
||||
syn keyword rustKeyword fn nextgroup=rustFuncName skipwhite
|
||||
syn keyword rustStorage const mut ref static
|
||||
|
||||
syn match rustIdentifier contains=rustIdentifierPrime "\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*" display contained
|
||||
syn match rustFuncName "\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*" display contained
|
||||
|
||||
" Reserved (but not yet used) keywords {{{2
|
||||
syn keyword rustKeyword alignof be offsetof pure sizeof typeof yield
|
||||
|
||||
" Built-in types {{{2
|
||||
syn keyword rustType int uint float char bool u8 u16 u32 u64 f32
|
||||
syn keyword rustType f64 i8 i16 i32 i64 str Self
|
||||
|
||||
" Things from the prelude (src/libstd/prelude.rs) {{{2
|
||||
" This section is just straight transformation of the contents of the prelude,
|
||||
" to make it easy to update.
|
||||
|
||||
" Core operators {{{3
|
||||
syn keyword rustEnum Either
|
||||
syn keyword rustEnumVariant Left Right
|
||||
syn keyword rustTrait Sized
|
||||
syn keyword rustTrait Freeze Send
|
||||
syn keyword rustTrait Add Sub Mul Div Rem Neg Not
|
||||
syn keyword rustTrait BitAnd BitOr BitXor
|
||||
syn keyword rustTrait Drop
|
||||
syn keyword rustTrait Shl Shr Index
|
||||
syn keyword rustEnum Option
|
||||
syn keyword rustEnumVariant Some None
|
||||
syn keyword rustEnum Result
|
||||
syn keyword rustEnumVariant Ok Err
|
||||
|
||||
" Functions {{{3
|
||||
"syn keyword rustFunction print println
|
||||
"syn keyword rustFunction range
|
||||
|
||||
" Types and traits {{{3
|
||||
syn keyword rustTrait ToCStr
|
||||
syn keyword rustTrait Clone DeepClone
|
||||
syn keyword rustTrait Eq ApproxEq Ord TotalEq TotalOrd Ordering Equiv
|
||||
syn keyword rustEnumVariant Less Equal Greater
|
||||
syn keyword rustTrait Char
|
||||
syn keyword rustTrait Container Mutable Map MutableMap Set MutableSet
|
||||
syn keyword rustTrait Hash
|
||||
syn keyword rustTrait Times
|
||||
syn keyword rustTrait FromIterator Extendable
|
||||
syn keyword rustTrait Iterator DoubleEndedIterator RandomAccessIterator ClonableIterator
|
||||
syn keyword rustTrait OrdIterator MutableDoubleEndedIterator ExactSize
|
||||
syn keyword rustTrait Num NumCast CheckedAdd CheckedSub CheckedMul
|
||||
syn keyword rustTrait Orderable Signed Unsigned Round
|
||||
syn keyword rustTrait Algebraic Trigonometric Exponential Hyperbolic
|
||||
syn keyword rustTrait Integer Fractional Real RealExt
|
||||
syn keyword rustTrait Bitwise BitCount Bounded
|
||||
syn keyword rustTrait Primitive Int Float ToStrRadix
|
||||
syn keyword rustTrait GenericPath
|
||||
syn keyword rustTrait Path
|
||||
syn keyword rustTrait PosixPath
|
||||
syn keyword rustTrait WindowsPath
|
||||
syn keyword rustTrait RawPtr
|
||||
syn keyword rustTrait Ascii AsciiCast OwnedAsciiCast AsciiStr ToBytesConsume
|
||||
syn keyword rustTrait Str StrVector StrSlice OwnedStr
|
||||
syn keyword rustTrait FromStr
|
||||
syn keyword rustTrait IterBytes
|
||||
syn keyword rustTrait ToStr ToStrConsume
|
||||
syn keyword rustTrait CopyableTuple ImmutableTuple
|
||||
syn keyword rustTrait CloneableTuple1 ImmutableTuple1
|
||||
syn keyword rustTrait CloneableTuple2 CloneableTuple3 CloneableTuple4 CloneableTuple5
|
||||
syn keyword rustTrait CloneableTuple6 CloneableTuple7 CloneableTuple8 CloneableTuple9
|
||||
syn keyword rustTrait CloneableTuple10 CloneableTuple11 CloneableTuple12
|
||||
syn keyword rustTrait ImmutableTuple2 ImmutableTuple3 ImmutableTuple4 ImmutableTuple5
|
||||
syn keyword rustTrait ImmutableTuple6 ImmutableTuple7 ImmutableTuple8 ImmutableTuple9
|
||||
syn keyword rustTrait ImmutableTuple10 ImmutableTuple11 ImmutableTuple12
|
||||
syn keyword rustTrait Vector VectorVector CopyableVector ImmutableVector
|
||||
syn keyword rustTrait ImmutableEqVector ImmutableTotalOrdVector ImmutableCopyableVector
|
||||
syn keyword rustTrait OwnedVector OwnedCopyableVector OwnedEqVector MutableVector
|
||||
syn keyword rustTrait Reader ReaderUtil Writer WriterUtil
|
||||
syn keyword rustTrait Default
|
||||
|
||||
"syn keyword rustFunction stream
|
||||
syn keyword rustTrait Port Chan GenericChan GenericSmartChan GenericPort Peekable
|
||||
"syn keyword rustFunction spawn
|
||||
|
||||
syn keyword rustSelf self
|
||||
syn keyword rustBoolean true false
|
||||
|
||||
syn keyword rustConstant Some None " option
|
||||
syn keyword rustConstant Left Right " either
|
||||
syn keyword rustConstant Ok Err " result
|
||||
syn keyword rustConstant Less Equal Greater " Ordering
|
||||
|
||||
" Other syntax {{{2
|
||||
|
||||
" If foo::bar changes to foo.bar, change this ("::" to "\.").
|
||||
" If foo::bar changes to Foo::bar, change this (first "\w" to "\u").
|
||||
syn match rustModPath "\w\(\w\)*::[^<]"he=e-3,me=e-3
|
||||
syn match rustModPath "\w\(\w\)*" contained " only for 'use path;'
|
||||
syn match rustModPathSep "::"
|
||||
|
||||
syn match rustFuncCall "\w\(\w\)*("he=e-1,me=e-1
|
||||
syn match rustFuncCall "\w\(\w\)*::<"he=e-3,me=e-3 " foo::<T>();
|
||||
|
||||
" This is merely a convention; note also the use of [A-Z], restricting it to
|
||||
" latin identifiers rather than the full Unicode uppercase. I have not used
|
||||
" [:upper:] as it depends upon 'noignorecase'
|
||||
"syn match rustCapsIdent display "[A-Z]\w\(\w\)*"
|
||||
|
||||
syn match rustOperator display "\%(+\|-\|/\|*\|=\|\^\|&\||\|!\|>\|<\|%\)=\?"
|
||||
" This one isn't *quite* right, as we could have binary-& with a reference
|
||||
syn match rustSigil display /&\s\+[&~@*][^)= \t\r\n]/he=e-1,me=e-1
|
||||
syn match rustSigil display /[&~@*][^)= \t\r\n]/he=e-1,me=e-1
|
||||
" This isn't actually correct; a closure with no arguments can be `|| { }`.
|
||||
" Last, because the & in && isn't a sigil
|
||||
syn match rustOperator display "&&\|||"
|
||||
|
||||
syn match rustMacro '\w\(\w\)*!' contains=rustAssert,rustFail
|
||||
syn match rustMacro '#\w\(\w\)*' contains=rustAssert,rustFail
|
||||
|
||||
syn match rustFormat display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlLjzt]\|ll\|hh\)\=\([aAbdiuoxXDOUfFeEgGcCsSpn?]\|\[\^\=.[^]]*\]\)" contained
|
||||
syn match rustFormat display "%%" contained
|
||||
syn match rustSpecial display contained /\\\([nrt\\'"]\|x\x\{2}\|u\x\{4}\|U\x\{8}\)/
|
||||
syn match rustStringContinuation display contained /\\\n\s*/
|
||||
syn region rustString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=rustTodo,rustFormat,rustSpecial,rustStringContinuation
|
||||
|
||||
syn region rustAttribute start="#\[" end="\]" contains=rustString,rustDeriving
|
||||
syn region rustDeriving start="deriving(" end=")" contained contains=rustTrait
|
||||
|
||||
" Number literals
|
||||
syn match rustNumber display "\<[0-9][0-9_]*\>"
|
||||
syn match rustNumber display "\<[0-9][0-9_]*\(u\|u8\|u16\|u32\|u64\)\>"
|
||||
syn match rustNumber display "\<[0-9][0-9_]*\(i\|i8\|i16\|i32\|i64\)\>"
|
||||
|
||||
syn match rustHexNumber display "\<0x[a-fA-F0-9_]\+\>"
|
||||
syn match rustHexNumber display "\<0x[a-fA-F0-9_]\+\(u\|u8\|u16\|u32\|u64\)\>"
|
||||
syn match rustHexNumber display "\<0x[a-fA-F0-9_]\+\(i8\|i16\|i32\|i64\)\>"
|
||||
syn match rustBinNumber display "\<0b[01_]\+\>"
|
||||
syn match rustBinNumber display "\<0b[01_]\+\(u\|u8\|u16\|u32\|u64\)\>"
|
||||
syn match rustBinNumber display "\<0b[01_]\+\(i8\|i16\|i32\|i64\)\>"
|
||||
|
||||
syn match rustFloat display "\<[0-9][0-9_]*\(f\|f32\|f64\)\>"
|
||||
syn match rustFloat display "\<[0-9][0-9_]*\([eE][+-]\=[0-9_]\+\)\>"
|
||||
syn match rustFloat display "\<[0-9][0-9_]*\([eE][+-]\=[0-9_]\+\)\(f\|f32\|f64\)\>"
|
||||
syn match rustFloat display "\<[0-9][0-9_]*\.[0-9_]\+\>"
|
||||
syn match rustFloat display "\<[0-9][0-9_]*\.[0-9_]\+\(f\|f32\|f64\)\>"
|
||||
syn match rustFloat display "\<[0-9][0-9_]*\.[0-9_]\+\%([eE][+-]\=[0-9_]\+\)\>"
|
||||
syn match rustFloat display "\<[0-9][0-9_]*\.[0-9_]\+\%([eE][+-]\=[0-9_]\+\)\(f\|f32\|f64\)\>"
|
||||
|
||||
" For the benefit of delimitMate
|
||||
syn region rustLifetimeCandidate display start=/&'\%(\([^'\\]\|\\\(['nrt\\\"]\|x\x\{2}\|u\x\{4}\|U\x\{8}\)\)'\)\@!/ end=/[[:cntrl:][:space:][:punct:]]\@=\|$/ contains=rustSigil,rustLifetime
|
||||
syn region rustGenericRegion display start=/<\%('\|[^[cntrl:][:space:][:punct:]]\)\@=')\S\@=/ end=/>/ contains=rustGenericLifetimeCandidate
|
||||
syn region rustGenericLifetimeCandidate display start=/\%(<\|,\s*\)\@<='/ end=/[[:cntrl:][:space:][:punct:]]\@=\|$/ contains=rustSigil,rustLifetime
|
||||
|
||||
"rustLifetime must appear before rustCharacter, or chars will get the lifetime highlighting
|
||||
syn match rustLifetime display "\'\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*"
|
||||
syn match rustCharacter /'\([^'\\]\|\\\([nrt\\'"]\|x\x\{2}\|u\x\{4}\|U\x\{8}\)\)'/ contains=rustSpecial
|
||||
|
||||
syn region rustCommentML start="/\*" end="\*/" contains=rustTodo
|
||||
syn region rustComment start="//" end="$" contains=rustTodo keepend
|
||||
syn region rustCommentMLDoc start="/\*\%(!\|\*/\@!\)" end="\*/" contains=rustTodo
|
||||
syn region rustCommentDoc start="//[/!]" end="$" contains=rustTodo keepend
|
||||
|
||||
syn keyword rustTodo contained TODO FIXME XXX NB NOTE
|
||||
|
||||
" Folding rules {{{2
|
||||
" Trivial folding rules to begin with.
|
||||
" TODO: use the AST to make really good folding
|
||||
syn region rustFoldBraces start="{" end="}" transparent fold
|
||||
" If you wish to enable this, setlocal foldmethod=syntax
|
||||
" It's not enabled by default as it would drive some people mad.
|
||||
|
||||
" Default highlighting {{{1
|
||||
hi def link rustHexNumber rustNumber
|
||||
hi def link rustBinNumber rustNumber
|
||||
hi def link rustIdentifierPrime rustIdentifier
|
||||
hi def link rustTrait rustType
|
||||
|
||||
hi def link rustSigil StorageClass
|
||||
hi def link rustFormat Special
|
||||
hi def link rustSpecial Special
|
||||
hi def link rustStringContinuation Special
|
||||
hi def link rustString String
|
||||
hi def link rustCharacter Character
|
||||
hi def link rustNumber Number
|
||||
hi def link rustBoolean Boolean
|
||||
hi def link rustEnum rustType
|
||||
hi def link rustEnumVariant rustConstant
|
||||
hi def link rustConstant Constant
|
||||
hi def link rustSelf Constant
|
||||
hi def link rustFloat Float
|
||||
hi def link rustOperator Operator
|
||||
hi def link rustKeyword Keyword
|
||||
hi def link rustConditional Conditional
|
||||
hi def link rustIdentifier Identifier
|
||||
hi def link rustCapsIdent rustIdentifier
|
||||
hi def link rustModPath Include
|
||||
hi def link rustModPathSep Delimiter
|
||||
hi def link rustFunction Function
|
||||
hi def link rustFuncName Function
|
||||
hi def link rustFuncCall Function
|
||||
hi def link rustCommentMLDoc rustCommentDoc
|
||||
hi def link rustCommentDoc SpecialComment
|
||||
hi def link rustCommentML rustComment
|
||||
hi def link rustComment Comment
|
||||
hi def link rustAssert PreCondit
|
||||
hi def link rustFail PreCondit
|
||||
hi def link rustMacro Macro
|
||||
hi def link rustType Type
|
||||
hi def link rustTodo Todo
|
||||
hi def link rustAttribute PreProc
|
||||
hi def link rustDeriving PreProc
|
||||
hi def link rustStorage StorageClass
|
||||
hi def link rustLifetime Special
|
||||
|
||||
" Other Suggestions:
|
||||
" hi rustAttribute ctermfg=cyan
|
||||
" hi rustDeriving ctermfg=cyan
|
||||
" hi rustAssert ctermfg=yellow
|
||||
" hi rustFail ctermfg=red
|
||||
" hi rustMacro ctermfg=magenta
|
||||
|
||||
syn sync minlines=200
|
||||
syn sync maxlines=500
|
||||
|
||||
let b:current_syntax = "rust"
|
||||
210
syntax/tt2.vim
Normal file
210
syntax/tt2.vim
Normal file
@@ -0,0 +1,210 @@
|
||||
" Language: TT2 (Perl Template Toolkit)
|
||||
" Maintainer: vim-perl <vim-perl@googlegroups.com>
|
||||
" Author: Moriki, Atsushi <4woods+vim@gmail.com>
|
||||
" Homepage: http://github.com/vim-perl/vim-perl
|
||||
" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
|
||||
" Last Change: {{LAST_CHANGE}}
|
||||
"
|
||||
" Instration:
|
||||
" put tt2.vim and tt2html.vim in to your syntax diretory.
|
||||
"
|
||||
" add below in your filetype.vim.
|
||||
" au BufNewFile,BufRead *.tt2 setf tt2
|
||||
" or
|
||||
" au BufNewFile,BufRead *.tt2
|
||||
" \ if ( getline(1) . getline(2) . getline(3) =~ '<\chtml' |
|
||||
" \ && getline(1) . getline(2) . getline(3) !~ '<[%?]' ) |
|
||||
" \ || getline(1) =~ '<!DOCTYPE HTML' |
|
||||
" \ setf tt2html |
|
||||
" \ else |
|
||||
" \ setf tt2 |
|
||||
" \ endif
|
||||
"
|
||||
" define START_TAG, END_TAG
|
||||
" "ASP"
|
||||
" :let b:tt2_syn_tags = '<% %>'
|
||||
" "PHP"
|
||||
" :let b:tt2_syn_tags = '<? ?>'
|
||||
" "TT2 and HTML"
|
||||
" :let b:tt2_syn_tags = '\[% %] <!-- -->'
|
||||
"
|
||||
" Changes:
|
||||
" 0.1.3
|
||||
" Changed fileformat from 'dos' to 'unix'
|
||||
" Deleted 'echo' that print obstructive message
|
||||
" 0.1.2
|
||||
" Added block comment syntax
|
||||
" e.g. [%# COMMENT
|
||||
" COMMENT TOO %]
|
||||
" [%# IT'S SAFE %] HERE IS OUTSIDE OF TT2 DIRECTIVE
|
||||
" [% # WRONG!! %] HERE STILL BE COMMENT
|
||||
" 0.1.1
|
||||
" Release
|
||||
" 0.1.0
|
||||
" Internal
|
||||
"
|
||||
" License: follow Vim :help uganda
|
||||
"
|
||||
|
||||
if !exists("b:tt2_syn_tags")
|
||||
let b:tt2_syn_tags = '\[% %]'
|
||||
"let b:tt2_syn_tags = '\[% %] \[\* \*]'
|
||||
endif
|
||||
|
||||
if !exists("b:tt2_syn_inc_perl")
|
||||
let b:tt2_syn_inc_perl = 1
|
||||
endif
|
||||
|
||||
if exists("b:current_syntax")
|
||||
finish
|
||||
endif
|
||||
|
||||
let s:cpo_save = &cpo
|
||||
set cpo&vim
|
||||
|
||||
syn case match
|
||||
|
||||
syn cluster tt2_top_cluster contains=tt2_perlcode,tt2_tag_region
|
||||
|
||||
" TT2 TAG Region
|
||||
if exists("b:tt2_syn_tags")
|
||||
|
||||
let s:str = b:tt2_syn_tags . ' '
|
||||
let s:str = substitute(s:str,'^ \+','','g')
|
||||
let s:str = substitute(s:str,' \+',' ','g')
|
||||
|
||||
while stridx(s:str,' ') > 0
|
||||
|
||||
let s:st = strpart(s:str,0,stridx(s:str,' '))
|
||||
let s:str = substitute(s:str,'[^ ]* ','',"")
|
||||
|
||||
let s:ed = strpart(s:str,0,stridx(s:str,' '))
|
||||
let s:str = substitute(s:str,'[^ ]* ','',"")
|
||||
|
||||
exec 'syn region tt2_tag_region '.
|
||||
\ 'matchgroup=tt2_tag '.
|
||||
\ 'start=+\(' . s:st .'\)[-]\=+ '.
|
||||
\ 'end=+[-]\=\(' . s:ed . '\)+ '.
|
||||
\ 'contains=@tt2_statement_cluster keepend extend'
|
||||
|
||||
exec 'syn region tt2_commentblock_region '.
|
||||
\ 'matchgroup=tt2_tag '.
|
||||
\ 'start=+\(' . s:st .'\)[-]\=\(#\)\@=+ '.
|
||||
\ 'end=+[-]\=\(' . s:ed . '\)+ '.
|
||||
\ 'keepend extend'
|
||||
|
||||
"Include Perl syntax when 'PERL' 'RAWPERL' block
|
||||
if b:tt2_syn_inc_perl
|
||||
syn include @Perl $VIMRUNTIME/syntax/perl.vim
|
||||
exec 'syn region tt2_perlcode '.
|
||||
\ 'start=+\(\(RAW\)\=PERL\s*[-]\=' . s:ed . '\(\n\)\=\)\@<=+ ' .
|
||||
\ 'end=+' . s:st . '[-]\=\s*END+me=s-1 contains=@Perl keepend'
|
||||
endif
|
||||
|
||||
"echo 'TAGS ' . s:st . ' ' . s:ed
|
||||
unlet s:st
|
||||
unlet s:ed
|
||||
endwhile
|
||||
|
||||
else
|
||||
|
||||
syn region tt2_tag_region
|
||||
\ matchgroup=tt2_tag
|
||||
\ start=+\(\[%\)[-]\=+
|
||||
\ end=+[-]\=%\]+
|
||||
\ contains=@tt2_statement_cluster keepend extend
|
||||
|
||||
syn region tt2_commentblock_region
|
||||
\ matchgroup=tt2_tag
|
||||
\ start=+\(\[%\)[-]\=#+
|
||||
\ end=+[-]\=%\]+
|
||||
\ keepend extend
|
||||
|
||||
"Include Perl syntax when 'PERL' 'RAWPERL' block
|
||||
if b:tt2_syn_inc_perl
|
||||
syn include @Perl $VIMRUNTIME/syntax/perl.vim
|
||||
syn region tt2_perlcode
|
||||
\ start=+\(\(RAW\)\=PERL\s*[-]\=%]\(\n\)\=\)\@<=+
|
||||
\ end=+\[%[-]\=\s*END+me=s-1
|
||||
\ contains=@Perl keepend
|
||||
endif
|
||||
endif
|
||||
|
||||
" Directive
|
||||
syn keyword tt2_directive contained
|
||||
\ GET CALL SET DEFAULT DEBUG
|
||||
\ LAST NEXT BREAK STOP BLOCK
|
||||
\ IF IN UNLESS ELSIF FOR FOREACH WHILE SWITCH CASE
|
||||
\ USE PLUGIN MACRO META
|
||||
\ TRY FINAL RETURN LAST
|
||||
\ CLEAR TO STEP AND OR NOT MOD DIV
|
||||
\ ELSE PERL RAWPERL END
|
||||
syn match tt2_directive +|+ contained
|
||||
syn keyword tt2_directive contained nextgroup=tt2_string_q,tt2_string_qq,tt2_blockname skipwhite skipempty
|
||||
\ INSERT INCLUDE PROCESS WRAPPER FILTER
|
||||
\ THROW CATCH
|
||||
syn keyword tt2_directive contained nextgroup=tt2_def_tag skipwhite skipempty
|
||||
\ TAGS
|
||||
|
||||
syn match tt2_def_tag "\S\+\s\+\S\+\|\<\w\+\>" contained
|
||||
|
||||
syn match tt2_variable +\I\w*+ contained
|
||||
syn match tt2_operator "[+*/%:?-]" contained
|
||||
syn match tt2_operator "\<\(mod\|div\|or\|and\|not\)\>" contained
|
||||
syn match tt2_operator "[!=<>]=\=\|&&\|||" contained
|
||||
syn match tt2_operator "\(\s\)\@<=_\(\s\)\@=" contained
|
||||
syn match tt2_operator "=>\|," contained
|
||||
syn match tt2_deref "\([[:alnum:]_)\]}]\s*\)\@<=\." contained
|
||||
syn match tt2_comment +#.*$+ contained extend
|
||||
syn match tt2_func +\<\I\w*\(\s*(\)\@=+ contained nextgroup=tt2_bracket_r skipempty skipwhite
|
||||
"
|
||||
syn region tt2_bracket_r start=+(+ end=+)+ contained contains=@tt2_statement_cluster keepend extend
|
||||
syn region tt2_bracket_b start=+\[+ end=+]+ contained contains=@tt2_statement_cluster keepend extend
|
||||
syn region tt2_bracket_b start=+{+ end=+}+ contained contains=@tt2_statement_cluster keepend extend
|
||||
|
||||
syn region tt2_string_qq start=+"+ end=+"+ skip=+\\"+ contained contains=tt2_ivariable keepend extend
|
||||
syn region tt2_string_q start=+'+ end=+'+ skip=+\\'+ contained keepend extend
|
||||
|
||||
syn match tt2_ivariable +\$\I\w*\>\(\.\I\w*\>\)*+ contained
|
||||
syn match tt2_ivariable +\${\I\w*\>\(\.\I\w*\>\)*}+ contained
|
||||
|
||||
syn match tt2_number "\d\+" contained
|
||||
syn match tt2_number "\d\+\.\d\+" contained
|
||||
syn match tt2_number "0x\x\+" contained
|
||||
syn match tt2_number "0\o\+" contained
|
||||
|
||||
syn match tt2_blockname "\f\+" contained nextgroup=tt2_blockname_joint skipwhite skipempty
|
||||
syn match tt2_blockname "$\w\+" contained contains=tt2_ivariable nextgroup=tt2_blockname_joint skipwhite skipempty
|
||||
syn region tt2_blockname start=+"+ end=+"+ skip=+\\"+ contained contains=tt2_ivariable nextgroup=tt2_blockname_joint keepend skipwhite skipempty
|
||||
syn region tt2_blockname start=+'+ end=+'+ skip=+\\'+ contained nextgroup=tt2_blockname_joint keepend skipwhite skipempty
|
||||
syn match tt2_blockname_joint "+" contained nextgroup=tt2_blockname skipwhite skipempty
|
||||
|
||||
syn cluster tt2_statement_cluster contains=tt2_directive,tt2_variable,tt2_operator,tt2_string_q,tt2_string_qq,tt2_deref,tt2_comment,tt2_func,tt2_bracket_b,tt2_bracket_r,tt2_number
|
||||
|
||||
" Synchronizing
|
||||
syn sync minlines=50
|
||||
|
||||
hi def link tt2_tag Type
|
||||
hi def link tt2_tag_region Type
|
||||
hi def link tt2_commentblock_region Comment
|
||||
hi def link tt2_directive Statement
|
||||
hi def link tt2_variable Identifier
|
||||
hi def link tt2_ivariable Identifier
|
||||
hi def link tt2_operator Statement
|
||||
hi def link tt2_string_qq String
|
||||
hi def link tt2_string_q String
|
||||
hi def link tt2_blockname String
|
||||
hi def link tt2_comment Comment
|
||||
hi def link tt2_func Function
|
||||
hi def link tt2_number Number
|
||||
|
||||
if exists("b:tt2_syn_tags")
|
||||
unlet b:tt2_syn_tags
|
||||
endif
|
||||
|
||||
let b:current_syntax = "tt2"
|
||||
|
||||
let &cpo = s:cpo_save
|
||||
unlet s:cpo_save
|
||||
|
||||
" vim:ts=4:sw=4
|
||||
20
syntax/tt2html.vim
Normal file
20
syntax/tt2html.vim
Normal file
@@ -0,0 +1,20 @@
|
||||
" Language: TT2 embedded with HTML
|
||||
" Maintainer: vim-perl <vim-perl@googlegroups.com>
|
||||
" Author: Moriki, Atsushi <4woods+vim@gmail.com>
|
||||
" Homepage: http://github.com/vim-perl/vim-perl
|
||||
" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
|
||||
" Last Change: {{LAST_CHANGE}}
|
||||
|
||||
if exists("b:current_syntax")
|
||||
finish
|
||||
endif
|
||||
|
||||
runtime! syntax/html.vim
|
||||
unlet b:current_syntax
|
||||
|
||||
runtime! syntax/tt2.vim
|
||||
unlet b:current_syntax
|
||||
|
||||
syn cluster htmlPreProc add=@tt2_top_cluster
|
||||
|
||||
let b:current_syntax = "tt2html"
|
||||
20
syntax/tt2js.vim
Normal file
20
syntax/tt2js.vim
Normal file
@@ -0,0 +1,20 @@
|
||||
" Language: TT2 embedded with Javascript
|
||||
" Maintainer: Andy Lester <andy@petdance.com>
|
||||
" Author: Yates, Peter <pd.yates@gmail.com>
|
||||
" Homepage: http://github.com/vim-perl/vim-perl
|
||||
" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
|
||||
" Last Change: {{LAST_CHANGE}}
|
||||
|
||||
if exists("b:current_syntax")
|
||||
finish
|
||||
endif
|
||||
|
||||
runtime! syntax/javascript.vim
|
||||
unlet b:current_syntax
|
||||
|
||||
runtime! syntax/tt2.vim
|
||||
unlet b:current_syntax
|
||||
|
||||
syn cluster javascriptPreProc add=@tt2_top_cluster
|
||||
|
||||
let b:current_syntax = "tt2js"
|
||||
320
syntax/typescript.vim
Normal file
320
syntax/typescript.vim
Normal file
@@ -0,0 +1,320 @@
|
||||
" Vim syntax file
|
||||
" Language: TypeScript
|
||||
" Author: MicroSoft Open Technologies Inc.
|
||||
" Version: 0.1
|
||||
" Credits: Zhao Yi, Claudio Fleiner, Scott Shattuck, Jose Elera Campana
|
||||
|
||||
if !exists("main_syntax")
|
||||
if version < 600
|
||||
syntax clear
|
||||
elseif exists("b:current_syntax")
|
||||
finish
|
||||
endif
|
||||
let main_syntax = "typescript"
|
||||
endif
|
||||
|
||||
" Drop fold if it set but vim doesn't support it.
|
||||
if version < 600 && exists("typeScript_fold")
|
||||
unlet typeScript_fold
|
||||
endif
|
||||
|
||||
"" dollar sign is permitted anywhere in an identifier
|
||||
setlocal iskeyword+=$
|
||||
|
||||
syntax sync fromstart
|
||||
|
||||
"" syntax coloring for Node.js shebang line
|
||||
syn match shebang "^#!.*/bin/env\s\+node\>"
|
||||
hi link shebang Comment
|
||||
|
||||
"" typeScript comments"{{{
|
||||
syn keyword typeScriptCommentTodo TODO FIXME XXX TBD contained
|
||||
syn match typeScriptLineComment "\/\/.*" contains=@Spell,typeScriptCommentTodo,typeScriptRef
|
||||
syn match typeScriptRef /\/\/\/\s*<reference\s\+.*\/>$/ contains=typeScriptRefD,typeScriptRefS
|
||||
syn region typeScriptRefD start=+"+ skip=+\\\\\|\\"+ end=+"\|$+
|
||||
syn region typeScriptRefS start=+'+ skip=+\\\\\|\\'+ end=+'\|$+
|
||||
|
||||
syn match typeScriptCommentSkip "^[ \t]*\*\($\|[ \t]\+\)"
|
||||
syn region typeScriptComment start="/\*" end="\*/" contains=@Spell,typeScriptCommentTodo
|
||||
"}}}
|
||||
"" JSDoc support start"{{{
|
||||
if !exists("typeScript_ignore_typeScriptdoc")
|
||||
syntax case ignore
|
||||
|
||||
" syntax coloring for JSDoc comments (HTML)
|
||||
"unlet b:current_syntax
|
||||
|
||||
syntax region typeScriptDocComment matchgroup=typeScriptComment start="/\*\*\s*$" end="\*/" contains=typeScriptDocTags,typeScriptCommentTodo,typeScriptCvsTag,@typeScriptHtml,@Spell fold
|
||||
syntax match typeScriptDocTags contained "@\(param\|argument\|requires\|exception\|throws\|type\|class\|extends\|see\|link\|member\|module\|method\|title\|namespace\|optional\|default\|base\|file\)\>" nextgroup=typeScriptDocParam,typeScriptDocSeeTag skipwhite
|
||||
syntax match typeScriptDocTags contained "@\(beta\|deprecated\|description\|fileoverview\|author\|license\|version\|returns\=\|constructor\|private\|protected\|final\|ignore\|addon\|exec\)\>"
|
||||
syntax match typeScriptDocParam contained "\%(#\|\w\|\.\|:\|\/\)\+"
|
||||
syntax region typeScriptDocSeeTag contained matchgroup=typeScriptDocSeeTag start="{" end="}" contains=typeScriptDocTags
|
||||
|
||||
syntax case match
|
||||
endif "" JSDoc end
|
||||
"}}}
|
||||
syntax case match
|
||||
|
||||
"" Syntax in the typeScript code"{{{
|
||||
syn match typeScriptSpecial "\\\d\d\d\|\\."
|
||||
syn region typeScriptStringD start=+"+ skip=+\\\\\|\\"+ end=+"\|$+ contains=typeScriptSpecial,@htmlPreproc
|
||||
syn region typeScriptStringS start=+'+ skip=+\\\\\|\\'+ end=+'\|$+ contains=typeScriptSpecial,@htmlPreproc
|
||||
|
||||
syn match typeScriptSpecialCharacter "'\\.'"
|
||||
syn match typeScriptNumber "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>"
|
||||
syn region typeScriptRegexpString start=+/[^/*]+me=e-1 skip=+\\\\\|\\/+ end=+/[gi]\{0,2\}\s*$+ end=+/[gi]\{0,2\}\s*[;.,)\]}]+me=e-1 contains=@htmlPreproc oneline
|
||||
" syntax match typeScriptSpecial "\\\d\d\d\|\\x\x\{2\}\|\\u\x\{4\}\|\\."
|
||||
" syntax region typeScriptStringD start=+"+ skip=+\\\\\|\\$"+ end=+"+ contains=typeScriptSpecial,@htmlPreproc
|
||||
" syntax region typeScriptStringS start=+'+ skip=+\\\\\|\\$'+ end=+'+ contains=typeScriptSpecial,@htmlPreproc
|
||||
" syntax region typeScriptRegexpString start=+/\(\*\|/\)\@!+ skip=+\\\\\|\\/+ end=+/[gim]\{,3}+ contains=typeScriptSpecial,@htmlPreproc oneline
|
||||
" syntax match typeScriptNumber /\<-\=\d\+L\=\>\|\<0[xX]\x\+\>/
|
||||
syntax match typeScriptFloat /\<-\=\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/
|
||||
" syntax match typeScriptLabel /\(?\s*\)\@<!\<\w\+\(\s*:\)\@=/
|
||||
"}}}
|
||||
"" typeScript Prototype"{{{
|
||||
syntax keyword typeScriptPrototype prototype
|
||||
"}}}
|
||||
" DOM, Browser and Ajax Support {{{
|
||||
""""""""""""""""""""""""
|
||||
syntax keyword typeScriptBrowserObjects window navigator screen history location
|
||||
|
||||
syntax keyword typeScriptDOMObjects document event HTMLElement Anchor Area Base Body Button Form Frame Frameset Image Link Meta Option Select Style Table TableCell TableRow Textarea
|
||||
syntax keyword typeScriptDOMMethods createTextNode createElement insertBefore replaceChild removeChild appendChild hasChildNodes cloneNode normalize isSupported hasAttributes getAttribute setAttribute removeAttribute getAttributeNode setAttributeNode removeAttributeNode getElementsByTagName hasAttribute getElementById adoptNode close compareDocumentPosition createAttribute createCDATASection createComment createDocumentFragment createElementNS createEvent createExpression createNSResolver createProcessingInstruction createRange createTreeWalker elementFromPoint evaluate getBoxObjectFor getElementsByClassName getSelection getUserData hasFocus importNode
|
||||
syntax keyword typeScriptDOMProperties nodeName nodeValue nodeType parentNode childNodes firstChild lastChild previousSibling nextSibling attributes ownerDocument namespaceURI prefix localName tagName
|
||||
|
||||
syntax keyword typeScriptAjaxObjects XMLHttpRequest
|
||||
syntax keyword typeScriptAjaxProperties readyState responseText responseXML statusText
|
||||
syntax keyword typeScriptAjaxMethods onreadystatechange abort getAllResponseHeaders getResponseHeader open send setRequestHeader
|
||||
|
||||
syntax keyword typeScriptPropietaryObjects ActiveXObject
|
||||
syntax keyword typeScriptPropietaryMethods attachEvent detachEvent cancelBubble returnValue
|
||||
|
||||
syntax keyword typeScriptHtmlElemProperties className clientHeight clientLeft clientTop clientWidth dir href id innerHTML lang length offsetHeight offsetLeft offsetParent offsetTop offsetWidth scrollHeight scrollLeft scrollTop scrollWidth style tabIndex target title
|
||||
|
||||
syntax keyword typeScriptEventListenerKeywords blur click focus mouseover mouseout load item
|
||||
|
||||
syntax keyword typeScriptEventListenerMethods scrollIntoView addEventListener dispatchEvent removeEventListener preventDefault stopPropagation
|
||||
" }}}
|
||||
"" Programm Keywords"{{{
|
||||
syntax keyword typeScriptSource import export
|
||||
syntax keyword typeScriptIdentifier arguments this let var void yield
|
||||
syntax keyword typeScriptOperator delete new instanceof typeof
|
||||
syntax keyword typeScriptBoolean true false
|
||||
syntax keyword typeScriptNull null undefined
|
||||
syntax keyword typeScriptMessage alert confirm prompt status
|
||||
syntax keyword typeScriptGlobal self top parent
|
||||
syntax keyword typeScriptDeprecated escape unescape all applets alinkColor bgColor fgColor linkColor vlinkColor xmlEncoding
|
||||
"}}}
|
||||
"" Statement Keywords"{{{
|
||||
syntax keyword typeScriptConditional if else switch
|
||||
syntax keyword typeScriptRepeat do while for in
|
||||
syntax keyword typeScriptBranch break continue
|
||||
syntax keyword typeScriptLabel case default
|
||||
syntax keyword typeScriptStatement return with
|
||||
|
||||
syntax keyword typeScriptGlobalObjects Array Boolean Date Function Infinity Math Number NaN Object Packages RegExp String netscape
|
||||
|
||||
syntax keyword typeScriptExceptions try catch throw finally Error EvalError RangeError ReferenceError SyntaxError TypeError URIError
|
||||
|
||||
syntax keyword typeScriptReserved constructor declare as interface module abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public
|
||||
"}}}
|
||||
"" TypeScript/DOM/HTML/CSS specified things"{{{
|
||||
|
||||
" TypeScript Objects"{{{
|
||||
syn match typeScriptFunction "(super\s*|constructor\s*)" contained nextgroup=typeScriptVars
|
||||
syn region typeScriptVars start="(" end=")" contained contains=typeScriptParameters transparent keepend
|
||||
syn match typeScriptParameters "([a-zA-Z0-9_?.$][\w?.$]*)\s*:\s*([a-zA-Z0-9_?.$][\w?.$]*)" contained skipwhite
|
||||
"}}}
|
||||
" DOM2 Objects"{{{
|
||||
syntax keyword typeScriptType DOMImplementation DocumentFragment Node NodeList NamedNodeMap CharacterData Attr Element Text Comment CDATASection DocumentType Notation Entity EntityReference ProcessingInstruction void any string bool number
|
||||
syntax keyword typeScriptExceptions DOMException
|
||||
"}}}
|
||||
" DOM2 CONSTANT"{{{
|
||||
syntax keyword typeScriptDomErrNo INDEX_SIZE_ERR DOMSTRING_SIZE_ERR HIERARCHY_REQUEST_ERR WRONG_DOCUMENT_ERR INVALID_CHARACTER_ERR NO_DATA_ALLOWED_ERR NO_MODIFICATION_ALLOWED_ERR NOT_FOUND_ERR NOT_SUPPORTED_ERR INUSE_ATTRIBUTE_ERR INVALID_STATE_ERR SYNTAX_ERR INVALID_MODIFICATION_ERR NAMESPACE_ERR INVALID_ACCESS_ERR
|
||||
syntax keyword typeScriptDomNodeConsts ELEMENT_NODE ATTRIBUTE_NODE TEXT_NODE CDATA_SECTION_NODE ENTITY_REFERENCE_NODE ENTITY_NODE PROCESSING_INSTRUCTION_NODE COMMENT_NODE DOCUMENT_NODE DOCUMENT_TYPE_NODE DOCUMENT_FRAGMENT_NODE NOTATION_NODE
|
||||
"}}}
|
||||
" HTML events and internal variables"{{{
|
||||
syntax case ignore
|
||||
syntax keyword typeScriptHtmlEvents onblur onclick oncontextmenu ondblclick onfocus onkeydown onkeypress onkeyup onmousedown onmousemove onmouseout onmouseover onmouseup onresize onload onsubmit
|
||||
syntax case match
|
||||
"}}}
|
||||
|
||||
" Follow stuff should be highligh within a special context
|
||||
" While it can't be handled with context depended with Regex based highlight
|
||||
" So, turn it off by default
|
||||
if exists("typeScript_enable_domhtmlcss")
|
||||
|
||||
" DOM2 things"{{{
|
||||
syntax match typeScriptDomElemAttrs contained /\%(nodeName\|nodeValue\|nodeType\|parentNode\|childNodes\|firstChild\|lastChild\|previousSibling\|nextSibling\|attributes\|ownerDocument\|namespaceURI\|prefix\|localName\|tagName\)\>/
|
||||
syntax match typeScriptDomElemFuncs contained /\%(insertBefore\|replaceChild\|removeChild\|appendChild\|hasChildNodes\|cloneNode\|normalize\|isSupported\|hasAttributes\|getAttribute\|setAttribute\|removeAttribute\|getAttributeNode\|setAttributeNode\|removeAttributeNode\|getElementsByTagName\|getAttributeNS\|setAttributeNS\|removeAttributeNS\|getAttributeNodeNS\|setAttributeNodeNS\|getElementsByTagNameNS\|hasAttribute\|hasAttributeNS\)\>/ nextgroup=typeScriptParen skipwhite
|
||||
"}}}
|
||||
" HTML things"{{{
|
||||
syntax match typeScriptHtmlElemAttrs contained /\%(className\|clientHeight\|clientLeft\|clientTop\|clientWidth\|dir\|id\|innerHTML\|lang\|length\|offsetHeight\|offsetLeft\|offsetParent\|offsetTop\|offsetWidth\|scrollHeight\|scrollLeft\|scrollTop\|scrollWidth\|style\|tabIndex\|title\)\>/
|
||||
syntax match typeScriptHtmlElemFuncs contained /\%(blur\|click\|focus\|scrollIntoView\|addEventListener\|dispatchEvent\|removeEventListener\|item\)\>/ nextgroup=typeScriptParen skipwhite
|
||||
"}}}
|
||||
" CSS Styles in typeScript"{{{
|
||||
syntax keyword typeScriptCssStyles contained color font fontFamily fontSize fontSizeAdjust fontStretch fontStyle fontVariant fontWeight letterSpacing lineBreak lineHeight quotes rubyAlign rubyOverhang rubyPosition
|
||||
syntax keyword typeScriptCssStyles contained textAlign textAlignLast textAutospace textDecoration textIndent textJustify textJustifyTrim textKashidaSpace textOverflowW6 textShadow textTransform textUnderlinePosition
|
||||
syntax keyword typeScriptCssStyles contained unicodeBidi whiteSpace wordBreak wordSpacing wordWrap writingMode
|
||||
syntax keyword typeScriptCssStyles contained bottom height left position right top width zIndex
|
||||
syntax keyword typeScriptCssStyles contained border borderBottom borderLeft borderRight borderTop borderBottomColor borderLeftColor borderTopColor borderBottomStyle borderLeftStyle borderRightStyle borderTopStyle borderBottomWidth borderLeftWidth borderRightWidth borderTopWidth borderColor borderStyle borderWidth borderCollapse borderSpacing captionSide emptyCells tableLayout
|
||||
syntax keyword typeScriptCssStyles contained margin marginBottom marginLeft marginRight marginTop outline outlineColor outlineStyle outlineWidth padding paddingBottom paddingLeft paddingRight paddingTop
|
||||
syntax keyword typeScriptCssStyles contained listStyle listStyleImage listStylePosition listStyleType
|
||||
syntax keyword typeScriptCssStyles contained background backgroundAttachment backgroundColor backgroundImage gackgroundPosition backgroundPositionX backgroundPositionY backgroundRepeat
|
||||
syntax keyword typeScriptCssStyles contained clear clip clipBottom clipLeft clipRight clipTop content counterIncrement counterReset cssFloat cursor direction display filter layoutGrid layoutGridChar layoutGridLine layoutGridMode layoutGridType
|
||||
syntax keyword typeScriptCssStyles contained marks maxHeight maxWidth minHeight minWidth opacity MozOpacity overflow overflowX overflowY verticalAlign visibility zoom cssText
|
||||
syntax keyword typeScriptCssStyles contained scrollbar3dLightColor scrollbarArrowColor scrollbarBaseColor scrollbarDarkShadowColor scrollbarFaceColor scrollbarHighlightColor scrollbarShadowColor scrollbarTrackColor
|
||||
"}}}
|
||||
" Highlight ways"{{{
|
||||
syntax match typeScriptDotNotation "\." nextgroup=typeScriptPrototype,typeScriptDomElemAttrs,typeScriptDomElemFuncs,typeScriptHtmlElemAttrs,typeScriptHtmlElemFuncs
|
||||
syntax match typeScriptDotNotation "\.style\." nextgroup=typeScriptCssStyles
|
||||
"}}}
|
||||
endif "DOM/HTML/CSS
|
||||
|
||||
"" end DOM/HTML/CSS specified things""}}}
|
||||
|
||||
|
||||
"" Code blocks
|
||||
syntax cluster typeScriptAll contains=typeScriptComment,typeScriptLineComment,typeScriptDocComment,typeScriptStringD,typeScriptStringS,typeScriptRegexpString,typeScriptNumber,typeScriptFloat,typeScriptLabel,typeScriptSource,typeScriptType,typeScriptOperator,typeScriptBoolean,typeScriptNull,typeScriptFuncKeyword,typeScriptConditional,typeScriptGlobal,typeScriptRepeat,typeScriptBranch,typeScriptStatement,typeScriptGlobalObjects,typeScriptMessage,typeScriptIdentifier,typeScriptExceptions,typeScriptReserved,typeScriptDeprecated,typeScriptDomErrNo,typeScriptDomNodeConsts,typeScriptHtmlEvents,typeScriptDotNotation,typeScriptBrowserObjects,typeScriptDOMObjects,typeScriptAjaxObjects,typeScriptPropietaryObjects,typeScriptDOMMethods,typeScriptHtmlElemProperties,typeScriptDOMProperties,typeScriptEventListenerKeywords,typeScriptEventListenerMethods,typeScriptAjaxProperties,typeScriptAjaxMethods,typeScriptFuncArg
|
||||
|
||||
if main_syntax == "typeScript"
|
||||
syntax sync clear
|
||||
syntax sync ccomment typeScriptComment minlines=200
|
||||
" syntax sync match typeScriptHighlight grouphere typeScriptBlock /{/
|
||||
endif
|
||||
|
||||
syntax keyword typeScriptFuncKeyword function contained
|
||||
syntax region typeScriptFuncDef start="function" end="\([^)]*\)" contains=typeScriptFuncKeyword,typeScriptFuncArg keepend
|
||||
syntax match typeScriptFuncArg "\(([^()]*)\)" contains=typeScriptParens,typeScriptFuncComma contained
|
||||
syntax match typeScriptFuncComma /,/ contained
|
||||
" syntax region typeScriptFuncBlock contained matchgroup=typeScriptFuncBlock start="{" end="}" contains=@typeScriptAll,typeScriptParensErrA,typeScriptParensErrB,typeScriptParen,typeScriptBracket,typeScriptBlock fold
|
||||
|
||||
syn match typeScriptBraces "[{}\[\]]"
|
||||
syn match typeScriptParens "[()]"
|
||||
syn match typeScriptOpSymbols "=\{1,3}\|!==\|!=\|<\|>\|>=\|<=\|++\|+=\|--\|-="
|
||||
syn match typeScriptEndColons "[;,]"
|
||||
syn match typeScriptLogicSymbols "\(&&\)\|\(||\)"
|
||||
|
||||
" typeScriptFold Function {{{
|
||||
|
||||
function! TypeScriptFold()
|
||||
setl foldlevelstart=1
|
||||
syn region foldBraces start=/{/ end=/}/ transparent fold keepend extend
|
||||
|
||||
setl foldtext=FoldText()
|
||||
endfunction
|
||||
|
||||
au FileType typeScript call TypeScriptFold()
|
||||
|
||||
" }}}
|
||||
|
||||
" Define the default highlighting.
|
||||
" For version 5.7 and earlier: only when not done already
|
||||
" For version 5.8 and later: only when an item doesn't have highlighting yet
|
||||
if version >= 508 || !exists("did_typeScript_syn_inits")
|
||||
if version < 508
|
||||
let did_typeScript_syn_inits = 1
|
||||
command -nargs=+ HiLink hi link <args>
|
||||
else
|
||||
command -nargs=+ HiLink hi def link <args>
|
||||
endif
|
||||
|
||||
"Typescript highlighting
|
||||
HiLink typeScriptParameters Operator
|
||||
HiLink typescriptSuperBlock Operator
|
||||
|
||||
HiLink typeScriptEndColons Exception
|
||||
HiLink typeScriptOpSymbols Operator
|
||||
HiLink typeScriptLogicSymbols Boolean
|
||||
HiLink typeScriptBraces Function
|
||||
HiLink typeScriptParens Operator
|
||||
HiLink typeScriptComment Comment
|
||||
HiLink typeScriptLineComment Comment
|
||||
HiLink typeScriptRef Include
|
||||
HiLink typeScriptRefS String
|
||||
HiLink typeScriptRefD String
|
||||
HiLink typeScriptDocComment Comment
|
||||
HiLink typeScriptCommentTodo Todo
|
||||
HiLink typeScriptCvsTag Function
|
||||
HiLink typeScriptDocTags Special
|
||||
HiLink typeScriptDocSeeTag Function
|
||||
HiLink typeScriptDocParam Function
|
||||
HiLink typeScriptStringS String
|
||||
HiLink typeScriptStringD String
|
||||
HiLink typeScriptRegexpString String
|
||||
HiLink typeScriptGlobal Constant
|
||||
HiLink typeScriptCharacter Character
|
||||
HiLink typeScriptPrototype Type
|
||||
HiLink typeScriptConditional Conditional
|
||||
HiLink typeScriptBranch Conditional
|
||||
HiLink typeScriptIdentifier Identifier
|
||||
HiLink typeScriptRepeat Repeat
|
||||
HiLink typeScriptStatement Statement
|
||||
HiLink typeScriptFuncKeyword Function
|
||||
HiLink typeScriptMessage Keyword
|
||||
HiLink typeScriptDeprecated Exception
|
||||
HiLink typeScriptError Error
|
||||
HiLink typeScriptParensError Error
|
||||
HiLink typeScriptParensErrA Error
|
||||
HiLink typeScriptParensErrB Error
|
||||
HiLink typeScriptParensErrC Error
|
||||
HiLink typeScriptReserved Keyword
|
||||
HiLink typeScriptOperator Operator
|
||||
HiLink typeScriptType Type
|
||||
HiLink typeScriptNull Type
|
||||
HiLink typeScriptNumber Number
|
||||
HiLink typeScriptFloat Number
|
||||
HiLink typeScriptBoolean Boolean
|
||||
HiLink typeScriptLabel Label
|
||||
HiLink typeScriptSpecial Special
|
||||
HiLink typeScriptSource Special
|
||||
HiLink typeScriptGlobalObjects Special
|
||||
HiLink typeScriptExceptions Special
|
||||
|
||||
HiLink typeScriptDomErrNo Constant
|
||||
HiLink typeScriptDomNodeConsts Constant
|
||||
HiLink typeScriptDomElemAttrs Label
|
||||
HiLink typeScriptDomElemFuncs PreProc
|
||||
|
||||
HiLink typeScriptHtmlElemAttrs Label
|
||||
HiLink typeScriptHtmlElemFuncs PreProc
|
||||
|
||||
HiLink typeScriptCssStyles Label
|
||||
" Ajax Highlighting
|
||||
HiLink typeScriptBrowserObjects Constant
|
||||
|
||||
HiLink typeScriptDOMObjects Constant
|
||||
HiLink typeScriptDOMMethods Exception
|
||||
HiLink typeScriptDOMProperties Type
|
||||
|
||||
HiLink typeScriptAjaxObjects htmlH1
|
||||
HiLink typeScriptAjaxMethods Exception
|
||||
HiLink typeScriptAjaxProperties Type
|
||||
|
||||
HiLink typeScriptFuncDef Title
|
||||
HiLink typeScriptFuncArg Special
|
||||
HiLink typeScriptFuncComma Operator
|
||||
|
||||
HiLink typeScriptHtmlEvents Special
|
||||
HiLink typeScriptHtmlElemProperties Type
|
||||
|
||||
HiLink typeScriptEventListenerKeywords Keyword
|
||||
|
||||
HiLink typeScriptNumber Number
|
||||
HiLink typeScriptPropietaryObjects Constant
|
||||
|
||||
delcommand HiLink
|
||||
endif
|
||||
|
||||
" Define the htmltypeScript for HTML syntax html.vim
|
||||
"syntax clear htmltypeScript
|
||||
"syntax clear typeScriptExpression
|
||||
syntax cluster htmltypeScript contains=@typeScriptAll,typeScriptBracket,typeScriptParen,typeScriptBlock,typeScriptParenError
|
||||
syntax cluster typeScriptExpression contains=@typeScriptAll,typeScriptBracket,typeScriptParen,typeScriptBlock,typeScriptParenError,@htmlPreproc
|
||||
|
||||
let b:current_syntax = "typeScript"
|
||||
if main_syntax == 'typeScript'
|
||||
unlet main_syntax
|
||||
endif
|
||||
|
||||
" vim: ts=4
|
||||
@@ -1,21 +0,0 @@
|
||||
syntax match rspecHeader /^*.*/
|
||||
syntax match rspecTitle /^\[.\+/
|
||||
syntax match rspecOk /^+.\+/
|
||||
syntax match rspecOk /PASS.\+/
|
||||
syntax match rspecError /^-.\+/
|
||||
syntax match rspecError /FAIL.\+/
|
||||
syntax match rspecError /^|.\+/
|
||||
syntax match rspecErrorDetail /^ \w.\+/
|
||||
syntax match rspecErrorURL /^ \/.\+/
|
||||
syntax match rspecNotImplemented /^#.\+/
|
||||
syntax match rspecCode /^ \d\+:/
|
||||
syntax match rspecNotImplemented /Example disabled.*/
|
||||
|
||||
highlight link rspecHeader Identifier
|
||||
highlight link rspecTitle Identifier
|
||||
highlight link rspecOk Statement
|
||||
highlight link rspecError Error
|
||||
highlight link rspecErrorDetail Constant
|
||||
highlight link rspecErrorURL PreProc
|
||||
highlight link rspecNotImplemented Todo
|
||||
highlight link rspecCode Type
|
||||
3278
syntax/xs.vim
Normal file
3278
syntax/xs.vim
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user