mirror of
1
0
Fork 0

Updated plugins

This commit is contained in:
amix 2016-03-14 11:04:57 +01:00
parent 71fc570357
commit 20729bff94
56 changed files with 726 additions and 404 deletions

View File

@ -11,11 +11,11 @@
## 1. Bug reports / GitHub issues ## 1. Bug reports / GitHub issues
Please note that the preferred channel for posting bug reports is the Please note that the preferred channel for posting bug reports is the
[issue tracker at GitHub][0]. Reports posted elsewhere are less likely [issue tracker at GitHub][0]. Reports posted elsewhere are less likely
to be seen by the core team. to be seen by the core team.
When reporting a bug make sure you search the existing GitHub issues When reporting a bug make sure you search the existing GitHub issues
for the same/similar issues. If you find one, feel free to add a `+1` for the same/similar issues. If you find one, feel free to add a `+1`
comment with any additional information that may help us solve the comment with any additional information that may help us solve the
issue. issue.
@ -26,7 +26,7 @@ When creating a new issue be sure to state the following:
* the version of syntastic you are using (see `:SyntasticInfo`). * the version of syntastic you are using (see `:SyntasticInfo`).
For syntax checker bugs also state the version of the checker executable For syntax checker bugs also state the version of the checker executable
that you are using. Adding debugging information is typically useful that you are using. Adding debugging information is typically useful
too: too:
* open a file handled by your checker; * open a file handled by your checker;
@ -38,10 +38,10 @@ too:
## 2. Submitting a patch ## 2. Submitting a patch
Before you consider adding features to syntastic, _please_ spend a few Before you consider adding features to syntastic, _please_ spend a few minutes
minutes (re-)reading the latest version of the [manual][1]. Syntastic (re-)reading the latest version of the [manual][1]. Syntastic is changing
is changing rapidly at times, and it's quite possible that some features rapidly at times, and it's possible that some features you want to add exist
you want to add exist already. already.
To submit a patch: To submit a patch:
@ -54,7 +54,7 @@ Small, focused patches are preferred.
Large changes to the code should be discussed with the core team first. Large changes to the code should be discussed with the core team first.
Create an issue and explain your plan and see what we say. Create an issue and explain your plan and see what we say.
Also, make sure to update the manual whenever applicable. Nobody can use Also, make sure to update the manual whenever applicable. Nobody can use
features that aren't documented. features that aren't documented.
<a name="generalstyle"></a> <a name="generalstyle"></a>

View File

@ -35,7 +35,7 @@
4.8. [How can I pass additional arguments to a checker?](#faqargs) 4.8. [How can I pass additional arguments to a checker?](#faqargs)
4.9. [Syntastic supports several checkers for my filetype - how do I tell which one(s) to use?](#faqcheckers) 4.9. [Syntastic supports several checkers for my filetype - how do I tell which one(s) to use?](#faqcheckers)
4.10. [What is the difference between syntax checkers and style checkers?](#faqstyle) 4.10. [What is the difference between syntax checkers and style checkers?](#faqstyle)
4.11. [I have enabled multiple checkers for the current filetype. How can I display all errors from all checkers together?](#faqaggregate) 4.11. [I have enabled multiple checkers for the current filetype. How can I display all errors from all checkers together?](#faqaggregate)
4.12. [How can I jump between the different errors without using the location list at the bottom of the window?](#faqlnext) 4.12. [How can I jump between the different errors without using the location list at the bottom of the window?](#faqlnext)
4.13. [The error window is closed automatically when I :quit the current buffer but not when I :bdelete it?](#faqbdelete) 4.13. [The error window is closed automatically when I :quit the current buffer but not when I :bdelete it?](#faqbdelete)
5. [Resources](#otherresources) 5. [Resources](#otherresources)
@ -64,7 +64,7 @@ Object, OS X and iOS property lists, Pug (formerly Jade), Puppet, Python, QML,
R, Racket, Relax NG, reStructuredText, RPM spec, Ruby, SASS/SCSS, Scala, Slim, R, Racket, Relax NG, reStructuredText, RPM spec, Ruby, SASS/SCSS, Scala, Slim,
SML, Sphinx, SQL, Stylus, Tcl, TeX, Texinfo, Twig, TypeScript, Vala, Verilog, SML, Sphinx, SQL, Stylus, Tcl, TeX, Texinfo, Twig, TypeScript, Vala, Verilog,
VHDL, VimL, xHtml, XML, XSLT, XQuery, YACC, YAML, z80, Zope page templates, and VHDL, VimL, xHtml, XML, XSLT, XQuery, YACC, YAML, z80, Zope page templates, and
zsh. See the [wiki][3] for details about the corresponding supported checkers. zsh. See the [wiki][3] for details about the corresponding supported checkers.
A number of third-party Vim plugins also provide checkers for syntastic, A number of third-party Vim plugins also provide checkers for syntastic,
for example: [merlin][30], [omnisharp-vim][25], [rust.vim][12], for example: [merlin][30], [omnisharp-vim][25], [rust.vim][12],
@ -72,7 +72,7 @@ for example: [merlin][30], [omnisharp-vim][25], [rust.vim][12],
[vim-eastwood][28], and [vim-swift][24]. [vim-eastwood][28], and [vim-swift][24].
Below is a screenshot showing the methods that Syntastic uses to display syntax Below is a screenshot showing the methods that Syntastic uses to display syntax
errors. Note that, in practise, you will only have a subset of these methods errors. Note that, in practise, you will only have a subset of these methods
enabled. enabled.
![Screenshot 1][0] ![Screenshot 1][0]
@ -105,6 +105,12 @@ Syntastic should work with any modern plugin managers for Vim, such as
[Vundle][17]. Instructions for installing syntastic with [Pathogen][1] are [Vundle][17]. Instructions for installing syntastic with [Pathogen][1] are
included below for completeness. included below for completeness.
Starting with Vim version 7.4.1486 you can also load syntastic using the
standard mechanism of packages, without the help of third-party plugin managers
(see `:help packages` in Vim for details). Beware however that, while support
for packages has been added in Vim 7.4.1384, the functionality needed by
syntastic is present only in versions 7.4.1486 and later.
Last but not least: syntastic doesn't know how to do any syntax checks by Last but not least: syntastic doesn't know how to do any syntax checks by
itself. In order to get meaningful results you need to install external itself. In order to get meaningful results you need to install external
checkers corresponding to the types of files you use. Please consult the checkers corresponding to the types of files you use. Please consult the
@ -122,7 +128,7 @@ If you already have [Pathogen][1] working then skip [Step 1](#step1) and go to
#### 2.2.1\. Step 1: Install pathogen.vim #### 2.2.1\. Step 1: Install pathogen.vim
First I'll show you how to install Tim Pope's [Pathogen][1] so that it's easy to First I'll show you how to install Tim Pope's [Pathogen][1] so that it's easy to
install syntastic. Do this in your terminal so that you get the `pathogen.vim` install syntastic. Do this in your terminal so that you get the `pathogen.vim`
file and the directories it needs: file and the directories it needs:
```sh ```sh
mkdir -p ~/.vim/autoload ~/.vim/bundle && \ mkdir -p ~/.vim/autoload ~/.vim/bundle && \
@ -148,7 +154,7 @@ Quit vim and start it back up to reload it, then type:
:Helptags :Helptags
``` ```
If you get an error when you do this, then you probably didn't install If you get an error when you do this, then you probably didn't install
[Pathogen][1] right. Go back to [Step 1](#step1) and make sure you did the [Pathogen][1] right. Go back to [Step 1](#step1) and make sure you did the
following: following:
1. Created both the `~/.vim/autoload` and `~/.vim/bundle` directories. 1. Created both the `~/.vim/autoload` and `~/.vim/bundle` directories.
@ -161,7 +167,7 @@ following:
## 3\. Recommended settings ## 3\. Recommended settings
Syntastic has numerous options that can be configured, and the defaults Syntastic has numerous options that can be configured, and the defaults
are not particularly well suitable for new users. It is recommended are not particularly well suitable for new users. It is recommended
that you start by adding the following lines to your `vimrc` file, and that you start by adding the following lines to your `vimrc` file, and
return to them after reading the manual (see `:help syntastic` in Vim): return to them after reading the manual (see `:help syntastic` in Vim):
```vim ```vim
@ -231,8 +237,8 @@ let g:syntastic_python_python_exec = '/path/to/python3'
__4.3. Q. Are there any local checkers for HTML5 that I can use with syntastic?__ __4.3. Q. Are there any local checkers for HTML5 that I can use with syntastic?__
[HTML Tidy][18] has a fork named [HTML Tidy for HTML5][19]. It's a drop [HTML Tidy][18] has a fork named [HTML Tidy for HTML5][19]. It's a drop
in replacement, and syntastic can use it without changes. Just install it in replacement, and syntastic can use it without changes. Just install it
somewhere and point `g:syntastic_html_tidy_exec` to its executable: somewhere and point `g:syntastic_html_tidy_exec` to its executable:
```vim ```vim
let g:syntastic_html_tidy_exec = 'tidy5' let g:syntastic_html_tidy_exec = 'tidy5'
@ -253,12 +259,12 @@ __4.4. Q. The `perl` checker has stopped working...__
A. The `perl` checker runs `perl -c` against your file, which in turn A. The `perl` checker runs `perl -c` against your file, which in turn
__executes__ any `BEGIN`, `UNITCHECK`, and `CHECK` blocks, and any `use` __executes__ any `BEGIN`, `UNITCHECK`, and `CHECK` blocks, and any `use`
statements in your file (cf. [perlrun][10]). This is probably fine if you statements in your file (cf. [perlrun][10]). This is probably fine if you
wrote the file yourself, but it's a security problem if you're checking third wrote the file yourself, but it's a security problem if you're checking
party files. Since there is currently no way to disable this behaviour while third-party files. Since there is currently no way to disable this behaviour
still producing useful results, the checker is now disabled by default. To while still producing useful results, the checker is now disabled by default.
(re-)enable it, make sure the `g:syntastic_perl_checkers` list includes `perl`, To (re-)enable it, make sure the `g:syntastic_perl_checkers` list includes
and set `g:syntastic_enable_perl_checker` to 1 in your `vimrc`: `perl`, and set `g:syntastic_enable_perl_checker` to 1 in your `vimrc`:
```vim ```vim
let g:syntastic_enable_perl_checker = 1 let g:syntastic_enable_perl_checker = 1
``` ```
@ -267,7 +273,7 @@ let g:syntastic_enable_perl_checker = 1
__4.5. Q. What happened to the `rustc` checker?__ __4.5. Q. What happened to the `rustc` checker?__
A. It is now part of the [rust.vim][12] plugin. If you install this plugin the A. It is now part of the [rust.vim][12] plugin. If you install this plugin the
checker should be picked up automatically by syntastic. checker should be picked up automatically by syntastic.
<a name="faqxcrun"></a> <a name="faqxcrun"></a>
@ -275,7 +281,7 @@ checker should be picked up automatically by syntastic.
__4.6. Q. What happened to the `xcrun` checker?__ __4.6. Q. What happened to the `xcrun` checker?__
A. The `xcrun` checker used to have a security problem and it has been removed. A. The `xcrun` checker used to have a security problem and it has been removed.
A better checker for __Swift__ is part of the [vim-swift][24] plugin. If you A better checker for __Swift__ is part of the [vim-swift][24] plugin. If you
install this plugin the checker should be picked up automatically by syntastic. install this plugin the checker should be picked up automatically by syntastic.
<a name="faqloclist"></a> <a name="faqloclist"></a>
@ -284,7 +290,7 @@ __4.7. Q. I run a checker and the location list is not updated...__
__4.7. Q. I run`:lopen` or `:lwindow` and the error window is empty...__ __4.7. Q. I run`:lopen` or `:lwindow` and the error window is empty...__
A. By default the location list is changed only when you run the `:Errors` A. By default the location list is changed only when you run the `:Errors`
command, in order to minimise conflicts with other plugins. If you want the command, in order to minimise conflicts with other plugins. If you want the
location list to always be updated when you run the checkers, add this line to location list to always be updated when you run the checkers, add this line to
your `vimrc`: your `vimrc`:
```vim ```vim
@ -367,7 +373,7 @@ nature, produce both kinds of messages. Syntastic is not smart enough to be
able to sort out these things by itself. able to sort out these things by itself.
In fact it's more useful to look at this from the perspective of filtering In fact it's more useful to look at this from the perspective of filtering
unwanted messages, rather than as an indicator of severity levels. The unwanted messages, rather than as an indicator of severity levels. The
distinction between syntax and style is orthogonal to the distinction between distinction between syntax and style is orthogonal to the distinction between
errors and warnings, and thus you can turn off messages based on level, on errors and warnings, and thus you can turn off messages based on level, on
type, or both. type, or both.
@ -380,7 +386,7 @@ See `:help syntastic_quiet_messages` for details.
<a name="faqaggregate"></a> <a name="faqaggregate"></a>
__4.11. Q. I have enabled multiple checkers for the current filetype. How can I __4.11. Q. I have enabled multiple checkers for the current filetype. How can I
display all errors from all checkers together?__ display all errors from all checkers together?__
A. Set `g:syntastic_aggregate_errors` to 1 in your `vimrc`: A. Set `g:syntastic_aggregate_errors` to 1 in your `vimrc`:
@ -426,8 +432,8 @@ There are also a dedicated [google group][5], and a
[syntastic tag at StackOverflow][6]. [syntastic tag at StackOverflow][6].
Syntastic aims to provide a common interface to syntax checkers for as many Syntastic aims to provide a common interface to syntax checkers for as many
languages as possible. For particular languages, there are, of course, other languages as possible. For particular languages, there are, of course, other
plugins that provide more functionality than syntastic. You might want to take plugins that provide more functionality than syntastic. You might want to take
a look at [ghcmod-vim][31], [jedi-vim][7], [python-mode][8], [vim-go][32], or a look at [ghcmod-vim][31], [jedi-vim][7], [python-mode][8], [vim-go][32], or
[YouCompleteMe][9]. [YouCompleteMe][9].

View File

@ -240,7 +240,12 @@ function! syntastic#util#findGlobInParent(what, where) abort " {{{2
let old = '' let old = ''
while here !=# '' while here !=# ''
let p = split(globpath(here, a:what, 1), '\n') try
" Vim 7.4.279 and later
let p = globpath(here, a:what, 1, 1)
catch /\m^Vim\%((\a\+)\)\=:E118/
let p = split(globpath(here, a:what, 1), "\n")
endtry
if !empty(p) if !empty(p)
return fnamemodify(p[0], ':p') return fnamemodify(p[0], ':p')
@ -499,7 +504,13 @@ function! s:_rmrf(what) abort " {{{2
return return
endif endif
for f in split(globpath(a:what, '*', 1), "\n") try
" Vim 7.4.279 and later
let entries = globpath(a:what, '*', 1, 1)
catch /\m^Vim\%((\a\+)\)\=:E118/
let entries = split(globpath(a:what, '*', 1), "\n")
endtry
for f in entries
call s:_rmrf(f) call s:_rmrf(f)
endfor endfor
silent! call syntastic#util#system(s:rmdir . ' ' . syntastic#util#shescape(a:what)) silent! call syntastic#util#system(s:rmdir . ' ' . syntastic#util#shescape(a:what))

View File

@ -64,8 +64,8 @@ CONTENTS *syntastic-contents*
1. Intro *syntastic-intro* 1. Intro *syntastic-intro*
Syntastic is a syntax checking plugin that runs files through external syntax Syntastic is a syntax checking plugin that runs files through external syntax
checkers. This can be done on demand, or automatically as files are saved and checkers. This can be done on demand, or automatically as files are saved
opened. If syntax errors are detected, the user is notified and is happy and opened. If syntax errors are detected, the user is notified and is happy
because they didn't have to compile their code or execute their script to find because they didn't have to compile their code or execute their script to find
them. them.
@ -103,8 +103,8 @@ list with |:SyntasticReset|, and you can use |:SyntasticToggleMode| to switch
between active (checking on writing the buffer) and passive (manual) checking. between active (checking on writing the buffer) and passive (manual) checking.
You don't have to switch focus to the |location-list| window to jump to the You don't have to switch focus to the |location-list| window to jump to the
different errors. Vim provides several built-in commands for this, for different errors. Vim provides several built-in commands for this, for
example |:lnext| and |:lprevious|. You may want to add shortcut mappings for example |:lnext| and |:lprevious|. You may want to add shortcut mappings for
these commands, or perhaps install a plugin such as Tim Pope's 'unimpaired' these commands, or perhaps install a plugin such as Tim Pope's 'unimpaired'
(see https://github.com/tpope/vim-unimpaired) that provides such mappings. (see https://github.com/tpope/vim-unimpaired) that provides such mappings.
@ -242,7 +242,7 @@ disable generation of these labels by turning off '|syntastic_id_checkers|'.
If |'syntastic_sort_aggregated_errors'| is set (which is the default), messages If |'syntastic_sort_aggregated_errors'| is set (which is the default), messages
in the aggregated list are grouped by file, then sorted by line number, then in the aggregated list are grouped by file, then sorted by line number, then
type, then column number. Otherwise messages produced by the same checker are type, then column number. Otherwise messages produced by the same checker are
grouped together, and sorting within each group is decided by the variables grouped together, and sorting within each group is decided by the variables
|'syntastic_<filetype>_<checker>_sort'|. |'syntastic_<filetype>_<checker>_sort'|.
@ -274,17 +274,17 @@ for more info.
:SyntasticCheck *:SyntasticCheck* :SyntasticCheck *:SyntasticCheck*
Manually cause a syntax check to be done. By default the checkers in the Manually cause a syntax check to be done. By default the checkers in the
|'g:syntastic_<filetype>_checkers'| or |'b:syntastic_checkers'| lists are run, |'g:syntastic_<filetype>_checkers'| or |'b:syntastic_checkers'| lists are run,
cf. |syntastic-filetype-checkers|. If |'syntastic_aggregate_errors'| is unset cf. |syntastic-filetype-checkers|. If |'syntastic_aggregate_errors'| is unset
(which is the default), checking stops the first time a checker reports any (which is the default), checking stops the first time a checker reports any
errors; if |'syntastic_aggregate_errors'| is set, all checkers that apply are errors; if |'syntastic_aggregate_errors'| is set, all checkers that apply are
run in turn, and all errors found are aggregated in a single list. run in turn, and all errors found are aggregated in a single list.
The command may be followed by a (space separated) list of checkers. In this The command may be followed by a (space separated) list of checkers. In this
case |'g:syntastic_<filetype>_checkers'| and |'b:syntastic_checkers'| are case |'g:syntastic_<filetype>_checkers'| and |'b:syntastic_checkers'| are
ignored, and the checkers named by the command's arguments are run instead, in ignored, and the checkers named by the command's arguments are run instead, in
the order specified. The set by |'syntastic_aggregate_errors'| still apply. the order specified. The set by |'syntastic_aggregate_errors'| still apply.
Example: > Example: >
:SyntasticCheck flake8 pylint :SyntasticCheck flake8 pylint
@ -319,7 +319,7 @@ when buffers are first loaded, as well as on saving: >
*'syntastic_check_on_wq'* *'syntastic_check_on_wq'*
Default: 1 Default: 1
In active mode syntax checks are normally run whenever buffers are written to In active mode syntax checks are normally run whenever buffers are written to
disk, even when the writes happen just before quitting Vim. If you want to disk, even when the writes happen just before quitting Vim. If you want to
skip checks when you issue |:wq|, |:x|, and |:ZZ|, set this variable to 0: > skip checks when you issue |:wq|, |:x|, and |:ZZ|, set this variable to 0: >
let g:syntastic_check_on_wq = 0 let g:syntastic_check_on_wq = 0
< <
@ -347,7 +347,7 @@ By default, when results from multiple checkers are aggregated in a single
error list (that is either when |'syntastic_aggregate_errors'| is enabled, error list (that is either when |'syntastic_aggregate_errors'| is enabled,
or when checking a file with a composite filetype), errors are grouped by or when checking a file with a composite filetype), errors are grouped by
file, then sorted by line number, then grouped by type (namely errors take file, then sorted by line number, then grouped by type (namely errors take
precedence over warnings), then they are sorted by column number. If you want precedence over warnings), then they are sorted by column number. If you want
to leave messages grouped by checker output, set this variable to 0: > to leave messages grouped by checker output, set this variable to 0: >
let g:syntastic_sort_aggregated_errors = 0 let g:syntastic_sort_aggregated_errors = 0
< <
@ -413,7 +413,7 @@ option to tell syntastic to always stick any detected errors into the
< <
Please note that if |'syntastic_auto_jump'| is set to a non-zero value the Please note that if |'syntastic_auto_jump'| is set to a non-zero value the
location list is overwritten with Syntastic's own list when taking a jump, location list is overwritten with Syntastic's own list when taking a jump,
regardless of the value of |'syntastic_always_populate_loc_list'|. The regardless of the value of |'syntastic_always_populate_loc_list'|. The
location list is also overwritten when running the |:Errors| command. location list is also overwritten when running the |:Errors| command.
*'syntastic_auto_jump'* *'syntastic_auto_jump'*
@ -469,10 +469,10 @@ opens. >
< <
*'syntastic_ignore_files'* *'syntastic_ignore_files'*
Default: [] Default: []
Use this option to specify files that syntastic should never check. It's a Use this option to specify files that syntastic should never check. It's a
list of |regular-expression| patterns. The full paths of files (see |::p|) are list of |regular-expression| patterns. The full paths of files (see |::p|) are
matched against these patterns, and the matches are case-sensitive. Use |\c| matched against these patterns, and the matches are case-sensitive. Use |\c|
to specify case-insensitive patterns. Example: > to specify case-insensitive patterns. Example: >
let g:syntastic_ignore_files = ['\m^/usr/include/', '\m\c\.h$'] let g:syntastic_ignore_files = ['\m^/usr/include/', '\m\c\.h$']
< <
*'syntastic_filetype_map'* *'syntastic_filetype_map'*
@ -504,7 +504,7 @@ The option should be set to something like: >
< <
"mode" can be mapped to one of two values - "active" or "passive". When set "mode" can be mapped to one of two values - "active" or "passive". When set
to "active", syntastic does automatic checking whenever a buffer is saved or to "active", syntastic does automatic checking whenever a buffer is saved or
initially opened. When set to "passive" syntastic only checks when the user initially opened. When set to "passive" syntastic only checks when the user
calls |:SyntasticCheck|. calls |:SyntasticCheck|.
The exceptions to these rules are defined with "active_filetypes" and The exceptions to these rules are defined with "active_filetypes" and
@ -531,7 +531,7 @@ whether the corresponding buffer should be checked automatically.
*'syntastic_quiet_messages'* *'syntastic_quiet_messages'*
Default: {} Default: {}
Use this option to filter out some of the messages produced by checkers. The Use this option to filter out some of the messages produced by checkers. The
option should be set to something like: > option should be set to something like: >
let g:syntastic_quiet_messages = { let g:syntastic_quiet_messages = {
\ "!level": "errors", \ "!level": "errors",
@ -646,20 +646,20 @@ The above variable can be used to disable exit code checks in syntastic.
Default: Vim's 'shell' Default: Vim's 'shell'
This is the (full path to) the shell syntastic will use to run the checkers. This is the (full path to) the shell syntastic will use to run the checkers.
On UNIX and Mac OS-X this shell must accept Bourne-compatible syntax for On UNIX and Mac OS-X this shell must accept Bourne-compatible syntax for
file "stdout" and "stderr" redirections ">file" and "2>file". Examples of file "stdout" and "stderr" redirections ">file" and "2>file". Examples of
compatible shells are "zsh", "bash", "ksh", and of course the original Bourne compatible shells are "zsh", "bash", "ksh", and of course the original Bourne
"sh". "sh".
This shell is independent of Vim's 'shell', and it isn't used for interactive This shell is independent of Vim's 'shell', and it isn't used for interactive
operations. It must take care to initialize all environment variables needed operations. It must take care to initialize all environment variables needed
by the checkers you're using. Example: > by the checkers you're using. Example: >
let g:syntastic_shell = "/bin/sh" let g:syntastic_shell = "/bin/sh"
< <
*'syntastic_nested_autocommands'* *'syntastic_nested_autocommands'*
Default: 0 Default: 0
Controls whether syntastic's autocommands |BufReadPost| and |BufWritePost| Controls whether syntastic's autocommands |BufReadPost| and |BufWritePost|
are called from other |BufReadPost| and |BufWritePost| autocommands (see are called from other |BufReadPost| and |BufWritePost| autocommands (see
|autocmd-nested|). This is known to trigger interoperability problems with |autocmd-nested|). This is known to trigger interoperability problems with
other plugins, so only enable it if you actually need that functionality. other plugins, so only enable it if you actually need that functionality.
*'syntastic_debug'* *'syntastic_debug'*
@ -688,7 +688,7 @@ addition to being added to Vim's |message-history|: >
< <
*'syntastic_extra_filetypes'* *'syntastic_extra_filetypes'*
Default: [] Default: []
List of filetypes handled by checkers external to syntastic. If you have a Vim List of filetypes handled by checkers external to syntastic. If you have a Vim
plugin that adds a checker for syntastic, and if the said checker deals with a plugin that adds a checker for syntastic, and if the said checker deals with a
filetype that is unknown to syntastic, you might consider adding that filetype filetype that is unknown to syntastic, you might consider adding that filetype
to this list: > to this list: >
@ -710,7 +710,7 @@ variable 'g:syntastic_<filetype>_checkers' to a list of checkers, e.g. >
< <
*'b:syntastic_checkers'* *'b:syntastic_checkers'*
There is also a per-buffer version of this setting, 'b:syntastic_checkers'. There is also a per-buffer version of this setting, 'b:syntastic_checkers'.
When set, it takes precedence over |'g:syntastic_<filetype>_checkers'|. You can When set, it takes precedence over |'g:syntastic_<filetype>_checkers'|. You can
use this in an autocmd to configure specific checkers for particular paths: > use this in an autocmd to configure specific checkers for particular paths: >
autocmd FileType python if stridx(expand("%:p"), "/some/path/") == 0 | autocmd FileType python if stridx(expand("%:p"), "/some/path/") == 0 |
\ let b:syntastic_checkers = ["pylint"] | endif \ let b:syntastic_checkers = ["pylint"] | endif
@ -856,19 +856,19 @@ composite filetypes to simple ones using |'syntastic_filetype_map'|, e.g.: >
6.2 Editing files over network *syntastic-netrw* 6.2 Editing files over network *syntastic-netrw*
The standard plugin |netrw| allows Vim to transparently edit files over The standard plugin |netrw| allows Vim to transparently edit files over
network and inside archives. Currently syntastic doesn't support this mode network and inside archives. Currently syntastic doesn't support this mode
of operation. It can only check files that can be accessed directly by local of operation. It can only check files that can be accessed directly by local
checkers, without any translation or conversion. checkers, without any translation or conversion.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
6.3 The 'shellslash' option *syntastic-shellslash* 6.3 The 'shellslash' option *syntastic-shellslash*
The 'shellslash' option is relevant only on Windows systems. This option The 'shellslash' option is relevant only on Windows systems. This option
determines (among other things) the rules for quoting command lines, and there determines (among other things) the rules for quoting command lines, and there
is no easy way for syntastic to make sure its state is appropriate for your is no easy way for syntastic to make sure its state is appropriate for your
shell. It should be turned off if your 'shell' (or |'syntastic_shell'|) is shell. It should be turned off if your 'shell' (or |'syntastic_shell'|) is
"cmd.exe", and on for shells that expect an UNIX-like syntax, such as Cygwin's "cmd.exe", and on for shells that expect an UNIX-like syntax, such as Cygwin's
"sh". Most checkers will stop working if 'shellslash' is set to the wrong "sh". Most checkers will stop working if 'shellslash' is set to the wrong
value. value.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
@ -887,8 +887,8 @@ quickfix windows.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
7.1 The csh and tcsh shells *syntastic-csh* 7.1 The csh and tcsh shells *syntastic-csh*
The "csh" and "tcsh" shells are mostly compatible with syntastic. However, The "csh" and "tcsh" shells are mostly compatible with syntastic. However,
some checkers assume Bourne shell syntax for redirecting "stderr". For this some checkers assume Bourne shell syntax for redirecting "stderr". For this
reason, you should point |'syntastic_shell'| to a Bourne-compatible shell, reason, you should point |'syntastic_shell'| to a Bourne-compatible shell,
such as "zsh", "bash", "ksh", or even the original Bourne "sh": > such as "zsh", "bash", "ksh", or even the original Bourne "sh": >
let g:syntastic_shell = "/bin/sh" let g:syntastic_shell = "/bin/sh"
@ -961,7 +961,7 @@ packaged with a syntastic segment. To customize this segment create a file
At the time of this writing, syntastic is not compatible with using "Windows At the time of this writing, syntastic is not compatible with using "Windows
PowerShell" (http://technet.microsoft.com/en-us/library/bb978526.aspx) as Vim's PowerShell" (http://technet.microsoft.com/en-us/library/bb978526.aspx) as Vim's
'shell'. You may still run Vim from 'PowerShell', but you do have to point 'shell'. You may still run Vim from 'PowerShell', but you do have to point
Vim's 'shell' to a more traditional program, such as "cmd.exe": > Vim's 'shell' to a more traditional program, such as "cmd.exe": >
set shell=cmd.exe set shell=cmd.exe
< <
@ -980,18 +980,18 @@ for python in syntastic (see |'syntastic_mode_map'|), or disable lint checks in
7.9. vim-auto-save *syntastic-vim-auto-save* 7.9. vim-auto-save *syntastic-vim-auto-save*
Syntastic can be used together with the "vim-auto-save" Vim plugin (see Syntastic can be used together with the "vim-auto-save" Vim plugin (see
https://github.com/907th/vim-auto-save). However, syntastic checks in active https://github.com/907th/vim-auto-save). However, syntastic checks in active
mode only work with "vim-auto-save" version 0.1.7 or later. mode only work with "vim-auto-save" version 0.1.7 or later.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
7.10. vim-go *syntastic-vim-go* 7.10. vim-go *syntastic-vim-go*
Syntastic can be used along with the "vim-go" Vim plugin (see Syntastic can be used along with the "vim-go" Vim plugin (see
https://github.com/fatih/vim-go). However, both "vim-go" and syntastic run https://github.com/fatih/vim-go). However, both "vim-go" and syntastic run
syntax checks by default when you save buffers to disk. To avoid conflicts, syntax checks by default when you save buffers to disk. To avoid conflicts,
you have to either set passive mode in syntastic for the go filetype (see you have to either set passive mode in syntastic for the go filetype (see
|syntastic_mode_map|), or prevent "vim-go" from showing a quickfix window when |syntastic_mode_map|), or prevent "vim-go" from showing a quickfix window when
|g:go_fmt_command| fails, by setting |g:go_fmt_fail_silently| to 1. E.g.: > |g:go_fmt_command| fails, by setting |g:go_fmt_fail_silently| to 1. E.g.: >
let g:go_fmt_fail_silently = 1 let g:go_fmt_fail_silently = 1
< <
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
@ -999,16 +999,16 @@ you have to either set passive mode in syntastic for the go filetype (see
At the time of this writing, syntastic can't run checkers installed At the time of this writing, syntastic can't run checkers installed
in Python virtual environments activated by "vim-virtualenv" (see in Python virtual environments activated by "vim-virtualenv" (see
https://github.com/jmcantrell/vim-virtualenv). This is a limitation of https://github.com/jmcantrell/vim-virtualenv). This is a limitation of
"vim-virtualenv". "vim-virtualenv".
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
7.12 YouCompleteMe *syntastic-ycm* 7.12 YouCompleteMe *syntastic-ycm*
Syntastic can be used together with the "YouCompleteMe" Vim plugin (see Syntastic can be used together with the "YouCompleteMe" Vim plugin (see
http://valloric.github.io/YouCompleteMe/). However, by default "YouCompleteMe" http://valloric.github.io/YouCompleteMe/). However, by default "YouCompleteMe"
disables syntastic's checkers for the "c", "cpp", "objc", and "objcpp" disables syntastic's checkers for the "c", "cpp", "objc", and "objcpp"
filetypes, in order to allow its own checkers to run. If you want to use YCM's filetypes, in order to allow its own checkers to run. If you want to use YCM's
identifier completer but still run syntastic's checkers for those filetypes you identifier completer but still run syntastic's checkers for those filetypes you
have to set |g:ycm_show_diagnostics_ui| to 0. E.g.: > have to set |g:ycm_show_diagnostics_ui| to 0. E.g.: >
let g:ycm_show_diagnostics_ui = 0 let g:ycm_show_diagnostics_ui = 0
@ -1018,9 +1018,9 @@ have to set |g:ycm_show_diagnostics_ui| to 0. E.g.: >
If you're running MacVim together with the "zsh" shell (http://www.zsh.org/) If you're running MacVim together with the "zsh" shell (http://www.zsh.org/)
you need to be aware that MacVim does not source your .zshrc file, but will you need to be aware that MacVim does not source your .zshrc file, but will
source a .zshenv file. Consequently you have to move any setup steps relevant source a .zshenv file. Consequently you have to move any setup steps relevant
to the checkers you're using from .zshrc to .zshenv, otherwise your checkers to the checkers you're using from .zshrc to .zshenv, otherwise your checkers
will misbehave when run by syntastic. This is particularly important for will misbehave when run by syntastic. This is particularly important for
programs such as "rvm" (https://rvm.io/) or "rbenv" (http://rbenv.org/), that programs such as "rvm" (https://rvm.io/) or "rbenv" (http://rbenv.org/), that
rely on setting environment variables. rely on setting environment variables.

View File

@ -19,7 +19,7 @@ if has('reltime')
lockvar! g:_SYNTASTIC_START lockvar! g:_SYNTASTIC_START
endif endif
let g:_SYNTASTIC_VERSION = '3.7.0-88' let g:_SYNTASTIC_VERSION = '3.7.0-99'
lockvar g:_SYNTASTIC_VERSION lockvar g:_SYNTASTIC_VERSION
" Sanity checks {{{1 " Sanity checks {{{1

View File

@ -164,7 +164,7 @@ function! g:SyntasticRegistry.CreateAndRegisterChecker(args) abort " {{{2
if has_key(a:args, 'redirect') if has_key(a:args, 'redirect')
let [ft, name] = split(a:args['redirect'], '/') let [ft, name] = split(a:args['redirect'], '/')
call registry._loadCheckersFor(ft) call registry._loadCheckersFor(ft, 1)
let clone = get(registry._checkerMap[ft], name, {}) let clone = get(registry._checkerMap[ft], name, {})
if empty(clone) if empty(clone)
@ -320,8 +320,9 @@ function! g:SyntasticRegistry._filterCheckersByName(checkers_map, list) abort "
return filter( map(copy(a:list), 'get(a:checkers_map, v:val, {})'), '!empty(v:val)' ) return filter( map(copy(a:list), 'get(a:checkers_map, v:val, {})'), '!empty(v:val)' )
endfunction " }}}2 endfunction " }}}2
function! g:SyntasticRegistry._loadCheckersFor(filetype) abort " {{{2 function! g:SyntasticRegistry._loadCheckersFor(filetype, ...) abort " {{{2
if has_key(self._checkerMap, a:filetype) " XXX: a:1 == 1 means re-scan checkers for filetype
if has_key(self._checkerMap, a:filetype) && (!a:0 || !a:1)
return return
endif endif

View File

@ -21,13 +21,6 @@ let s:setup_done = 0
function! g:SyntasticSignsNotifier.New() abort " {{{2 function! g:SyntasticSignsNotifier.New() abort " {{{2
let newObj = copy(self) let newObj = copy(self)
if !s:setup_done
call self._setup()
let s:setup_done = 1
lockvar s:setup_done
endif
return newObj return newObj
endfunction " }}}2 endfunction " }}}2
@ -37,8 +30,15 @@ endfunction " }}}2
function! g:SyntasticSignsNotifier.refresh(loclist) abort " {{{2 function! g:SyntasticSignsNotifier.refresh(loclist) abort " {{{2
call syntastic#log#debug(g:_SYNTASTIC_DEBUG_NOTIFICATIONS, 'signs: refresh') call syntastic#log#debug(g:_SYNTASTIC_DEBUG_NOTIFICATIONS, 'signs: refresh')
let old_signs = copy(self._bufSignIds()) let old_signs = copy(self._bufSignIds())
if self.enabled() if self.enabled()
if !s:setup_done
call self._setup()
let s:setup_done = 1
lockvar s:setup_done
endif
call self._signErrors(a:loclist) call self._signErrors(a:loclist)
endif endif
call self._removeSigns(old_signs) call self._removeSigns(old_signs)

View File

@ -21,6 +21,7 @@ function! SyntaxCheckers_haskell_hlint_GetLocList() dict
\ '%E%f:%l:%v: Error while reading hint file\, %m,' . \ '%E%f:%l:%v: Error while reading hint file\, %m,' .
\ '%E%f:%l:%v: Error: %m,' . \ '%E%f:%l:%v: Error: %m,' .
\ '%W%f:%l:%v: Warning: %m,' . \ '%W%f:%l:%v: Warning: %m,' .
\ '%W%f:%l:%v: Suggestion: %m,' .
\ '%C%m' \ '%C%m'
return SyntasticMake({ return SyntasticMake({

View File

@ -1,6 +1,13 @@
"============================================================================ "============================================================================
"File: pep257.vim "File: pep257.vim
"Description: Docstring style checking plugin for syntastic.vim "Description: Syntax checking plugin for syntastic
"Maintainer: LCD 47 <lcd047 at gmail dot com>
"License: This program is free software. It comes without any warranty,
" to the extent permitted by applicable law. You can redistribute
" it and/or modify it under the terms of the Do What The Fuck You
" Want To Public License, Version 2, as published by Sam Hocevar.
" See http://sam.zoy.org/wtfpl/COPYING for more details.
"
"============================================================================ "============================================================================
if exists('g:loaded_syntastic_python_pep257_checker') if exists('g:loaded_syntastic_python_pep257_checker')
@ -8,52 +15,9 @@ if exists('g:loaded_syntastic_python_pep257_checker')
endif endif
let g:loaded_syntastic_python_pep257_checker = 1 let g:loaded_syntastic_python_pep257_checker = 1
let s:save_cpo = &cpo
set cpo&vim
function! SyntaxCheckers_python_pep257_GetLocList() dict
if !exists('s:pep257_new')
let s:pep257_new = syntastic#util#versionIsAtLeast(self.getVersion(), [0, 3])
endif
let makeprg = self.makeprgBuild({})
if s:pep257_new
let errorformat =
\ '%E%f:%l %.%#:,' .
\ '%+C %m'
else
let errorformat =
\ '%E%f:%l:%c%\%.%\%.%\d%\+:%\d%\+: %m,' .
\ '%E%f:%l:%c: %m,' .
\ '%+C %m'
endif
let env = syntastic#util#isRunningWindows() ? {} : { 'TERM': 'dumb' }
let loclist = SyntasticMake({
\ 'makeprg': makeprg,
\ 'errorformat': errorformat,
\ 'env': env,
\ 'subtype': 'Style',
\ 'preprocess': 'killEmpty',
\ 'postprocess': ['compressWhitespace'] })
if s:pep257_new == 0
" byte offsets rather than column numbers
for e in loclist
let e['col'] = get(e, 'col', 0) + 1
endfor
endif
return loclist
endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({ call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'python', \ 'filetype': 'python',
\ 'name': 'pep257'}) \ 'name': 'pep257',
\ 'redirect': 'python/pydocstyle'})
let &cpo = s:save_cpo
unlet s:save_cpo
" vim: set sw=4 sts=4 et fdm=marker: " vim: set sw=4 sts=4 et fdm=marker:

View File

@ -0,0 +1,66 @@
"============================================================================
"File: pydocstyle.vim
"Description: Syntax checking plugin for syntastic
"Maintainer: LCD 47 <lcd047 at gmail dot com>
"License: This program is free software. It comes without any warranty,
" to the extent permitted by applicable law. You can redistribute
" it and/or modify it under the terms of the Do What The Fuck You
" Want To Public License, Version 2, as published by Sam Hocevar.
" See http://sam.zoy.org/wtfpl/COPYING for more details.
"
"============================================================================
if exists('g:loaded_syntastic_python_pydocstyle_checker')
finish
endif
let g:loaded_syntastic_python_pydocstyle_checker = 1
let s:save_cpo = &cpo
set cpo&vim
function! SyntaxCheckers_python_pydocstyle_GetLocList() dict
if !exists('s:pydocstyle_new')
let s:pydocstyle_new = syntastic#util#versionIsAtLeast(self.getVersion(), [0, 3])
endif
let makeprg = self.makeprgBuild({})
if s:pydocstyle_new
let errorformat =
\ '%E%f:%l %.%#:,' .
\ '%+C %m'
else
let errorformat =
\ '%E%f:%l:%c%\%.%\%.%\d%\+:%\d%\+: %m,' .
\ '%E%f:%l:%c: %m,' .
\ '%+C %m'
endif
let env = syntastic#util#isRunningWindows() ? {} : { 'TERM': 'dumb' }
let loclist = SyntasticMake({
\ 'makeprg': makeprg,
\ 'errorformat': errorformat,
\ 'env': env,
\ 'subtype': 'Style',
\ 'preprocess': 'killEmpty',
\ 'postprocess': ['compressWhitespace'] })
if s:pydocstyle_new == 0
" byte offsets rather than column numbers
for e in loclist
let e['col'] = get(e, 'col', 0) + 1
endfor
endif
return loclist
endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'python',
\ 'name': 'pydocstyle'})
let &cpo = s:save_cpo
unlet s:save_cpo
" vim: set sw=4 sts=4 et fdm=marker:

View File

@ -50,6 +50,12 @@ function! airline#themes#lucius#refresh()
\ 'red': airline#themes#get_highlight('Constant'), \ 'red': airline#themes#get_highlight('Constant'),
\ } \ }
" Extra tabline colors
let s:TS = airline#themes#get_highlight('TabLineSel')
let g:airline#themes#lucius#palette.tabline = {}
let g:airline#themes#lucius#palette.tabline.airline_tabsel = s:TS
let g:airline#themes#lucius#palette.tabline.airline_tabsel_right = s:TS
endfunction endfunction
call airline#themes#lucius#refresh() call airline#themes#lucius#refresh()

View File

@ -3,16 +3,31 @@
This is the Changelog for the vim-airline project. This is the Changelog for the vim-airline project.
## [Unreleased] ## [Unreleased]
## [0.8] - 2016-03-09
- Changes - Changes
- Themes have been moved into an extra repository [vim-airline-themes](https://github.com/vim-airline/vim-airline-themes) - Airline converted to an organization and moved to new [repository](https://github.com/vim-airline/vim-airline)
- Many new themes - Themes have been split into an separate repository [vim-airline-themes](https://github.com/vim-airline/vim-airline-themes)
- Airline Moved to new [repository](https://github.com/vim-airline/vim-airline) - Improvements
- New features - Extensions
- Integration with [taboo](https://github.com/gcmt/taboo.vim), [vim-ctrlspace](https://github.com/szw/vim-ctrlspace), - branch: support Git and Mercurial simultaneously, untracked files
[quickfixsigns](https://github.com/tomtom/quickfixsigns_vim), [YouCompleteMe](https://github.com/Valloric/YouCompleteMe) - whitespace: new mixed-indent rule
- Windows support
- Many bug fixes
- Support for Neovim - Support for Neovim
- Added wordcount extension - New features
- Adding Crypt and Byte Order Mark Indicator - Many new themes
- Extensions/integration
- [taboo](https://github.com/gcmt/taboo.vim)
- [vim-ctrlspace](https://github.com/szw/vim-ctrlspace)
- [quickfixsigns](https://github.com/tomtom/quickfixsigns_vim)
- [YouCompleteMe](https://github.com/Valloric/YouCompleteMe)
- [po.vim](http://www.vim.org/scripts/script.php?script_id=695)
- [unicode.vim](https://github.com/chrisbra/unicode.vim)
- wordcount
- crypt indicator
- byte order mark indicator
- Tabline's tab mode can display splits simultaneously
## [0.7] - 2014-12-10 ## [0.7] - 2014-12-10
- New features - New features
@ -94,7 +109,8 @@ This is the Changelog for the vim-airline project.
- integration with other plugins: netrw, unite, nerdtree, undotree, gundo, tagbar, minibufexplr, ctrlp - integration with other plugins: netrw, unite, nerdtree, undotree, gundo, tagbar, minibufexplr, ctrlp
- support for themes: 8 included - support for themes: 8 included
[Unreleased]: https://github.com/vim-airline/vim-airline/compare/v0.7...HEAD [Unreleased]: https://github.com/vim-airline/vim-airline/compare/v0.8...HEAD
[0.8]: https://github.com/vim-airline/vim-airline/compare/v0.7...v0.8
[0.7]: https://github.com/vim-airline/vim-airline/compare/v0.6...v0.7 [0.7]: https://github.com/vim-airline/vim-airline/compare/v0.6...v0.7
[0.6]: https://github.com/vim-airline/vim-airline/compare/v0.5...v0.6 [0.6]: https://github.com/vim-airline/vim-airline/compare/v0.5...v0.6
[0.5]: https://github.com/vim-airline/vim-airline/compare/v0.4...v0.5 [0.5]: https://github.com/vim-airline/vim-airline/compare/v0.4...v0.5

View File

@ -0,0 +1,14 @@
#### environment
- vim: ????
- vim-airline: ????
- OS: ????
- terminal: ????
#### actual behavior
????
#### expected behavior
????

View File

@ -72,9 +72,10 @@ endfunction
function! airline#switch_matching_theme() function! airline#switch_matching_theme()
if exists('g:colors_name') if exists('g:colors_name')
let existing = g:airline_theme let existing = g:airline_theme
let theme = substitute(g:colors_name, '-', '_', 'g')
try try
let palette = g:airline#themes#{g:colors_name}#palette let palette = g:airline#themes#{theme}#palette
call airline#switch_theme(g:colors_name) call airline#switch_theme(theme)
return 1 return 1
catch catch
for map in items(g:airline_theme_map) for map in items(g:airline_theme_map)

View File

@ -210,6 +210,10 @@ function! airline#extensions#load()
call airline#extensions#whitespace#init(s:ext) call airline#extensions#whitespace#init(s:ext)
endif endif
if get(g:, 'airline#extensions#po#enabled', 1) && executable('msgfmt')
call airline#extensions#po#init(s:ext)
endif
if get(g:, 'airline#extensions#wordcount#enabled', 1) if get(g:, 'airline#extensions#wordcount#enabled', 1)
call airline#extensions#wordcount#init(s:ext) call airline#extensions#wordcount#init(s:ext)
endif endif

View File

@ -154,7 +154,7 @@ function! airline#extensions#branch#head()
if exists("g:airline#extensions#branch#displayed_head_limit") if exists("g:airline#extensions#branch#displayed_head_limit")
let w:displayed_head_limit = g:airline#extensions#branch#displayed_head_limit let w:displayed_head_limit = g:airline#extensions#branch#displayed_head_limit
if len(b:airline_head) > w:displayed_head_limit - 1 if len(b:airline_head) > w:displayed_head_limit - 1
let b:airline_head = b:airline_head[0:w:displayed_head_limit - 1].'…' let b:airline_head = b:airline_head[0:(w:displayed_head_limit - 1)].(&encoding ==? 'utf-8' ? '…' : '.')
endif endif
endif endif

View File

@ -0,0 +1,36 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
function! airline#extensions#po#apply(...)
if &ft ==# 'po'
call airline#extensions#prepend_to_section('z', '%{airline#extensions#po#stats()}')
autocmd airline BufWritePost * unlet! b:airline_po_stats
endif
endfunction
function! airline#extensions#po#stats()
if exists('b:airline_po_stats') && !empty(b:airline_po_stats)
return b:airline_po_stats
endif
let airline_po_stats = system('msgfmt --statistics -o /dev/null -- '. expand('%:p'))
if v:shell_error
return ''
endif
try
let b:airline_po_stats = '['. split(airline_po_stats, '\n')[0]. ']'
catch
let b:airline_po_stats = ''
endtry
if exists("g:airline#extensions#po#displayed_limit")
let w:displayed_po_limit = g:airline#extensions#po#displayed_limit
if len(b:airline_po_stats) > w:displayed_po_limit - 1
let b:airline_po_stats = b:airline_po_stats[0:(w:displayed_po_limit - 1)].(&encoding==?'utf-8' ? '…' : '.')
endif
endif
return b:airline_po_stats
endfunction
function! airline#extensions#po#init(ext)
call a:ext.add_statusline_func('airline#extensions#po#apply')
endfunction

View File

@ -5,6 +5,7 @@ let s:formatter = get(g:, 'airline#extensions#tabline#formatter', 'default')
let s:show_buffers = get(g:, 'airline#extensions#tabline#show_buffers', 1) let s:show_buffers = get(g:, 'airline#extensions#tabline#show_buffers', 1)
let s:show_tabs = get(g:, 'airline#extensions#tabline#show_tabs', 1) let s:show_tabs = get(g:, 'airline#extensions#tabline#show_tabs', 1)
let s:ignore_bufadd_pat = get(g:, 'airline#extensions#tabline#ignore_bufadd_pat', '\c\vgundo|undotree|vimfiler|tagbar|nerd_tree') let s:ignore_bufadd_pat = get(g:, 'airline#extensions#tabline#ignore_bufadd_pat', '\c\vgundo|undotree|vimfiler|tagbar|nerd_tree')
let s:taboo = get(g:, 'airline#extensions#taboo#enabled', 1) && get(g:, 'loaded_taboo', 0) let s:taboo = get(g:, 'airline#extensions#taboo#enabled', 1) && get(g:, 'loaded_taboo', 0)
if s:taboo if s:taboo
let g:taboo_tabline = 0 let g:taboo_tabline = 0
@ -41,27 +42,21 @@ function! s:toggle_on()
endfunction endfunction
function! s:update_tabline() function! s:update_tabline()
if get(g:, 'airline#extensions#tabline#disable_refresh', 0)
return
endif
let match = expand('<afile>') let match = expand('<afile>')
if pumvisible() if pumvisible()
return return
elseif !get(g:, 'airline#extensions#tabline#enabled', 0) elseif !get(g:, 'airline#extensions#tabline#enabled', 0)
return return
" return, if buffer matches ignore pattern or is directory (netrw) " return, if buffer matches ignore pattern or is directory (netrw)
elseif empty(match) elseif empty(match)
\ || match(match, s:ignore_bufadd_pat) > -1 \ || match(match, s:ignore_bufadd_pat) > -1
\ || isdirectory(expand("<afile>")) \ || isdirectory(expand("<afile>"))
return return
endif endif
if empty(mapcheck("<Plug>AirlineTablineRefresh", 'n')) doautocmd User BufMRUChange
noremap <silent> <Plug>AirlineTablineRefresh :set mod!<cr>
endif
call feedkeys("\<Plug>AirlineTablineRefresh")
call feedkeys("\<Plug>AirlineTablineRefresh")
"call feedkeys(',,', 't')
"call feedkeys(':unmap ,,')
" force re-evaluation of tabline setting
" disable explicit redraw, may cause E315
"redraw
endfunction endfunction
function! airline#extensions#tabline#load_theme(palette) function! airline#extensions#tabline#load_theme(palette)
@ -92,6 +87,7 @@ function! airline#extensions#tabline#load_theme(palette)
" Theme for tabs on the right " Theme for tabs on the right
let l:tabsel_right = get(colors, 'airline_tabsel_right', a:palette.normal.airline_a) let l:tabsel_right = get(colors, 'airline_tabsel_right', a:palette.normal.airline_a)
let l:tab_right = get(colors, 'airline_tab_right', a:palette.inactive.airline_c)
let l:tabmod_right = get(colors, 'airline_tabmod_right', a:palette.insert.airline_a) let l:tabmod_right = get(colors, 'airline_tabmod_right', a:palette.insert.airline_a)
let l:tabhid_right = get(colors, 'airline_tabhid_right', a:palette.normal.airline_c) let l:tabhid_right = get(colors, 'airline_tabhid_right', a:palette.normal.airline_c)
if has_key(a:palette, 'normal_modified') && has_key(a:palette.normal_modified, 'airline_c') if has_key(a:palette, 'normal_modified') && has_key(a:palette.normal_modified, 'airline_c')
@ -100,6 +96,7 @@ function! airline#extensions#tabline#load_theme(palette)
"Fall back to normal airline_c if modified airline_c isn't present "Fall back to normal airline_c if modified airline_c isn't present
let l:tabmodu_right = get(colors, 'airline_tabmod_unsel_right', a:palette.normal.airline_c) let l:tabmodu_right = get(colors, 'airline_tabmod_unsel_right', a:palette.normal.airline_c)
endif endif
call airline#highlighter#exec('airline_tab_right', l:tab_right)
call airline#highlighter#exec('airline_tabsel_right', l:tabsel_right) call airline#highlighter#exec('airline_tabsel_right', l:tabsel_right)
call airline#highlighter#exec('airline_tabmod_right', l:tabmod_right) call airline#highlighter#exec('airline_tabmod_right', l:tabmod_right)
call airline#highlighter#exec('airline_tabhid_right', l:tabhid_right) call airline#highlighter#exec('airline_tabhid_right', l:tabhid_right)
@ -163,3 +160,23 @@ function! airline#extensions#tabline#new_builder()
return airline#builder#new(builder_context) return airline#builder#new(builder_context)
endfunction endfunction
function! airline#extensions#tabline#group_of_bufnr(tab_bufs, bufnr)
let cur = bufnr('%')
if cur == a:bufnr
if g:airline_detect_modified && getbufvar(a:bufnr, '&modified')
let group = 'airline_tabmod'
else
let group = 'airline_tabsel'
endif
else
if g:airline_detect_modified && getbufvar(a:bufnr, '&modified')
let group = 'airline_tabmod_unsel'
elseif index(a:tab_bufs, a:bufnr) > -1
let group = 'airline_tab'
else
let group = 'airline_tabhid'
endif
endif
return group
endfunction

View File

@ -5,6 +5,7 @@ scriptencoding utf-8
let s:buffer_idx_mode = get(g:, 'airline#extensions#tabline#buffer_idx_mode', 0) let s:buffer_idx_mode = get(g:, 'airline#extensions#tabline#buffer_idx_mode', 0)
let s:show_tab_type = get(g:, 'airline#extensions#tabline#show_tab_type', 1) let s:show_tab_type = get(g:, 'airline#extensions#tabline#show_tab_type', 1)
let s:buffers_label = get(g:, 'airline#extensions#tabline#buffers_label', 'buffers')
let s:spc = g:airline_symbols.space let s:spc = g:airline_symbols.space
let s:current_bufnr = -1 let s:current_bufnr = -1
@ -64,23 +65,16 @@ function! airline#extensions#tabline#buffers#get()
continue continue
endif endif
if cur == nr let group = airline#extensions#tabline#group_of_bufnr(tab_bufs, nr)
if g:airline_detect_modified && getbufvar(nr, '&modified')
let group = 'airline_tabmod' if nr == cur
else
let group = 'airline_tabsel'
endif
let s:current_modified = (group == 'airline_tabmod') ? 1 : 0 let s:current_modified = (group == 'airline_tabmod') ? 1 : 0
else
if g:airline_detect_modified && getbufvar(nr, '&modified')
let group = 'airline_tabmod_unsel'
elseif index(tab_bufs, nr) > -1
let group = 'airline_tab'
else
let group = 'airline_tabhid'
endif
endif endif
" Neovim feature: Have clickable buffers
if has("tablineat")
call b.add_raw('%'.nr.'@airline#extensions#tabline#buffers#switchbuf@')
endif
if s:buffer_idx_mode if s:buffer_idx_mode
if len(s:number_map) > 0 if len(s:number_map) > 0
call b.add_section(group, s:spc . get(s:number_map, l:index, '') . '%(%{airline#extensions#tabline#get_buffer_name('.nr.')}%)' . s:spc) call b.add_section(group, s:spc . get(s:number_map, l:index, '') . '%(%{airline#extensions#tabline#get_buffer_name('.nr.')}%)' . s:spc)
@ -91,13 +85,16 @@ function! airline#extensions#tabline#buffers#get()
else else
call b.add_section(group, s:spc.'%(%{airline#extensions#tabline#get_buffer_name('.nr.')}%)'.s:spc) call b.add_section(group, s:spc.'%(%{airline#extensions#tabline#get_buffer_name('.nr.')}%)'.s:spc)
endif endif
if has("tablineat")
call b.add_raw('%X')
endif
endfor endfor
call b.add_section('airline_tabfill', '') call b.add_section('airline_tabfill', '')
call b.split() call b.split()
call b.add_section('airline_tabfill', '') call b.add_section('airline_tabfill', '')
if s:show_tab_type if s:show_tab_type
call b.add_section('airline_tabtype', ' buffers ') call b.add_section_spaced('airline_tabtype', s:buffers_label)
endif endif
let s:current_bufnr = cur let s:current_bufnr = cur
@ -198,3 +195,11 @@ function s:map_keys()
noremap <silent> <Plug>AirlineSelectNextTab :<C-u>call <SID>jump_to_tab(v:count1)<CR> noremap <silent> <Plug>AirlineSelectNextTab :<C-u>call <SID>jump_to_tab(v:count1)<CR>
endif endif
endfunction endfunction
function airline#extensions#tabline#buffers#switchbuf(minwid, clicks, button, modifiers) abort
" Run the following code only on a single left mouse button click without modifiers pressed
" works only in recent NeoVim with has('tablineat')
if a:clicks == 1 && a:button is# 'l' && a:modifiers !~# '[^ ]'
sil execute 'buffer' a:minwid
endif
endfunction

View File

@ -7,6 +7,12 @@ let s:current_bufnr = -1
let s:current_tabnr = -1 let s:current_tabnr = -1
let s:current_tabline = '' let s:current_tabline = ''
let s:buffers_label = get(g:, 'airline#extensions#tabline#buffers_label', 'buffers')
let s:tabs_label = get(g:, 'airline#extensions#tabline#tabs_label', 'tabs')
let s:switch_buffers_and_tabs = get(g:, 'airline#extensions#tabline#switch_buffers_and_tabs', 0)
let s:show_buffers = get(g:, 'airline#extensions#tabline#show_buffers', 1)
let s:show_tabs = get(g:, 'airline#extensions#tabline#show_tabs', 1)
function! airline#extensions#tabline#ctrlspace#off() function! airline#extensions#tabline#ctrlspace#off()
augroup airline_tabline_ctrlspace augroup airline_tabline_ctrlspace
autocmd! autocmd!
@ -25,6 +31,62 @@ function! airline#extensions#tabline#ctrlspace#invalidate()
let s:current_tabnr = -1 let s:current_tabnr = -1
endfunction endfunction
function! airline#extensions#tabline#ctrlspace#add_buffer_section(builder, cur_tab, cur_buf, pos)
if a:pos == 0
let pos_extension = ''
else
let pos_extension = '_right'
endif
let s:buffer_list = ctrlspace#api#BufferList(a:cur_tab)
for buffer in s:buffer_list
if a:cur_buf == buffer.index
if buffer.modified
let group = 'airline_tabmod'.pos_extension
else
let group = 'airline_tabsel'.pos_extension
endif
else
if buffer.modified
let group = 'airline_tabmod_unsel'.pos_extension
elseif buffer.visible
let group = 'airline_tab'.pos_extension
else
let group = 'airline_tabhid'.pos_extension
endif
endif
let buf_name = '%(%{airline#extensions#tabline#get_buffer_name('.buffer.index.')}%)'
call a:builder.add_section_spaced(group, buf_name)
endfor
endfunction
function! airline#extensions#tabline#ctrlspace#add_tab_section(builder, pos)
if a:pos == 0
let pos_extension = ''
else
let pos_extension = '_right'
endif
for tab in s:tab_list
if tab.current
if tab.modified
let group = 'airline_tabmod'.pos_extension
else
let group = 'airline_tabsel'.pos_extension
endif
else
if tab.modified
let group = 'airline_tabmod_unsel'.pos_extension
else
let group = 'airline_tabhid'.pos_extension
endif
endif
call a:builder.add_section_spaced(group, tab.title.ctrlspace#api#TabBuffersNumber(tab.index))
endfor
endfunction
function! airline#extensions#tabline#ctrlspace#get() function! airline#extensions#tabline#ctrlspace#get()
let cur_buf = bufnr('%') let cur_buf = bufnr('%')
@ -39,59 +101,44 @@ function! airline#extensions#tabline#ctrlspace#get()
return s:current_tabline return s:current_tabline
endif endif
let b = airline#extensions#tabline#new_builder() let builder = airline#extensions#tabline#new_builder()
call b.add_section_spaced('airline_tabtype', 'buffers') " Add left tabline content
if s:show_buffers == 0
let s:buffer_list = ctrlspace#api#BufferList(cur_tab) call airline#extensions#tabline#ctrlspace#add_tab_section(builder, 0)
for buffer in s:buffer_list elseif s:show_tabs == 0
if cur_buf == buffer.index call airline#extensions#tabline#ctrlspace#add_buffer_section(builder, cur_tab, cur_buf, 0)
if buffer.modified else
let group = 'airline_tabmod' if s:switch_buffers_and_tabs == 0
else call builder.add_section_spaced('airline_tabtype', s:buffers_label)
let group = 'airline_tabsel' call airline#extensions#tabline#ctrlspace#add_buffer_section(builder, cur_tab, cur_buf, 0)
endif
else
if buffer.modified
let group = 'airline_tabmod_unsel'
elseif buffer.visible
let group = 'airline_tab'
else
let group = 'airline_tabhid'
endif
endif
let buf_name = '%(%{airline#extensions#tabline#get_buffer_name('.buffer.index.')}%)'
call b.add_section_spaced(group, buf_name)
endfor
call b.add_section('airline_tabfill', '')
call b.split()
call b.add_section('airline_tabfill', '')
for tab in s:tab_list
if tab.current
if tab.modified
let group = 'airline_tabmod_right'
else
let group = 'airline_tabsel_right'
endif
else else
if tab.modified call builder.add_section_spaced('airline_tabtype', s:tabs_label)
let group = 'airline_tabmod_unsel_right' call airline#extensions#tabline#ctrlspace#add_tab_section(builder, 0)
else
let group = 'airline_tabhid_right'
endif
endif endif
endif
call b.add_section_spaced(group, tab.title.ctrlspace#api#TabBuffersNumber(tab.index)) call builder.add_section('airline_tabfill', '')
endfor call builder.split()
call builder.add_section('airline_tabfill', '')
call b.add_section_spaced('airline_tabtype', 'tabs') " Add right tabline content
if s:show_buffers == 0
call builder.add_section_spaced('airline_tabtype', s:tabs_label)
elseif s:show_tabs == 0
call builder.add_section_spaced('airline_tabtype', s:buffers_label)
else
if s:switch_buffers_and_tabs == 0
call airline#extensions#tabline#ctrlspace#add_tab_section(builder, 1)
call builder.add_section_spaced('airline_tabtype', s:tabs_label)
else
call airline#extensions#tabline#ctrlspace#add_buffer_section(builder, cur_tab, cur_buf, 1)
call builder.add_section_spaced('airline_tabtype', s:buffers_label)
endif
endif
let s:current_bufnr = cur_buf let s:current_bufnr = cur_buf
let s:current_tabnr = cur_tab let s:current_tabnr = cur_tab
let s:current_tabline = b.build() let s:current_tabline = builder.build()
return s:current_tabline return s:current_tabline
endfunction endfunction

View File

@ -1,11 +1,14 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling. " MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2 " vim: et ts=2 sts=2 sw=2
let s:show_tab_nr = get(g:, 'airline#extensions#tabline#show_tab_nr', 1)
let s:tab_nr_type = get(g:, 'airline#extensions#tabline#tab_nr_type', 0)
let s:show_close_button = get(g:, 'airline#extensions#tabline#show_close_button', 1) let s:show_close_button = get(g:, 'airline#extensions#tabline#show_close_button', 1)
let s:show_tab_type = get(g:, 'airline#extensions#tabline#show_tab_type', 1) let s:show_tab_type = get(g:, 'airline#extensions#tabline#show_tab_type', 1)
let s:show_tab_nr = get(g:, 'airline#extensions#tabline#show_tab_nr', 1)
let s:tab_nr_type = get(g:, 'airline#extensions#tabline#tab_nr_type', 0)
let s:close_symbol = get(g:, 'airline#extensions#tabline#close_symbol', 'X') let s:close_symbol = get(g:, 'airline#extensions#tabline#close_symbol', 'X')
let s:tabs_label = get(g:, 'airline#extensions#tabline#tabs_label', 'tabs')
let s:show_splits = get(g:, 'airline#extensions#tabline#show_splits', 1)
let s:spc = g:airline_symbols.space
let s:current_bufnr = -1 let s:current_bufnr = -1
let s:current_tabnr = -1 let s:current_tabnr = -1
@ -39,19 +42,20 @@ function! airline#extensions#tabline#tabs#get()
endif endif
let b = airline#extensions#tabline#new_builder() let b = airline#extensions#tabline#new_builder()
for i in range(1, tabpagenr('$')) for i in range(1, tabpagenr('$'))
if i == curtab if i == curtab
let group = 'airline_tabsel' let group = 'airline_tabsel_right'
if g:airline_detect_modified if g:airline_detect_modified
for bi in tabpagebuflist(i) for bi in tabpagebuflist(i)
if getbufvar(bi, '&modified') if getbufvar(bi, '&modified')
let group = 'airline_tabmod' let group = 'airline_tabmod_right'
endif endif
endfor endfor
endif endif
let s:current_modified = (group == 'airline_tabmod') ? 1 : 0 let s:current_modified = (group == 'airline_tabmod_right') ? 1 : 0
else else
let group = 'airline_tab' let group = 'airline_tab_right'
endif endif
let val = '%(' let val = '%('
if s:show_tab_nr if s:show_tab_nr
@ -66,14 +70,22 @@ function! airline#extensions#tabline#tabs#get()
call b.add_section(group, val.'%'.i.'T %{airline#extensions#tabline#title('.i.')} %)') call b.add_section(group, val.'%'.i.'T %{airline#extensions#tabline#title('.i.')} %)')
endfor endfor
call b.add_raw('%T')
call b.add_section('airline_tabfill', '') call b.add_section('airline_tabfill', '')
call b.split() call b.split()
call b.add_section('airline_tabfill', '')
if s:show_close_button if s:show_close_button
call b.add_section('airline_tab', ' %999X'.s:close_symbol.' ') call b.add_section('airline_tab_right', ' %999X'.s:close_symbol.' ')
endif endif
if s:show_tab_type
call b.add_section('airline_tabtype', ' tabs ') if s:show_splits == 1
let buffers = tabpagebuflist(curtab)
for nr in buffers
let group = airline#extensions#tabline#group_of_bufnr(buffers, nr)
call b.add_section_spaced(group, '%(%{airline#extensions#tabline#get_buffer_name('.nr.')}%)')
endfor
elseif s:show_tab_type == 1
call b.add_section_spaced('airline_tabtype', s:tabs_label)
endif endif
let s:current_bufnr = curbuf let s:current_bufnr = curbuf

View File

@ -35,8 +35,14 @@ function! s:check_mixed_indent()
endfunction endfunction
function! s:check_mixed_indent_file() function! s:check_mixed_indent_file()
if stridx(&ft, 'c') == 0 || stridx(&ft, 'cpp') == 0 || stridx(&ft, 'javascript') == 0
" for C/CPP only allow /** */ comment style with one space before the '*'
let head_spc = '\v(^ +\*@!)'
else
let head_spc = '\v(^ +)'
endif
let indent_tabs = search('\v(^\t+)', 'nw') let indent_tabs = search('\v(^\t+)', 'nw')
let indent_spc = search('\v(^ +)', 'nw') let indent_spc = search(head_spc, 'nw')
if indent_tabs > 0 && indent_spc > 0 if indent_tabs > 0 && indent_spc > 0
return printf("%d:%d", indent_tabs, indent_spc) return printf("%d:%d", indent_tabs, indent_spc)
else else

View File

@ -47,13 +47,12 @@ function! airline#init#bootstrap()
call s:check_defined('g:airline_theme_map', {}) call s:check_defined('g:airline_theme_map', {})
call extend(g:airline_theme_map, { call extend(g:airline_theme_map, {
\ 'Tomorrow.*': 'tomorrow', \ '\CTomorrow': 'tomorrow',
\ 'base16.*': 'base16', \ 'base16': 'base16',
\ 'bubblegum': 'bubblegum',
\ 'mo[l|n]okai': 'molokai', \ 'mo[l|n]okai': 'molokai',
\ 'wombat.*': 'wombat', \ 'wombat': 'wombat',
\ '.*zenburn.*': 'zenburn', \ 'zenburn': 'zenburn',
\ '.*solarized.*': 'solarized', \ 'solarized': 'solarized',
\ }, 'keep') \ }, 'keep')
call s:check_defined('g:airline_symbols', {}) call s:check_defined('g:airline_symbols', {})

View File

@ -70,7 +70,11 @@ function! airline#parts#iminsert()
endfunction endfunction
function! airline#parts#readonly() function! airline#parts#readonly()
return &readonly ? g:airline_symbols.readonly : '' if &readonly && &modifiable && !filereadable(bufname('%'))
return '[noperm]'
else
return &readonly ? g:airline_symbols.readonly : ''
endif
endfunction endfunction
function! airline#parts#filetype() function! airline#parts#filetype()

View File

@ -489,13 +489,22 @@ eclim <https://eclim.org>
let g:airline#extensions#whitespace#trailing_regexp = '\s$' let g:airline#extensions#whitespace#trailing_regexp = '\s$'
< <
------------------------------------- *airline-tabline* ------------------------------------- *airline-tabline*
* enable/disable enhanced tabline. > Note: If you're using the ctrlspace tabline only the option marked with (c)
are supported!
* enable/disable enhanced tabline. (c)
let g:airline#extensions#tabline#enabled = 0 let g:airline#extensions#tabline#enabled = 0
<
* enable/disable displaying buffers with a single tab. > * enable/disable displaying open splits per tab (only when tabs are opened). >
let g:airline#extensions#tabline#show_splits = 1
*
* switch position of buffers and tabs on splited tabline (c)
let g:airline#extensions#tabline#switch_buffers_and_tabs = 0
* enable/disable displaying buffers with a single tab. (c)
let g:airline#extensions#tabline#show_buffers = 1 let g:airline#extensions#tabline#show_buffers = 1
< <
* enable/disable displaying tabs, regardless of number. > * enable/disable displaying tabs, regardless of number. (c)
let g:airline#extensions#tabline#show_tabs = 1 let g:airline#extensions#tabline#show_tabs = 1
< <
* configure filename match rules to exclude from the tabline. > * configure filename match rules to exclude from the tabline. >
@ -515,11 +524,13 @@ eclim <https://eclim.org>
* enable/disable displaying tab type (far right) > * enable/disable displaying tab type (far right) >
let g:airline#extensions#tabline#show_tab_type = 1 let g:airline#extensions#tabline#show_tab_type = 1
* enable/disable displaying index of the buffer. * rename label for buffers (default: 'buffers') (c)
let g:airline#extensions#tabline#buffers_label = 'b'
Note: If you're using ctrlspace the tabline shows your tabs on the right and * rename label for tabs (default: 'tabs') (c)
buffer on the left. Also none of the tabline switches is currently let g:airline#extensions#tabline#tabs_label = 't'
supported!
* enable/disable displaying index of the buffer.
When enabled, numbers will be displayed in the tabline and mappings will be When enabled, numbers will be displayed in the tabline and mappings will be
exposed to allow you to select a buffer directly. Up to 9 mappings will be exposed to allow you to select a buffer directly. Up to 9 mappings will be
@ -545,7 +556,7 @@ eclim <https://eclim.org>
Use |gt| for switching tabs. Use |gt| for switching tabs.
In tabmode, those mappings will switch to the specified tab. In tabmode, those mappings will switch to the specified tab.
* defines the name of a formatter for how buffer names are displayed. > * defines the name of a formatter for how buffer names are displayed. (c)
let g:airline#extensions#tabline#formatter = 'default' let g:airline#extensions#tabline#formatter = 'default'
" here is how you can define a 'foo' formatter: " here is how you can define a 'foo' formatter:
@ -565,7 +576,7 @@ eclim <https://eclim.org>
* configure whether buffer numbers should be shown. > * configure whether buffer numbers should be shown. >
let g:airline#extensions#tabline#buffer_nr_show = 0 let g:airline#extensions#tabline#buffer_nr_show = 0
< <
* configure how buffer numbers should be formatted with |printf|. > * configure how buffer numbers should be formatted with |printf()|. >
let g:airline#extensions#tabline#buffer_nr_format = '%s: ' let g:airline#extensions#tabline#buffer_nr_format = '%s: '
< <
* configure the formatting of filenames (see |filename-modifiers|). > * configure the formatting of filenames (see |filename-modifiers|). >
@ -614,9 +625,13 @@ eclim <https://eclim.org>
let airline#extensions#tabline#ignore_bufadd_pat = let airline#extensions#tabline#ignore_bufadd_pat =
\ '\c\vgundo|undotree|vimfiler|tagbar|nerd_tree' \ '\c\vgundo|undotree|vimfiler|tagbar|nerd_tree'
<
Note: Enabling this extension will modify 'showtabline' and 'guioptions'. Note: Enabling this extension will modify 'showtabline' and 'guioptions'.
* enable Refresh of tabline buffers on |BufAdd| autocommands
(set this to one, if you note 'AirlineTablineRefresh', however, this
won't update airline on |:badd| commands) >
let airline#extensions#tabline#disable_refresh = 0
------------------------------------- *airline-tmuxline* ------------------------------------- *airline-tmuxline*
tmuxline <https://github.com/edkolev/tmuxline.vim> tmuxline <https://github.com/edkolev/tmuxline.vim>
@ -707,6 +722,15 @@ Shows number of errors and warnings in the current file detected by YCM.
* set warning count prefix > * set warning count prefix >
let g:airline#extensions#ycm#warning_symbol = 'W:' let g:airline#extensions#ycm#warning_symbol = 'W:'
< <
------------------------------------- *airline-po*
po.vim <http://www.vim.org/scripts/script.php?script_id=2530>
* enable/disable po integration >
let g:airline#extensions#po#enabled = 1
<
* truncate width names to a fixed length >
let g:airline#extensions#po#displayed_limit = 0
<
============================================================================== ==============================================================================
ADVANCED CUSTOMIZATION *airline-advanced-customization* ADVANCED CUSTOMIZATION *airline-advanced-customization*

View File

@ -28,11 +28,11 @@ function! s:go(type,...) abort
let [lnum1, lnum2] = [line("'["), line("']")] let [lnum1, lnum2] = [line("'["), line("']")]
endif endif
let [l, r] = s:surroundings() let [l_, r_] = s:surroundings()
let uncomment = 2 let uncomment = 2
for lnum in range(lnum1,lnum2) for lnum in range(lnum1,lnum2)
let line = matchstr(getline(lnum),'\S.*\s\@<!') let line = matchstr(getline(lnum),'\S.*\s\@<!')
let [l, r] = s:strip_white_space(l,r,line) let [l, r] = s:strip_white_space(l_,r_,line)
if line != '' && (stridx(line,l) || line[strlen(line)-strlen(r) : -1] != r) if line != '' && (stridx(line,l) || line[strlen(line)-strlen(r) : -1] != r)
let uncomment = 0 let uncomment = 0
endif endif

View File

@ -57,6 +57,10 @@ that are part of Git repositories).
q close status q close status
r reload status r reload status
S |:Gvsplit| S |:Gvsplit|
U |:Git| checkout
U |:Git| checkout HEAD (staged files)
U |:Git| clean (untracked files)
U |:Git| rm (unmerged files)
*fugitive-:Gcommit* *fugitive-:Gcommit*
:Gcommit [args] A wrapper around git-commit. If there is nothing :Gcommit [args] A wrapper around git-commit. If there is nothing

View File

@ -123,7 +123,9 @@ let s:abstract_prototype = {}
function! fugitive#is_git_dir(path) abort function! fugitive#is_git_dir(path) abort
let path = s:sub(a:path, '[\/]$', '') . '/' let path = s:sub(a:path, '[\/]$', '') . '/'
return isdirectory(path.'objects') && isdirectory(path.'refs') && getfsize(path.'HEAD') > 10 return getfsize(path.'HEAD') > 10 && (
\ isdirectory(path.'objects') && isdirectory(path.'refs') ||
\ getftype(path.'commondir') ==# 'file')
endfunction endfunction
function! fugitive#extract_git_dir(path) abort function! fugitive#extract_git_dir(path) abort
@ -265,9 +267,17 @@ function! s:configured_tree(git_dir) abort
let config = readfile(config_file,'',10) let config = readfile(config_file,'',10)
call filter(config,'v:val =~# "^\\s*worktree *="') call filter(config,'v:val =~# "^\\s*worktree *="')
if len(config) == 1 if len(config) == 1
let s:worktree_for_dir[a:git_dir] = matchstr(config[0], '= *\zs.*') let worktree = matchstr(config[0], '= *\zs.*')
let s:dir_for_worktree[s:worktree_for_dir[a:git_dir]] = a:git_dir
endif endif
elseif filereadable(a:git_dir . '/gitdir')
let worktree = fnamemodify(readfile(a:git_dir . '/gitdir')[0], ':h')
if worktree ==# '.'
unlet! worktree
endif
endif
if exists('worktree')
let s:worktree_for_dir[a:git_dir] = worktree
let s:dir_for_worktree[s:worktree_for_dir[a:git_dir]] = a:git_dir
endif endif
endif endif
if s:worktree_for_dir[a:git_dir] =~# '^\.' if s:worktree_for_dir[a:git_dir] =~# '^\.'
@ -299,6 +309,10 @@ function! s:repo_bare() dict abort
endfunction endfunction
function! s:repo_translate(spec) dict abort function! s:repo_translate(spec) dict abort
let refs = self.dir('refs/')
if filereadable(self.dir('commondir'))
let refs = simplify(self.dir(get(readfile(self.dir('commondir'), 1), 0, ''))) . '/refs/'
endif
if a:spec ==# '.' || a:spec ==# '/.' if a:spec ==# '.' || a:spec ==# '/.'
return self.bare() ? self.dir() : self.tree() return self.bare() ? self.dir() : self.tree()
elseif a:spec =~# '^/\=\.git$' && self.bare() elseif a:spec =~# '^/\=\.git$' && self.bare()
@ -322,18 +336,18 @@ function! s:repo_translate(spec) dict abort
return 'fugitive://'.self.dir().'//0/'.a:spec[1:-1] return 'fugitive://'.self.dir().'//0/'.a:spec[1:-1]
elseif a:spec ==# '@' elseif a:spec ==# '@'
return self.dir('HEAD') return self.dir('HEAD')
elseif a:spec =~# 'HEAD\|^refs/' && a:spec !~ ':' && filereadable(self.dir(a:spec)) elseif a:spec =~# 'HEAD\|^refs/' && a:spec !~ ':' && filereadable(refs . '../' . a:spec)
return self.dir(a:spec) return simplify(refs . '../' . a:spec)
elseif filereadable(self.dir('refs/'.a:spec)) elseif filereadable(refs.a:spec)
return self.dir('refs/'.a:spec) return refs.a:spec
elseif filereadable(self.dir('refs/tags/'.a:spec)) elseif filereadable(refs.'tags/'.a:spec)
return self.dir('refs/tags/'.a:spec) return refs.'tags/'.a:spec
elseif filereadable(self.dir('refs/heads/'.a:spec)) elseif filereadable(refs.'heads/'.a:spec)
return self.dir('refs/heads/'.a:spec) return refs.'heads/'.a:spec
elseif filereadable(self.dir('refs/remotes/'.a:spec)) elseif filereadable(refs.'remotes/'.a:spec)
return self.dir('refs/remotes/'.a:spec) return refs.'remotes/'.a:spec
elseif filereadable(self.dir('refs/remotes/'.a:spec.'/HEAD')) elseif filereadable(refs.'remotes/'.a:spec.'/HEAD')
return self.dir('refs/remotes/'.a:spec,'/HEAD') return refs.'remotes/'.a:spec,'/HEAD'
else else
try try
let ref = self.rev_parse(matchstr(a:spec,'[^:]*')) let ref = self.rev_parse(matchstr(a:spec,'[^:]*'))
@ -849,7 +863,9 @@ function! s:StageUndo() abort
let hash = repo.git_chomp('hash-object', '-w', filename) let hash = repo.git_chomp('hash-object', '-w', filename)
if !empty(hash) if !empty(hash)
if section ==# 'untracked' if section ==# 'untracked'
call delete(s:repo().tree(filename)) call repo.git_chomp_in_tree('clean', '--', filename)
elseif section ==# 'unmerged'
call repo.git_chomp_in_tree('rm', '--', filename)
elseif section ==# 'unstaged' elseif section ==# 'unstaged'
call repo.git_chomp_in_tree('checkout', '--', filename) call repo.git_chomp_in_tree('checkout', '--', filename)
else else
@ -2675,7 +2691,7 @@ function! s:BufReadObject() abort
if b:fugitive_display_format if b:fugitive_display_format
call s:ReplaceCmd(s:repo().git_command('cat-file',b:fugitive_type,hash)) call s:ReplaceCmd(s:repo().git_command('cat-file',b:fugitive_type,hash))
else else
call s:ReplaceCmd(s:repo().git_command('show','--no-color','--pretty=format:tree %T%nparent %P%nauthor %an <%ae> %ad%ncommitter %cn <%ce> %cd%nencoding %e%n%n%s%n%n%b',hash)) call s:ReplaceCmd(s:repo().git_command('show','--no-color','--pretty=format:tree%x20%T%nparent%x20%P%nauthor%x20%an%x20<%ae>%x20%ad%ncommitter%x20%cn%x20<%ce>%x20%cd%nencoding%x20%e%n%n%s%n%n%b',hash))
keepjumps call search('^parent ') keepjumps call search('^parent ')
if getline('.') ==# 'parent ' if getline('.') ==# 'parent '
silent keepjumps delete_ silent keepjumps delete_

View File

@ -0,0 +1,9 @@
Thanks for improving vim-go! Before you dive in please read the following:
1. Please read our
[FAQ](https://github.com/fatih/vim-go/wiki/FAQ-Troubleshooting), it might
have answers for your problem
2. If you add a new feature please don't forget to update the documentation:
[doc/vim-go.txt](doc/vim-go.txt)
3. If it's a breaking change or exceed +100 lines please open an issue first
and describe the changes you want to make.

View File

@ -0,0 +1,30 @@
### Expected behavior
Write here what you're expecting ...
### Actual behavior
Write here what happens instead ...
### Steps to reproduce:
Please create a reproducible case of your problem. Re produce it
with a minimal `vimrc` with all plugins disabled and only `vim-go`
enabled:
1.
2.
3.
### Configuration
#### `vimrc` you used to reproduce:
#### vim version:
#### vim-go version:
#### go version:

View File

@ -5,26 +5,26 @@ endif
" Test alternates between the implementation of code and the test code. " Test alternates between the implementation of code and the test code.
function! go#alternate#Switch(bang, cmd) function! go#alternate#Switch(bang, cmd)
let l:file = go#alternate#Filename(fnameescape(expand("%"))) let file = expand('%')
if !filereadable(l:file) && !bufexists(l:file) && !a:bang if empty(file)
redraws! | echon "vim-go: " | echohl ErrorMsg | echon "couldn't find ".file | echohl None call go#util#EchoError("no buffer name")
return
elseif file =~# '^\f\+_test\.go$'
let l:root = split(file, '_test.go$')[0]
let l:alt_file = l:root . ".go"
elseif file =~# '^\f\+\.go$'
let l:root = split(file, ".go$")[0]
let l:alt_file = l:root . '_test.go'
else
call go#util#EchoError("not a go file")
return
endif
if !filereadable(alt_file) && !bufexists(alt_file) && !a:bang
call go#util#EchoError("couldn't find ".alt_file)
return return
elseif empty(a:cmd) elseif empty(a:cmd)
execute ":" . g:go_alternate_mode . " " . file execute ":" . g:go_alternate_mode . " " . alt_file
else else
execute ":" . a:cmd . " " . file execute ":" . a:cmd . " " . alt_file
endif endif
endfunction endfunction
" Filename returns the name of the test file or implementation file
" depending on the arguments
function! go#alternate#Filename(path)
if empty(matchstr(a:path, "_test"))
let l:root = split(a:path, ".go$")[0]
let l:file = l:root . "_test.go"
else
let l:root = split(a:path, "_test.go$")[0]
let l:file = l:root . ".go"
endif
return l:file
endfunction

View File

@ -74,8 +74,12 @@ endfunction
" Run runs the current file (and their dependencies if any) in a new terminal. " Run runs the current file (and their dependencies if any) in a new terminal.
function! go#cmd#RunTerm(bang, mode) function! go#cmd#RunTerm(bang, mode, files)
let cmd = "go run ". go#util#Shelljoin(go#tool#Files()) if empty(a:files)
let cmd = "go run ". go#util#Shelljoin(go#tool#Files())
else
let cmd = "go run ". go#util#Shelljoin(map(copy(a:files), "expand(v:val)"), 1)
endif
call go#term#newmode(a:bang, cmd, a:mode) call go#term#newmode(a:bang, cmd, a:mode)
endfunction endfunction
@ -85,7 +89,7 @@ endfunction
" calling long running apps will block the whole UI. " calling long running apps will block the whole UI.
function! go#cmd#Run(bang, ...) function! go#cmd#Run(bang, ...)
if has('nvim') if has('nvim')
call go#cmd#RunTerm(a:bang, '') call go#cmd#RunTerm(a:bang, '', a:000)
return return
endif endif
@ -117,9 +121,9 @@ function! go#cmd#Run(bang, ...)
if g:go_dispatch_enabled && exists(':Make') == 2 if g:go_dispatch_enabled && exists(':Make') == 2
silent! exe 'Make' silent! exe 'Make'
elseif l:listtype == "locationlist" elseif l:listtype == "locationlist"
silent! exe 'lmake!' exe 'lmake!'
else else
silent! exe 'make!' exe 'make!'
endif endif
let items = go#list#Get(l:listtype) let items = go#list#Get(l:listtype)

View File

@ -149,13 +149,16 @@ function! go#complete#GetInfoFromOffset(offset)
endfunction endfunction
function! go#complete#GetInfo() function! go#complete#GetInfo()
let offset = go#complete#gocodeCursor() let offset = go#complete#gocodeCursor()+1
return go#complete#GetInfoFromOffset(offset) return go#complete#GetInfoFromOffset(offset)
endfunction endfunction
function! go#complete#Info() function! go#complete#Info(auto)
" auto is true if we were called by g:go_auto_type_info's autocmd
let result = go#complete#GetInfo() let result = go#complete#GetInfo()
if !empty(result) if !empty(result)
" if auto, and the result is a PANIC by gocode, hide it
if a:auto && result ==# 'PANIC PANIC PANIC' | return | endif
echo "vim-go: " | echohl Function | echon result | echohl None echo "vim-go: " | echohl Function | echon result | echohl None
endif endif
endfunction endfunction

View File

@ -116,7 +116,7 @@ function! s:godefJump(out, mode)
" jump to file now " jump to file now
sil ll 1 sil ll 1
normal zz normal! zz
let &switchbuf = old_switchbuf let &switchbuf = old_switchbuf
end end

View File

@ -113,28 +113,28 @@ function! go#doc#Open(newmode, mode, ...)
call s:GodocView(a:newmode, a:mode, content) call s:GodocView(a:newmode, a:mode, content)
if exported_name == '' if exported_name == ''
silent! normal gg silent! normal! gg
return -1 return -1
endif endif
" jump to the specified name " jump to the specified name
if search('^func ' . exported_name . '(') if search('^func ' . exported_name . '(')
silent! normal zt silent! normal! zt
return -1 return -1
endif endif
if search('^type ' . exported_name) if search('^type ' . exported_name)
silent! normal zt silent! normal! zt
return -1 return -1
endif endif
if search('^\%(const\|var\|type\|\s\+\) ' . pkg . '\s\+=\s') if search('^\%(const\|var\|type\|\s\+\) ' . pkg . '\s\+=\s')
silent! normal zt silent! normal! zt
return -1 return -1
endif endif
" nothing found, jump to top " nothing found, jump to top
silent! normal gg silent! normal! gg
endfunction endfunction
function! s:GodocView(newposition, position, content) function! s:GodocView(newposition, position, content)

View File

@ -52,13 +52,25 @@ endif
" this and have VimL experience, please look at the function for " this and have VimL experience, please look at the function for
" improvements, patches are welcome :) " improvements, patches are welcome :)
function! go#fmt#Format(withGoimport) function! go#fmt#Format(withGoimport)
" save cursor position, folds and many other things if g:go_fmt_experimental == 1
let l:curw = {} " Using winsaveview to save/restore cursor state has the problem of
try " closing folds on save:
mkview! " https://github.com/fatih/vim-go/issues/502
catch " One fix is to use mkview instead. Unfortunately, this sometimes causes
" other bad side effects:
" https://github.com/fatih/vim-go/issues/728
" and still closes all folds if foldlevel>0:
" https://github.com/fatih/vim-go/issues/732
let l:curw = {}
try
mkview!
catch
let l:curw=winsaveview()
endtry
else
" Save cursor position and many other things.
let l:curw=winsaveview() let l:curw=winsaveview()
endtry endif
" Write current unsaved buffer to a temp file " Write current unsaved buffer to a temp file
let l:tmpname = tempname() let l:tmpname = tempname()
@ -101,6 +113,24 @@ function! go#fmt#Format(withGoimport)
let command = command . g:go_fmt_options let command = command . g:go_fmt_options
endif endif
if fmt_command == "goimports"
if !exists('b:goimports_vendor_compatible')
let out = system("goimports --help")
if out !~ "-srcdir"
echohl WarningMsg
echomsg "vim-go: goimports does not support srcdir."
echomsg " update with: :GoUpdateBinaries"
echohl None
else
let b:goimports_vendor_compatible = 1
endif
endif
if exists('b:goimports_vendor_compatible') && b:goimports_vendor_compatible
let command = command . '-srcdir ' . fnameescape(expand("%:p:h"))
endif
endif
" execute our command... " execute our command...
let out = system(command . " " . l:tmpname) let out = system(command . " " . l:tmpname)
@ -163,10 +193,15 @@ function! go#fmt#Format(withGoimport)
call delete(tmpundofile) call delete(tmpundofile)
endif endif
" restore our cursor/windows positions, folds, etc.. if g:go_fmt_experimental == 1
if empty(l:curw) " Restore our cursor/windows positions, folds, etc.
silent! loadview if empty(l:curw)
silent! loadview
else
call winrestview(l:curw)
endif
else else
" Restore our cursor/windows positions.
call winrestview(l:curw) call winrestview(l:curw)
endif endif
endfunction endfunction

View File

@ -165,7 +165,7 @@ function! go#import#SwitchImport(enabled, localname, path, bang)
call append(appendline, appendstr) call append(appendline, appendstr)
execute appendline + 1 execute appendline + 1
if indentstr if indentstr
execute 'normal >>' execute 'normal! >>'
endif endif
let linesdelta += 1 let linesdelta += 1
endif endif

View File

@ -114,6 +114,10 @@ func! s:RunOracle(mode, selected, needs_package) range abort
\ shellescape(fname), pos, tags, a:mode) \ shellescape(fname), pos, tags, a:mode)
endif endif
" strip trailing slashes for each path in scoped. bug:
" https://github.com/golang/go/issues/14584
let scopes = go#util#StripTrailingSlash(scopes)
" now append each scope to the end as Oracle's scope parameter. It can be " now append each scope to the end as Oracle's scope parameter. It can be
" a packages or go files, dependent on the User's own choice. For more " a packages or go files, dependent on the User's own choice. For more
" info check Oracle's User Manual section about scopes: " info check Oracle's User Manual section about scopes:

View File

@ -48,6 +48,12 @@ function! go#util#StripPathSep(path)
return a:path return a:path
endfunction endfunction
" StripTrailingSlash strips the trailing slash from the given path list.
" example: ['/foo/bar/'] -> ['/foo/bar']
function! go#util#StripTrailingSlash(paths)
return map(copy(a:paths), 'go#util#StripPathSep(v:val)')
endfunction
" Shelljoin returns a shell-safe string representation of arglist. The " Shelljoin returns a shell-safe string representation of arglist. The
" {special} argument of shellescape() may optionally be passed. " {special} argument of shellescape() may optionally be passed.
function! go#util#Shelljoin(arglist, ...) function! go#util#Shelljoin(arglist, ...)

View File

@ -16,12 +16,12 @@ command! -nargs=? GoOracleTags call go#oracle#Tags(<f-args>)
" tool " tool
command! -nargs=0 GoFiles echo go#tool#Files() command! -nargs=0 GoFiles echo go#tool#Files()
command! -nargs=0 GoDeps echo go#tool#Deps() command! -nargs=0 GoDeps echo go#tool#Deps()
command! -nargs=* GoInfo call go#complete#Info() command! -nargs=* GoInfo call go#complete#Info(0)
" cmd " cmd
command! -nargs=* -bang GoBuild call go#cmd#Build(<bang>0,<f-args>) command! -nargs=* -bang GoBuild call go#cmd#Build(<bang>0,<f-args>)
command! -nargs=* -bang GoGenerate call go#cmd#Generate(<bang>0,<f-args>) command! -nargs=* -bang GoGenerate call go#cmd#Generate(<bang>0,<f-args>)
command! -nargs=* -bang GoRun call go#cmd#Run(<bang>0,<f-args>) command! -nargs=* -bang -complete=file GoRun call go#cmd#Run(<bang>0,<f-args>)
command! -nargs=* -bang GoInstall call go#cmd#Install(<bang>0, <f-args>) command! -nargs=* -bang GoInstall call go#cmd#Install(<bang>0, <f-args>)
command! -nargs=* -bang GoTest call go#cmd#Test(<bang>0, 0, <f-args>) command! -nargs=* -bang GoTest call go#cmd#Test(<bang>0, 0, <f-args>)
command! -nargs=* -bang GoTestFunc call go#cmd#TestFunc(<bang>0, <f-args>) command! -nargs=* -bang GoTestFunc call go#cmd#TestFunc(<bang>0, <f-args>)

View File

@ -12,9 +12,9 @@ endif
nnoremap <silent> <Plug>(go-run) :<C-u>call go#cmd#Run(!g:go_jump_to_error)<CR> nnoremap <silent> <Plug>(go-run) :<C-u>call go#cmd#Run(!g:go_jump_to_error)<CR>
if has("nvim") if has("nvim")
nnoremap <silent> <Plug>(go-run-vertical) :<C-u>call go#cmd#RunTerm(!g:go_jump_to_error, 'vsplit')<CR> nnoremap <silent> <Plug>(go-run-vertical) :<C-u>call go#cmd#RunTerm(!g:go_jump_to_error, 'vsplit', [])<CR>
nnoremap <silent> <Plug>(go-run-split) :<C-u>call go#cmd#RunTerm(!g:go_jump_to_error, 'split')<CR> nnoremap <silent> <Plug>(go-run-split) :<C-u>call go#cmd#RunTerm(!g:go_jump_to_error, 'split', [])<CR>
nnoremap <silent> <Plug>(go-run-tab) :<C-u>call go#cmd#RunTerm(!g:go_jump_to_error, 'tabe')<CR> nnoremap <silent> <Plug>(go-run-tab) :<C-u>call go#cmd#RunTerm(!g:go_jump_to_error, 'tabe', [])<CR>
endif endif
nnoremap <silent> <Plug>(go-build) :<C-u>call go#cmd#Build(!g:go_jump_to_error)<CR> nnoremap <silent> <Plug>(go-build) :<C-u>call go#cmd#Build(!g:go_jump_to_error)<CR>
@ -27,7 +27,7 @@ nnoremap <silent> <Plug>(go-coverage) :<C-u>call go#cmd#Coverage(!g:go_jump_to_e
nnoremap <silent> <Plug>(go-files) :<C-u>call go#tool#Files()<CR> nnoremap <silent> <Plug>(go-files) :<C-u>call go#tool#Files()<CR>
nnoremap <silent> <Plug>(go-deps) :<C-u>call go#tool#Deps()<CR> nnoremap <silent> <Plug>(go-deps) :<C-u>call go#tool#Deps()<CR>
nnoremap <silent> <Plug>(go-info) :<C-u>call go#complete#Info()<CR> nnoremap <silent> <Plug>(go-info) :<C-u>call go#complete#Info(0)<CR>
nnoremap <silent> <Plug>(go-import) :<C-u>call go#import#SwitchImport(1, '', expand('<cword>'), '')<CR> nnoremap <silent> <Plug>(go-import) :<C-u>call go#import#SwitchImport(1, '', expand('<cword>'), '')<CR>
nnoremap <silent> <Plug>(go-implements) :<C-u>call go#oracle#Implements(-1)<CR> nnoremap <silent> <Plug>(go-implements) :<C-u>call go#oracle#Implements(-1)<CR>

View File

@ -143,7 +143,7 @@ augroup vim-go
" GoInfo automatic update " GoInfo automatic update
if get(g:, "go_auto_type_info", 0) if get(g:, "go_auto_type_info", 0)
autocmd CursorHold *.go nested call go#complete#Info() autocmd CursorHold *.go nested call go#complete#Info(1)
endif endif
" Echo the identifier information when completion is done. Useful to see " Echo the identifier information when completion is done. Useful to see

View File

@ -179,30 +179,31 @@ syn region goBlock start="{" end="}" transparent fold
syn region goParen start='(' end=')' transparent syn region goParen start='(' end=')' transparent
" Integers " Integers
syn match goDecimalInt "\<\d\+\([Ee]\d\+\)\?\>" syn match goDecimalInt "\<-\=\d\+\%([Ee][-+]\=\d\+\)\=\>"
syn match goHexadecimalInt "\<0x\x\+\>" syn match goHexadecimalInt "\<-\=0[xX]\x\+\>"
syn match goOctalInt "\<0\o\+\>" syn match goOctalInt "\<-\=0\o\+\>"
syn match goOctalError "\<0\o*[89]\d*\>" syn match goOctalError "\<-\=0\o*[89]\d*\>"
hi def link goDecimalInt Integer hi def link goDecimalInt Integer
hi def link goHexadecimalInt Integer hi def link goHexadecimalInt Integer
hi def link goOctalInt Integer hi def link goOctalInt Integer
hi def link goOctalError Error
hi def link Integer Number hi def link Integer Number
" Floating point " Floating point
syn match goFloat "\<\d\+\.\d*\([Ee][-+]\d\+\)\?\>" syn match goFloat "\<-\=\d\+\.\d*\%([Ee][-+]\=\d\+\)\=\>"
syn match goFloat "\<\.\d\+\([Ee][-+]\d\+\)\?\>" syn match goFloat "\<-\=\.\d\+\%([Ee][-+]\=\d\+\)\=\>"
syn match goFloat "\<\d\+[Ee][-+]\d\+\>"
hi def link goFloat Float hi def link goFloat Float
" Imaginary literals " Imaginary literals
syn match goImaginary "\<\d\+i\>" syn match goImaginary "\<-\=\d\+i\>"
syn match goImaginary "\<\d\+\.\d*\([Ee][-+]\d\+\)\?i\>" syn match goImaginary "\<-\=\d\+[Ee][-+]\=\d\+i\>"
syn match goImaginary "\<\.\d\+\([Ee][-+]\d\+\)\?i\>" syn match goImaginaryFloat "\<-\=\d\+\.\d*\%([Ee][-+]\=\d\+\)\=i\>"
syn match goImaginary "\<\d\+[Ee][-+]\d\+i\>" syn match goImaginaryFloat "\<-\=\.\d\+\%([Ee][-+]\=\d\+\)\=i\>"
hi def link goImaginary Number hi def link goImaginary Number
hi def link goImaginaryFloat Float
" Spaces after "[]" " Spaces after "[]"
if g:go_highlight_array_whitespace_error != 0 if g:go_highlight_array_whitespace_error != 0

View File

@ -9,7 +9,7 @@ endif
runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
setlocal comments=fb:*,fb:-,fb:+,n:> commentstring=>\ %s setlocal comments=fb:*,fb:-,fb:+,n:> commentstring=<!--%s-->
setlocal formatoptions+=tcqln formatoptions-=r formatoptions-=o setlocal formatoptions+=tcqln formatoptions-=r formatoptions-=o
setlocal formatlistpat=^\\s*\\d\\+\\.\\s\\+\\\|^[-*+]\\s\\+\\\|^\\[^\\ze[^\\]]\\+\\]: setlocal formatlistpat=^\\s*\\d\\+\\.\\s\\+\\\|^[-*+]\\s\\+\\\|^\\[^\\ze[^\\]]\\+\\]:

View File

@ -283,7 +283,9 @@ fun! s:AddScopeAliases(list) abort
return keys(did) return keys(did)
endf endf
au SourceCmd *.snippet,*.snippets call s:source_snippet() augroup SnipMateSource
au SourceCmd *.snippet,*.snippets call s:source_snippet()
augroup END
function! s:info_from_filename(file) abort function! s:info_from_filename(file) abort
let parts = split(fnamemodify(a:file, ':r'), '/') let parts = split(fnamemodify(a:file, ':r'), '/')

View File

@ -28,12 +28,14 @@ if (!exists('g:snipMateSources'))
let g:snipMateSources['default'] = funcref#Function('snipMate#DefaultPool') let g:snipMateSources['default'] = funcref#Function('snipMate#DefaultPool')
endif endif
au BufRead,BufNewFile *.snippet,*.snippets setlocal filetype=snippets augroup SnipMateDetect
au FileType snippets if expand('<afile>:e') =~# 'snippet$' au BufRead,BufNewFile *.snippet,*.snippets setlocal filetype=snippets
au FileType snippets if expand('<afile>:e') =~# 'snippet$'
\ | setlocal syntax=snippet \ | setlocal syntax=snippet
\ | else \ | else
\ | setlocal syntax=snippets \ | setlocal syntax=snippets
\ | endif \ | endif
augroup END
inoremap <silent> <Plug>snipMateNextOrTrigger <C-R>=snipMate#TriggerSnippet()<CR> inoremap <silent> <Plug>snipMateNextOrTrigger <C-R>=snipMate#TriggerSnippet()<CR>
snoremap <silent> <Plug>snipMateNextOrTrigger <Esc>a<C-R>=snipMate#TriggerSnippet()<CR> snoremap <silent> <Plug>snipMateNextOrTrigger <Esc>a<C-R>=snipMate#TriggerSnippet()<CR>

View File

@ -74,7 +74,9 @@ Additional snippets can be added to the current buffer with the
"snippets" ending. For example, to add the JavaScript Jasmine snippets, run: "snippets" ending. For example, to add the JavaScript Jasmine snippets, run:
`:UltiSnipsAddFiletypes javascript-jasmine`. To have this snippet loaded `:UltiSnipsAddFiletypes javascript-jasmine`. To have this snippet loaded
everytime a JavaScript file is opened or created you can add the command to your everytime a JavaScript file is opened or created you can add the command to your
`.vim/ftplugin/javascript.vim` file. -`.vim/ftplugin/javascript.vim` file. Another way is to add
`autocmd FileType js UltiSnipsAddFiletypes javascript-jasmine` in your `.vimrc`.
For more see the UltiSnips docs (`:help UltiSnips`). For more see the UltiSnips docs (`:help UltiSnips`).

View File

@ -185,7 +185,7 @@ ${1:FIELDNAME} = models.DateTimeField($2)
endsnippet endsnippet
snippet mdecimal "DecimalField" b snippet mdecimal "DecimalField" b
${1:FIELDNAME} = models.DateTimeField($2) ${1:FIELDNAME} = models.DecimalField(max_digits=${2:10}, decimal_places=${3:2})
endsnippet endsnippet
snippet memail "EmailField" b snippet memail "EmailField" b

View File

@ -45,25 +45,6 @@ type ${1:Interface} interface {
} }
endsnippet endsnippet
# statements
snippet for "For loop" b
for ${1:condition}${1/(.+)/ /}{
${0:${VISUAL}}
}
endsnippet
snippet fori "Integer for loop" b
for ${1:i} := 0; $1 < ${2:N}; $1++ {
${0:${VISUAL}}
}
endsnippet
snippet forr "For range loop" b
for ${2:name} := range ${1:collection} {
${0:${VISUAL}}
}
endsnippet
snippet if "If statement" b snippet if "If statement" b
if ${1:condition}${1/(.+)/ /}{ if ${1:condition}${1/(.+)/ /}{
${0:${VISUAL}} ${0:${VISUAL}}
@ -76,22 +57,6 @@ case${0}
} }
endsnippet endsnippet
snippet select "Select statement" b
select {
case${0}
}
endsnippet
snippet case "Case clause" b
case ${1:condition}:
${0:${VISUAL}}
endsnippet
snippet default "Default clause" b
default:
${0:${VISUAL}}
endsnippet
# functions # functions
snippet /^main/ "Main function" r snippet /^main/ "Main function" r
func main() { func main() {

View File

@ -58,6 +58,12 @@ ${1:var }${2:function_name} = function $2(${3}) {
}; };
endsnippet endsnippet
snippet af "Anonymous Function" i
function($1) {
${VISUAL}$0
}
endsnippet
snippet iife "Immediately-Invoked Function Expression (iife)" snippet iife "Immediately-Invoked Function Expression (iife)"
(function(${1:window}) { (function(${1:window}) {
${VISUAL}$0 ${VISUAL}$0

View File

@ -51,11 +51,11 @@ format!("${1}"${2/..*/, /}${2});
endsnippet endsnippet
snippet macro "macro_rules!" b snippet macro "macro_rules!" b
macro_rules! ${1:name} ( macro_rules! ${1:name} {
(${2:matcher}) => ( (${2:matcher}) => (
${3} ${3}
) )
) }
endsnippet endsnippet
snippet mod "A module" b snippet mod "A module" b
@ -88,7 +88,7 @@ pub struct ${1:`!p snip.rv = snip.basename.title() or "Name"`} {
impl $1 { impl $1 {
pub fn new(${2}) -> $1 { pub fn new(${2}) -> $1 {
$1 { ${3} }; $1 { ${3} }
} }
} }
endsnippet endsnippet

View File

@ -87,10 +87,6 @@ snippet doc
""" """
snippet fn snippet fn
fn ${1:args} -> ${0} end fn ${1:args} -> ${0} end
snippet fun
function do
${0}
end
snippet mdoc snippet mdoc
@moduledoc """ @moduledoc """
${0} ${0}
@ -114,6 +110,12 @@ snippet test
end end
snippet testa snippet testa
test "${1:test_name}", %{${2:arg: arg}} do test "${1:test_name}", %{${2:arg: arg}} do
${0}
end
snippet exunit
defmodule ${1:`substitute(vim_snippets#Filename(), '\(_\|^\)\(.\)', '\u\2', 'g')`} do
use ExUnit.Case
${0} ${0}
end end
snippet try try .. rescue .. end snippet try try .. rescue .. end

View File

@ -53,26 +53,6 @@ snippet dfr
${0} ${0}
} }
}() }()
# gpl
snippet gpl
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*
* Copyright (C) ${1:Author}, `strftime("%Y")`
*/
${0}
# int # int
snippet i snippet i
int int
@ -94,6 +74,12 @@ snippet if
if ${1:/* condition */} { if ${1:/* condition */} {
${2} ${2}
} }
snippet ife
if ${1:/* condition */} {
${2}
} else {
${0}
}
# else snippet # else snippet
snippet el snippet el
else { else {
@ -128,18 +114,21 @@ snippet ie
${3} ${3}
} }
${0} ${0}
# for loop # for int loop
snippet fo snippet for
for ${1}{
${0}
}
# for int loop
snippet fori
for ${2:i} := 0; $2 < ${1:count}; $2${3:++} { for ${2:i} := 0; $2 < ${1:count}; $2${3:++} {
${4} ${0}
} }
${0}
# for range loop # for range loop
snippet fr snippet forr
for ${1:k}, ${2:v} := range ${3} { for ${1:e} := range ${2:collection} {
${4} ${0}
} }
${0}
# function simple # function simple
snippet fun snippet fun
func ${1:funcName}(${2}) ${3:error} { func ${1:funcName}(${2}) ${3:error} {
@ -196,8 +185,6 @@ snippet sl
select { select {
case ${1:v1} := <-${2:chan1} case ${1:v1} := <-${2:chan1}
${3} ${3}
case ${4:v2} := <-${5:chan2}
${6}
default: default:
${0} ${0}
} }
@ -228,7 +215,7 @@ snippet t
# goroutine named function # goroutine named function
snippet g snippet g
go ${1:funcName}(${0}) go ${1:funcName}(${0})
# goroutine anonymous function # goroutine anonymous function
snippet ga snippet ga
go func(${1} ${2:type}) { go func(${1} ${2:type}) {
${3:/* code */} ${3:/* code */}

View File

@ -5,7 +5,7 @@ snippet ex
module.exports = ${1}; module.exports = ${1};
# require # require
snippet re snippet re
var ${1} = require('${2:module_name}'); ${1:var} ${2} = require('${3:module_name}');
# EventEmitter # EventEmitter
snippet on snippet on
on('${1:event_name}', function(${2:stream}) { on('${1:event_name}', function(${2:stream}) {

View File

@ -723,3 +723,7 @@ snippet iiexp
it { is_expected.to ${0} } it { is_expected.to ${0} }
snippet iiexpn snippet iiexpn
it { is_expected.not_to ${0} } it { is_expected.not_to ${0} }
snippet agg
aggregate_failures '${1:message}' do
${0}
end

View File

@ -25,7 +25,7 @@ snippet bench "Bench function" b
} }
snippet new "Constructor function" snippet new "Constructor function"
pub fn new(${2}) -> ${1:Name} { pub fn new(${2}) -> ${1:Name} {
$1 { ${3} }; $1 { ${3} }
} }
snippet main "Main function" snippet main "Main function"
pub fn main() { pub fn main() {
@ -143,7 +143,7 @@ snippet stn "Struct with new constructor"
impl $1 { impl $1 {
pub fn new(${2}) -> $1 { pub fn new(${2}) -> $1 {
$1 { ${3} }; $1 { ${3} }
} }
} }
snippet type "Type alias" snippet type "Type alias"