1
0
Fork 0
mirror of synced 2024-11-22 16:55:34 -05:00

Updated plugins. Added vim-golang as a mode

This commit is contained in:
amix 2014-03-11 21:10:50 +01:00
parent 2b82c75631
commit 8f0740e307
125 changed files with 4121 additions and 2440 deletions

View file

@ -99,6 +99,7 @@ Remove all clutter and focus only on the essential. Similar to iA Writer or Writ
* [vim-bundle-mako](https://github.com/sophacles/vim-bundle-mako) * [vim-bundle-mako](https://github.com/sophacles/vim-bundle-mako)
* [vim-markdown](https://github.com/tpope/vim-markdown) * [vim-markdown](https://github.com/tpope/vim-markdown)
* [nginx.vim](https://github.com/vim-scripts/nginx.vim): Highlights configuration files for nginx * [nginx.vim](https://github.com/vim-scripts/nginx.vim): Highlights configuration files for nginx
* [vim-golang](https://github.com/jnwhiteh/vim-golang)
## How to include your own stuff? ## How to include your own stuff?

View file

@ -44,7 +44,7 @@ function! s:Ack(cmd, args)
if a:cmd =~# '-g$' if a:cmd =~# '-g$'
let g:ackformat="%f" let g:ackformat="%f"
else else
let g:ackformat="%f:%l:%c:%m" let g:ackformat="%f:%l:%c:%m,%f:%l:%m"
end end
let grepprg_bak=&grepprg let grepprg_bak=&grepprg
@ -61,13 +61,15 @@ function! s:Ack(cmd, args)
if a:cmd =~# '^l' if a:cmd =~# '^l'
exe g:ack_lhandler exe g:ack_lhandler
let l:apply_mappings = g:ack_apply_lmappings let l:apply_mappings = g:ack_apply_lmappings
let l:close_cmd = ':lclose<CR>'
else else
exe g:ack_qhandler exe g:ack_qhandler
let l:apply_mappings = g:ack_apply_qmappings let l:apply_mappings = g:ack_apply_qmappings
let l:close_cmd = ':cclose<CR>'
endif endif
if l:apply_mappings if l:apply_mappings
exec "nnoremap <silent> <buffer> q :ccl<CR>" exec "nnoremap <silent> <buffer> q " . l:close_cmd
exec "nnoremap <silent> <buffer> t <C-W><CR><C-W>T" exec "nnoremap <silent> <buffer> t <C-W><CR><C-W>T"
exec "nnoremap <silent> <buffer> T <C-W><CR><C-W>TgT<C-W><C-W>" exec "nnoremap <silent> <buffer> T <C-W><CR><C-W>TgT<C-W><C-W>"
exec "nnoremap <silent> <buffer> o <CR>" exec "nnoremap <silent> <buffer> o <CR>"
@ -80,7 +82,7 @@ function! s:Ack(cmd, args)
" If highlighting is on, highlight the search keyword. " If highlighting is on, highlight the search keyword.
if exists("g:ackhighlight") if exists("g:ackhighlight")
let @/=a:args let @/ = substitute(l:grepargs,'["'']','','g')
set hlsearch set hlsearch
end end

View file

@ -43,7 +43,7 @@ LLVM intermediate language, Lua, MATLAB, NASM, Objective-C, Objective-C++,
OCaml, Perl, Perl POD, PHP, gettext Portable Object, Puppet, Python, Racket, OCaml, Perl, Perl POD, PHP, gettext Portable Object, Puppet, Python, Racket,
reStructuredText, Ruby, Rust, SASS/SCSS, Scala, Slim, Tcl, TeX, Texinfo, Twig, reStructuredText, Ruby, Rust, SASS/SCSS, Scala, Slim, Tcl, TeX, Texinfo, Twig,
TypeScript, Vala, Verilog, VHDL, VimL, xHtml, XML, XSLT, YACC, YAML, z80, Zope TypeScript, Vala, Verilog, VHDL, VimL, xHtml, XML, XSLT, YACC, YAML, z80, Zope
page templates, zsh. page templates, and zsh.
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
@ -62,45 +62,48 @@ enabled.
## 2\. Installation ## 2\. Installation
Installing syntastic is easy but first you need to have the pathogen plugin installed. If you already Installing syntastic is easy but first you need to have the [pathogen][1]
have pathogen working then skip Step 1 and go to Step 2. plugin installed. If you already have [pathogen][1] working then skip
[Step 1](#step1) and go to [Step 2](#step2).
<a name="step1"></a> <a name="step1"></a>
### 2.1\. Step 1: Install pathogen.vim ### 2.1\. Step 1: Install pathogen.vim
First I'll show you how to install tpope's [pathogen.vim][1] so that it's First I'll show you how to install Tim Pope's [pathogen][1] so that it's easy to
easy to install syntastic. Do this in your Terminal so that you get the install syntastic. Do this in your terminal so that you get the `pathogen.vim`
pathogen.vim file and the directories it needs: file and the directories it needs:
```sh
mkdir -p ~/.vim/autoload ~/.vim/bundle; \ mkdir -p ~/.vim/autoload ~/.vim/bundle; \
curl -so ~/.vim/autoload/pathogen.vim \ curl -so ~/.vim/autoload/pathogen.vim \
https://raw.github.com/tpope/vim-pathogen/master/autoload/pathogen.vim https://raw.github.com/tpope/vim-pathogen/master/autoload/pathogen.vim
```
Next you *need to add this* to your ~/.vimrc: Next you *need* to add this to your `~/.vimrc`:
```vim
execute pathogen#infect() execute pathogen#infect()
```
<a name="step2"></a> <a name="step2"></a>
### 2.2\. Step 2: Install syntastic as a pathogen bundle ### 2.2\. Step 2: Install syntastic as a pathogen bundle
You now have pathogen installed and can put syntastic into ~/.vim/bundle like this: You now have pathogen installed and can put syntastic into `~/.vim/bundle` like
this:
```sh
cd ~/.vim/bundle cd ~/.vim/bundle
git clone https://github.com/scrooloose/syntastic.git git clone https://github.com/scrooloose/syntastic.git
```
Quit vim and start it back up to reload it, then type: Quit vim and start it back up to reload it, then type:
```vim
:Helptags
```
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 following:
:Helptags 1. Created both the `~/.vim/autoload` and `~/.vim/bundle` directories.
2. Added the `call pathogen#infect()` line to your `~/.vimrc` file
If you get an error when you do this, then you probably didn't install pathogen right. Go back to 3. Did the `git clone` of syntastic inside `~/.vim/bundle`
step 1 and make sure you did the following:
1. Created both the ~/.vim/autoload and ~/.vim/bundle directories.
2. Added the "call pathogen#infect()" line to your ~/.vimrc file
3. Did the git clone of syntastic inside ~/.vim/bundle
4. Have permissions to access all of these directories. 4. Have permissions to access all of these directories.
@ -111,56 +114,50 @@ step 1 and make sure you did the following:
__Q. I installed syntastic but it isn't reporting any errors...__ __Q. I installed syntastic but it isn't reporting any errors...__
A. The most likely reason is that none of the syntax checkers that it requires A. The most likely reason is that none of the syntax checkers that it requires
is installed. For example: python requires either `flake8`, `pyflakes` is installed. For example: by default, python requires either `flake8` or
or `pylint` to be installed and in `$PATH`. To see which executables are `pylint` to be installed and in your `$PATH`. To see which executables are
supported, just look in `syntax_checkers/<filetype>/*.vim`. Note that aliases supported, look at the [wiki][3]. Note that aliases do not work; the actual
do not work; the actual executable must be available in your `$PATH`. Symbolic executables must be available in your `$PATH`. Symbolic links are okay though.
links are okay. You can see syntastic's idea of available checkers by running You can see syntastic's idea of available checkers by running `:SyntasticInfo`.
`:SyntasticInfo`.
Another reason it could fail is that either the command line options or the Another reason it could fail is that either the command line options or the
error output for a syntax checker may have changed. In this case, make sure you error output for a syntax checker may have changed. In this case, make sure you
have the latest version of the syntax checker installed. If it still fails then have the latest version of the syntax checker installed. If it still fails then
create an issue - or better yet, create a pull request. create an issue - or better yet, create a pull request.
__Q. Recently some of my syntax checker options have stopped working...__ __Q. The `perl` checker has stopped working...__
A. The options are still there, they have just been renamed. Recently, A. The `perl` checker runs `perl -c` against your file, which in turn
almost all syntax checkers were refactored to use the new `makeprgBuild()` __executes__ any `BEGIN`, `UNITCHECK`, and `CHECK` blocks, and any `use`
function. This made a lot of the old explicit options redundant - as they are statements in your file (cf. [perlrun][10]). This is probably fine if you
now implied. The new implied options usually have slightly different names to wrote the file yourself, but it's a security problem if you're checking third
the old options. party files. Since there is currently no way to disable this behaviour while
still producing useful results, the checker is now disabled by default. To
e.g. Previously there was `g:syntastic_phpcs_conf`, now you must use (re-)enable it, set `g:syntastic_enable_perl_checker` to 1 in your vimrc:
`g:syntastic_php_phpcs_args`. This completely overrides the arguments of ```vim
the checker, including any defaults, so you may need to look up the default let g:syntastic_enable_perl_checker = 1
arguments of the checker and add these in. ```
See `:help syntastic-checker-options` for more information.
__Q. I run a checker and the location list is not updated...__ __Q. I run a checker and the location list is not updated...__
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
let g:syntastic_always_populate_loc_list=1 let g:syntastic_always_populate_loc_list = 1
``` ```
__Q. How can I pass additional arguments to a checker?__ __Q. How can I pass additional arguments to a checker?__
A. Almost all syntax checkers use the `makeprgBuild()` function. Those checkers A. Almost all syntax checkers use the `makeprgBuild()` function. Those checkers
that do can be configured using global variables. The general form of the that do can be configured using global variables. The general form of the
global args variables are: global `args` variables is `syntastic_<filetype>_<checker>_args`.
```vim
syntastic_<filetype>_<subchecker>_args
```
So, If you wanted to pass "--my --args --here" to the ruby mri checker you So, If you wanted to pass "--my --args --here" to the ruby mri checker you
would add this line to your vimrc: would add this line to your vimrc:
```vim ```vim
let g:syntastic_ruby_mri_args="--my --args --here" let g:syntastic_ruby_mri_args = "--my --args --here"
``` ```
See `:help syntastic-checker-options` for more information. See `:help syntastic-checker-options` for more information.
@ -170,24 +167,24 @@ which one(s) to use?__
A. Stick a line like this in your vimrc: A. Stick a line like this in your vimrc:
```vim ```vim
let g:syntastic_<filetype>_checkers=['<checker-name>'] let g:syntastic_<filetype>_checkers = ['<checker-name>']
``` ```
To see the list of checkers for your filetype, look in To see the list of supported checkers for your filetype look at the
`syntax_checkers/<filetype>/`. [wiki][3].
e.g. Python has the following checkers: `flake8`, `pyflakes`, `pylint` and a e.g. Python has the following checkers, among others: `flake8`, `pyflakes`,
native `python` checker. `pylint` and a native `python` checker.
To tell syntastic to use `pylint`, you would use this setting: To tell syntastic to use `pylint`, you would use this setting:
```vim ```vim
let g:syntastic_python_checkers=['pylint'] let g:syntastic_python_checkers = ['pylint']
``` ```
Some filetypes, like PHP, have style checkers as well as syntax checkers. These Some filetypes, like PHP, have style checkers as well as syntax checkers. These
can be chained together like this: can be chained together like this:
```vim ```vim
let g:syntastic_php_checkers=['php', 'phpcs', 'phpmd'] let g:syntastic_php_checkers = ['php', 'phpcs', 'phpmd']
``` ```
This is telling syntastic to run the `php` checker first, and if no errors are This is telling syntastic to run the `php` checker first, and if no errors are
@ -210,6 +207,13 @@ checkers. You can usually configure the options that are passed to the style
checkers, or just disable them. Take a look at the [wiki][3] to see what checkers, or just disable them. Take a look at the [wiki][3] to see what
options are available. options are available.
Alternatively, you can use `g:syntastic_quiet_messages` to filter out the
messages you don't want to see. e.g. To turn off all style messages:
```vim
let g:syntastic_quiet_messages = { "type": "style" }
```
See `:help syntastic_quiet_messages` for details.
__Q. The error window is closed automatically when I :quit the current buffer __Q. The error window is closed automatically when I :quit the current buffer
but not when I :bdelete it?__ but not when I :bdelete it?__
@ -245,3 +249,4 @@ a look at [jedi-vim][7], [python-mode][8], or [YouCompleteMe][9].
[7]: https://github.com/davidhalter/jedi-vim [7]: https://github.com/davidhalter/jedi-vim
[8]: https://github.com/klen/python-mode [8]: https://github.com/klen/python-mode
[9]: https://github.com/Valloric/YouCompleteMe [9]: https://github.com/Valloric/YouCompleteMe
[10]: http://perldoc.perl.org/perlrun.html#*-c*

View file

@ -1,7 +1,6 @@
"============================================================================ "============================================================================
"File: syntastic.vim "File: syntastic.vim
"Description: Vim plugin for on the fly syntax checking. "Description: Vim plugin for on the fly syntax checking.
"Version: 3.4.0-pre
"License: This program is free software. It comes without any warranty, "License: This program is free software. It comes without any warranty,
" to the extent permitted by applicable law. You can redistribute " 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 " it and/or modify it under the terms of the Do What The Fuck You
@ -19,6 +18,8 @@ if has('reltime')
let g:syntastic_start = reltime() let g:syntastic_start = reltime()
endif endif
let g:syntastic_version = '3.4.0'
" Sanity checks {{{1 " Sanity checks {{{1
for s:feature in ['autocmd', 'eval', 'modify_fname', 'quickfix', 'user_commands'] for s:feature in ['autocmd', 'eval', 'modify_fname', 'quickfix', 'user_commands']
@ -286,6 +287,7 @@ function! s:CacheErrors(checker_names) " {{{2
if !s:skipFile() if !s:skipFile()
" debug logging {{{3 " debug logging {{{3
call syntastic#log#debugShowVariables(g:SyntasticDebugTrace, 'version')
call syntastic#log#debugShowOptions(g:SyntasticDebugTrace, s:debug_dump_options) call syntastic#log#debugShowOptions(g:SyntasticDebugTrace, s:debug_dump_options)
call syntastic#log#debugDump(g:SyntasticDebugVariables) call syntastic#log#debugDump(g:SyntasticDebugVariables)
call syntastic#log#debugShowVariables(g:SyntasticDebugTrace, 'aggregate_errors') call syntastic#log#debugShowVariables(g:SyntasticDebugTrace, 'aggregate_errors')
@ -303,17 +305,16 @@ function! s:CacheErrors(checker_names) " {{{2
let names = [] let names = []
for checker in clist for checker in clist
let type = checker.getFiletype() let cname = checker.getFiletype() . '/' . checker.getName()
let name = checker.getName() call syntastic#log#debug(g:SyntasticDebugTrace, 'CacheErrors: Invoking checker: ' . cname)
call syntastic#log#debug(g:SyntasticDebugTrace, 'CacheErrors: Invoking checker: ' . type . '/' . name)
let loclist = checker.getLocList() let loclist = checker.getLocList()
if !loclist.isEmpty() if !loclist.isEmpty()
if decorate_errors if decorate_errors
call loclist.decorate(type, name) call loclist.decorate(cname)
endif endif
call add(names, [type, name]) call add(names, cname)
let newLoclist = newLoclist.extend(loclist) let newLoclist = newLoclist.extend(loclist)
@ -325,13 +326,13 @@ function! s:CacheErrors(checker_names) " {{{2
" set names {{{3 " set names {{{3
if !empty(names) if !empty(names)
if len(syntastic#util#unique(map( copy(names), 'v:val[0]' ))) == 1 if len(syntastic#util#unique(map( copy(names), 'substitute(v:val, "\\m/.*", "", "")' ))) == 1
let type = names[0][0] let type = substitute(names[0], '\m/.*', '', '')
let name = join(map(names, 'v:val[1]'), ', ') let name = join(map( names, 'substitute(v:val, "\\m.\\{-}/", "", "")' ), ', ')
call newLoclist.setName( name . ' ('. type . ')' ) call newLoclist.setName( name . ' ('. type . ')' )
else else
" checkers from mixed types " checkers from mixed types
call newLoclist.setName(join(map(names, 'v:val[0] . "/" . v:val[1]'), ', ')) call newLoclist.setName(join(names, ', '))
endif endif
endif endif
" }}}3 " }}}3
@ -416,13 +417,16 @@ function! SyntasticMake(options) " {{{2
call syntastic#log#debug(g:SyntasticDebugLoclist, 'checker output:', err_lines) call syntastic#log#debug(g:SyntasticDebugLoclist, 'checker output:', err_lines)
if has_key(a:options, 'preprocess') if has_key(a:options, 'Preprocess')
let err_lines = call(a:options['Preprocess'], [err_lines])
call syntastic#log#debug(g:SyntasticDebugLoclist, 'preprocess (external):', err_lines)
elseif has_key(a:options, 'preprocess')
let err_lines = call('syntastic#preprocess#' . a:options['preprocess'], [err_lines]) let err_lines = call('syntastic#preprocess#' . a:options['preprocess'], [err_lines])
call syntastic#log#debug(g:SyntasticDebugLoclist, 'preprocess:', err_lines) call syntastic#log#debug(g:SyntasticDebugLoclist, 'preprocess:', err_lines)
endif endif
lgetexpr err_lines lgetexpr err_lines
let errors = copy(getloclist(0)) let errors = deepcopy(getloclist(0))
if has_key(a:options, 'cwd') if has_key(a:options, 'cwd')
execute 'lcd ' . fnameescape(old_cwd) execute 'lcd ' . fnameescape(old_cwd)
@ -456,7 +460,12 @@ function! SyntasticMake(options) " {{{2
call s:addToErrors(errors, { 'subtype': a:options['subtype'] }) call s:addToErrors(errors, { 'subtype': a:options['subtype'] })
endif endif
if has_key(a:options, 'postprocess') && !empty(a:options['postprocess']) if has_key(a:options, 'Postprocess') && !empty(a:options['Postprocess'])
for rule in a:options['Postprocess']
let errors = call(rule, [errors])
endfor
call syntastic#log#debug(g:SyntasticDebugLoclist, 'postprocess (external):', errors)
elseif has_key(a:options, 'postprocess') && !empty(a:options['postprocess'])
for rule in a:options['postprocess'] for rule in a:options['postprocess']
let errors = call('syntastic#postprocess#' . rule, [errors]) let errors = call('syntastic#postprocess#' . rule, [errors])
endfor endfor

View file

@ -114,9 +114,9 @@ function! g:SyntasticLoclist.setName(name) " {{{2
let self._name = a:name let self._name = a:name
endfunction " }}}2 endfunction " }}}2
function! g:SyntasticLoclist.decorate(filetype, name) " {{{2 function! g:SyntasticLoclist.decorate(tag) " {{{2
for e in self._rawLoclist for e in self._rawLoclist
let e['text'] .= ' [' . a:filetype . '/' . a:name . ']' let e['text'] .= ' [' . a:tag . ']'
endfor endfor
endfunction " }}}2 endfunction " }}}2

View file

@ -20,7 +20,7 @@ let s:defaultCheckers = {
\ 'coq': ['coqtop'], \ 'coq': ['coqtop'],
\ 'cpp': ['gcc'], \ 'cpp': ['gcc'],
\ 'cs': ['mcs'], \ 'cs': ['mcs'],
\ 'css': ['csslint', 'phpcs'], \ 'css': ['csslint'],
\ 'cucumber': ['cucumber'], \ 'cucumber': ['cucumber'],
\ 'cuda': ['nvcc'], \ 'cuda': ['nvcc'],
\ 'd': ['dmd'], \ 'd': ['dmd'],
@ -54,7 +54,7 @@ let s:defaultCheckers = {
\ 'objc': ['gcc'], \ 'objc': ['gcc'],
\ 'objcpp': ['gcc'], \ 'objcpp': ['gcc'],
\ 'ocaml': ['camlp4o'], \ 'ocaml': ['camlp4o'],
\ 'perl': ['perl', 'perlcritic'], \ 'perl': ['perlcritic'],
\ 'php': ['php', 'phpcs', 'phpmd'], \ 'php': ['php', 'phpcs', 'phpmd'],
\ 'po': ['msgfmt'], \ 'po': ['msgfmt'],
\ 'pod': ['podchecker'], \ 'pod': ['podchecker'],
@ -142,14 +142,14 @@ function! g:SyntasticRegistry.getCheckers(ftalias, list) " {{{2
let ft = s:normaliseFiletype(a:ftalias) let ft = s:normaliseFiletype(a:ftalias)
call self._checkDeprecation(ft) call self._checkDeprecation(ft)
let ft_list = let names =
\ !empty(a:list) ? a:list : \ !empty(a:list) ? a:list :
\ exists('b:syntastic_checkers') ? b:syntastic_checkers : \ exists('b:syntastic_checkers') ? b:syntastic_checkers :
\ exists('g:syntastic_' . ft . '_checkers') ? g:syntastic_{ft}_checkers : \ exists('g:syntastic_' . ft . '_checkers') ? g:syntastic_{ft}_checkers :
\ get(s:defaultCheckers, ft, []) \ get(s:defaultCheckers, ft, 0)
return !empty(ft_list) ? return type(names) == type([]) ?
\ self._filterCheckersByName(checkers_map, ft_list) : [checkers_map[keys(checkers_map)[0]]] \ self._filterCheckersByName(checkers_map, names) : [checkers_map[keys(checkers_map)[0]]]
endfunction " }}}2 endfunction " }}}2
function! g:SyntasticRegistry.getKnownFiletypes() " {{{2 function! g:SyntasticRegistry.getKnownFiletypes() " {{{2

View file

@ -41,7 +41,7 @@ function! SyntaxCheckers_actionscript_mxmlc_GetHighlightRegex(item)
endif endif
return term != '' ? '\V\<' . term . '\>' : '' return term != '' ? '\V\<' . escape(term, '\') . '\>' : ''
endfunction endfunction
function! SyntaxCheckers_actionscript_mxmlc_GetLocList() dict function! SyntaxCheckers_actionscript_mxmlc_GetLocList() dict

View file

@ -26,7 +26,7 @@ set cpo&vim
function! SyntaxCheckers_css_prettycss_GetHighlightRegex(item) function! SyntaxCheckers_css_prettycss_GetHighlightRegex(item)
let term = matchstr(a:item["text"], '\m (\zs[^)]\+\ze)$') let term = matchstr(a:item["text"], '\m (\zs[^)]\+\ze)$')
if term != '' if term != ''
let term = '\V' . term let term = '\V' . escape(term, '\')
endif endif
return term return term
endfunction endfunction

View file

@ -2,10 +2,11 @@
-export([main/1]). -export([main/1]).
main([FileName]) -> main([FileName]) ->
LibDirs = filelib:wildcard("{lib,deps}/*/ebin"), LibDirs = (["ebin", "include", "src", "test"] ++
filelib:wildcard("{apps,deps,lib}/*/{ebin,include}")),
compile(FileName, LibDirs); compile(FileName, LibDirs);
main([FileName | ["-rebar" | [Path | LibDirs]]]) -> main([FileName, "-rebar", Path, LibDirs]) ->
{ok, L} = file:consult(Path), {ok, L} = file:consult(Path),
P = dict:from_list(L), P = dict:from_list(L),
Root = filename:dirname(Path), Root = filename:dirname(Path),
@ -31,23 +32,20 @@ main([FileName | ["-rebar" | [Path | LibDirs]]]) ->
%io:format("~p~n", [LibDirs1]), %io:format("~p~n", [LibDirs1]),
compile(FileName, LibDirs1); compile(FileName, LibDirs1);
main([FileName | LibDirs]) -> main([FileName, LibDirs]) ->
compile(FileName, LibDirs). compile(FileName, LibDirs).
compile(FileName, LibDirs) -> compile(FileName, LibDirs) ->
Root = get_root(filename:dirname(FileName)), Root = get_root(filename:dirname(FileName)),
ok = code:add_pathsa(LibDirs), ok = code:add_pathsa(LibDirs),
compile:file(FileName, [warn_obsolete_guard, compile:file(FileName,
warn_unused_import, [warn_obsolete_guard,
warn_shadow_vars, warn_unused_import,
warn_export_vars, warn_shadow_vars,
strong_validation, warn_export_vars,
report, strong_validation,
{i, filename:join(Root, "include")}, report] ++
{i, filename:join(Root, "deps")}, [{i, filename:join(Root, I)} || I <- LibDirs]).
{i, filename:join(Root, "apps")},
{i, filename:join(Root, "lib")}
]).
get_root(Dir) -> get_root(Dir) ->
Path = filename:split(filename:absname(Dir)), Path = filename:split(filename:absname(Dir)),

View file

@ -22,7 +22,7 @@ set cpo&vim
function! SyntaxCheckers_javascript_jslint_GetHighlightRegex(item) function! SyntaxCheckers_javascript_jslint_GetHighlightRegex(item)
let term = matchstr(a:item['text'], '\mExpected .* and instead saw ''\zs.*\ze''') let term = matchstr(a:item['text'], '\mExpected .* and instead saw ''\zs.*\ze''')
if term != '' if term != ''
let term = '\V' . term let term = '\V' . escape(term, '\')
endif endif
return term return term
endfunction endfunction

View file

@ -26,7 +26,7 @@ function! SyntaxCheckers_lex_flex_GetHighlightRegex(item)
\ '\m^\(Definition value for\|undefined definition\) \zs{[^}]\+}\ze') \ '\m^\(Definition value for\|undefined definition\) \zs{[^}]\+}\ze')
endif endif
return term != '' ? '\V' . term : '' return term != '' ? '\V' . escape(term, '\') : ''
endfunction endfunction
function! SyntaxCheckers_lex_flex_GetLocList() dict function! SyntaxCheckers_lex_flex_GetLocList() dict

View file

@ -28,7 +28,7 @@ function! SyntaxCheckers_lua_luac_GetHighlightRegex(pos)
let a:pos['col'] = p[2] let a:pos['col'] = p[2]
let result = '\%' . p[2] . 'c' let result = '\%' . p[2] . 'c'
else else
let result = '\V' . near let result = '\V' . escape(near, '\')
endif endif
" XXX the following piece of code is evil, and is likely to break " XXX the following piece of code is evil, and is likely to break
@ -38,7 +38,7 @@ function! SyntaxCheckers_lua_luac_GetHighlightRegex(pos)
"if open != '' "if open != ''
" let line = str2nr(matchstr(a:pos['text'], '\m(to close ''[^'']\+'' at line \zs[0-9]\+\ze)')) " let line = str2nr(matchstr(a:pos['text'], '\m(to close ''[^'']\+'' at line \zs[0-9]\+\ze)'))
" let group = a:pos['type'] ==? 'E' ? 'SyntasticError' : 'SyntasticWarning' " let group = a:pos['type'] ==? 'E' ? 'SyntasticError' : 'SyntasticWarning'
" call matchadd(group, '\%' . line . 'l\V' . open) " call matchadd(group, '\%' . line . 'l\V' . escape(open, '\'))
"endif "endif
endif endif
return result return result

View file

@ -11,6 +11,22 @@
" "
"============================================================================ "============================================================================
" "
" Security:
"
" This checker runs 'perl -c' against your file, which in turn executes
" any BEGIN, UNITCHECK, and CHECK blocks, and any use statements in
" your file. This is probably fine if you wrote the file yourself,
" but it can be a problem if you're trying to check third party files.
" If you are 100% willing to let Vim run the code in your file, set
" g:syntastic_enable_perl_checker to 1 in your vimrc to enable this
" checker:
"
" let g:syntastic_enable_perl_checker = 1
"
" References:
"
" - http://perldoc.perl.org/perlrun.html#*-c*
"
" Checker options: " Checker options:
" "
" - g:syntastic_perl_interpreter (string; default: 'perl') " - g:syntastic_perl_interpreter (string; default: 'perl')
@ -24,11 +40,7 @@
if exists('g:loaded_syntastic_perl_perl_checker') if exists('g:loaded_syntastic_perl_perl_checker')
finish finish
endif endif
let g:loaded_syntastic_perl_perl_checker=1 let g:loaded_syntastic_perl_perl_checker = 1
if !exists('g:syntastic_perl_interpreter')
let g:syntastic_perl_interpreter = 'perl'
endif
if !exists('g:syntastic_perl_lib_path') if !exists('g:syntastic_perl_lib_path')
let g:syntastic_perl_lib_path = [] let g:syntastic_perl_lib_path = []
@ -38,6 +50,10 @@ let s:save_cpo = &cpo
set cpo&vim set cpo&vim
function! SyntaxCheckers_perl_perl_IsAvailable() dict function! SyntaxCheckers_perl_perl_IsAvailable() dict
if !exists('g:syntastic_perl_interpreter')
let g:syntastic_perl_interpreter = self.getExec()
endif
" don't call executable() here, to allow things like " don't call executable() here, to allow things like
" let g:syntastic_perl_interpreter='/usr/bin/env perl' " let g:syntastic_perl_interpreter='/usr/bin/env perl'
silent! call system(syntastic#util#shexpand(g:syntastic_perl_interpreter) . ' -e ' . syntastic#util#shescape('exit(0)')) silent! call system(syntastic#util#shexpand(g:syntastic_perl_interpreter) . ' -e ' . syntastic#util#shescape('exit(0)'))
@ -45,6 +61,11 @@ function! SyntaxCheckers_perl_perl_IsAvailable() dict
endfunction endfunction
function! SyntaxCheckers_perl_perl_GetLocList() dict function! SyntaxCheckers_perl_perl_GetLocList() dict
if !exists('g:syntastic_enable_perl_checker') || !g:syntastic_enable_perl_checker
call syntastic#log#error('checker perl/perl: checks disabled for security reasons; set g:syntastic_enable_perl_checker to 1 to override')
return []
endif
let exe = expand(g:syntastic_perl_interpreter) let exe = expand(g:syntastic_perl_interpreter)
if type(g:syntastic_perl_lib_path) == type('') if type(g:syntastic_perl_lib_path) == type('')
call syntastic#log#deprecationWarn('variable g:syntastic_perl_lib_path should be a list') call syntastic#log#deprecationWarn('variable g:syntastic_perl_lib_path should be a list')

View file

@ -20,7 +20,7 @@ set cpo&vim
function! SyntaxCheckers_php_php_GetHighlightRegex(item) function! SyntaxCheckers_php_php_GetHighlightRegex(item)
let term = matchstr(a:item['text'], "\\munexpected '\\zs[^']\\+\\ze'") let term = matchstr(a:item['text'], "\\munexpected '\\zs[^']\\+\\ze'")
return term != '' ? '\V' . term : '' return term != '' ? '\V' . escape(term, '\') : ''
endfunction endfunction
function! SyntaxCheckers_php_php_GetLocList() dict function! SyntaxCheckers_php_php_GetLocList() dict

View file

@ -20,7 +20,7 @@ set cpo&vim
function! SyntaxCheckers_po_msgfmt_GetHighlightRegex(item) function! SyntaxCheckers_po_msgfmt_GetHighlightRegex(item)
let term = matchstr(a:item['text'], '\mkeyword "\zs[^"]\+\ze" unknown') let term = matchstr(a:item['text'], '\mkeyword "\zs[^"]\+\ze" unknown')
return term != '' ? '\V' . term : '' return term != '' ? '\V' . escape(term, '\') : ''
endfunction endfunction
function! SyntaxCheckers_po_msgfmt_GetLocList() dict function! SyntaxCheckers_po_msgfmt_GetLocList() dict

View file

@ -39,7 +39,7 @@ function! SyntaxCheckers_python_frosted_GetLocList() dict
if len(parts) >= 4 if len(parts) >= 4
let e["type"] = parts[1][0] let e["type"] = parts[1][0]
let e["text"] = parts[3] . ' [' . parts[1] . ']' let e["text"] = parts[3] . ' [' . parts[1] . ']'
let e["hl"] = '\V' . parts[2] let e["hl"] = '\V' . escape(parts[2], '\')
elseif e["text"] =~? '\v^I\d+:' elseif e["text"] =~? '\v^I\d+:'
let e["valid"] = 0 let e["valid"] = 0
else else

View file

@ -21,7 +21,7 @@ set cpo&vim
function! SyntaxCheckers_ruby_mri_GetHighlightRegex(i) function! SyntaxCheckers_ruby_mri_GetHighlightRegex(i)
if stridx(a:i['text'], 'assigned but unused variable') >= 0 if stridx(a:i['text'], 'assigned but unused variable') >= 0
let term = split(a:i['text'], ' - ')[1] let term = split(a:i['text'], ' - ')[1]
return '\V\<'.term.'\>' return '\V\<' . escape(term, '\') . '\>'
endif endif
return '' return ''

View file

@ -20,7 +20,7 @@ set cpo&vim
function! SyntaxCheckers_texinfo_makeinfo_GetHighlightRegex(item) function! SyntaxCheckers_texinfo_makeinfo_GetHighlightRegex(item)
let term = matchstr(a:item['text'], "\\m`\\zs[^']\\+\\ze'") let term = matchstr(a:item['text'], "\\m`\\zs[^']\\+\\ze'")
return term != '' ? '\V' . term : '' return term != '' ? '\V' . escape(term, '\') : ''
endfunction endfunction
function! SyntaxCheckers_texinfo_makeinfo_GetLocList() dict function! SyntaxCheckers_texinfo_makeinfo_GetLocList() dict

View file

@ -22,7 +22,7 @@ function! SyntaxCheckers_text_atdtool_GetHighlightRegex(item)
let term = matchstr(a:item['text'], '\m "\zs[^"]\+\ze"\($\| | suggestions:\)') let term = matchstr(a:item['text'], '\m "\zs[^"]\+\ze"\($\| | suggestions:\)')
if term != '' if term != ''
let col = get(a:item, 'col', 0) let col = get(a:item, 'col', 0)
let term = (col != 0 ? '\%' . col . 'c' : '') . '\V' . term let term = (col != 0 ? '\%' . col . 'c' : '') . '\V' . escape(term, '\')
endif endif
return term return term
endfunction endfunction

View file

@ -29,7 +29,7 @@ function! SyntaxCheckers_vim_vimlint_GetHighlightRegex(item)
endif endif
endif endif
return '\V' . (col ? '\%' . col . 'c' : '') . term return '\V' . (col ? '\%' . col . 'c' : '') . escape(term, '\')
endif endif
return '' return ''

View file

@ -3,8 +3,8 @@
" @Website: http://www.vim.org/account/profile.php?user_id=4037 " @Website: http://www.vim.org/account/profile.php?user_id=4037
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt) " @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
" @Created: 2008-11-25. " @Created: 2008-11-25.
" @Last Change: 2013-09-25. " @Last Change: 2014-01-23.
" @Revision: 0.0.92 " @Revision: 0.0.108
let s:prototype = tlib#Object#New({'_class': ['Filter_cnf'], 'name': 'cnf'}) "{{{2 let s:prototype = tlib#Object#New({'_class': ['Filter_cnf'], 'name': 'cnf'}) "{{{2
let s:prototype.highlight = g:tlib#input#higroup let s:prototype.highlight = g:tlib#input#higroup
@ -147,7 +147,16 @@ endf
" :nodoc: " :nodoc:
function! s:prototype.ReduceFrontFilter(world) dict "{{{3 function! s:prototype.ReduceFrontFilter(world) dict "{{{3
let a:world.filter[0][0] = a:world.filter[0][0][0:-2] let filter = a:world.filter[0][0]
" TLogVAR filter
let str = matchstr(filter, '\(\\\(\.\\{-}\|[.?*+$^]\)\|\)$')
if empty(str)
let filter = filter[0 : -2]
else
let filter = strpart(filter, 0, len(filter) - len(str))
endif
" TLogVAR str, filter
let a:world.filter[0][0] = filter
endf endf

View file

@ -3,8 +3,8 @@
" @Website: http://www.vim.org/account/profile.php?user_id=4037 " @Website: http://www.vim.org/account/profile.php?user_id=4037
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt) " @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
" @Created: 2008-11-25. " @Created: 2008-11-25.
" @Last Change: 2013-09-25. " @Last Change: 2014-01-23.
" @Revision: 0.0.51 " @Revision: 0.0.57
let s:prototype = tlib#Filter_cnf#New({'_class': ['Filter_cnfd'], 'name': 'cnfd'}) "{{{2 let s:prototype = tlib#Filter_cnf#New({'_class': ['Filter_cnfd'], 'name': 'cnfd'}) "{{{2
let s:prototype.highlight = g:tlib#input#higroup let s:prototype.highlight = g:tlib#input#higroup
@ -29,11 +29,7 @@ let s:Help = s:prototype.Help
" :nodoc: " :nodoc:
function! s:prototype.Help(world) dict "{{{3 function! s:prototype.Help(world) dict "{{{3
call call(s:Help, [a:world], self) call call(s:Help, [a:world], self)
if self.name == 'cnfx' call a:world.PushHelp('.', 'Any characters')
call a:world.PushHelp(g:tlib#Filter_cnfx#expander, 'Any characters')
else
call a:world.PushHelp('.', 'Any characters')
endif
endf endf
@ -50,16 +46,6 @@ function! s:prototype.PushFrontFilter(world, char) dict "{{{3
endf endf
" :nodoc:
function! s:prototype.ReduceFrontFilter(world) dict "{{{3
let flt = a:world.filter[0][0]
if flt =~ '\\\.\\{-}$'
let a:world.filter[0][0] = flt[0:-7]
else
let a:world.filter[0][0] = flt[0:-2]
endif
endf
" :nodoc: " :nodoc:
function! s:prototype.CleanFilter(filter) dict "{{{3 function! s:prototype.CleanFilter(filter) dict "{{{3
return substitute(a:filter, '\\.\\{-}', '.', 'g') return substitute(a:filter, '\\.\\{-}', '.', 'g')

View file

@ -1,42 +0,0 @@
" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
" @Website: http://www.vim.org/account/profile.php?user_id=4037
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
" @Created: 2008-11-25.
" @Last Change: 2013-09-25.
" @Revision: 0.0.62
let s:prototype = tlib#Filter_cnfd#New({'_class': ['Filter_cnfx'], 'name': 'cnfx'}) "{{{2
let s:prototype.highlight = g:tlib#input#higroup
" A character that should be expanded to '\.\{-}'.
TLet g:tlib#Filter_cnfx#expander = '+'
" The same as |tlib#Filter_cnfd#New()| but a a customizable character
" |see tlib#Filter_cnfx#expander| is expanded to '\.\{-}'.
" The pattern is a '/\V' very no-'/magic' regexp pattern.
function! tlib#Filter_cnfx#New(...) "{{{3
let object = s:prototype.New(a:0 >= 1 ? a:1 : {})
return object
endf
" :nodoc:
function! s:prototype.SetFrontFilter(world, pattern) dict "{{{3
let pattern = substitute(a:pattern, tlib#rx#Escape(g:tlib#Filter_cnfx#expander, 'V'), '\\.\\{-}', 'g')
let a:world.filter[0] = reverse(split(pattern, '\s*|\s*')) + a:world.filter[0][1 : -1]
endf
" :nodoc:
function! s:prototype.PushFrontFilter(world, char) dict "{{{3
let a:world.filter[0][0] .= a:char == char2nr(g:tlib#Filter_cnfx#expander) ? '\.\{-}' : nr2char(a:char)
endf
" :nodoc:
function! s:prototype.CleanFilter(filter) dict "{{{3
return substitute(a:filter, '\\.\\{-}', g:tlib#Filter_cnfx#expander, 'g')
endf

View file

@ -0,0 +1,68 @@
" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
" @Website: http://www.vim.org/account/profile.php?user_id=4037
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
" @Created: 2008-11-25.
" @Last Change: 2014-01-23.
" @Revision: 0.0.80
let s:prototype = tlib#Filter_cnf#New({'_class': ['Filter_glob'], 'name': 'glob'}) "{{{2
let s:prototype.highlight = g:tlib#input#higroup
" A character that should be expanded to '\.\{-}'.
TLet g:tlib#Filter_glob#seq = '*'
" A character that should be expanded to '\.\?'.
TLet g:tlib#Filter_glob#char = '?'
" The same as |tlib#Filter_cnf#New()| but a a customizable character
" |see tlib#Filter_glob#seq| is expanded to '\.\{-}' and
" |g:tlib#Filter_glob#char| is expanded to '\.'.
" The pattern is a '/\V' very no-'/magic' regexp pattern.
function! tlib#Filter_glob#New(...) "{{{3
let object = s:prototype.New(a:0 >= 1 ? a:1 : {})
return object
endf
let s:Help = s:prototype.Help
" :nodoc:
function! s:prototype.Help(world) dict "{{{3
call call(s:Help, [a:world], self)
call a:world.PushHelp(g:tlib#Filter_glob#seq, 'Any characters')
call a:world.PushHelp(g:tlib#Filter_glob#char, 'Single characters')
endf
" :nodoc:
function! s:prototype.SetFrontFilter(world, pattern) dict "{{{3
let pattern = substitute(a:pattern, tlib#rx#Escape(g:tlib#Filter_glob#seq, 'V'), '\\.\\{-}', 'g')
let pattern = substitute(a:pattern, tlib#rx#Escape(g:tlib#Filter_glob#char, 'V'), '\\.', 'g')
let a:world.filter[0] = reverse(split(pattern, '\s*|\s*')) + a:world.filter[0][1 : -1]
endf
" :nodoc:
function! s:prototype.PushFrontFilter(world, char) dict "{{{3
" TLogVAR a:char, nr2char(a:char)
if a:char == char2nr(g:tlib#Filter_glob#seq)
let char = '\.\{-}'
elseif a:char == char2nr(g:tlib#Filter_glob#char)
let char = '\.'
else
let char = nr2char(a:char)
endif
let a:world.filter[0][0] .= char
endf
" :nodoc:
function! s:prototype.CleanFilter(filter) dict "{{{3
let filter = substitute(a:filter, '\\.\\{-}', g:tlib#Filter_glob#seq, 'g')
let filter = substitute(filter, '\\.', g:tlib#Filter_glob#char, 'g')
return filter
endf

View file

@ -1,10 +1,7 @@
" World.vim -- The World prototype for tlib#input#List()
" @Author: Tom Link (micathom AT gmail com?subject=[vim]) " @Author: Tom Link (micathom AT gmail com?subject=[vim])
" @Website: http://www.vim.org/account/profile.php?user_id=4037 " @Website: http://www.vim.org/account/profile.php?user_id=4037
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt) " @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
" @Created: 2007-05-01. " @Revision: 1389
" @Last Change: 2013-12-03.
" @Revision: 0.1.1310
" :filedoc: " :filedoc:
" A prototype used by |tlib#input#List|. " A prototype used by |tlib#input#List|.
@ -75,6 +72,7 @@ let s:prototype = tlib#Object#New({
\ 'resize_vertical': 0, \ 'resize_vertical': 0,
\ 'restore_from_cache': [], \ 'restore_from_cache': [],
\ 'filtered_items': [], \ 'filtered_items': [],
\ 'resume_state': '',
\ 'retrieve_eval': '', \ 'retrieve_eval': '',
\ 'return_agent': '', \ 'return_agent': '',
\ 'rv': '', \ 'rv': '',
@ -92,6 +90,7 @@ let s:prototype = tlib#Object#New({
\ 'temp_prompt': [], \ 'temp_prompt': [],
\ 'timeout': 0, \ 'timeout': 0,
\ 'timeout_resolution': 2, \ 'timeout_resolution': 2,
\ 'tabpagenr': -1,
\ 'type': '', \ 'type': '',
\ 'win_wnr': -1, \ 'win_wnr': -1,
\ 'win_height': -1, \ 'win_height': -1,
@ -119,6 +118,22 @@ function! s:prototype.Set_display_format(value) dict "{{{3
endf endf
" :nodoc:
function! s:prototype.DisplayFormat(list) dict "{{{3
let display_format = self.display_format
if !empty(display_format)
if has_key(self, 'InitFormatName')
call self.InitFormatName()
endif
let cache = self.fmt_display
" TLogVAR display_format, fmt_entries
return map(copy(a:list), 'self.FormatName(cache, display_format, v:val)')
else
return a:list
endif
endf
" :nodoc: " :nodoc:
function! s:prototype.Set_highlight_filename() dict "{{{3 function! s:prototype.Set_highlight_filename() dict "{{{3
let self.tlib_UseInputListScratch = 'call world.Highlight_filename()' let self.tlib_UseInputListScratch = 'call world.Highlight_filename()'
@ -180,6 +195,32 @@ else
endf endf
" :nodoc:
function! s:prototype.UseFilenameIndicators() dict "{{{3
return g:tlib_inputlist_filename_indicators || has_key(self, 'filename_indicators')
endf
" :nodoc:
function! s:prototype.InitFormatName() dict "{{{3
if self.UseFilenameIndicators()
let self._buffers = {}
for bufnr in range(1, bufnr('$'))
let filename = fnamemodify(bufname(bufnr), ':p')
" TLogVAR filename
let bufdef = {
\ 'bufnr': bufnr,
\ }
" '&buflisted'
for opt in ['&modified', '&bufhidden']
let bufdef[opt] = getbufvar(bufnr, opt)
endfor
let self._buffers[filename] = bufdef
endfor
endif
endf
" :nodoc: " :nodoc:
function! s:prototype.FormatFilename(file) dict "{{{3 function! s:prototype.FormatFilename(file) dict "{{{3
" TLogVAR a:file " TLogVAR a:file
@ -196,34 +237,30 @@ else
if strwidth(fname) > width if strwidth(fname) > width
let fname = strpart(fname, 0, width - 3) .'...' let fname = strpart(fname, 0, width - 3) .'...'
endif endif
let dnmax = &co - max([width, strwidth(fname)]) - 10 - self.index_width - &fdc let dnmax = &co - max([width, strwidth(fname)]) - 8 - self.index_width - &fdc
if g:tlib_inputlist_filename_indicators let use_indicators = self.UseFilenameIndicators()
let dnmax -= 2
endif
if strwidth(dname) > dnmax
let dname = '...'. strpart(dname, len(dname) - dnmax)
endif
let marker = []
let use_indicators = g:tlib_inputlist_filename_indicators || has_key(self, 'filename_indicators')
" TLogVAR use_indicators " TLogVAR use_indicators
let marker = []
if use_indicators if use_indicators
call insert(marker, '[') call insert(marker, '[')
if g:tlib_inputlist_filename_indicators if g:tlib_inputlist_filename_indicators
let bnr = bufnr(a:file) let bufdef = get(self._buffers, a:file, {})
TLogVAR a:file, bnr, self.bufnr " let bnr = bufnr(a:file)
let bnr = get(bufdef, 'bufnr', -1)
" TLogVAR a:file, bnr, self.bufnr
if bnr != -1 if bnr != -1
if bnr == self.bufnr if bnr == self.bufnr
call add(marker, '%') call add(marker, '%')
else else
call add(marker, bnr) call add(marker, bnr)
endif endif
if getbufvar(bnr, '&modified') if get(bufdef, '&modified', 0)
call add(marker, '+') call add(marker, '+')
endif endif
if getbufvar(bnr, '&bufhidden') == 'hide' if get(bufdef, '&bufhidden', '') == 'hide'
call add(marker, 'h') call add(marker, 'h')
endif endif
" if !buflisted(bnr) " if !get(bufdef, '&buflisted', 1)
" call add(marker, 'u') " call add(marker, 'u')
" endif " endif
" echom "DBG" a:file string(get(self,'filename_indicators')) " echom "DBG" a:file string(get(self,'filename_indicators'))
@ -242,9 +279,16 @@ else
else else
call add(marker, '|') call add(marker, '|')
endif endif
let markers = join(marker, '')
if !empty(markers)
let dnmax -= len(markers)
endif
if strwidth(dname) > dnmax
let dname = '...'. strpart(dname, len(dname) - dnmax)
endif
return printf("%-*s %s %s", return printf("%-*s %s %s",
\ self.width_filename + len(fname) - strwidth(fname), \ self.width_filename + len(fname) - strwidth(fname),
\ fname, join(marker, ''), dname) \ fname, markers, dname)
endf endf
endif endif
@ -764,6 +808,7 @@ function! s:prototype.UseInputListScratch() dict "{{{3
if !exists('b:tlib_list_init') if !exists('b:tlib_list_init')
call tlib#autocmdgroup#Init() call tlib#autocmdgroup#Init()
autocmd TLib VimResized <buffer> call feedkeys("\<c-j>", 't') autocmd TLib VimResized <buffer> call feedkeys("\<c-j>", 't')
" autocmd TLib WinLeave <buffer> let b:tlib_world_event = 'WinLeave' | call feedkeys("\<c-j>", 't')
let b:tlib_list_init = 1 let b:tlib_list_init = 1
endif endif
if !exists('w:tlib_list_init') if !exists('w:tlib_list_init')
@ -923,16 +968,17 @@ function! s:prototype.DisplayHelp() dict "{{{3
let self.temp_lines = self.InitHelp() let self.temp_lines = self.InitHelp()
call self.PushHelp('<Esc>', self.key_mode == 'default' ? 'Abort' : 'Reset keymap') call self.PushHelp('<Esc>', self.key_mode == 'default' ? 'Abort' : 'Reset keymap')
call self.PushHelp('Enter, <cr>', 'Pick the current item') call self.PushHelp('Enter, <cr>', 'Pick the current item')
call self.PushHelp('<M-Number>', 'Pick an item')
call self.PushHelp('Mouse', 'L: Pick item, R: Show menu') call self.PushHelp('Mouse', 'L: Pick item, R: Show menu')
call self.PushHelp('<M-Number>', 'Select an item')
call self.PushHelp('<BS>, <C-BS>', 'Reduce filter') call self.PushHelp('<BS>, <C-BS>', 'Reduce filter')
call self.PushHelp('<S-Esc>, <F10>', 'Enter command') call self.PushHelp('<S-Esc>, <F10>', 'Enter command')
if self.key_mode == 'default' if self.key_mode == 'default'
call self.PushHelp('<C|M-r>', 'Reset the display') call self.PushHelp('<C|M-r>', 'Reset the display')
call self.PushHelp('Up/Down', 'Next/previous item') call self.PushHelp('Up/Down', 'Next/previous item')
call self.PushHelp('<C|M-q>', 'Edit top filter string') call self.PushHelp('<C|M-q>', 'Edit top filter string')
call self.PushHelp('Page Up/Down', 'Scroll') call self.PushHelp('Page Up/Down', 'Scroll')
call self.PushHelp('<S-Space>', 'Enter * Wildcard')
if self.allow_suspend if self.allow_suspend
call self.PushHelp('<C|M-z>', 'Suspend/Resume') call self.PushHelp('<C|M-z>', 'Suspend/Resume')
call self.PushHelp('<C-o>', 'Switch to origin') call self.PushHelp('<C-o>', 'Switch to origin')
@ -1164,7 +1210,7 @@ function! s:prototype.Query() dict "{{{3
if g:tlib_inputlist_shortmessage if g:tlib_inputlist_shortmessage
let query = 'Filter: '. self.DisplayFilter() let query = 'Filter: '. self.DisplayFilter()
else else
let query = self.query .' (filter: '. self.DisplayFilter() .'; press "?" for help)' let query = self.query .' (filter: '. self.DisplayFilter() .'; press <F1> for help)'
endif endif
return query return query
endf endf
@ -1236,6 +1282,9 @@ endf
" :nodoc: " :nodoc:
function! s:prototype.SwitchWindow(where) dict "{{{3 function! s:prototype.SwitchWindow(where) dict "{{{3
" TLogDBG string(tlib#win#List()) " TLogDBG string(tlib#win#List())
if self.tabpagenr != tabpagenr()
call tlib#tab#Set(self.tabpagenr)
endif
let wnr = get(self, a:where.'_wnr') let wnr = get(self, a:where.'_wnr')
" TLogVAR self, wnr " TLogVAR self, wnr
return tlib#win#Set(wnr) return tlib#win#Set(wnr)
@ -1312,3 +1361,8 @@ function! s:prototype.RestoreOrigin(...) dict "{{{3
" TLogDBG "RestoreOrigin1 ". string(tlib#win#List()) " TLogDBG "RestoreOrigin1 ". string(tlib#win#List())
endf endf
function! s:prototype.Suspend() dict "{{{3
call tlib#agent#Suspend(self, self.rv)
endf

View file

@ -3,8 +3,8 @@
" @Website: http://www.vim.org/account/profile.php?user_id=4037 " @Website: http://www.vim.org/account/profile.php?user_id=4037
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt) " @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
" @Created: 2007-06-24. " @Created: 2007-06-24.
" @Last Change: 2013-11-05. " @Last Change: 2014-02-06.
" @Revision: 0.1.242 " @Revision: 0.1.251
" :filedoc: " :filedoc:
@ -55,6 +55,20 @@ function! tlib#agent#PageDown(world, selected) "{{{3
endf endf
function! tlib#agent#Home(world, selected) "{{{3
let a:world.prefidx = 1
let a:world.state = 'redisplay'
return a:world
endf
function! tlib#agent#End(world, selected) "{{{3
let a:world.prefidx = len(a:world.list)
let a:world.state = 'redisplay'
return a:world
endf
function! tlib#agent#Up(world, selected, ...) "{{{3 function! tlib#agent#Up(world, selected, ...) "{{{3
TVarArg ['lines', 1] TVarArg ['lines', 1]
let a:world.idx = '' let a:world.idx = ''
@ -463,7 +477,7 @@ function! tlib#agent#ShowInfo(world, selected)
for f in a:selected for f in a:selected
if filereadable(f) if filereadable(f)
let desc = [getfperm(f), strftime('%c', getftime(f)), getfsize(f) .' bytes', getftype(f)] let desc = [getfperm(f), strftime('%c', getftime(f)), getfsize(f) .' bytes', getftype(f)]
call add(lines, fnamemodify(f, ':t') .':') call add(lines, fnamemodify(f, ':p'))
call add(lines, ' '. join(desc, '; ')) call add(lines, ' '. join(desc, '; '))
endif endif
endfor endfor
@ -561,7 +575,7 @@ endf
function! tlib#agent#ExecAgentByName(world, selected) "{{{3 function! tlib#agent#ExecAgentByName(world, selected) "{{{3
let s:agent_names_world = a:world let s:agent_names_world = a:world
let agent_names = {} let agent_names = {'Help': 'tlib#agent#Help'}
for def in values(a:world.key_map[a:world.key_mode]) for def in values(a:world.key_map[a:world.key_mode])
if has_key(def, 'help') && !empty(def.help) && has_key(def, 'agent') && !empty(def.agent) if has_key(def, 'help') && !empty(def.help) && has_key(def, 'agent') && !empty(def.agent)
let agent_names[def.help] = def.agent let agent_names[def.help] = def.agent

View file

@ -4,7 +4,7 @@
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt) " @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
" @Created: 2007-06-30. " @Created: 2007-06-30.
" @Last Change: 2013-09-25. " @Last Change: 2013-09-25.
" @Revision: 0.1.220 " @Revision: 0.1.230
" The cache directory. If empty, use |tlib#dir#MyRuntime|.'/cache'. " The cache directory. If empty, use |tlib#dir#MyRuntime|.'/cache'.
@ -109,13 +109,20 @@ endf
function! tlib#cache#Save(cfile, dictionary) "{{{3 function! tlib#cache#Save(cfile, dictionary) "{{{3
" TLogVAR a:cfile, a:dictionary
call tlib#persistent#Save(a:cfile, a:dictionary) call tlib#persistent#Save(a:cfile, a:dictionary)
endf endf
function! tlib#cache#Get(cfile) "{{{3 function! tlib#cache#Get(cfile, ...) "{{{3
call tlib#cache#MaybePurge() call tlib#cache#MaybePurge()
return tlib#persistent#Get(a:cfile) if !empty(a:cfile) && filereadable(a:cfile)
let val = readfile(a:cfile, 'b')
return eval(join(val, "\n"))
else
let default = a:0 >= 1 ? a:1 : {}
return default
endif
endf endf
@ -123,10 +130,18 @@ endf
" or does not exist, create it calling a generator function. " or does not exist, create it calling a generator function.
function! tlib#cache#Value(cfile, generator, ftime, ...) "{{{3 function! tlib#cache#Value(cfile, generator, ftime, ...) "{{{3
if !filereadable(a:cfile) || (a:ftime != 0 && getftime(a:cfile) < a:ftime) if !filereadable(a:cfile) || (a:ftime != 0 && getftime(a:cfile) < a:ftime)
let args = a:0 >= 1 ? a:1 : [] if empty(a:generator) && a:0 >= 1
let val = call(a:generator, args) " TLogVAR a:1
" TLogVAR a:generator, args, val let val = a:1
call tlib#cache#Save(a:cfile, {'val': val}) else
let args = a:0 >= 1 ? a:1 : []
" TLogVAR a:generator, args
let val = call(a:generator, args)
endif
" TLogVAR val
let cval = {'val': val}
" TLogVAR cval
call tlib#cache#Save(a:cfile, cval)
return val return val
else else
let val = tlib#cache#Get(a:cfile) let val = tlib#cache#Get(a:cfile)

View file

@ -3,8 +3,8 @@
" @Website: http://www.vim.org/account/profile.php?user_id=4037 " @Website: http://www.vim.org/account/profile.php?user_id=4037
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt) " @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
" @Created: 2007-06-30. " @Created: 2007-06-30.
" @Last Change: 2009-02-15. " @Last Change: 2014-01-20.
" @Revision: 0.0.30 " @Revision: 0.0.37
if &cp || exists("loaded_tlib_char_autoload") if &cp || exists("loaded_tlib_char_autoload")
finish finish
@ -19,13 +19,22 @@ let loaded_tlib_char_autoload = 1
" echo tlib#char#Get() " echo tlib#char#Get()
" echo tlib#char#Get(5) " echo tlib#char#Get(5)
function! tlib#char#Get(...) "{{{3 function! tlib#char#Get(...) "{{{3
TVarArg ['timeout', 0], ['resolution', 0] TVarArg ['timeout', 0], ['resolution', 0], ['getmod', 0]
let char = -1
let mode = 0
if timeout == 0 || !has('reltime') if timeout == 0 || !has('reltime')
return getchar() let char = getchar()
else else
return tlib#char#GetWithTimeout(timeout, resolution) let char = tlib#char#GetWithTimeout(timeout, resolution)
endif
if getmod
if char != -1
let mode = getcharmod()
endif
return [char, mode]
else
return char
endif endif
return -1
endf endf

View file

@ -3,8 +3,8 @@
" @Website: http://www.vim.org/account/profile.php?user_id=4037 " @Website: http://www.vim.org/account/profile.php?user_id=4037
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt) " @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
" @Created: 2007-08-23. " @Created: 2007-08-23.
" @Last Change: 2013-05-14. " @Last Change: 2014-02-05.
" @Revision: 0.0.46 " @Revision: 0.0.53
if &cp || exists("loaded_tlib_cmd_autoload") if &cp || exists("loaded_tlib_cmd_autoload")
finish finish
@ -58,10 +58,12 @@ endf
" call tlib#cmd#BrowseOutputWithCallback('tlib#cmd#ParseScriptname', 'scriptnames') " call tlib#cmd#BrowseOutputWithCallback('tlib#cmd#ParseScriptname', 'scriptnames')
function! tlib#cmd#BrowseOutputWithCallback(callback, command) "{{{3 function! tlib#cmd#BrowseOutputWithCallback(callback, command) "{{{3
let list = tlib#cmd#OutputAsList(a:command) let list = tlib#cmd#OutputAsList(a:command)
let cmd = tlib#input#List('s', 'Output of: '. a:command, list) let cmds = tlib#input#List('m', 'Output of: '. a:command, list)
if !empty(cmd) if !empty(cmds)
let Callback = function(a:callback) for cmd in cmds
call call(Callback, [cmd]) let Callback = function(a:callback)
call call(Callback, [cmd])
endfor
endif endif
endf endf
@ -70,8 +72,9 @@ function! tlib#cmd#DefaultBrowseOutput(cmd) "{{{3
endf endf
function! tlib#cmd#ParseScriptname(line) "{{{3 function! tlib#cmd#ParseScriptname(line) "{{{3
let parsedValue = substitute(a:line, '^.\{-}\/', '/', '') " let parsedValue = substitute(a:line, '^.\{-}\/', '/', '')
exe ':e '. parsedValue let parsedValue = matchstr(a:line, '^\s*\d\+:\s*\zs.*$')
exe 'drop '. fnameescape(parsedValue)
endf endf
" :def: function! tlib#cmd#UseVertical(?rx='') " :def: function! tlib#cmd#UseVertical(?rx='')

View file

@ -1,10 +1,7 @@
" input.vim
" @Author: Tom Link (micathom AT gmail com?subject=[vim]) " @Author: Tom Link (micathom AT gmail com?subject=[vim])
" @Website: http://www.vim.org/account/profile.php?user_id=4037 " @Website: http://www.vim.org/account/profile.php?user_id=4037
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt) " @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
" @Created: 2007-06-30. " @Revision: 1315
" @Last Change: 2013-09-30.
" @Revision: 0.0.1262
" :filedoc: " :filedoc:
@ -23,16 +20,15 @@ TLet g:tlib#input#livesearch_threshold = 1000
" Determine how |tlib#input#List()| and related functions work. " Determine how |tlib#input#List()| and related functions work.
" Can be "cnf", "cnfd", "cnfx", "seq", or "fuzzy". See: " Can be "glob", "cnf", "cnfd", "seq", or "fuzzy". See:
" cnfx ... Like cnfd but |g:tlib#Filter_cnfx#expander| is interpreted " glob ... Like cnf but "*" and "?" (see |g:tlib#Filter_glob#seq|,
" as a wildcard (this is the default method) " |g:tlib#Filter_glob#char|) are interpreted as glob-like
" - A plus character ("+") acts as a wildcard as if ".\{-}" (see " |wildcards| (this is the default method)
" |/\{-|) were entered.
" - Examples: " - Examples:
" - "f+o" matches "fo", "fxo", and "fxxxoo", but doesn't match " - "f*o" matches "fo", "fxo", and "fxxxoo", but doesn't match
" "far". " "far".
" - Otherwise it is a derivate of the cnf method (see below). " - Otherwise it is a derivate of the cnf method (see below).
" - See also |tlib#Filter_cnfx#New()|. " - See also |tlib#Filter_glob#New()|.
" cnfd ... Like cnf but "." is interpreted as a wildcard, i.e. it is " cnfd ... Like cnf but "." is interpreted as a wildcard, i.e. it is
" expanded to "\.\{-}" " expanded to "\.\{-}"
" - A period character (".") acts as a wildcard as if ".\{-}" (see " - A period character (".") acts as a wildcard as if ".\{-}" (see
@ -60,7 +56,7 @@ TLet g:tlib#input#livesearch_threshold = 1000
" - |tlib#Filter_seq#New()| " - |tlib#Filter_seq#New()|
" fuzzy .. Match fuzzy character sequences " fuzzy .. Match fuzzy character sequences
" - |tlib#Filter_fuzzy#New()| " - |tlib#Filter_fuzzy#New()|
TLet g:tlib#input#filter_mode = 'cnfx' TLet g:tlib#input#filter_mode = 'glob'
" The highlight group to use for showing matches in the input list " The highlight group to use for showing matches in the input list
@ -126,6 +122,8 @@ TLet g:tlib#input#numeric_chars = {
TLet g:tlib#input#keyagents_InputList_s = { TLet g:tlib#input#keyagents_InputList_s = {
\ "\<PageUp>": 'tlib#agent#PageUp', \ "\<PageUp>": 'tlib#agent#PageUp',
\ "\<PageDown>": 'tlib#agent#PageDown', \ "\<PageDown>": 'tlib#agent#PageDown',
\ "\<Home>": 'tlib#agent#Home',
\ "\<End>": 'tlib#agent#End',
\ "\<Up>": 'tlib#agent#Up', \ "\<Up>": 'tlib#agent#Up',
\ "\<Down>": 'tlib#agent#Down', \ "\<Down>": 'tlib#agent#Down',
\ "\<c-Up>": 'tlib#agent#UpN', \ "\<c-Up>": 'tlib#agent#UpN',
@ -140,7 +138,6 @@ TLet g:tlib#input#keyagents_InputList_s = {
\ 26: 'tlib#agent#Suspend', \ 26: 'tlib#agent#Suspend',
\ 250: 'tlib#agent#Suspend', \ 250: 'tlib#agent#Suspend',
\ 15: 'tlib#agent#SuspendToParentWindow', \ 15: 'tlib#agent#SuspendToParentWindow',
\ 63: 'tlib#agent#Help',
\ "\<F1>": 'tlib#agent#Help', \ "\<F1>": 'tlib#agent#Help',
\ "\<F10>": 'tlib#agent#ExecAgentByName', \ "\<F10>": 'tlib#agent#ExecAgentByName',
\ "\<S-Esc>": 'tlib#agent#ExecAgentByName', \ "\<S-Esc>": 'tlib#agent#ExecAgentByName',
@ -155,6 +152,7 @@ TLet g:tlib#input#keyagents_InputList_s = {
\ char2nr(g:tlib#input#or): 'tlib#agent#OR', \ char2nr(g:tlib#input#or): 'tlib#agent#OR',
\ char2nr(g:tlib#input#and): 'tlib#agent#AND', \ char2nr(g:tlib#input#and): 'tlib#agent#AND',
\ } \ }
" \ 63: 'tlib#agent#Help',
" :nodefault: " :nodefault:
@ -345,6 +343,16 @@ function! tlib#input#ListW(world, ...) "{{{3
try try
call s:RunStateHandlers(world) call s:RunStateHandlers(world)
" if exists('b:tlib_world_event')
" let event = b:tlib_world_event
" unlet! b:tlib_world_event
" if event == 'WinLeave'
" " let world.resume_state = world.state
" let world = tlib#agent#Suspend(world, world.rv)
" break
" endif
" endif
" let time02 = str2float(reltimestr(reltime())) " DBG " let time02 = str2float(reltimestr(reltime())) " DBG
" TLogVAR time02, time02 - time0 " TLogVAR time02, time02 - time0
if world.state =~ '\<reset\>' if world.state =~ '\<reset\>'
@ -443,14 +451,7 @@ function! tlib#input#ListW(world, ...) "{{{3
" TLogDBG 5 " TLogDBG 5
" TLogDBG len(world.list) " TLogDBG len(world.list)
" TLogVAR world.list " TLogVAR world.list
let dlist = copy(world.list) let dlist = world.DisplayFormat(world.list)
" TLogVAR world.display_format
if !empty(world.display_format)
let display_format = world.display_format
let cache = world.fmt_display
" TLogVAR display_format, fmt_entries
call map(dlist, 'world.FormatName(cache, display_format, v:val)')
endif
" TLogVAR world.prefidx " TLogVAR world.prefidx
" TLogDBG 6 " TLogDBG 6
" let time6 = str2float(reltimestr(reltime())) " DBG " let time6 = str2float(reltimestr(reltime())) " DBG
@ -545,20 +546,15 @@ function! tlib#input#ListW(world, ...) "{{{3
exec exec_cmd exec exec_cmd
endif endif
elseif has('gui_gtk') || has('gui_gtk2') elseif has('gui_gtk') || has('gui_gtk2')
let c = getchar() let c = s:GetModdedChar(world)
let cmod = getcharmod() " TLogVAR c
" TLogVAR c, cmod
if c !~ '\D' && c > 0 && cmod != 0
let c = printf("<%s-%s>", cmod, c)
endif
endif endif
else else
" TLogVAR world.timeout " TLogVAR world.timeout
let c = tlib#char#Get(world.timeout, world.timeout_resolution) let c = s:GetModdedChar(world)
" TLogVAR c, has_key(world.key_map[world.key_mode],c) " TLogVAR c, has_key(world.key_map[world.key_mode],c)
let cmod = getcharmod()
endif endif
" TLogVAR c, cmod " TLogVAR c
" TLogDBG string(sort(keys(world.key_map[world.key_mode]))) " TLogDBG string(sort(keys(world.key_map[world.key_mode])))
" TLogVAR world.next_agent, world.next_eval " TLogVAR world.next_agent, world.next_eval
@ -602,7 +598,7 @@ function! tlib#input#ListW(world, ...) "{{{3
" let world.offset = world.prefidx " let world.offset = world.prefidx
if empty(world.prefidx) if empty(world.prefidx)
" call feedkeys(c, 't') " call feedkeys(c, 't')
let c = tlib#char#Get(world.timeout) let c = s:GetModdedChar(world)
let world.state = 'help' let world.state = 'help'
continue continue
endif endif
@ -829,6 +825,16 @@ function! tlib#input#ListW(world, ...) "{{{3
endf endf
function! s:GetModdedChar(world) "{{{3
let [char, mode] = tlib#char#Get(a:world.timeout, a:world.timeout_resolution, 1)
if char !~ '\D' && char > 0 && mode != 0
return printf("<%s-%s>", mode, char)
else
return char
endif
endf
function! s:Init(world, cmd) "{{{3 function! s:Init(world, cmd) "{{{3
" TLogVAR a:cmd " TLogVAR a:cmd
let a:world.initial_display = 1 let a:world.initial_display = 1
@ -844,6 +850,9 @@ function! s:Init(world, cmd) "{{{3
else else
call a:world.Retrieve(1) call a:world.Retrieve(1)
endif endif
" if !empty(a:world.resume_state)
" let a:world.state = a:world.resume_state
" endif
elseif !a:world.initialized elseif !a:world.initialized
" TLogVAR a:world.initialized, a:world.win_wnr, a:world.bufnr " TLogVAR a:world.initialized, a:world.win_wnr, a:world.bufnr
let a:world.filetype = &filetype let a:world.filetype = &filetype

View file

@ -3,7 +3,7 @@
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt) " @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
" @Created: 2012-05-11. " @Created: 2012-05-11.
" @Last Change: 2012-05-11. " @Last Change: 2012-05-11.
" @Revision: 7 " @Revision: 9
" The directory for persistent data files. If empty, use " The directory for persistent data files. If empty, use
" |tlib#dir#MyRuntime|.'/share'. " |tlib#dir#MyRuntime|.'/share'.
@ -29,13 +29,8 @@ function! tlib#persistent#Filename(type, ...) "{{{3
return tlib#cache#Filename(a:type, file, mkdir, tlib#persistent#Dir()) return tlib#cache#Filename(a:type, file, mkdir, tlib#persistent#Dir())
endf endf
function! tlib#persistent#Get(cfile) "{{{3 function! tlib#persistent#Get(...) "{{{3
if !empty(a:cfile) && filereadable(a:cfile) return call('tlib#cache#Get', a:000)
let val = readfile(a:cfile, 'b')
return eval(join(val, "\n"))
else
return {}
endif
endf endf
function! tlib#persistent#Value(...) "{{{3 function! tlib#persistent#Value(...) "{{{3

View file

@ -4,7 +4,7 @@
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt) " @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
" @Created: 2007-09-30. " @Created: 2007-09-30.
" @Last Change: 2010-01-07. " @Last Change: 2010-01-07.
" @Revision: 0.0.66 " @Revision: 0.0.69
if &cp || exists("loaded_tlib_progressbar_autoload") if &cp || exists("loaded_tlib_progressbar_autoload")
finish finish
@ -57,6 +57,7 @@ function! tlib#progressbar#Display(value, ...) "{{{3
let pbr = repeat('.', s:width[0] - val) let pbr = repeat('.', s:width[0] - val)
let txt = printf(s:format[0], '['.pbl.pbr.']') . extra let txt = printf(s:format[0], '['.pbl.pbr.']') . extra
let &l:statusline = txt let &l:statusline = txt
" TLogDBG txt
redrawstatus redrawstatus
" redraw " redraw
" call tlib#notify#Echo(txt) " call tlib#notify#Echo(txt)

View file

@ -3,8 +3,8 @@
" @Website: http://www.vim.org/account/profile.php?user_id=4037 " @Website: http://www.vim.org/account/profile.php?user_id=4037
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt) " @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
" @Created: 2007-07-18. " @Created: 2007-07-18.
" @Last Change: 2013-11-11. " @Last Change: 2014-02-06.
" @Revision: 0.0.251 " @Revision: 0.0.252
if &cp || exists("loaded_tlib_scratch_autoload") if &cp || exists("loaded_tlib_scratch_autoload")
finish finish
@ -100,6 +100,8 @@ function! tlib#scratch#UseScratch(...) "{{{3
endif endif
endif endif
let keyargs.scratch = bufnr('%') let keyargs.scratch = bufnr('%')
let keyargs.scratch_tabpagenr = tabpagenr()
let keyargs.scratch_winnr = winnr()
" TLogVAR 2, winnr(), bufnr('%'), bufname("%"), keyargs.scratch " TLogVAR 2, winnr(), bufnr('%'), bufname("%"), keyargs.scratch
return keyargs.scratch return keyargs.scratch
endf endf

View file

@ -3,8 +3,8 @@
" @Website: http://www.vim.org/account/profile.php?user_id=4037 " @Website: http://www.vim.org/account/profile.php?user_id=4037
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt) " @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
" @Created: 2007-08-27. " @Created: 2007-08-27.
" @Last Change: 2009-02-15. " @Last Change: 2014-02-06.
" @Revision: 0.0.29 " @Revision: 0.0.30
if &cp || exists("loaded_tlib_tab_autoload") if &cp || exists("loaded_tlib_tab_autoload")
finish finish
@ -50,6 +50,8 @@ endf
function! tlib#tab#Set(tabnr) "{{{3 function! tlib#tab#Set(tabnr) "{{{3
exec a:tabnr .'tabnext' if a:tabnr > 0
exec a:tabnr .'tabnext'
endif
endf endf

View file

@ -4,7 +4,7 @@
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt) " @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
" @Created: 2010-07-19. " @Created: 2010-07-19.
" @Last Change: 2012-06-08. " @Last Change: 2012-06-08.
" @Revision: 35 " @Revision: 37
let s:restoreframecmd = '' let s:restoreframecmd = ''
@ -120,3 +120,33 @@ function! s:RestoreFrameParams() "{{{3
endif endif
endf endf
" :display: tlib#vim##CopyFunction(old, new, overwrite=0)
function! tlib#vim#CopyFunction(old, new, ...) "{{{3
let overwrite = a:0 >= 1 ? a:1 : 0
redir => oldfn
exec 'silent function' a:old
redir END
if exists('*'. a:new)
if overwrite > 0
exec 'delfunction' a:new
elseif overwrite < 0
throw 'tlib#vim##CopyFunction: Function already exists: '. a:old .' -> '. a:new
else
return
endif
endif
let fn = split(oldfn, '\n')
let fn = map(fn, 'substitute(v:val, ''^\d\+'', "", "")')
let fn[0] = substitute(fn[0], '\V\^\s\*fu\%[nction]!\?\s\+\zs'. a:old, a:new, '')
let t = @t
try
let @t = join(fn, "\n")
redir => out
@t
redir END
finally
let @t = t
endtry
endf

View file

@ -38,6 +38,13 @@ Contents~
:TBrowseOutput ......................... |:TBrowseOutput| :TBrowseOutput ......................... |:TBrowseOutput|
:TBrowseScriptnames .................... |:TBrowseScriptnames| :TBrowseScriptnames .................... |:TBrowseScriptnames|
:TTimeCommand .......................... |:TTimeCommand| :TTimeCommand .......................... |:TTimeCommand|
Add .................................... |Add()|
TestGetArg ............................. |TestGetArg()|
TestGetArg1 ............................ |TestGetArg1()|
TestArgs ............................... |TestArgs()|
TestArgs1 .............................. |TestArgs1()|
TestArgs2 .............................. |TestArgs2()|
TestArgs3 .............................. |TestArgs3()|
g:tlib#debug ........................... |g:tlib#debug| g:tlib#debug ........................... |g:tlib#debug|
tlib#notify#Echo ....................... |tlib#notify#Echo()| tlib#notify#Echo ....................... |tlib#notify#Echo()|
tlib#notify#TrimMessage ................ |tlib#notify#TrimMessage()| tlib#notify#TrimMessage ................ |tlib#notify#TrimMessage()|
@ -53,6 +60,7 @@ Contents~
tlib#vim#Maximize ...................... |tlib#vim#Maximize()| tlib#vim#Maximize ...................... |tlib#vim#Maximize()|
tlib#vim#RestoreWindow ................. |tlib#vim#RestoreWindow()| tlib#vim#RestoreWindow ................. |tlib#vim#RestoreWindow()|
g:tlib#vim#use_wmctrl .................. |g:tlib#vim#use_wmctrl| g:tlib#vim#use_wmctrl .................. |g:tlib#vim#use_wmctrl|
tlib#vim#CopyFunction .................. |tlib#vim#CopyFunction()|
tlib#progressbar#Init .................. |tlib#progressbar#Init()| tlib#progressbar#Init .................. |tlib#progressbar#Init()|
tlib#progressbar#Display ............... |tlib#progressbar#Display()| tlib#progressbar#Display ............... |tlib#progressbar#Display()|
tlib#progressbar#Restore ............... |tlib#progressbar#Restore()| tlib#progressbar#Restore ............... |tlib#progressbar#Restore()|
@ -89,6 +97,9 @@ Contents~
tlib#char#Get .......................... |tlib#char#Get()| tlib#char#Get .......................... |tlib#char#Get()|
tlib#char#IsAvailable .................. |tlib#char#IsAvailable()| tlib#char#IsAvailable .................. |tlib#char#IsAvailable()|
tlib#char#GetWithTimeout ............... |tlib#char#GetWithTimeout()| tlib#char#GetWithTimeout ............... |tlib#char#GetWithTimeout()|
g:tlib#Filter_glob#seq ................. |g:tlib#Filter_glob#seq|
g:tlib#Filter_glob#char ................ |g:tlib#Filter_glob#char|
tlib#Filter_glob#New ................... |tlib#Filter_glob#New()|
g:tlib_scratch_pos ..................... |g:tlib_scratch_pos| g:tlib_scratch_pos ..................... |g:tlib_scratch_pos|
g:tlib#scratch#hidden .................. |g:tlib#scratch#hidden| g:tlib#scratch#hidden .................. |g:tlib#scratch#hidden|
tlib#scratch#UseScratch ................ |tlib#scratch#UseScratch()| tlib#scratch#UseScratch ................ |tlib#scratch#UseScratch()|
@ -124,6 +135,8 @@ Contents~
tlib#agent#CopyItems ................... |tlib#agent#CopyItems()| tlib#agent#CopyItems ................... |tlib#agent#CopyItems()|
tlib#agent#PageUp ...................... |tlib#agent#PageUp()| tlib#agent#PageUp ...................... |tlib#agent#PageUp()|
tlib#agent#PageDown .................... |tlib#agent#PageDown()| tlib#agent#PageDown .................... |tlib#agent#PageDown()|
tlib#agent#Home ........................ |tlib#agent#Home()|
tlib#agent#End ......................... |tlib#agent#End()|
tlib#agent#Up .......................... |tlib#agent#Up()| tlib#agent#Up .......................... |tlib#agent#Up()|
tlib#agent#Down ........................ |tlib#agent#Down()| tlib#agent#Down ........................ |tlib#agent#Down()|
tlib#agent#UpN ......................... |tlib#agent#UpN()| tlib#agent#UpN ......................... |tlib#agent#UpN()|
@ -178,8 +191,6 @@ Contents~
tlib#bitwise#ShiftLeft ................. |tlib#bitwise#ShiftLeft()| tlib#bitwise#ShiftLeft ................. |tlib#bitwise#ShiftLeft()|
tlib#bitwise#Add ....................... |tlib#bitwise#Add()| tlib#bitwise#Add ....................... |tlib#bitwise#Add()|
tlib#bitwise#Sub ....................... |tlib#bitwise#Sub()| tlib#bitwise#Sub ....................... |tlib#bitwise#Sub()|
g:tlib#Filter_cnfx#expander ............ |g:tlib#Filter_cnfx#expander|
tlib#Filter_cnfx#New ................... |tlib#Filter_cnfx#New()|
tlib#url#Decode ........................ |tlib#url#Decode()| tlib#url#Decode ........................ |tlib#url#Decode()|
tlib#url#DecodeChar .................... |tlib#url#DecodeChar()| tlib#url#DecodeChar .................... |tlib#url#DecodeChar()|
tlib#url#EncodeChar .................... |tlib#url#EncodeChar()| tlib#url#EncodeChar .................... |tlib#url#EncodeChar()|
@ -235,6 +246,7 @@ Contents~
g:tlib_inputlist_shortmessage .......... |g:tlib_inputlist_shortmessage| g:tlib_inputlist_shortmessage .......... |g:tlib_inputlist_shortmessage|
tlib#World#New ......................... |tlib#World#New()| tlib#World#New ......................... |tlib#World#New()|
prototype.PrintLines prototype.PrintLines
prototype.Suspend
tlib#tab#BufMap ........................ |tlib#tab#BufMap()| tlib#tab#BufMap ........................ |tlib#tab#BufMap()|
tlib#tab#TabWinNr ...................... |tlib#tab#TabWinNr()| tlib#tab#TabWinNr ...................... |tlib#tab#TabWinNr()|
tlib#tab#Set ........................... |tlib#tab#Set()| tlib#tab#Set ........................... |tlib#tab#Set()|
@ -409,6 +421,33 @@ plugin/02tlib.vim~
Time the execution time of CMD. Time the execution time of CMD.
========================================================================
test/tlib.vim~
*Add()*
Add(a,b)
List
*TestGetArg()*
TestGetArg(...)
Optional arguments
*TestGetArg1()*
TestGetArg1(...)
*TestArgs()*
TestArgs(...)
*TestArgs1()*
TestArgs1(...)
*TestArgs2()*
TestArgs2(...)
*TestArgs3()*
TestArgs3(...)
======================================================================== ========================================================================
autoload/tlib.vim~ autoload/tlib.vim~
@ -451,7 +490,7 @@ tlib#persistent#Dir(?mode = 'bg')
tlib#persistent#Filename(type, ?file=%, ?mkdir=0) tlib#persistent#Filename(type, ?file=%, ?mkdir=0)
*tlib#persistent#Get()* *tlib#persistent#Get()*
tlib#persistent#Get(cfile) tlib#persistent#Get(...)
*tlib#persistent#Value()* *tlib#persistent#Value()*
tlib#persistent#Value(...) tlib#persistent#Value(...)
@ -500,6 +539,9 @@ g:tlib#vim#use_wmctrl (default: executable('wmctrl'))
default method of setting 'lines' and 'columns' to a large default method of setting 'lines' and 'columns' to a large
value. value.
*tlib#vim#CopyFunction()*
tlib#vim##CopyFunction(old, new, overwrite=0)
======================================================================== ========================================================================
autoload/tlib/progressbar.vim~ autoload/tlib/progressbar.vim~
@ -731,6 +773,25 @@ tlib#char#IsAvailable()
tlib#char#GetWithTimeout(timeout, ...) tlib#char#GetWithTimeout(timeout, ...)
========================================================================
autoload/tlib/Filter_glob.vim~
*g:tlib#Filter_glob#seq*
g:tlib#Filter_glob#seq (default: '*')
A character that should be expanded to '\.\{-}'.
*g:tlib#Filter_glob#char*
g:tlib#Filter_glob#char (default: '?')
A character that should be expanded to '\.\?'.
*tlib#Filter_glob#New()*
tlib#Filter_glob#New(...)
The same as |tlib#Filter_cnf#New()| but a a customizable character
|see tlib#Filter_glob#seq| is expanded to '\.\{-}' and
|g:tlib#Filter_glob#char| is expanded to '\.'.
The pattern is a '/\V' very no-'/magic' regexp pattern.
======================================================================== ========================================================================
autoload/tlib/scratch.vim~ autoload/tlib/scratch.vim~
@ -829,7 +890,7 @@ tlib#cache#Filename(type, ?file=%, ?mkdir=0, ?dir='')
tlib#cache#Save(cfile, dictionary) tlib#cache#Save(cfile, dictionary)
*tlib#cache#Get()* *tlib#cache#Get()*
tlib#cache#Get(cfile) tlib#cache#Get(cfile, ...)
*tlib#cache#Value()* *tlib#cache#Value()*
tlib#cache#Value(cfile, generator, ftime, ...) tlib#cache#Value(cfile, generator, ftime, ...)
@ -939,6 +1000,12 @@ tlib#agent#PageUp(world, selected)
*tlib#agent#PageDown()* *tlib#agent#PageDown()*
tlib#agent#PageDown(world, selected) tlib#agent#PageDown(world, selected)
*tlib#agent#Home()*
tlib#agent#Home(world, selected)
*tlib#agent#End()*
tlib#agent#End(world, selected)
*tlib#agent#Up()* *tlib#agent#Up()*
tlib#agent#Up(world, selected, ...) tlib#agent#Up(world, selected, ...)
@ -1116,20 +1183,6 @@ tlib#bitwise#Add(num1, num2, ...)
tlib#bitwise#Sub(num1, num2, ...) tlib#bitwise#Sub(num1, num2, ...)
========================================================================
autoload/tlib/Filter_cnfx.vim~
*g:tlib#Filter_cnfx#expander*
g:tlib#Filter_cnfx#expander (default: '+')
A character that should be expanded to '\.\{-}'.
*tlib#Filter_cnfx#New()*
tlib#Filter_cnfx#New(...)
The same as |tlib#Filter_cnfd#New()| but a a customizable character
|see tlib#Filter_cnfx#expander| is expanded to '\.\{-}'.
The pattern is a '/\V' very no-'/magic' regexp pattern.
======================================================================== ========================================================================
autoload/tlib/url.vim~ autoload/tlib/url.vim~
@ -1274,18 +1327,17 @@ g:tlib#input#livesearch_threshold (default: 1000)
filter. This is useful on slower machines or with very long lists. filter. This is useful on slower machines or with very long lists.
*g:tlib#input#filter_mode* *g:tlib#input#filter_mode*
g:tlib#input#filter_mode (default: 'cnfx') g:tlib#input#filter_mode (default: 'glob')
Determine how |tlib#input#List()| and related functions work. Determine how |tlib#input#List()| and related functions work.
Can be "cnf", "cnfd", "cnfx", "seq", or "fuzzy". See: Can be "glob", "cnf", "cnfd", "seq", or "fuzzy". See:
cnfx ... Like cnfd but |g:tlib#Filter_cnfx#expander| is interpreted glob ... Like cnf but "*" and "?" (see |g:tlib#Filter_glob#seq|,
as a wildcard (this is the default method) |g:tlib#Filter_glob#char|) are interpreted as glob-like
- A plus character ("+") acts as a wildcard as if ".\{-}" (see |wildcards| (this is the default method)
|/\{-|) were entered.
- Examples: - Examples:
- "f+o" matches "fo", "fxo", and "fxxxoo", but doesn't match - "f*o" matches "fo", "fxo", and "fxxxoo", but doesn't match
"far". "far".
- Otherwise it is a derivate of the cnf method (see below). - Otherwise it is a derivate of the cnf method (see below).
- See also |tlib#Filter_cnfx#New()|. - See also |tlib#Filter_glob#New()|.
cnfd ... Like cnf but "." is interpreted as a wildcard, i.e. it is cnfd ... Like cnf but "." is interpreted as a wildcard, i.e. it is
expanded to "\.\{-}" expanded to "\.\{-}"
- A period character (".") acts as a wildcard as if ".\{-}" (see - A period character (".") acts as a wildcard as if ".\{-}" (see
@ -1568,6 +1620,8 @@ tlib#World#New(...)
prototype.PrintLines prototype.PrintLines
prototype.Suspend
======================================================================== ========================================================================
autoload/tlib/tab.vim~ autoload/tlib/tab.vim~

View file

@ -4,7 +4,7 @@
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt) " @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
" @Created: 2007-04-10. " @Created: 2007-04-10.
" @Last Change: 2013-09-25. " @Last Change: 2013-09-25.
" @Revision: 748 " @Revision: 749
" GetLatestVimScripts: 1863 1 tlib.vim " GetLatestVimScripts: 1863 1 tlib.vim
if &cp || exists("loaded_tlib") if &cp || exists("loaded_tlib")
@ -14,7 +14,7 @@ if v:version < 700 "{{{2
echoerr "tlib requires Vim >= 7" echoerr "tlib requires Vim >= 7"
finish finish
endif endif
let loaded_tlib = 107 let loaded_tlib = 108
let s:save_cpo = &cpo let s:save_cpo = &cpo
set cpo&vim set cpo&vim

View file

@ -19,6 +19,7 @@ function! airline#extensions#tabline#unique_tail_improved#format(bufnr, buffers)
let tokens = reverse(split(substitute(fnamemodify(name, ':p:.:h'), '\\', '/', 'g'), '/')) let tokens = reverse(split(substitute(fnamemodify(name, ':p:.:h'), '\\', '/', 'g'), '/'))
let token_index = 0 let token_index = 0
for token in tokens for token in tokens
if token == '' | continue | endif
if token == '.' | break | endif if token == '.' | break | endif
if !has_key(path_tokens, token_index) if !has_key(path_tokens, token_index)
let path_tokens[token_index] = {} let path_tokens[token_index] = {}

View file

@ -36,19 +36,17 @@ function! airline#extensions#whitespace#check()
let mixed = 0 let mixed = 0
if index(checks, 'indent') > -1 if index(checks, 'indent') > -1
let indents = [search('^ \{2,}', 'nb'), search('^ \{2,}', 'n'), search('^\t', 'nb'), search('^\t', 'n')] let mixed = search('\v(^\t+ +)|(^ +\t+)', 'nw')
let mixed = indents[0] != 0 && indents[1] != 0 && indents[2] != 0 && indents[3] != 0
endif endif
if trailing != 0 || mixed if trailing != 0 || mixed != 0
let b:airline_whitespace_check = s:symbol let b:airline_whitespace_check = s:symbol
if s:show_message if s:show_message
if trailing != 0 if trailing != 0
let b:airline_whitespace_check .= (g:airline_symbols.space).printf(s:trailing_format, trailing) let b:airline_whitespace_check .= (g:airline_symbols.space).printf(s:trailing_format, trailing)
endif endif
if mixed if mixed != 0
let mixnr = indents[0] == indents[1] ? indents[0] : indents[2] let b:airline_whitespace_check .= (g:airline_symbols.space).printf(s:mixed_indent_format, mixed)
let b:airline_whitespace_check .= (g:airline_symbols.space).printf(s:mixed_indent_format, mixnr)
endif endif
endif endif
endif endif

View file

@ -0,0 +1 @@
See the [contribution guidelines for pathogen.vim](https://github.com/tpope/vim-pathogen/blob/master/CONTRIBUTING.markdown).

View file

@ -1,5 +1,4 @@
commentary.vim # commentary.vim
==============
Comment stuff out. Use `gcc` to comment out a line (takes a count), Comment stuff out. Use `gcc` to comment out a line (takes a count),
`gc` to comment out the target of a motion (for example, `gcap` to `gc` to comment out the target of a motion (for example, `gcap` to
@ -15,10 +14,9 @@ minimalism, it weighs in at under 100 lines of code.
Oh, and it uncomments, too. The above maps actually toggle, and `gcu` Oh, and it uncomments, too. The above maps actually toggle, and `gcu`
uncomments a set of adjacent commented lines. Install uncomments a set of adjacent commented lines. Install
[repeat.vim](https://github.com/tpope/vim-repeat) to enable [repeat.vim](https://github.com/tpope/vim-repeat) to enable
repeating `gcu` with `.` (the other maps are repeatable without it). repeating `gcu` with `.`. (The other maps are repeatable without it.)
Installation ## Installation
------------
If you don't have a preferred installation method, I recommend If you don't have a preferred installation method, I recommend
installing [pathogen.vim](https://github.com/tpope/vim-pathogen), and installing [pathogen.vim](https://github.com/tpope/vim-pathogen), and
@ -30,8 +28,7 @@ then simply copy and paste:
Once help tags have been generated, you can view the manual with Once help tags have been generated, you can view the manual with
`:help commentary`. `:help commentary`.
FAQ ## FAQ
---
> My favorite file type isn't supported! > My favorite file type isn't supported!
@ -39,14 +36,7 @@ Relax! You just have to adjust `'commentstring'`:
autocmd FileType apache set commentstring=#\ %s autocmd FileType apache set commentstring=#\ %s
Contributing ## Self-Promotion
------------
See the contribution guidelines for
[pathogen.vim](https://github.com/tpope/vim-pathogen#readme).
Self-Promotion
--------------
Like commentary.vim? Follow the repository on Like commentary.vim? Follow the repository on
[GitHub](https://github.com/tpope/vim-commentary) and vote for it on [GitHub](https://github.com/tpope/vim-commentary) and vote for it on
@ -55,8 +45,7 @@ you're feeling especially charitable, follow [tpope](http://tpo.pe/) on
[Twitter](http://twitter.com/tpope) and [Twitter](http://twitter.com/tpope) and
[GitHub](https://github.com/tpope). [GitHub](https://github.com/tpope).
License ## License
-------
Copyright (c) Tim Pope. Distributed under the same terms as Vim itself. Copyright (c) Tim Pope. Distributed under the same terms as Vim itself.
See `:help license`. See `:help license`.

View file

@ -4,7 +4,7 @@ Author: Tim Pope <http://tpo.pe/>
License: Same terms as Vim itself (see |license|) License: Same terms as Vim itself (see |license|)
Comment stuff out. Then uncomment it later. Relies on 'commentstring' to be Comment stuff out. Then uncomment it later. Relies on 'commentstring' to be
correctly set. correctly set, or uses b:commentary_format if it is set.
The gc mappings are preferred, while the \\ mappings are provided for The gc mappings are preferred, while the \\ mappings are provided for
backwards compatibility. backwards compatibility.
@ -25,4 +25,7 @@ gcc Comment or uncomment [count] lines.
gcu Uncomment the current and adjacent commented lines. gcu Uncomment the current and adjacent commented lines.
\\u \\u
The |User| CommentaryPost autocommand fires after a successful operation and
can be used for advanced customization.
vim:tw=78:et:ft=help:norl: vim:tw=78:et:ft=help:norl:

View file

@ -1,6 +1,6 @@
" commentary.vim - Comment stuff out " commentary.vim - Comment stuff out
" Maintainer: Tim Pope <http://tpo.pe/> " Maintainer: Tim Pope <http://tpo.pe/>
" Version: 1.1 " Version: 1.2
" GetLatestVimScripts: 3695 1 :AutoInstall: commentary.vim " GetLatestVimScripts: 3695 1 :AutoInstall: commentary.vim
if exists("g:loaded_commentary") || &cp || v:version < 700 if exists("g:loaded_commentary") || &cp || v:version < 700
@ -8,6 +8,12 @@ if exists("g:loaded_commentary") || &cp || v:version < 700
endif endif
let g:loaded_commentary = 1 let g:loaded_commentary = 1
function! s:surroundings() abort
return split(substitute(substitute(
\ get(b:, 'commentary_format', &commentstring)
\ ,'\S\zs%s',' %s','') ,'%s\ze\S', '%s ', ''), '%s', 1)
endfunction
function! s:go(type,...) abort function! s:go(type,...) abort
if a:0 if a:0
let [lnum1, lnum2] = [a:type, a:1] let [lnum1, lnum2] = [a:type, a:1]
@ -15,7 +21,7 @@ function! s:go(type,...) abort
let [lnum1, lnum2] = [line("'["), line("']")] let [lnum1, lnum2] = [line("'["), line("']")]
endif endif
let [l, r] = split(substitute(substitute(&commentstring,'\S\zs%s',' %s',''),'%s\ze\S','%s ',''),'%s',1) 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\@<!')
@ -38,10 +44,11 @@ function! s:go(type,...) abort
endif endif
call setline(lnum,line) call setline(lnum,line)
endfor endfor
silent doautocmd User CommentaryPost
endfunction endfunction
function! s:undo() function! s:undo() abort
let [l, r] = split(substitute(substitute(&commentstring,'\S\zs%s',' %s',''),'%s\ze\S','%s ',''),'%s',1) let [l, r] = s:surroundings()
let lnums = [line('.')+1, line('.')-2] let lnums = [line('.')+1, line('.')-2]
for [index, dir, bound, line] in [[0, -1, 1, ''], [1, 1, line('$'), '']] for [index, dir, bound, line] in [[0, -1, 1, ''], [1, 1, line('$'), '']]
while lnums[index] != bound && line ==# '' || !(stridx(line,l) || line[strlen(line)-strlen(r) : -1] != r) while lnums[index] != bound && line ==# '' || !(stridx(line,l) || line[strlen(line)-strlen(r) : -1] != r)
@ -65,7 +72,7 @@ if !hasmapto('<Plug>Commentary') || maparg('gc','n') ==# ''
nmap gcu <Plug>CommentaryUndo nmap gcu <Plug>CommentaryUndo
endif endif
if maparg('\\','n') ==# '' && maparg('\','n') ==# '' if maparg('\\','n') ==# '' && maparg('\','n') ==# '' && get(g:, 'commentary_map_backslash', 1)
xmap \\ <Plug>Commentary xmap \\ <Plug>Commentary
nmap \\ <Plug>Commentary nmap \\ <Plug>Commentary
nmap \\\ <Plug>CommentaryLine nmap \\\ <Plug>CommentaryLine

View file

@ -3,13 +3,13 @@ and removing other plugins. The sad truth about VimScript is that it is
fraught with incompatibilities waiting to happen. I'm happy to work around fraught with incompatibilities waiting to happen. I'm happy to work around
them where I can, but it's up to you to isolate the conflict. them where I can, but it's up to you to isolate the conflict.
If your [commit message sucks](http://stopwritingramblingcommitmessages.com/), Fugitive is particularly prone to regressions due to Git version issues,
I'm not going to accept your pull request. I've explained very politely platform issues, and interactions with other plugins. I end up bisecting a
dozens of times that lot more than other projects, and thus I'm especially meticulous here about
[my general guidelines](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) maintaining a clean, readable, history. Squash and force push any requested
are absolute rules on my own repositories, so I may lack the energy to explain changes to a pull request. And if your [commit message
it to you yet another time. And please, if I ask you to change something, sucks](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html),
`git commit --amend`. I'm not going to accept it. Period.
Beyond that, don't be shy about asking before patching. What takes you hours Beyond that, don't be shy about asking before patching. What takes you hours
might take me minutes simply because I have both domain knowledge and a might take me minutes simply because I have both domain knowledge and a

View file

@ -139,6 +139,9 @@ function! fugitive#extract_git_dir(path) abort
if index(split($GIT_CEILING_DIRECTORIES, ':'), root) >= 0 if index(split($GIT_CEILING_DIRECTORIES, ':'), root) >= 0
break break
endif endif
if root ==# $GIT_WORK_TREE && fugitive#is_git_dir($GIT_DIR)
return $GIT_DIR
endif
let dir = s:sub(root, '[\/]$', '') . '/.git' let dir = s:sub(root, '[\/]$', '') . '/.git'
let type = getftype(dir) let type = getftype(dir)
if type ==# 'dir' && fugitive#is_git_dir(dir) if type ==# 'dir' && fugitive#is_git_dir(dir)
@ -736,14 +739,16 @@ function! s:stage_info(lnum) abort
endwhile endwhile
if !lnum if !lnum
return ['', ''] return ['', '']
elseif getline(lnum+1) =~# '^# .*\<git \%(reset\|rm --cached\) ' || getline(lnum) ==# '# Changes to be committed:' elseif (getline(lnum+1) =~# '^# .*\<git \%(reset\|rm --cached\) ' && getline(lnum+2) ==# '#') || getline(lnum) ==# '# Changes to be committed:'
return [matchstr(filename, colon.' *\zs.*'), 'staged'] return [matchstr(filename, colon.' *\zs.*'), 'staged']
elseif (getline(lnum+1) =~# '^# .*\<git add ' && getline(lnum+2) ==# '#') || getline(lnum) ==# '# Untracked files:'
return [filename, 'untracked']
elseif getline(lnum+2) =~# '^# .*\<git checkout ' || getline(lnum) ==# '# Changes not staged for commit:' elseif getline(lnum+2) =~# '^# .*\<git checkout ' || getline(lnum) ==# '# Changes not staged for commit:'
return [matchstr(filename, colon.' *\zs.*'), 'unstaged'] return [matchstr(filename, colon.' *\zs.*'), 'unstaged']
elseif getline(lnum+1) =~# '^# .*\<git add/rm ' || getline(lnum) ==# '# Unmerged paths:' elseif getline(lnum+2) =~# '^# .*\<git \%(add\|rm\)' || getline(lnum) ==# '# Unmerged paths:'
return [matchstr(filename, colon.' *\zs.*'), 'unmerged'] return [matchstr(filename, colon.' *\zs.*'), 'unmerged']
else else
return [filename, 'untracked'] return ['', 'unknown']
endif endif
endfunction endfunction
@ -1142,7 +1147,8 @@ function! s:Edit(cmd,bang,...) abort
endif endif
if a:bang if a:bang
let args = s:gsub(join(a:000, ' '), '\\@<!%(\\\\)*\zs[%#]', '\=s:buffer().expand(submatch(0))') let arglist = map(copy(a:000), 's:gsub(v:val, ''\\@<!%(\\\\)*\zs[%#]'', ''\=s:buffer().expand(submatch(0))'')')
let args = join(arglist, ' ')
if a:cmd =~# 'read' if a:cmd =~# 'read'
let git = buffer.repo().git_command() let git = buffer.repo().git_command()
let last = line('$') let last = line('$')
@ -1155,7 +1161,7 @@ function! s:Edit(cmd,bang,...) abort
return 'redraw|echo '.string(':!'.git.' '.args) return 'redraw|echo '.string(':!'.git.' '.args)
else else
let temp = resolve(tempname()) let temp = resolve(tempname())
let s:temp_files[temp] = buffer.repo().dir() let s:temp_files[temp] = { 'dir': buffer.repo().dir(), 'args': arglist }
silent execute a:cmd.' '.temp silent execute a:cmd.' '.temp
if a:cmd =~# 'pedit' if a:cmd =~# 'pedit'
wincmd P wincmd P
@ -1630,7 +1636,8 @@ function! s:Blame(bang,line1,line2,count,args) abort
else else
let cmd += ['--contents', '-'] let cmd += ['--contents', '-']
endif endif
let basecmd = escape(call(s:repo().git_command,cmd+['--',s:buffer().path()],s:repo()),'!') let cmd += ['--', s:buffer().path()]
let basecmd = escape(call(s:repo().git_command,cmd,s:repo()),'!')
try try
let cd = exists('*haslocaldir') && haslocaldir() ? 'lcd ' : 'cd ' let cd = exists('*haslocaldir') && haslocaldir() ? 'lcd ' : 'cd '
if !s:repo().bare() if !s:repo().bare()
@ -1671,7 +1678,7 @@ function! s:Blame(bang,line1,line2,count,args) abort
setlocal scrollbind nowrap nofoldenable setlocal scrollbind nowrap nofoldenable
let top = line('w0') + &scrolloff let top = line('w0') + &scrolloff
let current = line('.') let current = line('.')
let s:temp_files[temp] = s:repo().dir() let s:temp_files[temp] = { 'dir': s:repo().dir(), 'args': cmd }
exe 'keepalt leftabove vsplit '.temp exe 'keepalt leftabove vsplit '.temp
let b:fugitive_blamed_bufnr = bufnr let b:fugitive_blamed_bufnr = bufnr
let w:fugitive_leave = restore let w:fugitive_leave = restore
@ -2309,8 +2316,9 @@ augroup fugitive_temp
autocmd! autocmd!
autocmd BufNewFile,BufReadPost * autocmd BufNewFile,BufReadPost *
\ if has_key(s:temp_files,expand('<afile>:p')) | \ if has_key(s:temp_files,expand('<afile>:p')) |
\ let b:git_dir = s:temp_files[expand('<afile>:p')] | \ let b:git_dir = s:temp_files[expand('<afile>:p')].dir |
\ let b:git_type = 'temp' | \ let b:git_type = 'temp' |
\ let b:git_args = s:temp_files[expand('<afile>:p')].args |
\ call fugitive#detect(expand('<afile>:p')) | \ call fugitive#detect(expand('<afile>:p')) |
\ setlocal bufhidden=delete | \ setlocal bufhidden=delete |
\ nnoremap <buffer> <silent> q :<C-U>bdelete<CR>| \ nnoremap <buffer> <silent> q :<C-U>bdelete<CR>|

View file

@ -0,0 +1,103 @@
" Copyright 2011 The Go Authors. All rights reserved.
" Use of this source code is governed by a BSD-style
" license that can be found in the LICENSE file.
"
" This file provides a utility function that performs auto-completion of
" package names, for use by other commands.
let s:goos = $GOOS
let s:goarch = $GOARCH
if len(s:goos) == 0
if exists('g:golang_goos')
let s:goos = g:golang_goos
elseif has('win32') || has('win64')
let s:goos = 'windows'
elseif has('macunix')
let s:goos = 'darwin'
else
let s:goos = '*'
endif
endif
if len(s:goarch) == 0
if exists('g:golang_goarch')
let s:goarch = g:golang_goarch
else
let s:goarch = '*'
endif
endif
function! go#complete#PackageMembers(package, member)
silent! let content = system('godoc ' . a:package)
if v:shell_error || !len(content)
return []
endif
let lines = filter(split(content, "\n"),"v:val !~ '^\\s\\+$'")
try
let mx1 = '^\s\+\(\S+\)\s\+=\s\+.*'
let mx2 = '^\%(const\|var\|type\|func\) \([A-Z][^ (]\+\).*'
let candidates =
\ map(filter(copy(lines), 'v:val =~ mx1'), 'substitute(v:val, mx1, "\\1", "")')
\ + map(filter(copy(lines), 'v:val =~ mx2'), 'substitute(v:val, mx2, "\\1", "")')
return filter(candidates, '!stridx(v:val, a:member)')
catch
return []
endtry
endfunction
function! go#complete#Package(ArgLead, CmdLine, CursorPos)
let dirs = []
let words = split(a:CmdLine, '\s\+', 1)
if len(words) > 2
" Complete package members
return go#complete#PackageMembers(words[1], words[2])
endif
if executable('go')
let goroot = substitute(system('go env GOROOT'), '\n', '', 'g')
if v:shell_error
echomsg '\'go env GOROOT\' failed'
endif
else
let goroot = $GOROOT
endif
if len(goroot) != 0 && isdirectory(goroot)
let dirs += [goroot]
endif
let pathsep = ':'
if s:goos == 'windows'
let pathsep = ';'
endif
let workspaces = split($GOPATH, pathsep)
if workspaces != []
let dirs += workspaces
endif
if len(dirs) == 0
" should not happen
return []
endif
let ret = {}
for dir in dirs
" this may expand to multiple lines
let root = split(expand(dir . '/pkg/' . s:goos . '_' . s:goarch), "\n")
call add(root, expand(dir . '/src'))
for r in root
for i in split(globpath(r, a:ArgLead.'*'), "\n")
if isdirectory(i)
let i .= '/'
elseif i !~ '\.a$'
continue
endif
let i = substitute(substitute(i[len(r)+1:], '[\\]', '/', 'g'), '\.a$', '', 'g')
let ret[i] = i
endfor
endfor
endfor
return sort(keys(ret))
endfunction

View file

@ -0,0 +1,30 @@
" Copyright 2013 The Go Authors. All rights reserved.
" Use of this source code is governed by a BSD-style
" license that can be found in the LICENSE file.
"
" compiler/go.vim: Vim compiler file for Go.
if exists("current_compiler")
finish
endif
let current_compiler = "go"
if exists(":CompilerSet") != 2
command -nargs=* CompilerSet setlocal <args>
endif
let s:save_cpo = &cpo
set cpo-=C
CompilerSet makeprg=go\ build
CompilerSet errorformat=
\%-G#\ %.%#,
\%A%f:%l:%c:\ %m,
\%A%f:%l:\ %m,
\%C%*\\s%m,
\%-G%.%#
let &cpo = s:save_cpo
unlet s:save_cpo
" vim:ts=4:sw=4:et

View file

@ -0,0 +1,23 @@
" We take care to preserve the user's fileencodings and fileformats,
" because those settings are global (not buffer local), yet we want
" to override them for loading Go files, which are defined to be UTF-8.
let s:current_fileformats = ''
let s:current_fileencodings = ''
" define fileencodings to open as utf-8 encoding even if it's ascii.
function! s:gofiletype_pre()
let s:current_fileformats = &g:fileformats
let s:current_fileencodings = &g:fileencodings
set fileencodings=utf-8 fileformats=unix
setlocal filetype=go
endfunction
" restore fileencodings as others
function! s:gofiletype_post()
let &g:fileformats = s:current_fileformats
let &g:fileencodings = s:current_fileencodings
endfunction
au BufNewFile *.go setlocal filetype=go fileencoding=utf-8 fileformat=unix
au BufRead *.go call s:gofiletype_pre()
au BufReadPost *.go call s:gofiletype_post()

View file

@ -0,0 +1,17 @@
" Copyright 2013 The Go Authors. All rights reserved.
" Use of this source code is governed by a BSD-style
" license that can be found in the LICENSE file.
"
" go.vim: Vim filetype plugin for Go.
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1
setlocal comments=s1:/*,mb:*,ex:*/,://
setlocal commentstring=//\ %s
let b:undo_ftplugin = "setl com< cms<"
" vim:ts=4:sw=4:et

View file

@ -0,0 +1,69 @@
" Copyright 2011 The Go Authors. All rights reserved.
" Use of this source code is governed by a BSD-style
" license that can be found in the LICENSE file.
"
" fmt.vim: Vim command to format Go files with gofmt.
"
" This filetype plugin add a new commands for go buffers:
"
" :Fmt
"
" Filter the current Go buffer through gofmt.
" It tries to preserve cursor position and avoids
" replacing the buffer with stderr output.
"
" Options:
"
" g:go_fmt_commands [default=1]
"
" Flag to indicate whether to enable the commands listed above.
"
" g:gofmt_command [default="gofmt"]
"
" Flag naming the gofmt executable to use.
"
if exists("b:did_ftplugin_go_fmt")
finish
endif
if !exists("g:go_fmt_commands")
let g:go_fmt_commands = 1
endif
if !exists("g:gofmt_command")
let g:gofmt_command = "gofmt"
endif
if g:go_fmt_commands
command! -buffer Fmt call s:GoFormat()
endif
function! s:GoFormat()
let view = winsaveview()
silent execute "%!" . g:gofmt_command
if v:shell_error
let errors = []
for line in getline(1, line('$'))
let tokens = matchlist(line, '^\(.\{-}\):\(\d\+\):\(\d\+\)\s*\(.*\)')
if !empty(tokens)
call add(errors, {"filename": @%,
\"lnum": tokens[2],
\"col": tokens[3],
\"text": tokens[4]})
endif
endfor
if empty(errors)
% | " Couldn't detect gofmt error format, output errors
endif
undo
if !empty(errors)
call setqflist(errors, 'r')
endif
echohl Error | echomsg "Gofmt returned error" | echohl None
endif
call winrestview(view)
endfunction
let b:did_ftplugin_go_fmt = 1
" vim:ts=4:sw=4:et

View file

@ -0,0 +1,250 @@
" Copyright 2011 The Go Authors. All rights reserved.
" Use of this source code is governed by a BSD-style
" license that can be found in the LICENSE file.
"
" import.vim: Vim commands to import/drop Go packages.
"
" This filetype plugin adds three new commands for go buffers:
"
" :Import {path}
"
" Import ensures that the provided package {path} is imported
" in the current Go buffer, using proper style and ordering.
" If {path} is already being imported, an error will be
" displayed and the buffer will be untouched.
"
" :ImportAs {localname} {path}
"
" Same as Import, but uses a custom local name for the package.
"
" :Drop {path}
"
" Remove the import line for the provided package {path}, if
" present in the current Go buffer. If {path} is not being
" imported, an error will be displayed and the buffer will be
" untouched.
"
" If you would like to add shortcuts, you can do so by doing the following:
"
" Import fmt
" au Filetype go nnoremap <buffer> <LocalLeader>f :Import fmt<CR>
"
" Drop fmt
" au Filetype go nnoremap <buffer> <LocalLeader>F :Drop fmt<CR>
"
" Import the word under your cursor
" au Filetype go nnoremap <buffer> <LocalLeader>k
" \ :exe 'Import ' . expand('<cword>')<CR>
"
" The backslash '\' is the default maplocalleader, so it is possible that
" your vim is set to use a different character (:help maplocalleader).
"
" Options:
"
" g:go_import_commands [default=1]
"
" Flag to indicate whether to enable the commands listed above.
"
if exists("b:did_ftplugin_go_import")
finish
endif
if !exists("g:go_import_commands")
let g:go_import_commands = 1
endif
if g:go_import_commands
command! -buffer -nargs=? -complete=customlist,go#complete#Package Drop call s:SwitchImport(0, '', <f-args>)
command! -buffer -nargs=1 -complete=customlist,go#complete#Package Import call s:SwitchImport(1, '', <f-args>)
command! -buffer -nargs=* -complete=customlist,go#complete#Package ImportAs call s:SwitchImport(1, <f-args>)
endif
function! s:SwitchImport(enabled, localname, path)
let view = winsaveview()
let path = a:path
" Quotes are not necessary, so remove them if provided.
if path[0] == '"'
let path = strpart(path, 1)
endif
if path[len(path)-1] == '"'
let path = strpart(path, 0, len(path) - 1)
endif
if path == ''
call s:Error('Import path not provided')
return
endif
" Extract any site prefix (e.g. github.com/).
" If other imports with the same prefix are grouped separately,
" we will add this new import with them.
" Only up to and including the first slash is used.
let siteprefix = matchstr(path, "^[^/]*/")
let qpath = '"' . path . '"'
if a:localname != ''
let qlocalpath = a:localname . ' ' . qpath
else
let qlocalpath = qpath
endif
let indentstr = 0
let packageline = -1 " Position of package name statement
let appendline = -1 " Position to introduce new import
let deleteline = -1 " Position of line with existing import
let linesdelta = 0 " Lines added/removed
" Find proper place to add/remove import.
let line = 0
while line <= line('$')
let linestr = getline(line)
if linestr =~# '^package\s'
let packageline = line
let appendline = line
elseif linestr =~# '^import\s\+('
let appendstr = qlocalpath
let indentstr = 1
let appendline = line
let firstblank = -1
let lastprefix = ""
while line <= line("$")
let line = line + 1
let linestr = getline(line)
let m = matchlist(getline(line), '^\()\|\(\s\+\)\(\S*\s*\)"\(.\+\)"\)')
if empty(m)
if siteprefix == "" && a:enabled
" must be in the first group
break
endif
" record this position, but keep looking
if firstblank < 0
let firstblank = line
endif
continue
endif
if m[1] == ')'
" if there's no match, add it to the first group
if appendline < 0 && firstblank >= 0
let appendline = firstblank
endif
break
endif
let lastprefix = matchstr(m[4], "^[^/]*/")
if a:localname != '' && m[3] != ''
let qlocalpath = printf('%-' . (len(m[3])-1) . 's %s', a:localname, qpath)
endif
let appendstr = m[2] . qlocalpath
let indentstr = 0
if m[4] == path
let appendline = -1
let deleteline = line
break
elseif m[4] < path
" don't set candidate position if we have a site prefix,
" we've passed a blank line, and this doesn't share the same
" site prefix.
if siteprefix == "" || firstblank < 0 || match(m[4], "^" . siteprefix) >= 0
let appendline = line
endif
elseif siteprefix != "" && match(m[4], "^" . siteprefix) >= 0
" first entry of site group
let appendline = line - 1
break
endif
endwhile
break
elseif linestr =~# '^import '
if appendline == packageline
let appendstr = 'import ' . qlocalpath
let appendline = line - 1
endif
let m = matchlist(linestr, '^import\(\s\+\)\(\S*\s*\)"\(.\+\)"')
if !empty(m)
if m[3] == path
let appendline = -1
let deleteline = line
break
endif
if m[3] < path
let appendline = line
endif
if a:localname != '' && m[2] != ''
let qlocalpath = printf("%s %" . len(m[2])-1 . "s", a:localname, qpath)
endif
let appendstr = 'import' . m[1] . qlocalpath
endif
elseif linestr =~# '^\(var\|const\|type\|func\)\>'
break
endif
let line = line + 1
endwhile
" Append or remove the package import, as requested.
if a:enabled
if deleteline != -1
call s:Error(qpath . ' already being imported')
elseif appendline == -1
call s:Error('No package line found')
else
if appendline == packageline
call append(appendline + 0, '')
call append(appendline + 1, 'import (')
call append(appendline + 2, ')')
let appendline += 2
let linesdelta += 3
let appendstr = qlocalpath
let indentstr = 1
endif
call append(appendline, appendstr)
execute appendline + 1
if indentstr
execute 'normal >>'
endif
let linesdelta += 1
endif
else
if deleteline == -1
call s:Error(qpath . ' not being imported')
else
execute deleteline . 'd'
let linesdelta -= 1
if getline(deleteline-1) =~# '^import\s\+(' && getline(deleteline) =~# '^)'
" Delete empty import block
let deleteline -= 1
execute deleteline . "d"
execute deleteline . "d"
let linesdelta -= 2
endif
if getline(deleteline) == '' && getline(deleteline - 1) == ''
" Delete spacing for removed line too.
execute deleteline . "d"
let linesdelta -= 1
endif
endif
endif
" Adjust view for any changes.
let view.lnum += linesdelta
let view.topline += linesdelta
if view.topline < 0
let view.topline = 0
endif
" Put buffer back where it was.
call winrestview(view)
endfunction
function! s:Error(s)
echohl Error | echo a:s | echohl None
endfunction
let b:did_ftplugin_go_import = 1
" vim:ts=4:sw=4:et

View file

@ -0,0 +1,78 @@
#!/bin/bash -e
#
# Copyright 2012 The Go Authors. All rights reserved.
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.
#
# Tests for import.vim.
cd $(dirname $0)
cat > base.go <<EOF
package test
import (
"bytes"
"io"
"net"
"mycorp/foo"
)
EOF
fail=0
# usage: test_one command pattern
# Pattern is a PCRE expression that will match across lines.
test_one() {
echo 2>&1 -n "$1: "
vim -e -s -u /dev/null -U /dev/null --noplugin -c "source import.vim" \
-c "$1" -c 'wq! test.go' base.go
# ensure blank lines are treated correctly
if ! gofmt test.go | cmp test.go -; then
echo 2>&1 "gofmt conflict"
gofmt test.go | diff -u test.go - | sed "s/^/ /" 2>&1
fail=1
return
fi
if ! [[ $(cat test.go) =~ $2 ]]; then
echo 2>&1 "$2 did not match"
cat test.go | sed "s/^/ /" 2>&1
fail=1
return
fi
echo 2>&1 "ok"
}
# Tests for Import
test_one "Import baz" '"baz".*"bytes"'
test_one "Import io/ioutil" '"io".*"io/ioutil".*"net"'
test_one "Import myc" '"io".*"myc".*"net"' # prefix of a site prefix
test_one "Import nat" '"io".*"nat".*"net"'
test_one "Import net/http" '"net".*"net/http".*"mycorp/foo"'
test_one "Import zoo" '"net".*"zoo".*"mycorp/foo"'
test_one "Import mycorp/bar" '"net".*"mycorp/bar".*"mycorp/foo"'
test_one "Import mycorp/goo" '"net".*"mycorp/foo".*"mycorp/goo"'
# Tests for Drop
cat > base.go <<EOF
package test
import (
"foo"
"something"
"zoo"
)
EOF
test_one "Drop something" '\([^"]*"foo"[^"]*"zoo"[^"]*\)'
rm -f base.go test.go
if [ $fail -gt 0 ]; then
echo 2>&1 "FAIL"
exit 1
fi
echo 2>&1 "PASS"

View file

@ -0,0 +1,65 @@
" Copyright 2011 The Go Authors. All rights reserved.
" Use of this source code is governed by a BSD-style
" license that can be found in the LICENSE file.
"
" indent/go.vim: Vim indent file for Go.
"
" TODO:
" - function invocations split across lines
" - general line splits (line ends in an operator)
if exists("b:did_indent")
finish
endif
let b:did_indent = 1
" C indentation is too far off useful, mainly due to Go's := operator.
" Let's just define our own.
setlocal nolisp
setlocal autoindent
setlocal indentexpr=GoIndent(v:lnum)
setlocal indentkeys+=<:>,0=},0=)
if exists("*GoIndent")
finish
endif
function! GoIndent(lnum)
let prevlnum = prevnonblank(a:lnum-1)
if prevlnum == 0
" top of file
return 0
endif
" grab the previous and current line, stripping comments.
let prevl = substitute(getline(prevlnum), '//.*$', '', '')
let thisl = substitute(getline(a:lnum), '//.*$', '', '')
let previ = indent(prevlnum)
let ind = previ
if prevl =~ '[({]\s*$'
" previous line opened a block
let ind += &sw
endif
if prevl =~# '^\s*\(case .*\|default\):$'
" previous line is part of a switch statement
let ind += &sw
endif
" TODO: handle if the previous line is a label.
if thisl =~ '^\s*[)}]'
" this line closed a block
let ind -= &sw
endif
" Colons are tricky.
" We want to outdent if it's part of a switch ("case foo:" or "default:").
" We ignore trying to deal with jump labels because (a) they're rare, and
" (b) they're hard to disambiguate from a composite literal key.
if thisl =~# '^\s*\(case .*\|default\):$'
let ind -= &sw
endif
return ind
endfunction

View file

@ -0,0 +1,6 @@
This is a mirror of the misc/vim portion of the official Go repository. It is
automatically updated.
Any contributions or issues should be made to the official repository.
http://golang.org/doc/contribute.html

View file

@ -0,0 +1,130 @@
" Copyright 2011 The Go Authors. All rights reserved.
" Use of this source code is governed by a BSD-style
" license that can be found in the LICENSE file.
"
" godoc.vim: Vim command to see godoc.
"
"
" Commands:
"
" :Godoc
"
" Open the relevant Godoc for either the word[s] passed to the command or
" the, by default, the word under the cursor.
"
" Options:
"
" g:go_godoc_commands [default=1]
"
" Flag to indicate whether to enable the commands listed above.
if exists("g:loaded_godoc")
finish
endif
let g:loaded_godoc = 1
let s:buf_nr = -1
let s:last_word = ''
if !exists('g:go_godoc_commands')
let g:go_godoc_commands = 1
endif
if g:go_godoc_commands
command! -nargs=* -range -complete=customlist,go#complete#Package Godoc :call s:Godoc(<f-args>)
endif
nnoremap <silent> <Plug>(godoc-keyword) :<C-u>call <SID>Godoc('')<CR>
function! s:GodocView()
if !bufexists(s:buf_nr)
leftabove new
file `="[Godoc]"`
let s:buf_nr = bufnr('%')
elseif bufwinnr(s:buf_nr) == -1
leftabove split
execute s:buf_nr . 'buffer'
delete _
elseif bufwinnr(s:buf_nr) != bufwinnr('%')
execute bufwinnr(s:buf_nr) . 'wincmd w'
endif
setlocal filetype=godoc
setlocal bufhidden=delete
setlocal buftype=nofile
setlocal noswapfile
setlocal nobuflisted
setlocal modifiable
setlocal nocursorline
setlocal nocursorcolumn
setlocal iskeyword+=:
setlocal iskeyword-=-
nnoremap <buffer> <silent> K :Godoc<cr>
au BufHidden <buffer> call let <SID>buf_nr = -1
endfunction
function! s:GodocWord(word)
if !executable('godoc')
echohl WarningMsg
echo "godoc command not found."
echo " install with: go get code.google.com/p/go.tools/cmd/godoc"
echohl None
return 0
endif
let word = a:word
silent! let content = system('godoc ' . word)
if v:shell_error || !len(content)
if len(s:last_word)
silent! let content = system('godoc ' . s:last_word.'/'.word)
if v:shell_error || !len(content)
echo 'No documentation found for "' . word . '".'
return 0
endif
let word = s:last_word.'/'.word
else
echo 'No documentation found for "' . word . '".'
return 0
endif
endif
let s:last_word = word
silent! call s:GodocView()
setlocal modifiable
silent! %d _
silent! put! =content
silent! normal gg
setlocal nomodifiable
setfiletype godoc
return 1
endfunction
function! s:Godoc(...)
if !len(a:000)
let oldiskeyword = &iskeyword
setlocal iskeyword+=.
let word = expand('<cword>')
let &iskeyword = oldiskeyword
let word = substitute(word, '[^a-zA-Z0-9\\/._~-]', '', 'g')
let words = split(word, '\.\ze[^./]\+$')
else
let words = a:000
endif
if !len(words)
return
endif
if s:GodocWord(words[0])
if len(words) > 1
if search('^\%(const\|var\|type\|\s\+\) ' . words[1] . '\s\+=\s')
return
endif
if search('^func ' . words[1] . '(')
silent! normal zt
return
endif
echo 'No documentation found for "' . words[1] . '".'
endif
endif
endfunction
" vim:ts=4:sw=4:et

View file

@ -0,0 +1,101 @@
Vim plugins for Go (http://golang.org)
======================================
To use all the Vim plugins, add these lines to your $HOME/.vimrc.
" Some Linux distributions set filetype in /etc/vimrc.
" Clear filetype flags before changing runtimepath to force Vim to reload them.
filetype off
filetype plugin indent off
set runtimepath+=$GOROOT/misc/vim
filetype plugin indent on
syntax on
If you want to select fewer plugins, use the instructions in the rest of
this file.
A popular configuration is to gofmt Go source files when they are saved.
To do that, add this line to the end of your $HOME/.vimrc.
autocmd FileType go autocmd BufWritePre <buffer> Fmt
Vim syntax highlighting
-----------------------
To install automatic syntax highlighting for GO programs:
1. Copy or link the filetype detection script to the ftdetect directory
underneath your vim runtime directory (normally $HOME/.vim/ftdetect)
2. Copy or link syntax/go.vim to the syntax directory underneath your vim
runtime directory (normally $HOME/.vim/syntax). Linking this file rather
than just copying it will ensure any changes are automatically reflected
in your syntax highlighting.
3. Add the following line to your .vimrc file (normally $HOME/.vimrc):
syntax on
In a typical unix environment you might accomplish this using the following
commands:
mkdir -p $HOME/.vim/ftdetect
mkdir -p $HOME/.vim/syntax
mkdir -p $HOME/.vim/autoload/go
ln -s $GOROOT/misc/vim/ftdetect/gofiletype.vim $HOME/.vim/ftdetect/
ln -s $GOROOT/misc/vim/syntax/go.vim $HOME/.vim/syntax
ln -s $GOROOT/misc/vim/autoload/go/complete.vim $HOME/.vim/autoload/go
echo "syntax on" >> $HOME/.vimrc
Vim filetype plugins
--------------------
To install one of the available filetype plugins:
1. Same as 1 above.
2. Copy or link ftplugin/go.vim to the ftplugin directory underneath your vim
runtime directory (normally $HOME/.vim/ftplugin). Copy or link one or more
additional plugins from ftplugin/go/*.vim to the Go-specific subdirectory
in the same place ($HOME/.vim/ftplugin/go/*.vim).
3. Add the following line to your .vimrc file (normally $HOME/.vimrc):
filetype plugin on
Vim indentation plugin
----------------------
To install automatic indentation:
1. Same as 1 above.
2. Copy or link indent/go.vim to the indent directory underneath your vim
runtime directory (normally $HOME/.vim/indent).
3. Add the following line to your .vimrc file (normally $HOME/.vimrc):
filetype indent on
Vim compiler plugin
-------------------
To install the compiler plugin:
1. Same as 1 above.
2. Copy or link compiler/go.vim to the compiler directory underneath your vim
runtime directory (normally $HOME/.vim/compiler).
3. Activate the compiler plugin with ":compiler go". To always enable the
compiler plugin in Go source files add an autocommand to your .vimrc file
(normally $HOME/.vimrc):
autocmd FileType go compiler go
Godoc plugin
------------
To install godoc plugin:
1. Same as 1 above.
2. Copy or link plugin/godoc.vim to $HOME/.vim/plugin/godoc,
syntax/godoc.vim to $HOME/.vim/syntax/godoc.vim,
and autoload/go/complete.vim to $HOME/.vim/autoload/go/complete.vim.

View file

@ -0,0 +1,207 @@
" Copyright 2009 The Go Authors. All rights reserved.
" Use of this source code is governed by a BSD-style
" license that can be found in the LICENSE file.
"
" go.vim: Vim syntax file for Go.
"
" Options:
" There are some options for customizing the highlighting; the recommended
" settings are the default values, but you can write:
" let OPTION_NAME = 0
" in your ~/.vimrc file to disable particular options. You can also write:
" let OPTION_NAME = 1
" to enable particular options. At present, all options default to on.
"
" - go_highlight_array_whitespace_error
" Highlights white space after "[]".
" - go_highlight_chan_whitespace_error
" Highlights white space around the communications operator that don't follow
" the standard style.
" - go_highlight_extra_types
" Highlights commonly used library types (io.Reader, etc.).
" - go_highlight_space_tab_error
" Highlights instances of tabs following spaces.
" - go_highlight_trailing_whitespace_error
" Highlights trailing white space.
" Quit when a (custom) syntax file was already loaded
if exists("b:current_syntax")
finish
endif
if !exists("go_highlight_array_whitespace_error")
let go_highlight_array_whitespace_error = 1
endif
if !exists("go_highlight_chan_whitespace_error")
let go_highlight_chan_whitespace_error = 1
endif
if !exists("go_highlight_extra_types")
let go_highlight_extra_types = 1
endif
if !exists("go_highlight_space_tab_error")
let go_highlight_space_tab_error = 1
endif
if !exists("go_highlight_trailing_whitespace_error")
let go_highlight_trailing_whitespace_error = 1
endif
syn case match
syn keyword goDirective package import
syn keyword goDeclaration var const type
syn keyword goDeclType struct interface
hi def link goDirective Statement
hi def link goDeclaration Keyword
hi def link goDeclType Keyword
" Keywords within functions
syn keyword goStatement defer go goto return break continue fallthrough
syn keyword goConditional if else switch select
syn keyword goLabel case default
syn keyword goRepeat for range
hi def link goStatement Statement
hi def link goConditional Conditional
hi def link goLabel Label
hi def link goRepeat Repeat
" Predefined types
syn keyword goType chan map bool string error
syn keyword goSignedInts int int8 int16 int32 int64 rune
syn keyword goUnsignedInts byte uint uint8 uint16 uint32 uint64 uintptr
syn keyword goFloats float32 float64
syn keyword goComplexes complex64 complex128
hi def link goType Type
hi def link goSignedInts Type
hi def link goUnsignedInts Type
hi def link goFloats Type
hi def link goComplexes Type
" Treat func specially: it's a declaration at the start of a line, but a type
" elsewhere. Order matters here.
syn match goType /\<func\>/
syn match goDeclaration /^func\>/
" Predefined functions and values
syn keyword goBuiltins append cap close complex copy delete imag len
syn keyword goBuiltins make new panic print println real recover
syn keyword goConstants iota true false nil
hi def link goBuiltins Keyword
hi def link goConstants Keyword
" Comments; their contents
syn keyword goTodo contained TODO FIXME XXX BUG
syn cluster goCommentGroup contains=goTodo
syn region goComment start="/\*" end="\*/" contains=@goCommentGroup,@Spell
syn region goComment start="//" end="$" contains=@goCommentGroup,@Spell
hi def link goComment Comment
hi def link goTodo Todo
" Go escapes
syn match goEscapeOctal display contained "\\[0-7]\{3}"
syn match goEscapeC display contained +\\[abfnrtv\\'"]+
syn match goEscapeX display contained "\\x\x\{2}"
syn match goEscapeU display contained "\\u\x\{4}"
syn match goEscapeBigU display contained "\\U\x\{8}"
syn match goEscapeError display contained +\\[^0-7xuUabfnrtv\\'"]+
hi def link goEscapeOctal goSpecialString
hi def link goEscapeC goSpecialString
hi def link goEscapeX goSpecialString
hi def link goEscapeU goSpecialString
hi def link goEscapeBigU goSpecialString
hi def link goSpecialString Special
hi def link goEscapeError Error
" Strings and their contents
syn cluster goStringGroup contains=goEscapeOctal,goEscapeC,goEscapeX,goEscapeU,goEscapeBigU,goEscapeError
syn region goString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@goStringGroup
syn region goRawString start=+`+ end=+`+
hi def link goString String
hi def link goRawString String
" Characters; their contents
syn cluster goCharacterGroup contains=goEscapeOctal,goEscapeC,goEscapeX,goEscapeU,goEscapeBigU
syn region goCharacter start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=@goCharacterGroup
hi def link goCharacter Character
" Regions
syn region goBlock start="{" end="}" transparent fold
syn region goParen start='(' end=')' transparent
" Integers
syn match goDecimalInt "\<\d\+\([Ee]\d\+\)\?\>"
syn match goHexadecimalInt "\<0x\x\+\>"
syn match goOctalInt "\<0\o\+\>"
syn match goOctalError "\<0\o*[89]\d*\>"
hi def link goDecimalInt Integer
hi def link goHexadecimalInt Integer
hi def link goOctalInt Integer
hi def link Integer Number
" Floating point
syn match goFloat "\<\d\+\.\d*\([Ee][-+]\d\+\)\?\>"
syn match goFloat "\<\.\d\+\([Ee][-+]\d\+\)\?\>"
syn match goFloat "\<\d\+[Ee][-+]\d\+\>"
hi def link goFloat Float
" Imaginary literals
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\>"
hi def link goImaginary Number
" Spaces after "[]"
if go_highlight_array_whitespace_error != 0
syn match goSpaceError display "\(\[\]\)\@<=\s\+"
endif
" Spacing errors around the 'chan' keyword
if go_highlight_chan_whitespace_error != 0
" receive-only annotation on chan type
syn match goSpaceError display "\(<-\)\@<=\s\+\(chan\>\)\@="
" send-only annotation on chan type
syn match goSpaceError display "\(\<chan\)\@<=\s\+\(<-\)\@="
" value-ignoring receives in a few contexts
syn match goSpaceError display "\(\(^\|[={(,;]\)\s*<-\)\@<=\s\+"
endif
" Extra types commonly seen
if go_highlight_extra_types != 0
syn match goExtraType /\<bytes\.\(Buffer\)\>/
syn match goExtraType /\<io\.\(Reader\|Writer\|ReadWriter\|ReadWriteCloser\)\>/
syn match goExtraType /\<reflect\.\(Kind\|Type\|Value\)\>/
syn match goExtraType /\<unsafe\.Pointer\>/
endif
" Space-tab error
if go_highlight_space_tab_error != 0
syn match goSpaceError display " \+\t"me=e-1
endif
" Trailing white space error
if go_highlight_trailing_whitespace_error != 0
syn match goSpaceError display excludenl "\s\+$"
endif
hi def link goExtraType Type
hi def link goSpaceError Error
" Search backwards for a global declaration to start processing the syntax.
"syn sync match goSync grouphere NONE /^\(const\|var\|type\|func\)\>/
" There's a bug in the implementation of grouphere. For now, use the
" following as a more expensive/less precise workaround.
syn sync minlines=500
let b:current_syntax = "go"

View file

@ -0,0 +1,20 @@
" Copyright 2011 The Go Authors. All rights reserved.
" Use of this source code is governed by a BSD-style
" license that can be found in the LICENSE file.
if exists("b:current_syntax")
finish
endif
syn case match
syn match godocTitle "^\([A-Z][A-Z ]*\)$"
command -nargs=+ HiLink hi def link <args>
HiLink godocTitle Title
delcommand HiLink
let b:current_syntax = "godoc"
" vim:ts=4 sts=2 sw=2:

View file

@ -640,27 +640,30 @@ fun! snipMate#ScopesByFile()
endf endf
" used by both: completion and insert snippet " used by both: completion and insert snippet
fun! snipMate#GetSnippetsForWordBelowCursor(word, suffix, break_on_first_match) fun! snipMate#GetSnippetsForWordBelowCursor(word, exact)
" Setup lookups: '1.2.3' becomes [1.2.3] + [3, 2.3] " Setup lookups: '1.2.3' becomes [1.2.3] + [3, 2.3]
let parts = split(a:word, '\W\zs') let parts = split(a:word, '\W\zs')
if len(parts) > 2 if len(parts) > 2
let parts = parts[-2:] " max 2 additional items, this might become a setting let parts = parts[-2:] " max 2 additional items, this might become a setting
endif endif
let lookups = [a:word.a:suffix] let lookups = [a:word]
let lookup = '' let lookup = ''
for w in reverse(parts) for w in reverse(parts)
let lookup = w . lookup let lookup = w . lookup
if index(lookups, lookup) == -1 if index(lookups, lookup) == -1
call add(lookups, lookup.a:suffix) call add(lookups, lookup)
endif endif
endfor endfor
" allow matching '.' " allow matching '.'
if a:word =~ '\.$' if a:word =~ '\.$'
call add(lookups, '.'.a:suffix) call add(lookups, '.')
endif endif
call filter(lookups, 'v:val != ""') " Remove empty lookup entries, but only if there are other nonempty lookups
if len(lookups) > 1
call filter(lookups, 'v:val != ""')
endif
let matching_snippets = [] let matching_snippets = []
let snippet = '' let snippet = ''
@ -668,12 +671,14 @@ fun! snipMate#GetSnippetsForWordBelowCursor(word, suffix, break_on_first_match)
for word in lookups for word in lookups
let s:c.word = word let s:c.word = word
for [k,snippetD] in items(funcref#Call(s:c['get_snippets'], [snipMate#ScopesByFile(), word])) for [k,snippetD] in items(funcref#Call(s:c['get_snippets'], [snipMate#ScopesByFile(), word]))
if a:suffix == '' " hack: require exact match
" hack: require exact match if a:exact && k !=# word
if k !=# word | continue | endif continue
endif endif
call add(matching_snippets, [k, snippetD]) call add(matching_snippets, [k, snippetD])
if a:break_on_first_match | break| endif if a:exact
break
endif
endfor endfor
endfor endfor
return matching_snippets return matching_snippets
@ -708,7 +713,7 @@ fun! snipMate#WordBelowCursor()
endf endf
fun! snipMate#GetSnippetsForWordBelowCursorForComplete(word) fun! snipMate#GetSnippetsForWordBelowCursorForComplete(word)
let snippets = map(snipMate#GetSnippetsForWordBelowCursor(a:word, '*', 0), 'v:val[0]') let snippets = map(snipMate#GetSnippetsForWordBelowCursor(a:word, 0), 'v:val[0]')
return filter(snippets, 'v:val =~# "\\V\\^' . escape(a:word, '"\') . '"') return filter(snippets, 'v:val =~# "\\V\\^' . escape(a:word, '"\') . '"')
endf endf
@ -769,7 +774,7 @@ function! snipMate#TriggerSnippet(...)
endif endif
let word = matchstr(getline('.'), '\S\+\%'.col('.').'c') let word = matchstr(getline('.'), '\S\+\%'.col('.').'c')
let list = snipMate#GetSnippetsForWordBelowCursor(word, '', 1) let list = snipMate#GetSnippetsForWordBelowCursor(word, 1)
if empty(list) if empty(list)
let snippet = '' let snippet = ''
else else

View file

@ -1,45 +0,0 @@
Aaron Broder
Adam Folmert
Alberto Pose
Angel Alonso
Ben Orenstein
Bill Casarin
Christopher Joslyn
Daniel Hahler
Elliot Murphy
Eustaquio Rangel
Henrik Nyh
Honza Pokorny
Iuri Fernandes Queiroz
Jakub Nawalaniec
James F. Herdman
Jon Bernard
Kozo NISHIDA
Leandro Pincini
Marc Weber
Marcin Kulik
Marjan.Hratson
Micah Elliott
Michael Sanders
Naveed Massjouni
Rob Hudson
Rok Garbas
Sebastian Schulze
Srushti Ambekallu
Stephen Tudor
Steven Oliver
Stuart Colville
Tom Adams
Zied ABID
fo60213
marutanm
msanders
Povilas Balzaravičius Pawka
Dmitry Dementev
Travis Holton
Chrisyue
Erik Westrup
Matt Deacalion Stevens
TODO: add contributors from github.com/SirVer/Ultisnip having contributed to
github.com/SirVer/Ultisnip/UltiSnips/* files

View file

@ -1,5 +1,3 @@
IMPORTANT: comment on: [What about merging with Ultisnip using its engine](https://github.com/garbas/vim-snipmate/issues/114)
Snipmate & UltiSnip Snippets Snipmate & UltiSnip Snippets
============================ ============================
@ -9,51 +7,48 @@ It is community-maintained and many people have contributed snippet files and
other improvements already. other improvements already.
Contents Contents
======== --------
snippets/*: snippets using snipmate format - `snippets/*`: snippets using snipmate format
UltiSnips/*: snippets using UltiSnips format - `UltiSnips/*`: snippets using UltiSnips format
Snippet engines supporting vim-snippets Snippet engines supporting vim-snippets
======================================== ----------------------------------------
There are different forks of snippet engines which allow the user to insert There are different forks of snippet engines which allow the user to insert
snippets by typing the name of a snippet hitting the expansion mapping. snippets by typing the name of a snippet hitting the expansion mapping.
github.com/garbas/vim-snipmate: - [github.com/SirVer/ultisnips](https://github.com/SirVer/ultisnips):
VimL, snipmate-snippets, engine sometimes behaves strange, supports python, supports all snippets in this repo.
rewriting snippets on the fly (eg adding a second version with folding - [github.com/garbas/vim-snipmate](https://github.com/garbas/vim-snipmate):
markers) VimL, snipmate-snippets, engine sometimes behaves strange. Supports
snippets/*
- [github.com/Shougo/neosnippet](https://github.com/Shougo/neosnippet.vim):
VimL, supports snippets/* with some configuration.
- [github.com/drmingdrmer/xptemplate](https://github.com/drmingdrmer/xptemplate):
Totally different syntax, does not read snippets contained in this file, but
it is also very powerful. It does not support vim-snippets (just listing it
here for completness)
There tries to be a more comprehensive list (which still is incomplete) here:
http://vim-wiki.mawercer.de/wiki/topic/text-snippets-skeletons-templates.html
github.com/MarcWeber/UltiSnips: UltiSnips has additional features such as high speed, nesting snippets,
python, snipmate-snippets and UltiSnips-snippets expanding snippets in snippets and offers powerful transformations on text in
snippets (like visual selections or placeholder texts).
github.com/SirVer/ultisnips: Which one to use? If you have python give
python, UltiSnips-snippets [SirVer/ultisnips](https://github.com/SirVer/ultisnips) a try because its fast
and has the most features.
github.com/Shougo/neosnippet:
viml, has a compatible mode allowing to reuse most snipmate snippets ?
github.com/drmingdrmer/xptemplate:
Totally different syntax, does not read snippets contained in this file,
but it is also very powerful. It does not support vim-snippets (just
listing it here for completness)
This tries to be a more comprehensive list (which still is incomplete)
http://vim-wiki.mawercer.de/wiki/topic/text-snippets-skeletons-templates.html
UltiSnips engine has additional features such as "nested snippets".
Which one to use? If you have python give MarcWeber/UltiSnips a try because its
fast and supports all important features. You can prefer the UltiSnip versions
of the snippets by setting the "always_use_first_snippet" option to 1.
If you have VimL only (vim without python support) your best option is using If you have VimL only (vim without python support) your best option is using
garbas/vim-snipmate and cope with the minor bugs found in the engine. [garbas/vim-snipmate](https://github.com/garbas/vim-snipmate) and cope with the
minor bugs found in the engine.
Installation Installation
============ ------------
First be aware that there are many options, see "Snippet engines" above. First be aware that there are many options, see "Snippet engines" above.
Second be aware than there are [tons of plugin managers](http://vim-wiki.mawercer.de/wiki/topic/vim%20plugin%20managment.html) Second be aware than there are [tons of plugin managers](http://vim-wiki.mawercer.de/wiki/topic/vim%20plugin%20managment.html)
which is why Marc Weber thinks that it doesn't make sense to repeat the same which is why Marc Weber thinks that it doesn't make sense to repeat the same
@ -84,7 +79,8 @@ If you still have trouble getting this to work create a github ticket, ask on
irc or the mailinglist. irc or the mailinglist.
Policies / for contributors Policies / for contributors
=========================== ---------------------------
Some snippets are useful for almost all languages, so let's try to have the same Some snippets are useful for almost all languages, so let's try to have the same
triggers for them: triggers for them:
@ -96,11 +92,7 @@ el : else ..
wh : while (cond) ... wh : while (cond) ...
``` ```
If you're not satisfied with these defaults, open a ticket that we implement Don't add useless placeholder default texts like
aliasing. Then you can remap "else" to "el" or the like.
Don't add stupid placeholder default texts like
``` ```
if (${1:condition}){ if (${1:condition}){
${2:some code here} ${2:some code here}
@ -127,7 +119,7 @@ Discuss at: https://github.com/honza/vim-snippets/issues/230
Related repositories Related repositories
==================== --------------------
We also encourage people to maintain sets of snippets for particular use cases We also encourage people to maintain sets of snippets for particular use cases
so that all users can benefit from them. People can list their snippet repositories here: so that all users can benefit from them. People can list their snippet repositories here:
@ -138,15 +130,15 @@ so that all users can benefit from them. People can list their snippet reposito
Installation using VAM: "github:rbonvall/snipmate-snippets-bib" Installation using VAM: "github:rbonvall/snipmate-snippets-bib"
Future - ideas - examples Future - ideas - examples
========================= -------------------------
[overview snippet engines](http://vim-wiki.mawercer.de/wiki/topic/text-snippets-skeletons-templates.html) [overview snippet engines](http://vim-wiki.mawercer.de/wiki/topic/text-snippets-skeletons-templates.html)
If you have ideas you can add them to that list of "snippet engine features by example". If you have ideas you can add them to that list of "snippet engine features by example".
Historical notes Historical notes
================ ----------------
[vim-snipmate][1] was originally started by [Michael Sanders][2] who has now [vim-snipmate][1] was originally started by [Michael Sanders][2] who has now
unfortunately abandoned the project. [Rok Garbas][3] is now maintaining a unfortunately abandoned the project. [Rok Garbas][3] is now maintaining a
@ -170,17 +162,6 @@ let g:snipMate.scope_aliases = {}
let g:snipMate.scope_aliases['ruby'] = 'ruby,ruby-rails,ruby-1.9' let g:snipMate.scope_aliases['ruby'] = 'ruby,ruby-rails,ruby-1.9'
``` ```
or github.com/MarcWeber/UltiSnips this way:
```vim
let g:UltiSnips = {}
let g:UltiSnips.snipmate_ft_filter = {
\ 'default' : {'filetypes': ["FILETYPE"] },
\ 'ruby' : {'filetypes': ["ruby", "ruby-rails", "ruby-1.9"] },
```
If it happens that you work on a project requiring ruby-1.8 snippets instead, If it happens that you work on a project requiring ruby-1.8 snippets instead,
consider using vim-addon-local-vimrc and override the filetypes. consider using vim-addon-local-vimrc and override the filetypes.
@ -192,16 +173,15 @@ ruby-library-version triplet. Sometimes postfixing a name such as
will do it then if syntax has changed. will do it then if syntax has changed.
Language maintainers Language maintainers
-------------------- --------------------
No one can really be proficient in all programming languages. If you would like No one can really be proficient in all programming languages. If you would like
to maintain snippets for a language, please get in touch. to maintain snippets for a language, please get in touch.
Notes: People are interested in snippets - and their interest may stop again Notes: People are interested in snippets - and their interest may wane again.
at will. So its ok if people maintain a language only for a short period of This list is kept up-to-date on a best effort basis.
time - or jump in and get things done - don't let the flow stop :)
vim-snippets is not like the "linux kernel".
* Python - [honza](http://github.com/honza) * Python - [honza](http://github.com/honza)
* Javascript - [honza](http://github.com/honza) * Javascript - [honza](http://github.com/honza)
@ -220,18 +200,13 @@ Until further work is done on `vim-snipmate`, please don't add folding markers
into snippets. `vim-snipmate` has some comments about how to patch all snippets into snippets. `vim-snipmate` has some comments about how to patch all snippets
on the fly adding those. on the fly adding those.
Because MarcWeber/UltiSnips [6] supports also snipmate-snippets there is no Because UltiSnips reads snipmate-snippets too there is no need to duplicate all
need to duplicate all snippets - only those snippets who use advanced UltiSnips snippets - only those snippets who use advanced UltiSnips features should be
features should be duplicated in UltiSnips (?) duplicated in UltiSnips.
Currently all snippets from UltiSnips have been put into UltiSnips - some work Currently all snippets from UltiSnips have been put into UltiSnips - some work
on merging should be done (dropping duplicates etc) on merging should be done (dropping duplicates etc)
Authors
-------
For a list of authors, please see the `AUTHORS` files.
License License
------- -------
@ -243,5 +218,4 @@ terms of the MIT license.
[2]: http://github.com/msanders [2]: http://github.com/msanders
[3]: http://github.com/garbas [3]: http://github.com/garbas
[4]: http://github.com/garbas/vim-snipmate [4]: http://github.com/garbas/vim-snipmate
[6]: http://github.com/MarcWeber/UltiSnips
[7]: http://github.com/SirVer/ultisnips [7]: http://github.com/SirVer/ultisnips

View file

@ -1,4 +1,5 @@
This directory contains the main scripts that come bundled with UltiSnips. This directory contains the snippets for UltiSnips.
https://github.com/sirver/ultisnips
Standing On The Shoulders of Giants Standing On The Shoulders of Giants
=================================== ===================================
@ -10,12 +11,7 @@ two projects:
TextMate: http://svn.textmate.org/trunk/Bundles/ TextMate: http://svn.textmate.org/trunk/Bundles/
SnipMate: http://code.google.com/p/snipmate/ SnipMate: http://code.google.com/p/snipmate/
All snippets from those sources were copied and cleaned up, so that they are UltiSnips has seen contributions by many individuals. Those contributions have
- not using shell script, only python (so they are cross platform compatible) been merged into this collection seamlessly and without further comments.
- not using any feature that UltiSnips doesn't offer
UltiSnips has seen contributions by various individuals. Those contributions
have been merged into this collection seamlessly and without further comments.
-- vim:ft=rst:nospell: -- vim:ft=rst:nospell:

View file

@ -1,6 +1,11 @@
# This file contains snippets that are always defined. I personally # This file contains snippets that are always defined. I personally
# have snippets for signatures and often needed texts # have snippets for signatures and often needed texts
# sligthly lower priority than everything else since specialized versions
# should overwrite. The user needs to adjust her priority in her snippets to
# ~-55 so that other filetypes will still overwrite.
priority -60
############## ##############
# NICE BOXES # # NICE BOXES #
############## ##############
@ -12,71 +17,62 @@ Automatically filled during usage"""
_commentDict = { } _commentDict = { }
def _parse_comments(s): def _parse_comments(s):
""" Parses vim's comments option to extract comment format """ """ Parses vim's comments option to extract comment format """
i = iter(s.split(",")) i = iter(s.split(","))
rv = [] rv = []
try: try:
while True: while True:
# get the flags and text of a comment part # get the flags and text of a comment part
flags,text = i.next().split(':', 1) flags, text = next(i).split(':', 1)
if len(flags) == 0: if len(flags) == 0:
if len(text) == 1: rv.append((text, text, text, ""))
rv.append((text,text,text, "")) # parse 3-part comment, but ignore those with O flag
# parse 3-part comment, but ignore those with O flag elif flags[0] == 's' and 'O' not in flags:
elif flags[0] == 's' and 'O' not in flags: ctriple = []
ctriple = [] indent = ""
indent = ""
if flags[-1] in string.digits: if flags[-1] in string.digits:
indent = " " * int(flags[-1]) indent = " " * int(flags[-1])
ctriple.append(text) ctriple.append(text)
flags,text = i.next().split(':', 1) flags,text = next(i).split(':', 1)
assert(flags[0] == 'm') assert(flags[0] == 'm')
ctriple.append(text) ctriple.append(text)
flags,text = i.next().split(':', 1) flags,text = next(i).split(':', 1)
assert(flags[0] == 'e') assert(flags[0] == 'e')
ctriple.append(text) ctriple.append(text)
ctriple.append(indent) ctriple.append(indent)
rv.append(ctriple) rv.append(ctriple)
elif flags[0] == 'b':
elif flags[0] == 'b': if len(text) == 1:
if len(text) == 1: rv.insert(0, (text,text,text, ""))
rv.insert(0, (text,text,text, "")) except StopIteration:
return rv
except StopIteration:
return rv
def _get_comment_format(): def _get_comment_format():
""" Returns a 4-element tuple representing the comment format for """ Returns a 4-element tuple representing the comment format for
the current file. """ the current file. """
return _parse_comments(vim.eval("&comments"))[0]
ft = vim.eval("&filetype")
# check if the comment dict has the format for the current file
if _commentDict.has_key(ft):
return _commentDict[ft]
# otherwise parse vim's comments and add it for later use
commentformat = _parse_comments(vim.eval("&comments"))[0]
_commentDict[ft] = commentformat
return commentformat
def make_box(twidth, bwidth = None): def make_box(twidth, bwidth=None):
if bwidth is None: b, m, e, i = _get_comment_format()
bwidth = twidth + 2 bwidth_inner = bwidth - 3 - max(len(b), len(i + e)) if bwidth else twidth + 2
b,m,e,i = _get_comment_format() sline = b + m + bwidth_inner * m[0] + 2 * m[0]
sline = b + m + bwidth*m + 2*m nspaces = (bwidth_inner - twidth) // 2
nspaces = (bwidth - twidth)//2 mlines = i + m + " " + " " * nspaces
mlines = i + m + " " + " "*nspaces mlinee = " " + " "*(bwidth_inner - twidth - nspaces) + m
mlinee = " " + " "*(bwidth-twidth-nspaces) + m eline = i + m + bwidth_inner * m[0] + 2 * m[0] + e
eline = i + 2*m + bwidth*m + m + e return sline, mlines, mlinee, eline
return sline, mlines, mlinee, eline
def foldmarker():
"Return a tuple of (open fold marker, close fold marker)"
return vim.eval("&foldmarker").split(",")
endglobal endglobal
snippet box "A nice box with the current comment symbol" b snippet box "A nice box with the current comment symbol" b
@ -91,14 +87,29 @@ endsnippet
snippet bbox "A nice box over the full width" b snippet bbox "A nice box over the full width" b
`!p `!p
box = make_box(len(t[1]), 71) width = int(vim.eval("&textwidth")) or 71
box = make_box(len(t[1]), width)
snip.rv = box[0] + '\n' + box[1] snip.rv = box[0] + '\n' + box[1]
`${1:content}`!p `${1:content}`!p
box = make_box(len(t[1]), 71) box = make_box(len(t[1]), width)
snip.rv = box[2] + '\n' + box[3]` snip.rv = box[2] + '\n' + box[3]`
$0 $0
endsnippet endsnippet
snippet fold "Insert a vim fold marker" b
`!p snip.rv = _get_comment_format()[0]` ${1:Fold description} `!p snip.rv = foldmarker()[0]`${2:1} `!p snip.rv = _get_comment_format()[2]`
endsnippet
snippet foldc "Insert a vim fold close marker" b
`!p snip.rv = _get_comment_format()[0]` ${2:1}`!p snip.rv = foldmarker()[1]` `!p snip.rv = _get_comment_format()[2]`
endsnippet
snippet foldp "Insert a vim fold marker pair" b
`!p snip.rv = _get_comment_format()[0]` ${1:Fold description} `!p snip.rv = foldmarker()[0]` `!p snip.rv = _get_comment_format()[2]`
${2:${VISUAL:Content}}
`!p snip.rv = _get_comment_format()[0]` `!p snip.rv = foldmarker()[1]` $1 `!p snip.rv = _get_comment_format()[2]`
endsnippet
########################## ##########################
# LOREM IPSUM GENERATORS # # LOREM IPSUM GENERATORS #
########################## ##########################

View file

@ -0,0 +1,52 @@
priority -50
snippet online "Online resource" b
@online{${1:name},
author={${2:author}},
title={${3:title}},
date={${4:date}},
url={${5:url}}
}
$0
endsnippet
snippet article "Article reference" b
@article{${1:name},
author={${2:author}},
title={${3:title}},
journaltitle={${4:journal}},
volume={${5:NN}},
number={${6:NN}},
year={${7:YYYY}},
pages={${8:NN}--${9:NN}}
}
$0
endsnippet
snippet book "Book reference" b
@book{${1:name},
author={${2:author}},
title={${3:title}},
subtitle={${4:subtitle}},
year={${5:YYYY}},
location={${6:somewhere}},
publisher={${7:publisher}},
pages={${8:NN}--${9:NN}}
}
$0
endsnippet
snippet inb "In Book reference" b
@inbook{${1:name},
author={${2:author}},
title={${3:title}},
subtitle={${4:subtitle}},
booktitle={${5:book}},
editor={${6:editor}},
year={${7:YYYY}},
location={${8:somewhere}},
publisher={${9:publisher}},
pages={${10:NN}--${11:NN}}
}
$0
endsnippet

View file

@ -1,27 +1,29 @@
priority -50
global !p global !p
def newsoa(): def newsoa():
import datetime import datetime
now = datetime.datetime.now() now = datetime.datetime.now()
# return standard SOA formatted serial for today # return standard SOA formatted serial for today
return now.strftime("%Y%m%d00") return now.strftime("%Y%m%d00")
endglobal endglobal
snippet zone "Bootstrap a new Bind zonefile" b snippet zone "Bootstrap a new Bind zonefile" b
$TTL 86400 $TTL 86400
@ IN SOA ${1:example.net}. ${2:hostmaster.$1}.( @ IN SOA ${1:example.net}. ${2:hostmaster.$1}.(
`!p snip.rv = newsoa()`; serial `!p snip.rv = newsoa()`; serial
21600; refresh every 6 hours 21600; refresh every 6 hours
3600; retry after one hour 3600; retry after one hour
604800; expire after a week 604800; expire after a week
86400 ); minimum TTL of 1 day 86400 ); minimum TTL of 1 day
IN NS ns01.$1. IN NS ns01.$1.
IN MX 10 mail.$1. IN MX 10 mail.$1.
ns01.$1 IN A ns01.$1 IN A
mail.$1 IN A mail.$1 IN A
endsnippet endsnippet
snippet A "Insert A Record" b snippet A "Insert A Record" b
${1:hostname} IN A ${2:ip} ${1:hostname} IN A ${2:ip}
endsnippet endsnippet

View file

@ -2,6 +2,8 @@
# TextMate Snippets # # TextMate Snippets #
########################################################################### ###########################################################################
priority -50
snippet def "#define ..." snippet def "#define ..."
#define ${1} #define ${1}
endsnippet endsnippet
@ -12,9 +14,9 @@ snippet ifndef "#ifndef ... #define ... #endif"
#endif #endif
endsnippet endsnippet
snippet #if "#if #endif" !b snippet #if "#if #endif" b
#if ${1:0} #if ${1:0}
${VISUAL:code}$0 ${VISUAL}${0:${VISUAL/(.*)/(?1::code)/}}
#endif #endif
endsnippet endsnippet
@ -36,17 +38,24 @@ $0
endsnippet endsnippet
snippet main "main() (main)" snippet main "main() (main)"
int main(int argc, char const *argv[]) int main(int argc, char *argv[])
{ {
${0:/* code */} ${VISUAL}${0:${VISUAL/(.*)/(?1::\/* code *\/)/}}
return 0; return 0;
} }
endsnippet endsnippet
snippet for "for int loop (fori)" snippet for "for loop (for)"
for (${4:size_t} ${2:i} = 0; $2 < ${1:count}; ${3:++$2}) for (${2:i} = 0; $2 < ${1:count}; ${3:++$2})
{ {
${0:/* code */} ${VISUAL}${0:${VISUAL/(.*)/(?1::\/* code *\/)/}}
}
endsnippet
snippet fori "for int loop (fori)"
for (${4:int} ${2:i} = 0; $2 < ${1:count}; ${3:++$2})
{
${VISUAL}${0:${VISUAL/(.*)/(?1::\/* code *\/)/}}
} }
endsnippet endsnippet
@ -62,7 +71,7 @@ if not snip.c:
rand = ''.join(random.sample(string.ascii_letters+string.digits, 8)) rand = ''.join(random.sample(string.ascii_letters+string.digits, 8))
snip.rv = ('%s_%s' % (name,rand)).upper() snip.rv = ('%s_%s' % (name,rand)).upper()
else: else:
snip.rv = snip.c`} snip.rv = snip.c`}
#define $1 #define $1
${0} ${0}
@ -75,9 +84,15 @@ snippet td "Typedef"
typedef ${1:int} ${2:MyCustomType}; typedef ${1:int} ${2:MyCustomType};
endsnippet endsnippet
snippet wh "while loop"
while(${1:/* condition */}) {
${VISUAL}${0:${VISUAL/(.*)/(?1::\/* code *\/)/}}
}
endsnippet
snippet do "do...while loop (do)" snippet do "do...while loop (do)"
do { do {
${0:/* code */} ${VISUAL}${0:${VISUAL/(.*)/(?1::\/* code *\/)/}}
} while(${1:/* condition */}); } while(${1:/* condition */});
endsnippet endsnippet
@ -88,18 +103,30 @@ endsnippet
snippet if "if .. (if)" snippet if "if .. (if)"
if (${1:/* condition */}) if (${1:/* condition */})
{ {
${0:/* code */} ${VISUAL}${0:${VISUAL/(.*)/(?1::\/* code *\/)/}}
}
endsnippet
snippet el "else .. (else)"
else {
${VISUAL}${0:${VISUAL/(.*)/(?1::\/* code *\/)/}}
}
endsnippet
snippet eli "else if .. (eli)"
else if (${1:/* condition */}) {
${VISUAL}${0:${VISUAL/(.*)/(?1::\/* code *\/)/}}
} }
endsnippet endsnippet
snippet ife "if .. else (ife)" snippet ife "if .. else (ife)"
if (${1:/* condition */}) if (${1:/* condition */})
{ {
${2:/* code */} ${2:/* code */}
} }
else else
{ {
${3:/* else */} ${3:/* else */}
} }
endsnippet endsnippet
@ -114,4 +141,15 @@ struct ${1:`!p snip.rv = (snip.basename or "name") + "_t"`}
}; };
endsnippet endsnippet
snippet fun "function" b
${1:void} ${2:function_name}(${3})
{
${VISUAL}${0:${VISUAL/(.*)/(?1::\/* code *\/)/}}
}
endsnippet
snippet fund "function declaration" b
${1:void} ${2:function_name}(${3});
endsnippet
# vim:ft=snippets: # vim:ft=snippets:

View file

@ -1,5 +1,4 @@
# From the TextMate bundle priority -50
# with some modification
snippet fun "Function" b snippet fun "Function" b
${1:name} = `!p snip.rv = "(" if t[2] else ""`${2:args}`!p snip.rv = ") " if t[2] else ""`-> ${1:name} = `!p snip.rv = "(" if t[2] else ""`${2:args}`!p snip.rv = ") " if t[2] else ""`->
@ -10,52 +9,52 @@ snippet bfun "Function (bound)" i
`!p snip.rv = "(" if t[1] else ""`${1:args}`!p snip.rv = ") " if t[1] else ""`=>`!p snip.rv = " " if t[2] and not t[2].startswith("\n") else ""`${2:expr} `!p snip.rv = "(" if t[1] else ""`${1:args}`!p snip.rv = ") " if t[1] else ""`=>`!p snip.rv = " " if t[2] and not t[2].startswith("\n") else ""`${2:expr}
endsnippet endsnippet
snippet if "If" snippet if "If" b
if ${1:condition} if ${1:condition}
${0:# body...} ${0:# body...}
endsnippet endsnippet
snippet ife "If .. Else" snippet ife "If .. Else" b
if ${1:condition} if ${1:condition}
${2:# body...} ${2:# body...}
else else
${3:# body...} ${3:# body...}
endsnippet endsnippet
snippet eif "Else if" b snippet elif "Else if" b
else if ${1:condition} else if ${1:condition}
${0:# body...} ${0:# body...}
endsnippet endsnippet
snippet ifte "Ternary if" snippet ifte "Ternary if" b
if ${1:condition} then ${2:value} else ${3:other} if ${1:condition} then ${2:value} else ${3:other}
endsnippet endsnippet
snippet unl "Unless" snippet unl "Unless" b
${1:action} unless ${2:condition} ${1:action} unless ${2:condition}
endsnippet endsnippet
snippet fora "Array Comprehension" snippet fora "Array Comprehension" b
for ${1:name} in ${2:array} for ${1:name} in ${2:array}
${0:# body...} ${0:# body...}
endsnippet endsnippet
snippet foro "Object Comprehension" snippet foro "Object Comprehension" b
for ${1:key}, ${2:value} of ${3:Object} for ${1:key}, ${2:value} of ${3:Object}
${0:# body...} ${0:# body...}
endsnippet endsnippet
snippet forr "Range Comprehension (inclusive)" snippet forr "Range Comprehension (inclusive)" b
for ${1:name} in [${2:start}..${3:finish}]`!p snip.rv = " by " if t[4] else ""`${4:step} for ${1:name} in [${2:start}..${3:finish}]`!p snip.rv = " by " if t[4] else ""`${4:step}
${0:# body...} ${0:# body...}
endsnippet endsnippet
snippet forrex "Range Comprehension (exclusive)" snippet forrex "Range Comprehension (exclusive)" b
for ${1:name} in [${2:start}...${3:finish}]`!p snip.rv = " by " if t[4] else ""`${4:step} for ${1:name} in [${2:start}...${3:finish}]`!p snip.rv = " by " if t[4] else ""`${4:step}
${0:# body...} ${0:# body...}
endsnippet endsnippet
snippet swi "Switch" snippet swi "Switch" b
switch ${1:object} switch ${1:object}
when ${2:value} when ${2:value}
${3:# body...} ${3:# body...}
@ -63,7 +62,7 @@ switch ${1:object}
$0 $0
endsnippet endsnippet
snippet swit "Switch when .. then" snippet swit "Switch when .. then" b
switch ${1:object} switch ${1:object}
when ${2:condition}`!p snip.rv = " then " if t[3] else ""`${3:value} when ${2:condition}`!p snip.rv = " then " if t[3] else ""`${3:value}
else`!p snip.rv = " " if t[4] and not t[4].startswith("\n") else ""`${4:value} else`!p snip.rv = " " if t[4] and not t[4].startswith("\n") else ""`${4:value}
@ -77,7 +76,7 @@ class ${1:ClassName}`!p snip.rv = " extends " if t[2] else ""`${2:Ancestor}
$0 $0
endsnippet endsnippet
snippet try "Try .. Catch" snippet try "Try .. Catch" b
try try
$1 $1
catch ${2:error} catch ${2:error}
@ -95,4 +94,3 @@ endsnippet
snippet log "Log" b snippet log "Log" b
console.log ${1:"${2:msg}"} console.log ${1:"${2:msg}"}
endsnippet endsnippet

View file

@ -2,8 +2,12 @@
# CoffeeScript versions -- adapted from the JS TextMate bundle + additions # CoffeeScript versions -- adapted from the JS TextMate bundle + additions
# for some jasmine-jquery matchers # for some jasmine-jquery matchers
# #
priority -50
extends coffee extends coffee
priority -49
snippet des "Describe (coffee)" b snippet des "Describe (coffee)" b
describe '${1:description}', -> describe '${1:description}', ->
$0 $0
@ -160,4 +164,3 @@ endsnippet
snippet noscw "expect was not called with (coffee)" b snippet noscw "expect was not called with (coffee)" b
expect(${1:target}).wasNotCalledWith(${2:arguments}) expect(${1:target}).wasNotCalledWith(${2:arguments})
endsnippet endsnippet

View file

@ -1,3 +1,10 @@
priority -50
extends c
# We want to overwrite everything in parent ft.
priority -49
########################################################################### ###########################################################################
# TextMate Snippets # # TextMate Snippets #
########################################################################### ###########################################################################
@ -20,7 +27,7 @@ endsnippet
snippet ns "namespace .. (namespace)" snippet ns "namespace .. (namespace)"
namespace${1/.+/ /m}${1:`!p snip.rv = snip.basename or "name"`} namespace${1/.+/ /m}${1:`!p snip.rv = snip.basename or "name"`}
{ {
$0 ${VISUAL}${0:${VISUAL/(.*)/(?1::\/* code *\/)/}}
}${1/.+/ \/* /m}$1${1/.+/ *\/ /m} }${1/.+/ \/* /m}$1${1/.+/ *\/ /m}
endsnippet endsnippet

View file

@ -0,0 +1,328 @@
#######################################################################
# C# Snippets for UltiSnips #
#######################################################################
priority -50
#########################
# classes and structs #
#########################
snippet namespace "namespace" b
namespace ${1:MyNamespace}
{
${VISUAL}$0
}
endsnippet
snippet class "class" w
class ${1:MyClass}
{
$0
}
endsnippet
snippet struct "struct" w
struct ${1:MyStruct}
{
$0
}
endsnippet
snippet interface "interface" w
interface I${1:Interface}
{
$0
}
endsnippet
snippet enum "enumeration" b
enum ${1:MyEnum} { ${2:Item} };
endsnippet
############
# Main() #
############
snippet sim "static int main" b
static int Main(string[] args)
{
$0
}
endsnippet
snippet svm "static void main" b
static void Main(string[] args)
{
$0
}
endsnippet
################
# properties #
################
snippet prop "Simple property declaration" b
public ${1:int} ${2:MyProperty} { get; set; }
endsnippet
snippet propfull "Full property declaration" b
private ${1:int} ${2:_myProperty};
public $1 ${3:MyProperty}
{
get { return $2; }
set { $2 = value; }
}
endsnippet
snippet propg "Property with a private setter" b
public ${1:int} ${2:MyProperty} { get; private set; }
endsnippet
############
# blocks #
############
snippet #if "#if #endif" b
#if ${1:DEBUG}
${VISUAL}$0
#endif
endsnippet
snippet #region "#region #endregion" b
#region ${1:Region}
${VISUAL}$0
#endregion
endsnippet
###########
# loops #
###########
snippet for "for loop" b
for (int ${1:i} = 0; $1 < ${2:10}; $1++)
{
${VISUAL}$0
}
endsnippet
snippet forr "for loop (reverse)" b
for (int ${1:i} = ${2:10}; $1 >= 0; $1--)
{
${VISUAL}$0
}
endsnippet
snippet foreach "foreach loop" b
foreach (${3:var} ${2:item} in ${1:items})
{
${VISUAL}$0
}
endsnippet
snippet while "while loop" b
while (${1:true})
{
${VISUAL}$0
}
endsnippet
snippet do "do loop" b
do
{
${VISUAL}$0
} while (${1:true});
endsnippet
###############
# branching #
###############
snippet if "if statement" b
if ($1)
{
${VISUAL}$0
}
endsnippet
snippet ife "if else statement" b
if ($1)
{
${VISUAL}$0
}
else
{
}
endsnippet
snippet elif "else if" b
else if ($1)
{
$0
}
endsnippet
snippet elseif "else if" b
else if ($1)
{
$0
}
endsnippet
snippet ifnn "if not null" b
if ($1 != null)
{
${VISUAL}$0
}
endsnippet
snippet switch "switch statement" b
switch (${1:statement})
{
case ${2:value}:
break;
default:
$0break;
}
endsnippet
snippet case "case" b
case ${1:value}:
$2
break;
endsnippet
##############
# wrappers #
##############
snippet using "using statement" b
using (${1:resource})
{
${VISUAL}$0
}
endsnippet
snippet unchecked "unchecked block" b
unchecked
{
${VISUAL}$0
}
endsnippet
snippet checked "checked block" b
checked
{
${VISUAL}$0
}
endsnippet
snippet unsafe "unsafe" b
unsafe
{
${VISUAL}$0
}
endsnippet
########################
# exception handling #
########################
snippet try "try catch block" b
try
{
${VISUAL}$0
}
catch (${1:Exception} ${2:e})
{
throw;
}
endsnippet
snippet tryf "try finally block" b
try
{
${VISUAL}$0
}
finally
{
}
endsnippet
snippet throw "throw"
throw new ${1}Exception("${2}");
endsnippet
##########
# LINQ #
##########
snippet from "LINQ syntax" b
var ${1:seq} =
from ${2:item1} in ${3:items1}
join ${4:item2} in ${5:items2} on $2.${6:prop1} equals $4.${7:prop2}
select ${8:$2.prop3}
where ${9:clause}
endsnippet
############################
# feedback and debugging #
############################
snippet da "Debug.Assert" b
Debug.Assert(${1:true});
endsnippet
snippet cw "Console.WriteLine" b
Console.WriteLine("$1");
endsnippet
# as you first type comma-separated parameters on the right, {n} values appear in the format string
snippet cwp "Console.WriteLine with parameters" b
Console.WriteLine("${2:`!p
snip.rv = ' '.join(['{' + str(i) + '}' for i in range(t[1].count(','))])
`}"${1:, something});
endsnippet
snippet mbox "Message box" b
MessageBox.Show("${1:message}");
endsnippet
##################
# full methods #
##################
snippet equals "Equals method" b
public override bool Equals(object obj)
{
if (obj == null || GetType() != obj.GetType())
{
return false;
}
$0
return base.Equals(obj);
}
endsnippet
##############
# comments #
##############
snippet /// "XML comment" b
/// <summary>
/// $1
/// </summary>
endsnippet

View file

@ -2,6 +2,8 @@
# Most of these came from TextMate # # Most of these came from TextMate #
########################################################################### ###########################################################################
priority -50
snippet ! "!important CSS (!)" snippet ! "!important CSS (!)"
${1:!important} ${1:!important}
endsnippet endsnippet

View file

@ -1,5 +1,7 @@
# Simple shortcuts # Simple shortcuts
priority -50
snippet imp "import (imp)" b snippet imp "import (imp)" b
import ${1:std.stdio}; import ${1:std.stdio};
endsnippet endsnippet
@ -42,22 +44,22 @@ endsnippet
snippet pub "public (pub)" b snippet pub "public (pub)" b
public: public:
${1:/*members*/} ${1:/*members*/}
endsnippet endsnippet
snippet priv "private (priv)" b snippet priv "private (priv)" b
private: private:
${1:/*members*/} ${1:/*members*/}
endsnippet endsnippet
snippet prot "protected (prot)" b snippet prot "protected (prot)" b
protected: protected:
${1:/*members*/} ${1:/*members*/}
endsnippet endsnippet
snippet pack "package (pack)" b snippet pack "package (pack)" b
package: package:
${1:/*members*/} ${1:/*members*/}
endsnippet endsnippet
snippet ret "return (ret)" snippet ret "return (ret)"
@ -96,7 +98,7 @@ endsnippet
snippet enf "enforce (enf)" b snippet enf "enforce (enf)" b
enforce(${1:/*condition*/}, enforce(${1:/*condition*/},
new ${2}Exception(${3:/*args*/})); new ${2}Exception(${3:/*args*/}));
endsnippet endsnippet
# Branches # Branches
@ -104,67 +106,67 @@ endsnippet
snippet if "if .. (if)" snippet if "if .. (if)"
if(${1:/*condition*/}) if(${1:/*condition*/})
{ {
${VISUAL}${0:/*code*/} ${VISUAL}${0:/*code*/}
} }
endsnippet endsnippet
snippet ife "if .. else (ife)" b snippet ife "if .. else (ife)" b
if(${1:/*condition*/}) if(${1:/*condition*/})
{ {
${2:/*code*/} ${2:/*code*/}
} }
else else
{ {
${3:/*else*/} ${3:/*else*/}
} }
endsnippet endsnippet
snippet el "else (el)" b snippet el "else (el)" b
else else
{ {
${VISUAL}${1:/*code*/} ${VISUAL}${1:/*code*/}
} }
endsnippet endsnippet
snippet eif "else if (elif)" b snippet elif "else if (elif)" b
else if(${1:/*condition*/}) else if(${1:/*condition*/})
{ {
${VISUAL}${0:/*code*/} ${VISUAL}${0:/*code*/}
} }
endsnippet endsnippet
snippet sw "switch (sw)" snippet sw "switch (sw)"
switch(${1:/*var*/}) switch(${1:/*var*/})
{ {
case ${2:/*value*/}: case ${2:/*value*/}:
${3:/*code*/} ${3:/*code*/}
break; break;
case ${4:/*value*/}: case ${4:/*value*/}:
${5:/*code*/} ${5:/*code*/}
break; break;
${7:/*more cases*/} ${7:/*more cases*/}
default: default:
${6:assert(false);} ${6:assert(false);}
} }
endsnippet endsnippet
snippet fsw "final switch (fsw)" snippet fsw "final switch (fsw)"
switch(${1:/*var*/}) switch(${1:/*var*/})
{ {
case ${2:/*value*/}: case ${2:/*value*/}:
${3:/*code*/} ${3:/*code*/}
break; break;
case ${4:/*value*/}: case ${4:/*value*/}:
${5:/*code*/} ${5:/*code*/}
break; break;
${7:/*more cases*/} ${7:/*more cases*/}
} }
endsnippet endsnippet
snippet case "case (case)" b snippet case "case (case)" b
case ${1:/*value*/}: case ${1:/*value*/}:
${2:/*code*/} ${2:/*code*/}
break; break;
endsnippet endsnippet
snippet ?: "ternary operator (?:)" snippet ?: "ternary operator (?:)"
@ -176,42 +178,42 @@ endsnippet
snippet do "do while (do)" b snippet do "do while (do)" b
do do
{ {
${VISUAL}${2:/*code*/} ${VISUAL}${2:/*code*/}
} while(${1:/*condition*/}); } while(${1:/*condition*/});
endsnippet endsnippet
snippet wh "while (wh)" b snippet wh "while (wh)" b
while(${1:/*condition*/}) while(${1:/*condition*/})
{ {
${VISUAL}${2:/*code*/} ${VISUAL}${2:/*code*/}
} }
endsnippet endsnippet
snippet for "for (for)" b snippet for "for (for)" b
for (${4:size_t} ${2:i} = 0; $2 < ${1:count}; ${3:++$2}) for (${4:size_t} ${2:i} = 0; $2 < ${1:count}; ${3:++$2})
{ {
${VISUAL}${0:/*code*/} ${VISUAL}${0:/*code*/}
} }
endsnippet endsnippet
snippet forever "forever (forever)" b snippet forever "forever (forever)" b
for(;;) for(;;)
{ {
${VISUAL}${0:/*code*/} ${VISUAL}${0:/*code*/}
} }
endsnippet endsnippet
snippet fore "foreach (fore)" snippet fore "foreach (fore)"
foreach(${1:/*elem*/}; ${2:/*range*/}) foreach(${1:/*elem*/}; ${2:/*range*/})
{ {
${VISUAL}${3:/*code*/} ${VISUAL}${3:/*code*/}
} }
endsnippet endsnippet
snippet forif "foreach if (forif)" b snippet forif "foreach if (forif)" b
foreach(${1:/*elem*/}; ${2:/*range*/}) if(${3:/*condition*/}) foreach(${1:/*elem*/}; ${2:/*range*/}) if(${3:/*condition*/})
{ {
${VISUAL}${4:/*code*/} ${VISUAL}${4:/*code*/}
} }
endsnippet endsnippet
@ -219,8 +221,8 @@ endsnippet
snippet in "in contract (in)" b snippet in "in contract (in)" b
in in
{ {
assert(${1:/*condition*/}, "${2:error message}"); assert(${1:/*condition*/}, "${2:error message}");
${3} ${3}
} }
body body
endsnippet endsnippet
@ -228,8 +230,8 @@ endsnippet
snippet out "out contract (out)" b snippet out "out contract (out)" b
out${1:(result)} out${1:(result)}
{ {
assert(${2:/*condition*/}, "${3:error message}"); assert(${2:/*condition*/}, "${3:error message}");
${4} ${4}
} }
body body
endsnippet endsnippet
@ -237,8 +239,8 @@ endsnippet
snippet inv "invariant (inv)" b snippet inv "invariant (inv)" b
invariant() invariant()
{ {
assert(${1:/*condition*/}, "${2:error message}"); assert(${1:/*condition*/}, "${2:error message}");
${3} ${3}
} }
endsnippet endsnippet
@ -247,29 +249,29 @@ endsnippet
snippet fun "function definition (fun)" snippet fun "function definition (fun)"
${1:void} ${2:/*function name*/}(${3:/*args*/}) ${4:@safe pure nothrow} ${1:void} ${2:/*function name*/}(${3:/*args*/}) ${4:@safe pure nothrow}
{ {
${VISUAL}${5:/*code*/} ${VISUAL}${5:/*code*/}
} }
endsnippet endsnippet
snippet void "void function definition (void)" snippet void "void function definition (void)"
void ${1:/*function name*/}(${2:/*args*/}) ${3:@safe pure nothrow} void ${1:/*function name*/}(${2:/*args*/}) ${3:@safe pure nothrow}
{ {
${VISUAL}${4:/*code*/} ${VISUAL}${4:/*code*/}
} }
endsnippet endsnippet
snippet this "ctor (this)" w snippet this "ctor (this)" w
this(${1:/*args*/}) this(${1:/*args*/})
{ {
${VISUAL}${2:/*code*/} ${VISUAL}${2:/*code*/}
} }
endsnippet endsnippet
snippet get "getter property (get)" ! snippet get "getter property (get)"
@property ${1:/*type*/} ${2:/*member_name*/}() const pure nothrow {return ${3:$2_};} @property ${1:/*type*/} ${2:/*member_name*/}() const pure nothrow {return ${3:$2_};}
endsnippet endsnippet
snippet set "setter property (set)" ! snippet set "setter property (set)"
@property void ${1:/*member_name*/}(${2:/*type*/} rhs) pure nothrow {${3:$1_} = rhs;} @property void ${1:/*member_name*/}(${2:/*type*/} rhs) pure nothrow {${3:$1_} = rhs;}
endsnippet endsnippet
@ -278,7 +280,7 @@ endsnippet
snippet main "Main" b snippet main "Main" b
void main(string[] args) void main(string[] args)
{ {
${VISUAL}${0: /*code*/} ${VISUAL}${0: /*code*/}
} }
endsnippet endsnippet
@ -293,7 +295,7 @@ endsnippet
snippet scope "scope (scope)" b snippet scope "scope (scope)" b
scope(${1:exit}) scope(${1:exit})
{ {
${VISUAL}${2:/*code*/} ${VISUAL}${2:/*code*/}
} }
endsnippet endsnippet
@ -302,7 +304,7 @@ endsnippet
snippet with "with (with)" snippet with "with (with)"
with(${1}) with(${1})
{ {
${VISUAL}${2:/*code*/} ${VISUAL}${2:/*code*/}
} }
endsnippet endsnippet
@ -311,33 +313,33 @@ endsnippet
snippet try "try/catch (try)" b snippet try "try/catch (try)" b
try try
{ {
${VISUAL}${1:/*code to try*/} ${VISUAL}${1:/*code to try*/}
} }
catch(${2}Exception e) catch(${2}Exception e)
{ {
${3:/*handle exception*/} ${3:/*handle exception*/}
} }
endsnippet endsnippet
snippet tryf "try/catch/finally (tryf)" b snippet tryf "try/catch/finally (tryf)" b
try try
{ {
${VISUAL}${1:/*code to try*/} ${VISUAL}${1:/*code to try*/}
} }
catch(${2}Exception e) catch(${2}Exception e)
{ {
${3:/*handle exception*/} ${3:/*handle exception*/}
} }
finally finally
{ {
${4:/*cleanup*/} ${4:/*cleanup*/}
} }
endsnippet endsnippet
snippet catch "catch (catch)" b snippet catch "catch (catch)" b
catch(${1}Exception e) catch(${1}Exception e)
{ {
${2:/*handle exception*/} ${2:/*handle exception*/}
} }
endsnippet endsnippet
@ -351,35 +353,35 @@ endsnippet
snippet struct "struct (struct)" snippet struct "struct (struct)"
struct ${1:`!p snip.rv = (snip.basename or "name")`} struct ${1:`!p snip.rv = (snip.basename or "name")`}
{ {
${2} ${2}
} }
endsnippet endsnippet
snippet union "union (union)" snippet union "union (union)"
union ${1:`!p snip.rv = (snip.basename or "name")`} union ${1:`!p snip.rv = (snip.basename or "name")`}
{ {
${2} ${2}
} }
endsnippet endsnippet
snippet class "class (class)" snippet class "class (class)"
class ${1:`!p snip.rv = (snip.basename or "name")`} class ${1:`!p snip.rv = (snip.basename or "name")`}
{ {
${2} ${2}
} }
endsnippet endsnippet
snippet inter "interface (inter)" snippet inter "interface (inter)"
interface ${1:`!p snip.rv = (snip.basename or "name")`} interface ${1:`!p snip.rv = (snip.basename or "name")`}
{ {
${2} ${2}
} }
endsnippet endsnippet
snippet enum "enum (enum)" snippet enum "enum (enum)"
enum ${1:`!p snip.rv = (snip.basename or "name")`} enum ${1:`!p snip.rv = (snip.basename or "name")`}
{ {
${2} ${2}
} }
endsnippet endsnippet
@ -388,12 +390,12 @@ endsnippet
snippet exc "exception declaration (exc)" b snippet exc "exception declaration (exc)" b
/// ${3:/*documentation*/} /// ${3:/*documentation*/}
class ${1}Exception : ${2}Exception class ${1}Exception : ${2}Exception
{ {
public this(string msg, string file = __FILE__, int line = __LINE__) public this(string msg, string file = __FILE__, int line = __LINE__)
{ {
super(msg, file, line); super(msg, file, line);
} }
} }
endsnippet endsnippet
@ -403,14 +405,14 @@ endsnippet
snippet version "version (version)" b snippet version "version (version)" b
version(${1:/*version name*/}) version(${1:/*version name*/})
{ {
${VISUAL}${2:/*code*/} ${VISUAL}${2:/*code*/}
} }
endsnippet endsnippet
snippet debug "debug" b snippet debug "debug" b
debug debug
{ {
${VISUAL}${1:/*code*/} ${VISUAL}${1:/*code*/}
} }
endsnippet endsnippet
@ -420,7 +422,7 @@ endsnippet
snippet temp "template (temp)" b snippet temp "template (temp)" b
template ${2:/*name*/}(${1:/*args*/}) template ${2:/*name*/}(${1:/*args*/})
{ {
${3:/*code*/} ${3:/*code*/}
} }
endsnippet endsnippet
@ -438,7 +440,7 @@ endsnippet
snippet unittest "unittest (unittest)" b snippet unittest "unittest (unittest)" b
unittest unittest
{ {
${1:/*code*/} ${1:/*code*/}
} }
endsnippet endsnippet
@ -448,41 +450,41 @@ endsnippet
snippet opDis "opDispatch (opDis)" b snippet opDis "opDispatch (opDis)" b
${1:/*return type*/} opDispatch(string s)() ${1:/*return type*/} opDispatch(string s)()
{ {
${2:/*code*/}; ${2:/*code*/};
} }
endsnippet endsnippet
snippet op= "opAssign (op=)" b snippet op= "opAssign (op=)" b
void opAssign(${1} rhs) ${2:@safe pure nothrow} void opAssign(${1} rhs) ${2:@safe pure nothrow}
{ {
${2:/*code*/} ${2:/*code*/}
} }
endsnippet endsnippet
snippet opCmp "opCmp (opCmp)" b snippet opCmp "opCmp (opCmp)" b
int opCmp(${1} rhs) @safe const pure nothrow int opCmp(${1} rhs) @safe const pure nothrow
{ {
${2:/*code*/} ${2:/*code*/}
} }
endsnippet endsnippet
snippet opApply "opApply (opApply)" b snippet opApply "opApply (opApply)" b
int opApply(int delegate(ref ${1:/*iterated type/s*/}) dg) int opApply(int delegate(ref ${1:/*iterated type/s*/}) dg)
{ {
int result = 0; int result = 0;
${2:/*loop*/} ${2:/*loop*/}
{ {
result = dg(${3:/*arg/s*/}); result = dg(${3:/*arg/s*/});
if(result){break;} if(result){break;}
} }
return result; return result;
} }
endsnippet endsnippet
snippet toString "toString (toString)" b snippet toString "toString (toString)" b
string toString() @safe const pure nothrow string toString() @safe const pure nothrow
{ {
${1:/*code*/} ${1:/*code*/}
} }
endsnippet endsnippet
@ -490,12 +492,11 @@ endsnippet
# Comments # Comments
snippet todo "TODO (todo)" ! snippet todo "TODO (todo)"
// TODO: ${1} // TODO: ${1}
endsnippet endsnippet
# DDoc # DDoc
snippet doc "generic ddoc block (doc)" b snippet doc "generic ddoc block (doc)" b
@ -508,7 +509,7 @@ snippet fdoc "function ddoc block (fdoc)" b
/// ${1:description} /// ${1:description}
/// ///
/// ${2:Params: ${3:param} = ${4:param description} /// ${2:Params: ${3:param} = ${4:param description}
/// ${5}} /// ${5}}
/// ///
/// ${6:Returns: ${7:return value}} /// ${6:Returns: ${7:return value}}
/// ///
@ -517,7 +518,7 @@ endsnippet
snippet Par "Params (Par)" snippet Par "Params (Par)"
Params: ${1:param} = ${2:param description} Params: ${1:param} = ${2:param description}
/// ${3} /// ${3}
endsnippet endsnippet
snippet Ret "Returns (Ret)" snippet Ret "Returns (Ret)"
@ -543,16 +544,16 @@ snippet gpl "GPL (gpl)" b
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or // the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version. // (at your option) any later version.
// //
// This program is distributed in the hope that it will be useful, // This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of // but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details. // GNU General Public License for more details.
// //
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software // along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
// //
// Copyright (C) ${1:Author}, `!v strftime("%Y")` // Copyright (C) ${1:Author}, `!v strftime("%Y")`
${2} ${2}

View file

@ -1,3 +1,5 @@
priority -50
# Generic Tags # Generic Tags
snippet % snippet %
{% ${1} %}${2} {% ${1} %}${2}
@ -5,7 +7,7 @@ endsnippet
snippet %% snippet %%
{% ${1:tag_name} %} {% ${1:tag_name} %}
${2} ${2}
{% end$1 %} {% end$1 %}
endsnippet endsnippet
@ -17,14 +19,14 @@ endsnippet
snippet autoescape snippet autoescape
{% autoescape ${1:off} %} {% autoescape ${1:off} %}
${2} ${2}
{% endautoescape %} {% endautoescape %}
endsnippet endsnippet
snippet block snippet block
{% block ${1} %} {% block ${1} %}
${2} ${2}
{% endblock %} {% endblock $1 %}
endsnippet endsnippet
snippet # snippet #
@ -33,7 +35,7 @@ endsnippet
snippet comment snippet comment
{% comment %} {% comment %}
${1} ${1}
{% endcomment %} {% endcomment %}
endsnippet endsnippet
@ -51,7 +53,7 @@ endsnippet
snippet filter snippet filter
{% filter ${1} %} {% filter ${1} %}
${2} ${2}
{% endfilter %} {% endfilter %}
endsnippet endsnippet
@ -61,24 +63,24 @@ endsnippet
snippet for snippet for
{% for ${1} in ${2} %} {% for ${1} in ${2} %}
${3} ${3}
{% endfor %} {% endfor %}
endsnippet endsnippet
snippet empty snippet empty
{% empty %} {% empty %}
${1} ${1}
endsnippet endsnippet
snippet if snippet if
{% if ${1} %} {% if ${1} %}
${2} ${2}
{% endif %} {% endif %}
endsnippet endsnippet
snippet el snippet else
{% else %} {% else %}
${1} ${1}
endsnippet endsnippet
snippet ifchanged snippet ifchanged
@ -87,13 +89,13 @@ endsnippet
snippet ifequal snippet ifequal
{% ifequal ${1} ${2} %} {% ifequal ${1} ${2} %}
${3} ${3}
{% endifequal %} {% endifequal %}
endsnippet endsnippet
snippet ifnotequal snippet ifnotequal
{% ifnotequal ${1} ${2} %} {% ifnotequal ${1} ${2} %}
${3} ${3}
{% endifnotequal %} {% endifnotequal %}
endsnippet endsnippet

View file

@ -1,4 +1,4 @@
# Credit: @iurifg priority -50
snippet do snippet do
do do

View file

@ -2,6 +2,8 @@
# TEXTMATE SNIPPETS # # TEXTMATE SNIPPETS #
########################################################################### ###########################################################################
priority -50
snippet pat "Case:Receive:Try Clause" snippet pat "Case:Receive:Try Clause"
${1:pattern}${2: when ${3:guard}} ->; ${1:pattern}${2: when ${3:guard}} ->;
${4:body} ${4:body}

View file

@ -1,3 +1,5 @@
priority -50
# TextMate added these variables to cope with changes in ERB handling # TextMate added these variables to cope with changes in ERB handling
# in different versions of Rails -- for instance, Rails 3 automatically # in different versions of Rails -- for instance, Rails 3 automatically
# strips whitespace so that it's no longer necessary to use a form like # strips whitespace so that it's no longer necessary to use a form like
@ -11,16 +13,15 @@
# #
global !p global !p
def textmate_var(var, snip): def textmate_var(var, snip):
lookup = dict( lookup = dict(
TM_RAILS_TEMPLATE_START_RUBY_EXPR = snip.opt('g:tm_rails_template_start_ruby_expr', '<%= '), TM_RAILS_TEMPLATE_START_RUBY_EXPR = snip.opt('g:tm_rails_template_start_ruby_expr', '<%= '),
TM_RAILS_TEMPLATE_END_RUBY_EXPR = snip.opt('g:tm_rails_template_end_ruby_expr', ' %>'), TM_RAILS_TEMPLATE_END_RUBY_EXPR = snip.opt('g:tm_rails_template_end_ruby_expr', ' %>'),
TM_RAILS_TEMPLATE_START_RUBY_INLINE = snip.opt('g:tm_rails_template_start_ruby_inline', '<% '), TM_RAILS_TEMPLATE_START_RUBY_INLINE = snip.opt('g:tm_rails_template_start_ruby_inline', '<% '),
TM_RAILS_TEMPLATE_END_RUBY_INLINE = snip.opt('g:tm_rails_template_end_ruby_inline', ' %>'), TM_RAILS_TEMPLATE_END_RUBY_INLINE = snip.opt('g:tm_rails_template_end_ruby_inline', ' %>'),
TM_RAILS_TEMPLATE_END_RUBY_BLOCK = '<% end %>' TM_RAILS_TEMPLATE_END_RUBY_BLOCK = '<% end %>'
) )
snip.rv = lookup[var]
snip.rv = lookup[var] return
return
endglobal endglobal
@ -42,7 +43,7 @@ endsnippet
snippet ft "form_tag" snippet ft "form_tag"
`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_INLINE', snip)`form_tag(${1::action => "${5:update}"}${6:, {:${8:class} => "${9:form}"\}}) do`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)` `!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_INLINE', snip)`form_tag(${1::action => "${5:update}"}${6:, {:${8:class} => "${9:form}"\}}) do`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
$0 $0
`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_BLOCK', snip)` `!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_BLOCK', snip)`
endsnippet endsnippet
@ -52,11 +53,11 @@ endsnippet
snippet for "for loop (ERB)" snippet for "for loop (ERB)"
<% if !${1:list}.blank? %> <% if !${1:list}.blank? %>
<% for ${2:item} in ${1} %> <% for ${2:item} in ${1} %>
$3 $3
<% end %> <% end %>
<% else %> <% else %>
$4 $4
<% end %> <% end %>
endsnippet endsnippet
@ -74,7 +75,7 @@ snippet ffhf "form_for hidden_field 2"
endsnippet endsnippet
snippet ffl "form_for label 2" snippet ffl "form_for label 2"
`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR}f.label :${1:attribute', snip)`${2:, "${3:${1/[[:alpha:]]+|(_)/(?1: :\u$0)/g}}"}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)` `!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`f.label :${1:attribute}${2:, "${3:${1/[[:alpha:]]+|(_)/(?1: :\u$0)/g}}"}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
endsnippet endsnippet
snippet ffpf "form_for password_field 2" snippet ffpf "form_for password_field 2"
@ -99,7 +100,7 @@ endsnippet
snippet fields "fields_for" snippet fields "fields_for"
`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_INLINE', snip)`fields_for :${1:model}, @${2:$1} do |$1|`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_INLINE', snip)` `!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_INLINE', snip)`fields_for :${1:model}, @${2:$1} do |$1|`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_INLINE', snip)`
$0 $0
`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_BLOCK', snip)` `!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_BLOCK', snip)`
endsnippet endsnippet
@ -122,7 +123,7 @@ snippet f. "f.hidden_field"
endsnippet endsnippet
snippet f. "f.label" snippet f. "f.label"
`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR}f.label :${1:attribute', snip)`${2:, "${3:${1/[[:alpha:]]+|(_)/(?1: :\u$0)/g}}"}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)` `!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`f.label :${1:attribute}${2:, "${3:${1/[[:alpha:]]+|(_)/(?1: :\u$0)/g}}"}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
endsnippet endsnippet
snippet f. "f.password_field" snippet f. "f.password_field"
@ -148,14 +149,14 @@ endsnippet
snippet ffe "form_for with errors" snippet ffe "form_for with errors"
`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`error_messages_for :${1:model}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)` `!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`error_messages_for :${1:model}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_INLINE', snip)`form_for @${2:$1} do |f|`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_INLINE', snip)` `!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`form_for @${2:$1} do |f|`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
$0 $0
`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_BLOCK', snip)` `!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_BLOCK', snip)`
endsnippet endsnippet
snippet ff "form_for" snippet ff "form_for"
`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_INLINE', snip)`form_for @${1:model} do |f|`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_INLINE', snip)` `!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`form_for @${1:model} do |f|`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
$0 $0
`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_BLOCK', snip)` `!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_BLOCK', snip)`
endsnippet endsnippet
@ -271,9 +272,9 @@ snippet st "submit_tag"
`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`submit_tag "${1:Save changes}"${2:, :id => "${3:submit}"}${4:, :name => "${5:$3}"}${6:, :class => "${7:form_$3}"}${8:, :disabled => ${9:false}}${10:, :disable_with => "${11:Please wait...}"}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)` `!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`submit_tag "${1:Save changes}"${2:, :id => "${3:submit}"}${4:, :name => "${5:$3}"}${6:, :class => "${7:form_$3}"}${8:, :disabled => ${9:false}}${10:, :disable_with => "${11:Please wait...}"}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
endsnippet endsnippet
snippet el "else (ERB)" snippet else "else (ERB)"
<% else %> <% else %>
$0
endsnippet endsnippet
snippet if "if (ERB)" snippet if "if (ERB)"

View file

@ -1,5 +1,7 @@
# Snippets for Go # Snippets for Go
priority -50
# when to abbriviate and when not? # when to abbriviate and when not?
# b doesn't work here, because it ignores whitespace # b doesn't work here, because it ignores whitespace
# optional local name? # optional local name?
@ -31,37 +33,55 @@ const (
) )
endsnippet endsnippet
snippet struct "Struct declaration" b
type ${1:Struct} struct {
${0:${VISUAL}}
}
endsnippet
snippet interface "Interface declaration" b
type ${1:Interface} interface {
${0:${VISUAL}}
}
endsnippet
# statements # statements
snippet for "For loop" !b snippet for "For loop" b
for ${1:condition}${1/(.+)/ /}{ for ${1:condition}${1/(.+)/ /}{
${0:${VISUAL}} ${0:${VISUAL}}
} }
endsnippet endsnippet
snippet forr "For range loop" !b snippet forr "For range loop" b
for ${2:name} := range ${1:collection} { for ${2:name} := range ${1:collection} {
${0:${VISUAL}} ${0:${VISUAL}}
} }
endsnippet endsnippet
snippet if "If statement" !b snippet if "If statement" b
if ${1:condition}${1/(.+)/ /}{ if ${1:condition}${1/(.+)/ /}{
${0:${VISUAL}} ${0:${VISUAL}}
} }
endsnippet endsnippet
snippet switch "Switch statement" !b snippet switch "Switch statement" b
switch ${1:expression}${1/(.+)/ /}{ switch ${1:expression}${1/(.+)/ /}{
case${0} case${0}
} }
endsnippet endsnippet
snippet case "Case clause" !b snippet select "Select statement" b
select {
case${0}
}
endsnippet
snippet case "Case clause" b
case ${1:condition}: case ${1:condition}:
${0:${VISUAL}} ${0:${VISUAL}}
endsnippet endsnippet
snippet default "Default clause" !b snippet default "Default clause" b
default: default:
${0:${VISUAL}} ${0:${VISUAL}}
endsnippet endsnippet
@ -86,22 +106,26 @@ func ${1:name}(${2:params})${3/(.+)/ /}${3:type} {
endsnippet endsnippet
# types and variables # types and variables
snippet map "Map type" !b snippet map "Map type" b
map[${1:keytype}]${2:valtype} map[${1:keytype}]${2:valtype}
endsnippet endsnippet
snippet : "Variable declaration :=" !b snippet : "Variable declaration :=" b
${1:name} := ${0:value} ${1:name} := ${0:value}
endsnippet endsnippet
snippet var "Variable declaration" !b snippet var "Variable declaration" b
var ${1:name}${2/(.+)/ /}${2:type}${3: = ${0:value}} var ${1:name}${2/(.+)/ /}${2:type}${3: = ${0:value}}
endsnippet endsnippet
snippet vars "Variables declaration" !b snippet vars "Variables declaration" b
var ( var (
${1:name}${2/(.+)/ /}${2:type}${3: = ${0:value} } ${1:name}${2/(.+)/ /}${2:type}${3: = ${0:value} }
) )
endsnippet endsnippet
snippet json "JSON field"
\`json:"${1:displayName}"\`
endsnippet
# vim:ft=snippets: # vim:ft=snippets:

View file

@ -1,13 +1,15 @@
snippet ife "if ... then ... else ..." priority -50
snippet if "if ... then ... else ..."
if ${1:condition} if ${1:condition}
then ${2:expression} then ${2:expression}
else ${3:expression} else ${3:expression}
endsnippet endsnippet
snippet case "case ... of ..." snippet case "case ... of ..."
case ${1} of case ${1:expression} of
${2} -> ${3} ${2:pattern} -> ${3:expression}
${4} -> ${5} ${4:pattern} -> ${5:expression}
endsnippet endsnippet
snippet :: "Type signature" snippet :: "Type signature"

View file

@ -1,10 +1,12 @@
# Snippets for VIM Help Files # Snippets for VIM Help Files
priority -50
global !p global !p
def sec_title(snip, t): def sec_title(snip, t):
file_start = snip.fn.split('.')[0] file_start = snip.fn.split('.')[0]
sec_name = t[1].strip("1234567890. ").lower().replace(' ', '-') sec_name = t[1].strip("1234567890. ").lower().replace(' ', '-')
return ("*%s-%s*" % (file_start, sec_name)).rjust(78-len(t[1])) return ("*%s-%s*" % (file_start, sec_name)).rjust(78-len(t[1]))
endglobal endglobal
snippet sec "Section marker" b snippet sec "Section marker" b

View file

@ -1,13 +1,15 @@
priority -50
########################################################################### ###########################################################################
# TextMate Snippets # # TextMate Snippets #
########################################################################### ###########################################################################
global !p global !p
def x(snip): def x(snip):
if snip.ft.startswith("x"): if snip.ft.startswith("x"):
snip.rv = '/' snip.rv = '/'
else: else:
snip.rv = "" snip.rv = ""
endglobal endglobal
############ ############
@ -123,21 +125,21 @@ endsnippet
############# #############
# HTML TAGS # # HTML TAGS #
############# #############
snippet input "Input with Label" snippet input "Input with Label" w
<label for="${2:${1/[[:alpha:]]+|( )/(?1:_:\L$0)/g}}">$1</label><input type="${3:text/submit/hidden/button}" name="${4:$2}" value="$5"${6: id="${7:$2}"}`!p x(snip)`> <label for="${2:${1/[[:alpha:]]+|( )/(?1:_:\L$0)/g}}">$1</label><input type="${3:text/submit/hidden/button}" name="${4:$2}" value="$5"${6: id="${7:$2}"}`!p x(snip)`>
endsnippet endsnippet
snippet input "XHTML <input>" snippet input "XHTML <input>" w
<input type="${1:text/submit/hidden/button}" name="${2:some_name}" value="$3"${4: id="${5:$2}"}`!p x(snip)`> <input type="${1:text/submit/hidden/button}" name="${2:some_name}" value="$3"${4: id="${5:$2}"}`!p x(snip)`>
endsnippet endsnippet
snippet opt "Option" snippet opt "Option" w
<option${1: value="${2:option}"}>${3:$2}</option> <option${1: value="${2:option}"}>${3:$2}</option>
endsnippet endsnippet
snippet select "Select Box" snippet select "Select Box" w
<select name="${1:some_name}" id="${2:$1}"${3:${4: multiple}${5: onchange="${6:}"}${7: size="${8:1}"}}> <select name="${1:some_name}" id="${2:$1}"${3:${4: multiple}${5: onchange="${6:}"}${7: size="${8:1}"}}>
<option${9: value="${10:option1}"}>${11:$10}</option> <option${9: value="${10:option1}"}>${11:$10}</option>
<option${12: value="${13:option2}"}>${14:$13}</option>${15:} <option${12: value="${13:option2}"}>${14:$13}</option>${15:}
@ -146,18 +148,22 @@ snippet select "Select Box"
endsnippet endsnippet
snippet textarea "XHTML <textarea>" snippet textarea "XHTML <textarea>" w
<textarea name="${1:Name}" rows="${2:8}" cols="${3:40}">$0</textarea> <textarea name="${1:Name}" rows="${2:8}" cols="${3:40}">$0</textarea>
endsnippet endsnippet
snippet mailto "XHTML <a mailto: >" snippet mailto "XHTML <a mailto: >" w
<a href="mailto:${1:joe@example.com}?subject=${2:feedback}">${3:email me}</a> <a href="mailto:${1:joe@example.com}?subject=${2:feedback}">${3:email me}</a>
endsnippet endsnippet
snippet base "XHTML <base>" snippet base "XHTML <base>" w
<base href="$1"${2: target="$3"}`!p x(snip)`> <base href="$1"${2: target="$3"}`!p x(snip)`>
endsnippet endsnippet
snippet img "XHTML <img>" w
<img src="${1:imgsrc}">
endsnippet
snippet body "XHTML <body>" snippet body "XHTML <body>"
<body id="${1:`!p <body id="${1:`!p
snip.rv = snip.fn and 'Hallo' or 'Nothin' snip.rv = snip.fn and 'Hallo' or 'Nothin'
@ -166,13 +172,13 @@ snip.rv = snip.fn and 'Hallo' or 'Nothin'
</body> </body>
endsnippet endsnippet
snippet div "XHTML <div>" snippet div "XHTML <div>" w
<div`!p snip.rv=' id="' if t[1] else ""`${1:name}`!p snip.rv = '"' if t[1] else ""`> <div`!p snip.rv=' id="' if t[1] else ""`${1:name}`!p snip.rv = '"' if t[1] else ""``!p snip.rv=' class="' if t[2] else ""`${2:name}`!p snip.rv = '"' if t[2] else ""`>
$0 $0
</div> </div>
endsnippet endsnippet
snippet form "XHTML <form>" snippet form "XHTML <form>" w
<form action="${1:`!p <form action="${1:`!p
snip.rv = (snip.basename or 'unnamed') + '_submit' snip.rv = (snip.basename or 'unnamed') + '_submit'
`}" method="${2:get}" accept-charset="utf-8"> `}" method="${2:get}" accept-charset="utf-8">
@ -182,7 +188,7 @@ snip.rv = (snip.basename or 'unnamed') + '_submit'
</form> </form>
endsnippet endsnippet
snippet h1 "XHTML <h1>" snippet h1 "XHTML <h1>" w
<h1 id="${1/[\w\d]+|( )/(?1:_:\L$0\E)/g}">${1}</h1> <h1 id="${1/[\w\d]+|( )/(?1:_:\L$0\E)/g}">${1}</h1>
endsnippet endsnippet
@ -194,71 +200,70 @@ snippet head "XHTML <head>"
</head> </head>
endsnippet endsnippet
snippet link "XHTML <link>" snippet link "XHTML <link>" w
<link rel="${1:stylesheet}" href="${2:/css/master.css}" type="text/css" media="${3:screen}" title="${4:no title}" charset="${5:utf-8}"`!p x(snip)`> <link rel="${1:stylesheet}" href="${2:/css/master.css}" type="text/css" media="${3:screen}" title="${4:no title}" charset="${5:utf-8}"`!p x(snip)`>
endsnippet endsnippet
snippet meta "XHTML <meta>" snippet meta "XHTML <meta>" w
<meta name="${1:name}" content="${2:content}"`!p x(snip)`> <meta name="${1:name}" content="${2:content}"`!p x(snip)`>
endsnippet endsnippet
snippet scriptsrc "XHTML <script src...>" snippet scriptsrc "XHTML <script src...>" w
<script src="$1" type="text/javascript" charset="${3:utf-8}"></script> <script src="$1" type="text/javascript" charset="${3:utf-8}"></script>
endsnippet endsnippet
snippet script "XHTML <script>" snippet script "XHTML <script>" w
<script type="text/javascript" charset="utf-8"> <script type="text/javascript" charset="utf-8">
$0 $0
</script> </script>
endsnippet endsnippet
snippet style "XHTML <style>" snippet style "XHTML <style>" w
<style type="text/css" media="screen"> <style type="text/css" media="screen">
$0 $0
</style> </style>
endsnippet endsnippet
snippet table "XHTML <table>" snippet table "XHTML <table>" w
<table border="${1:0}"${2: cellspacing="${3:5}" cellpadding="${4:5}"}> <table border="${1:0}"${2: cellspacing="${3:5}" cellpadding="${4:5}"}>
<tr><th>${5:Header}</th></tr> <tr><th>${5:Header}</th></tr>
<tr><td>${0:Data}</td></tr> <tr><td>${0:Data}</td></tr>
</table> </table>
endsnippet endsnippet
snippet a "Link" snippet a "Link" w
<a href="${1:http://www.${2:url.com}}"${3: target="_blank"}>${4:Anchor Text}</a> <a href="${1:http://www.${2:url.com}}"${3: target="_blank"}>${4:Anchor Text}</a>
endsnippet endsnippet
snippet p "paragraph" snippet p "paragraph" w
<p>$0</p> <p>$0</p>
endsnippet endsnippet
snippet li "list item" snippet li "list item" w
<li></li> <li>$0</li>
endsnippet endsnippet
snippet ul "unordered list" snippet ul "unordered list" w
<ul> <ul>
$0 $0
</ul> </ul>
endsnippet endsnippet
snippet td "table cell" snippet td "table cell" w
<td>$0</td> <td>$0</td>
endsnippet endsnippet
snippet tr "table row" snippet tr "table row" w
<tr>$0</tr> <tr>$0</tr>
endsnippet endsnippet
snippet title "XHTML <title>" snippet title "XHTML <title>" w
<title>${1:`!p snip.rv = snip.basename or "Page Title"`}</title> <title>${1:`!p snip.rv = snip.basename or "Page Title"`}</title>
endsnippet endsnippet
snippet fieldset "Fieldset" snippet fieldset "Fieldset" w
<fieldset id="${1/[\w\d]+|( )/(?1:_:\L$0\E)/g}" ${2:class="${3:}"}> <fieldset id="${1/[\w\d]+|( )/(?1:_:\L$0\E)/g}" ${2:class="${3:}"}>
<legend>$1</legend> <legend>$1</legend>
$0 $0
</fieldset> </fieldset>
endsnippet endsnippet
@ -282,7 +287,7 @@ snippet html5 "HTML5 Template"
<html> <html>
<head> <head>
<title>${1}</title> <title>${1}</title>
<meta charset="utf-8"> <meta charset="utf-8" />
</head> </head>
<body> <body>
<header> <header>

View file

@ -1,6 +1,8 @@
# more can be found in snippets/html_minimal.snippets # more can be found in snippets/html_minimal.snippets
# these UltiSnips override snippets because nested placeholders are being used # these UltiSnips override snippets because nested placeholders are being used
priority -50
snippet id snippet id
id="${1}"${2} id="${1}"${2}
endsnippet endsnippet

View file

@ -1 +1,3 @@
priority -50
extends html, django extends html, django

View file

@ -0,0 +1,3 @@
priority -50
extends html, jinja2

View file

@ -1,27 +1,75 @@
########################################################################### priority -50
# TEXTMATE SNIPPETS #
###########################################################################
# Many of the snippets here use a global option called # Many of the snippets here use a global option called
# "g:ultisnips_java_brace_style" which, if set to "nl" will put a newline # "g:ultisnips_java_brace_style" which, if set to "nl" will put a newline
# before '{' braces. # before '{' braces.
# Setting "g:ultisnips_java_junit" will change how the test method snippet
# looks, it is defaulted to junit4, setting this option to 3 will remove the
# @Test annotation from the method
global !p global !p
def junit(snip):
if snip.opt("g:ultisnips_java_junit", "") == "3":
snip += ""
else:
snip.rv += "@Test\n\t"
def nl(snip): def nl(snip):
if snip.opt("g:ultisnips_java_brace_style", "") == "nl": if snip.opt("g:ultisnips_java_brace_style", "") == "nl":
snip += "" snip += ""
else: else:
snip.rv += " " snip.rv += " "
def getArgs(group):
import re
word = re.compile('[a-zA-Z><.]+ \w+')
return [i.split(" ") for i in word.findall(group) ]
def camel(word):
return word[0].upper() + word[1:]
endglobal endglobal
snippet sleep "try sleep catch" b
try {
Thread.sleep(${1:1000});
} catch (InterruptedException e){
e.printStackTrace();
}
endsnippet
snippet /i|n/ "new primitive or int" br
${1:int} ${2:i} = ${3:1};
$0
endsnippet
snippet /o|v/ "new Object or variable" br
${1:Object} ${2:var} = new $1(${3});
endsnippet
snippet f "field" b
${1:private} ${2:String} ${3:`!p snip.rv = t[2].lower()`};
endsnippet
snippet ab "abstract" b snippet ab "abstract" b
abstract abstract $0
endsnippet endsnippet
snippet as "assert" b snippet as "assert" b
assert ${1:test}${2/(.+)/(?1: \: ")/}${2:Failure message}${2/(.+)/(?1:")/};$0 assert ${1:test}${2/(.+)/(?1: \: ")/}${2:Failure message}${2/(.+)/(?1:")/};$0
endsnippet endsnippet
snippet at "assert true" b
assertTrue(${1:actual});
endsnippet
snippet af "assert false" b
assertFalse(${1:actual});$0
endsnippet
snippet ae "assert equals" b
assertEquals(${1:expected}, ${2:actual});
endsnippet
snippet br "break" snippet br "break"
break; break;
@ -39,19 +87,85 @@ catch (${1:Exception} ${2:e})`!p nl(snip)`{
} }
endsnippet endsnippet
snippet cl "class" b snippet cle "class extends" b
class ${1:`!p public class ${1:`!p
snip.rv = snip.basename or "untitled"`} ${2:extends ${3:Parent} }${4:implements ${5:Interface} }{ snip.rv = snip.basename or "untitled"`} ${2:extends ${3:Parent} }${4:implements ${5:Interface} }{
$0 $0
} }
endsnippet endsnippet
snippet clc "class with constructor, fields, setter and getters" b
public class `!p
snip.rv = snip.basename or "untitled"` {
`!p
args = getArgs(t[1])
if len(args) == 0: snip.rv = ""
for i in args:
snip.rv += "\n\tprivate " + i[0] + " " + i[1]+ ";"
if len(args) > 0:
snip.rv += "\n"`
public `!p snip.rv = snip.basename or "unknown"`($1) { `!p
args = getArgs(t[1])
for i in args:
snip.rv += "\n\t\tthis." + i[1] + " = " + i[1] + ";"
if len(args) == 0:
snip.rv += "\n"`
}$0
`!p
args = getArgs(t[1])
if len(args) == 0: snip.rv = ""
for i in args:
snip.rv += "\n\tpublic void set" + camel(i[1]) + "(" + i[0] + " " + i[1] + ") {\n" + "\
\tthis." + i[1] + " = " + i[1] + ";\n\t}\n"
snip.rv += "\n\tpublic " + i[0] + " get" + camel(i[1]) + "() {\
\n\t\treturn " + i[1] + ";\n\t}\n"
`
}
endsnippet
snippet clc "class with constructor, with field names" b
public class `!p
snip.rv = snip.basename or "untitled"` {
`!p
args = getArgs(t[1])
for i in args:
snip.rv += "\n\tprivate " + i[0] + " " + i[1]+ ";"
if len(args) > 0:
snip.rv += "\n"`
public `!p snip.rv = snip.basename or "unknown"`($1) { `!p
args = getArgs(t[1])
for i in args:
snip.rv += "\n\t\tthis." + i[1] + " = " + i[1]
if len(args) == 0:
snip.rv += "\n"`
}
}
endsnippet
snippet clc "class and constructor" b
public class `!p
snip.rv = snip.basename or "untitled"` {
public `!p snip.rv = snip.basename or "untitled"`($2) {
$0
}
}
endsnippet
snippet cl "class" b
public class ${1:`!p
snip.rv = snip.basename or "untitled"`} {
$0
}
endsnippet
snippet cos "constant string" b snippet cos "constant string" b
static public final String ${1:var} = "$2";$0 public static final String ${1:var} = "$2";$0
endsnippet endsnippet
snippet co "constant" b snippet co "constant" b
static public final ${1:String} ${2:var} = $3;$0 public static final ${1:String} ${2:var} = $3;$0
endsnippet endsnippet
snippet de "default" b snippet de "default" b
@ -59,7 +173,7 @@ default:
$0 $0
endsnippet endsnippet
snippet eif "else if" b snippet elif "else if" b
else if ($1)`!p nl(snip)`{ else if ($1)`!p nl(snip)`{
$0 $0
} }
@ -72,7 +186,7 @@ else`!p nl(snip)`{
endsnippet endsnippet
snippet fi "final" b snippet fi "final" b
final final $0
endsnippet endsnippet
snippet fore "for (each)" b snippet fore "for (each)" b
@ -81,6 +195,12 @@ for ($1 : $2)`!p nl(snip)`{
} }
endsnippet endsnippet
snippet fori "for" b
for (int ${1:i} = 0; $1 < ${2:10}; $1++)`!p nl(snip)`{
$0
}
endsnippet
snippet for "for" b snippet for "for" b
for ($1; $2; $3)`!p nl(snip)`{ for ($1; $2; $3)`!p nl(snip)`{
$0 $0
@ -99,7 +219,7 @@ $0
endsnippet endsnippet
snippet im "import" b snippet im "import" b
import import ${1:java}.${2:util}.$0
endsnippet endsnippet
snippet in "interface" b snippet in "interface" b
@ -108,6 +228,48 @@ interface ${1:`!p snip.rv = snip.basename or "untitled"`} ${2:extends ${3:Parent
} }
endsnippet endsnippet
snippet cc "constructor call or setter body"
this.${1:var} = $1;
endsnippet
snippet list "Collections List" b
List<${1:String}> ${2:list} = new ${3:Array}List<$1>();
endsnippet
snippet map "Collections Map" b
Map<${1:String}, ${2:String}> ${3:map} = new ${4:Hash}Map<$1, $2>();
endsnippet
snippet set "Collections Set" b
Set<${1:String}> ${2:set} = new ${3:Hash}Set<$1>();
endsnippet
snippet /Str?|str/ "String" br
String $0
endsnippet
snippet cn "Constructor" b
public `!p snip.rv = snip.basename or "untitled"`(${1:}) {
$0
}
endsnippet
snippet cn "constructor, \w fields + assigments" b
`!p
args = getArgs(t[1])
for i in args:
snip.rv += "\n\tprivate " + i[0] + " " + i[1]+ ";"
if len(args) > 0:
snip.rv += "\n"`
public `!p snip.rv = snip.basename or "unknown"`($1) { `!p
args = getArgs(t[1])
for i in args:
snip.rv += "\n\t\tthis." + i[1] + " = " + i[1]
if len(args) == 0:
snip.rv += "\n"`
}
endsnippet
snippet j.b "java_beans_" i snippet j.b "java_beans_" i
java.beans. java.beans.
endsnippet endsnippet
@ -134,15 +296,70 @@ public static void main(String[] args)`!p nl(snip)`{
} }
endsnippet endsnippet
snippet m "method" b snippet try "try/catch" b
${1:void} ${2:method}($3) ${4:throws $5 }{ try {
$1
} catch(${2:Exception} ${3:e}){
${4:e.printStackTrace();}
}
endsnippet
snippet mt "method throws" b
${1:private} ${2:void} ${3:method}(${4}) ${5:throws $6 }{
$0 $0
} }
endsnippet
snippet m "method" b
${1:private} ${2:void} ${3:method}(${4}) {
$0
}
endsnippet
snippet md "Method With javadoc" b
/**
* ${7:Short Description}`!p
for i in getArgs(t[4]):
snip.rv += "\n\t * @param " + i[1] + " usage..."`
* `!p
if "throws" in t[5]:
snip.rv = "\n\t * @throws " + t[6]
else:
snip.rv = ""` `!p
if not "void" in t[2]:
snip.rv = "\n\t * @return object"
else:
snip.rv = ""`
**/
${1:public} ${2:void} ${3:method}($4) ${5:throws $6 }{
$0
}
endsnippet
snippet /get(ter)?/ "getter" br
public ${1:String} get${2:Name}() {
return `!p snip.rv = t[2].lower()`;
}
endsnippet
snippet /set(ter)?/ "setter" br
public void set${1:Name}(${2:String} $1) {
return this.`!p snip.rv = t[1].lower()` = `!p snip.rv = t[1].lower()`;
}
endsnippet
snippet /se?tge?t|ge?tse?t|gs/ "setter and getter" br
public void set${1:Name}(${2:String} `!p snip.rv = t[1].lower()`) {
this.`!p snip.rv = t[1].lower()` = `!p snip.rv = t[1].lower()`;
}
public $2 get$1() {
return `!p snip.rv = t[1].lower()`;
}
endsnippet endsnippet
snippet pa "package" b snippet pa "package" b
package package $0
endsnippet endsnippet
snippet p "print" b snippet p "print" b
@ -154,33 +371,33 @@ System.out.println($1);$0
endsnippet endsnippet
snippet pr "private" b snippet pr "private" b
private private $0
endsnippet endsnippet
snippet po "protected" b snippet po "protected" b
protected protected $0
endsnippet endsnippet
snippet pu "public" b snippet pu "public" b
public public $0
endsnippet endsnippet
snippet re "return" b snippet re "return" b
return return $0
endsnippet endsnippet
snippet st "static" snippet st "static"
static static $0
endsnippet endsnippet
snippet sw "switch" b snippet sw "switch" b
switch ($1)`!p nl(snip)`{ switch ($1)`!p nl(snip)`{
$0 case $2: $0
} }
endsnippet endsnippet
snippet sy "synchronized" snippet sy "synchronized"
synchronized synchronized $0
endsnippet endsnippet
snippet tc "test case" snippet tc "test case"
@ -190,17 +407,19 @@ public class ${1:`!p snip.rv = snip.basename or "untitled"`} extends ${2:TestCas
endsnippet endsnippet
snippet t "test" b snippet t "test" b
public void test${1:Name}() throws Exception`!p nl(snip)`{ `!p junit(snip)`public void test${1:Name}() {
$0
}
endsnippet
snippet tt "test throws" b
`!p junit(snip)`public void test${1:Name}() ${2:throws Exception }{
$0 $0
} }
endsnippet endsnippet
snippet th "throw" b snippet th "throw" b
throw $0 throw new $0
endsnippet
snippet v "variable" b
${1:String} ${2:var}${3: = ${0:null}};
endsnippet endsnippet
snippet wh "while" b snippet wh "while" b

View file

@ -1,3 +1,5 @@
priority -50
########################################################################### ###########################################################################
# TextMate Snippets # # TextMate Snippets #
########################################################################### ###########################################################################
@ -6,19 +8,19 @@ getElement${1/(T)|.*/(?1:s)/}By${1:T}${1/(T)|(I)|.*/(?1:agName)(?2:d)/}('$2')
endsnippet endsnippet
snippet '':f "object method string" snippet '':f "object method string"
'${1:${2:#thing}:${3:click}}': function(element){ '${1:${2:#thing}:${3:click}}': function(element) {
$0 ${VISUAL}$0
}${10:,} }${10:,}
endsnippet endsnippet
snippet :f "Object Method" snippet :f "Object Method"
${1:method_name}: function(${3:attribute}){ ${1:method_name}: function(${3:attribute}) {
$0 ${VISUAL}$0
}${10:,} }${10:,}
endsnippet endsnippet
snippet :, "Object Value JS" snippet :, "Object Value JS"
${1:value_name}:${0:value}, ${1:value_name}: ${0:value},
endsnippet endsnippet
snippet : "Object key key: 'value'" snippet : "Object key key: 'value'"
@ -26,47 +28,135 @@ ${1:key}: ${2:"${3:value}"}${4:, }
endsnippet endsnippet
snippet proto "Prototype (proto)" snippet proto "Prototype (proto)"
${1:class_name}.prototype.${2:method_name} = function(${3:first_argument}) ,,{ ${1:class_name}.prototype.${2:method_name} = function(${3:first_argument}) {
${0} ${VISUAL}$0
} };
endsnippet endsnippet
snippet for "for (...) {...} (faster)" snippet for "for (...) {...} (counting up)" b
for (var ${2:i} = ${1:Things}.length - 1; $2 >= 0; $2--){ for (var ${1:i} = 0, ${2:len} = ${3:Things.length}; $1 < $2; $1++) {
${3:$1[$2]}$0 ${VISUAL}$0
} }
endsnippet endsnippet
snippet for "for (...) {...}" snippet ford "for (...) {...} (counting down, faster)" b
for (var ${2:i}=0; $2 < ${1:Things}.length; $2++) { for (var ${2:i} = ${1:Things.length} - 1; $2 >= 0; $2--) {
${3:$1[$2]}$0 ${VISUAL}$0
} }
endsnippet endsnippet
snippet fun "function (fun)" snippet fun "function (fun)"
function ${1:function_name} (${2:argument}) { function ${1:function_name}(${2:argument}) {
${0} ${VISUAL}$0
} }
endsnippet endsnippet
# for one line if .. else you usually use a ? b : c snippet iife "Immediately-Invoked Function Expression (iife)"
(function (${1:argument}) {
${VISUAL}$0
}(${2:$1}));
endsnippet
snippet ife "if ___ else" snippet ife "if ___ else"
if (${1}) { if (${1:condition}) {
${2} ${2://code}
} else { }
${3} else {
${3://code}
} }
endsnippet endsnippet
snippet if "if" snippet if "if"
if (${1}) { if (${1:condition}) {
${2} ${VISUAL}$0
} }
endsnippet endsnippet
snippet timeout "setTimeout function" snippet timeout "setTimeout function"
setTimeout(function() {$0}${2:}, ${1:10}) setTimeout(function() {
${VISUAL}$0
}${2:.bind(${3:this})}, ${1:10});
endsnippet
# Snippets for Console Debug Output
snippet ca "console.assert" b
console.assert(${1:assertion}, ${2:"${3:message}"});
endsnippet
snippet cclear "console.clear" b
console.clear();
endsnippet
snippet cdir "console.dir" b
console.dir(${1:object});
endsnippet
snippet cdirx "console.dirxml" b
console.dirxml(${1:object});
endsnippet
snippet ce "console.error" b
console.error(${1:"${2:value}"});
endsnippet
snippet cgroup "console.group" b
console.group("${1:label}");
${VISUAL}$0
console.groupEnd();
endsnippet
snippet cgroupc "console.groupCollapsed" b
console.groupCollapsed("${1:label}");
${VISUAL}$0
console.groupEnd();
endsnippet
snippet ci "console.info" b
console.info(${1:"${2:value}"});
endsnippet
snippet cl "console.log" b
console.log(${1:"${2:value}"});
endsnippet
snippet cprof "console.profile" b
console.profile("${1:label}");
${VISUAL}$0
console.profileEnd();
endsnippet
snippet ctable "console.table" b
console.table(${1:"${2:value}"});
endsnippet
snippet ctime "console.time" b
console.time("${1:label}");
${VISUAL}$0
console.timeEnd("$1");
endsnippet
snippet ctimestamp "console.timeStamp" b
console.timeStamp("${1:label}");
endsnippet
snippet ctrace "console.trace" b
console.trace();
endsnippet
snippet cw "console.warn" b
console.warn(${1:"${2:value}"});
endsnippet
# AMD (Asynchronous Module Definition) snippets
snippet def "define an AMD module"
define(${1:optional_name, }[${2:'jquery'}], ${3:callback});
endsnippet
snippet req "require an AMD module"
require([${1:'dependencies'}], ${2:callback});
endsnippet endsnippet
# vim:ft=snippets: # vim:ft=snippets:

View file

@ -2,6 +2,8 @@
# Ember snippets # # Ember snippets #
################################################################### ###################################################################
priority -50
# Application # Application
snippet eapp "App.Name = Ember.Application.create({});" snippet eapp "App.Name = Ember.Application.create({});"
${1:App.Name} = Ember.Application.create({}); ${1:App.Name} = Ember.Application.create({});
@ -10,48 +12,48 @@ endsnippet
# Models # Models
snippet emod "App.ModelName = Ember.Model.extend({...});" snippet emod "App.ModelName = Ember.Model.extend({...});"
${1:model_name} = Ember.Model.extend({ ${1:model_name} = Ember.Model.extend({
${0://Properties here...} ${0://Properties here...}
}); });
endsnippet endsnippet
# View # View
snippet eview "App.ViewName = Ember.Model.extend({...});" snippet eview "App.ViewName = Ember.Model.extend({...});"
${1:view_name} = Ember.View.extend({ ${1:view_name} = Ember.View.extend({
${0://Properties here...} ${0://Properties here...}
}); });
endsnippet endsnippet
# Controller # Controller
snippet econtroller "App.ControllerName = Ember.Model.extend({...});" snippet econtroller "App.ControllerName = Ember.Model.extend({...});"
${1:controller_name} = Ember.ObjectController.extend({ ${1:controller_name} = Ember.ObjectController.extend({
${0://Properties here...} ${0://Properties here...}
}); });
endsnippet endsnippet
# Route # Route
snippet eroute "App.RouteName = Ember.Route.extend({...});" snippet eroute "App.RouteName = Ember.Route.extend({...});"
${1:route_name} = Ember.Route.extend({ ${1:route_name} = Ember.Route.extend({
${0://Properties here...} ${0://Properties here...}
}); });
endsnippet endsnippet
snippet eview "App.ViewName = Ember.Model.create({...});" snippet eview "App.ViewName = Ember.Model.create({...});"
${1:view_name} = Ember.View.create({ ${1:view_name} = Ember.View.create({
${0://Properties here...} ${0://Properties here...}
}); });
endsnippet endsnippet
# Object # Object
snippet eobj "App.ObjectName = Ember.Object.extend({...});" snippet eobj "App.ObjectName = Ember.Object.extend({...});"
${1:object_name} = Ember.Object.create({ ${1:object_name} = Ember.Object.create({
${0://Properties here...} ${0://Properties here...}
}); });
endsnippet endsnippet
# Mixin # Mixin
snippet emix "App.MixinName = Ember.Model.extend({...});" snippet emix "App.MixinName = Ember.Model.extend({...});"
${1:view_name} = Ember.Mixin.create({ ${1:view_name} = Ember.Mixin.create({
${0://Properties here...} ${0://Properties here...}
}); });
endsnippet endsnippet
@ -67,13 +69,13 @@ endsnippet
# Computer properties # Computer properties
snippet cpro "property_name: function() {...}.property()," snippet cpro "property_name: function() {...}.property(),"
${1:property_name}: function() { ${1:property_name}: function() {
${0://body...} ${0://body...}
}.property('${3:argumenet}'), }.property('${3:argumenet}'),
endsnippet endsnippet
snippet cpro ": function() {...}.property('property')," snippet cpro ": function() {...}.property('property'),"
${1:property_name}: function() { ${1:property_name}: function() {
${0://body...} ${0://body...}
}.property(), }.property(),
endsnippet endsnippet
@ -81,7 +83,7 @@ endsnippet
# Observes # Observes
snippet proo "property_name: function() {...}.property()" snippet proo "property_name: function() {...}.property()"
${1:property_name}: function() { ${1:property_name}: function() {
${0://body...} ${0://body...}
}.observes('${3:property}'), }.observes('${3:property}'),
endsnippet endsnippet

View file

@ -1,8 +1,8 @@
# priority -50
# JavaScript versions -- from the TextMate bundle + some additions # JavaScript versions -- from the TextMate bundle + some additions
# for jasmine-jquery matchers # for jasmine-jquery matchers
# #
extends javascript
snippet des "Describe (js)" b snippet des "Describe (js)" b
describe('${1:description}', function() { describe('${1:description}', function() {
@ -165,4 +165,3 @@ endsnippet
snippet noscw "expect was not called with (js)" b snippet noscw "expect was not called with (js)" b
expect(${1:target}).wasNotCalledWith(${2:arguments}); expect(${1:target}).wasNotCalledWith(${2:arguments});
endsnippet endsnippet

View file

@ -0,0 +1,51 @@
priority -50
# JSDoc snippets
snippet /* "A JSDoc comment" b
/**
* ${1:${VISUAL}}$0
*/
endsnippet
snippet @au "@author email (First Last)"
@author ${1:`!v g:snips_author_email`} (${2:`!v g:snips_author`})
endsnippet
snippet @li "@license Description"
@license ${1:MIT}$0
endsnippet
snippet @ver "@version Semantic version"
@version ${1:0.1.0}$0
endsnippet
snippet @fileo "@fileoverview Description" b
/**
* @fileoverview ${1:${VISUAL:A description of the file}}$0
*/
endsnippet
snippet @constr "@constructor"
@constructor
endsnippet
snippet @p "@param {Type} varname Description"
@param {${1:Type}} ${2:varname} ${3:Description}
endsnippet
snippet @ret "@return {Type} Description"
@return {${1:Type}} ${2:Description}
endsnippet
snippet @pri "@private"
@private
endsnippet
snippet @over "@override"
@override
endsnippet
snippet @pro "@protected"
@protected
endsnippet

View file

@ -1,3 +1,4 @@
priority -50
# http://jinja.pocoo.org/ # http://jinja.pocoo.org/
@ -11,7 +12,7 @@
snippet block "block" b snippet block "block" b
{% block ${1:name} %} {% block ${1:name} %}
$2 $2
{% endblock $1 %} {% endblock $1 %}
endsnippet endsnippet
@ -33,7 +34,7 @@ endsnippet
snippet raw "escaped block" b snippet raw "escaped block" b
{% raw %} {% raw %}
$1 $1
{% endraw %} {% endraw %}
endsnippet endsnippet
@ -60,7 +61,7 @@ endsnippet
snippet filter "filter" b snippet filter "filter" b
{% filter ${1:filter} %} {% filter ${1:filter} %}
$2 $2
{% endfilter %} {% endfilter %}
endsnippet endsnippet
@ -78,57 +79,57 @@ endsnippet
snippet for "for" b snippet for "for" b
{% for ${1:item} in ${2:sequence} %} {% for ${1:item} in ${2:sequence} %}
$3 $3
{% endfor %} {% endfor %}
endsnippet endsnippet
snippet for "for/else" b snippet for "for/else" b
{% for ${1:item} in ${2:sequence} %} {% for ${1:item} in ${2:sequence} %}
$3 $3
{% else %} {% else %}
$4 $4
{% endfor %} {% endfor %}
endsnippet endsnippet
snippet if "if" b snippet if "if" b
{% if ${1:expr} %} {% if ${1:expr} %}
$2 $2
{% endif %} {% endif %}
endsnippet endsnippet
snippet if "if/else" b snippet if "if/else" b
{% if ${1:expr} %} {% if ${1:expr} %}
$2 $2
{% else %} {% else %}
$3 $3
{% endif %} {% endif %}
endsnippet endsnippet
snippet if "if/elif/else" b snippet if "if/elif/else" b
{% if ${1:expr} %} {% if ${1:expr} %}
$2 $2
{% elif %} {% elif %}
$3 $3
{% else %} {% else %}
$4 $4
{% endif %} {% endif %}
endsnippet endsnippet
snippet macro "macro" b snippet macro "macro" b
{% macro ${1:name}(${2:args}) %} {% macro ${1:name}(${2:args}) %}
$3 $3
{% endmacro %} {% endmacro %}
endsnippet endsnippet
snippet call "call" b snippet call "call" b
{% call ${1:name}(${2:args}) %} {% call ${1:name}(${2:args}) %}
$3 $3
{% endcall %} {% endcall %}
endsnippet endsnippet
@ -140,25 +141,24 @@ endsnippet
snippet trans "translation" b snippet trans "translation" b
{% trans %} {% trans %}
$1 $1
{% endtrans %} {% endtrans %}
endsnippet endsnippet
snippet with "with" b snippet with "with" b
{% with %} {% with %}
$1 $1
{% endwith %} {% endwith %}
endsnippet endsnippet
snippet autoescape "autoescape" b snippet autoescape "autoescape" b
{% autoescape ${1:true} %} {% autoescape ${1:true} %}
$2 $2
{% endautoescape %} {% endautoescape %}
endsnippet endsnippet
# Filters # Filters
# @todo: expand only when snippet is preceeded by a | # @todo: expand only when snippet is preceeded by a |
snippet batch "batch items" w snippet batch "batch items" w

View file

@ -1,3 +1,5 @@
priority -50
snippet s "String" b snippet s "String" b
"${1:key}": "${0:value}", "${1:key}": "${0:value}",
endsnippet endsnippet
@ -8,12 +10,11 @@ endsnippet
snippet a "Array" b snippet a "Array" b
[ [
${VISUAL}$0 ${VISUAL}$0
], ],
endsnippet endsnippet
snippet o "Object" b snippet o "Object" b
{ {
${VISUAL}$0 ${VISUAL}$0
}, },
endsnippet endsnippet

View file

@ -0,0 +1,8 @@
priority -50
snippet t "Transaction" b
${1:`!v strftime("%Y")`}-${2:`!v strftime("%m")`}-${3:`!v strftime("%d")`} ${4:*} ${5:Payee}
${6:Expenses} \$${7:0.00}
${8:Assets:Checking}
$0
endsnippet

View file

@ -0,0 +1,3 @@
priority -50
extends haskell

View file

@ -1,3 +1,5 @@
priority -50
################################# #################################
# Snippets for the Lua language # # Snippets for the Lua language #
################################# #################################
@ -8,25 +10,25 @@ endsnippet
snippet !fun(ction)?! "New function" br snippet !fun(ction)?! "New function" br
function ${1:new_function}(${2:args}) function ${1:new_function}(${2:args})
$0 $0
end end
endsnippet endsnippet
snippet forp "pair for loop" b snippet forp "pair for loop" b
for ${1:name},${2:val} in pairs(${3:table_name}) do for ${1:name},${2:val} in pairs(${3:table_name}) do
$0 $0
end end
endsnippet endsnippet
snippet fori "ipair for foop" b snippet fori "ipair for foop" b
for ${1:idx},${2:val} in ipairs(${3:table_name}) do for ${1:idx},${2:val} in ipairs(${3:table_name}) do
$0 $0
end end
endsnippet endsnippet
snippet for "numeric for loop" b snippet for "numeric for loop" b
for ${1:i}=${2:first},${3:last}${4/^..*/(?0:,:)/}${4:step} do for ${1:i}=${2:first},${3:last}${4/^..*/(?0:,:)/}${4:step} do
$0 $0
end end
endsnippet endsnippet

View file

@ -1,3 +1,5 @@
priority -50
################# #################
# From snipmate # # From snipmate #
################# #################

View file

@ -1,6 +1,4 @@
########################################################################### priority -50
# SNIPPETS for MARKDOWN #
###########################################################################
########################### ###########################
# Sections and Paragraphs # # Sections and Paragraphs #

View file

@ -1,3 +1,5 @@
priority -50
########################################################################### ###########################################################################
# TextMate Snippets # # TextMate Snippets #
########################################################################### ###########################################################################
@ -11,11 +13,11 @@ snippet Imp "#import <> (Imp)"
endsnippet endsnippet
snippet cl "020 Class (objc)" snippet cl "020 Class (objc)"
@interface ${1:`!p @interface ${1:`!p
if len(fn): if len(fn):
snip.rv = re.sub(r'\..*$', '', fn) snip.rv = re.sub(r'\..*$', '', fn)
else: else:
snip.rv = "object" snip.rv = "object"
`} : ${2:NSObject} `} : ${2:NSObject}
{ {
} }
@ -118,7 +120,7 @@ snippet arracc "LoD array (arracc)"
[${3:${1/./\l$0/}} addObject:anObject]; [${3:${1/./\l$0/}} addObject:anObject];
} }
- (void)insertObject:($2)anObject in$1AtIndex:(unsigned int)i - (void)insertObject:($2)anObject in$1AtIndex:(unsigned int)i
{ {
[$3 insertObject:anObject atIndex:i]; [$3 insertObject:anObject atIndex:i];
} }
@ -189,7 +191,7 @@ if(choice == NSAlertDefaultReturn) // "$3"
} }
else if(choice == NSAlertAlternateReturn) // "$4" else if(choice == NSAlertAlternateReturn) // "$4"
{ {
$0
} }
endsnippet endsnippet
@ -217,7 +219,7 @@ endsnippet
snippet responds "Responds to Selector" snippet responds "Responds to Selector"
if ([${1:self} respondsToSelector:@selector(${2:someSelector:})]) if ([${1:self} respondsToSelector:@selector(${2:someSelector:})])
{ {
[$1 ${3:${2/((:\s*$)|(:\s*))/:<>(?3: )/g}}]; [$1 ${3:${2/((:\s*$)|(:\s*))/:<>(?3: )/g}}];
} }
endsnippet endsnippet

View file

@ -1,20 +1,22 @@
priority -50
snippet rs "raise" b snippet rs "raise" b
raise (${1:Not_found}) raise (${1:Not_found})
endsnippet endsnippet
snippet open "open" snippet open "open"
let open ${1:module} in let open ${1:module} in
${2} ${2:e}
endsnippet endsnippet
snippet try "try" snippet try "try"
try ${1} try ${1:e}
with ${2:Not_found} -> ${3:()} with ${2:Not_found} -> ${3:()}
endsnippet endsnippet
snippet ref "ref" snippet ref "ref"
let ${1} = ref ${2} in let ${1:name} = ref ${2:val} in
${3} ${3:e}
endsnippet endsnippet
snippet matchl "pattern match on a list" snippet matchl "pattern match on a list"
@ -24,83 +26,88 @@ match ${1:list} with
endsnippet endsnippet
snippet matcho "pattern match on an option type" snippet matcho "pattern match on an option type"
match ${1} with match ${1:x} with
| Some(${2}) -> ${3:()} | Some(${2:y}) -> ${3:()}
| None -> ${4:()} | None -> ${4:()}
endsnippet endsnippet
snippet fun "anonymous function" snippet fun "anonymous function"
(fun ${1} -> ${2}) (fun ${1:x} -> ${2:x})
endsnippet endsnippet
snippet cc "commment" snippet cc "commment"
(* ${1} *) (* ${1:comment} *)
endsnippet endsnippet
snippet let "let .. in binding" snippet let "let .. in binding"
let ${1} = ${2} in let ${1:x} = ${2:v} in
${3} ${3:e}
endsnippet endsnippet
snippet lr "let rec" snippet lr "let rec"
let rec ${1} = let rec ${1:f} =
${2} ${2:expr}
endsnippet endsnippet
snippet ife "if" snippet if "if"
if ${1} then if ${1:(* condition *)} then
${2} ${2:(* A *)}
else else
${3} ${3:(* B *)}
endsnippet endsnippet
snippet if "If" snippet If "If"
if ${1} then if ${1:(* condition *)} then
${2} ${2:(* A *)}
endsnippet endsnippet
snippet wh "while" snippet while "while"
while ${1} do while ${1:(* condition *)} do
${2} ${2:(* A *)}
done done
endsnippet endsnippet
snippet for "for" snippet for "for"
for ${1:i} = ${2:1} to ${3:10} do for ${1:i} = ${2:1} to ${3:10} do
${4} ${4:(* BODY *)}
done done
endsnippet endsnippet
snippet match "match" snippet match "match"
match ${1} with match ${1:(* e1 *)} with
| ${2} -> ${3} | ${2:p} -> ${3:e2}
endsnippet
snippet Match "match"
match ${1:(* e1 *)} with
| ${2:p} -> ${3:e2}
endsnippet endsnippet
snippet class "class" snippet class "class"
class ${1:name} = object class ${1:name} = object
${2} ${2:methods}
end end
endsnippet endsnippet
snippet obj "obj" snippet obj "obj"
object object
${2} ${2:methods}
end end
endsnippet endsnippet
snippet Obj "object" snippet Obj "object"
object (self) object (self)
${2} ${2:methods}
end end
endsnippet endsnippet
snippet {{ "object functional update" snippet {{ "object functional update"
{< ${1} = ${2} >} {< ${1:x} = ${2:y} >}
endsnippet endsnippet
snippet beg "beg" snippet beg "beg"
begin begin
${1}${VISUAL} ${1:block}
end end
endsnippet endsnippet
@ -110,19 +117,19 @@ endsnippet
snippet mod "module - no signature" snippet mod "module - no signature"
module ${1:(* Name *)} = struct module ${1:(* Name *)} = struct
${2} ${2:(* BODY *)}
end end
endsnippet endsnippet
snippet Mod "module with signature" snippet Mod "module with signature"
module ${1:(* Name *)} : ${2:(* SIG *)} = struct module ${1:(* Name *)} : ${2:(* SIG *)} = struct
${3} ${3:(* BODY *)}
end end
endsnippet endsnippet
snippet sig "anonymous signature" snippet sig "anonymous signature"
sig sig
${2} ${2:(* BODY *)}
end end
endsnippet endsnippet
@ -132,36 +139,36 @@ endsnippet
snippet func "define functor - no signature" snippet func "define functor - no signature"
module ${1:M} (${2:Arg} : ${3:ARG}) = struct module ${1:M} (${2:Arg} : ${3:ARG}) = struct
${4} ${4:(* BODY *)}
end end
endsnippet endsnippet
snippet Func "define functor - with signature" snippet Func "define functor - with signature"
module ${1:M} (${2:Arg} : ${3:ARG}) : ${4:SIG} = struct module ${1:M} (${2:Arg} : ${3:ARG}) : ${4:SIG} = struct
${5} ${5:(* BODY *)}
end end
endsnippet endsnippet
snippet mot "Declare module signature" snippet mot "Declare module signature"
module type ${1:(* Name *)} = sig module type ${1:(* Name *)} = sig
${2} ${2:(* BODY *)}
end end
endsnippet endsnippet
snippet module "Module with anonymous signature" snippet module "Module with anonymous signature"
module ${1:(* Name *)} : sig module ${1:(* Name *)} : sig
${2} ${2:(* SIGNATURE *)}
end = struct end = struct
${3} ${3:(* BODY *)}
end end
endsnippet endsnippet
snippet oo "odoc" snippet oo "odoc"
(** ${1} *) (** ${1:odoc} *)
endsnippet endsnippet
snippet qt "inline qtest" snippet qt "inline qtest"
(*$T ${1:name} (*$T ${1:name}
${2:test} ${2:test}
*) *)
endsnippet endsnippet

View file

@ -1,10 +1,13 @@
priority -50
########################################################################### ###########################################################################
# TextMate Snippets # # TextMate Snippets #
########################################################################### ###########################################################################
snippet ife "Conditional if..else (ife)" snippet ife "Conditional if..else (ife)"
if ($1) { if ($1) {
${2:# body...} ${2:# body...}
} else { }
else {
${3:# else...} ${3:# else...}
} }
@ -13,9 +16,11 @@ endsnippet
snippet ifee "Conditional if..elsif..else (ifee)" snippet ifee "Conditional if..elsif..else (ifee)"
if ($1) { if ($1) {
${2:# body...} ${2:# body...}
} elsif ($3) { }
elsif ($3) {
${4:# elsif...} ${4:# elsif...}
} else { }
else {
${5:# else...} ${5:# else...}
} }
@ -49,7 +54,7 @@ ${1:expression} while ${2:condition};
endsnippet endsnippet
snippet test "Test" snippet test "Test"
#!/usr/bin/perl -w #!/usr/bin/env perl -w
use strict; use strict;
use Test::More tests => ${1:1}; use Test::More tests => ${1:1};
@ -62,7 +67,7 @@ endsnippet
snippet class "class" snippet class "class"
package ${1:ClassName}; package ${1:ClassName};
${2:use base qw(${3:ParentClass});}${2/.+/\n\n/}sub new { ${2:use parent qw(${3:ParentClass});}${2/.+/\n\n/}sub new {
my $class = shift; my $class = shift;
$class = ref $class if ref $class; $class = ref $class if ref $class;
my $self = bless {}, $class; my $self = bless {}, $class;
@ -74,11 +79,12 @@ ${2:use base qw(${3:ParentClass});}${2/.+/\n\n/}sub new {
endsnippet endsnippet
snippet eval "eval" snippet eval "eval"
local $@;
eval { eval {
${1:# do something risky...} ${1:# do something risky...}
}; };
if ($@) { if (my $${2:exception} = $@) {
${2:# handle failure...} ${3:# handle failure...}
} }
endsnippet endsnippet
@ -105,8 +111,7 @@ if ($1) {
endsnippet endsnippet
snippet slurp "slurp" snippet slurp "slurp"
my $${1:var}; my $${1:var} = do { local $/ = undef; open my $fh, '<', ${2:$file}; <$fh> };
{ local $/ = undef; local *FILE; open FILE, "<${2:file}"; $$1 = <FILE>; close FILE }
endsnippet endsnippet
@ -117,7 +122,7 @@ unless ($1) {
endsnippet endsnippet
snippet wh "while" snippet while "while"
while ($1) { while ($1) {
${2:# body...} ${2:# body...}
} }

View file

@ -1,108 +1,264 @@
snippet <? "php open tag" b priority -50
<?php
## Snippets from SnipMate, taken from
## https://github.com/scrooloose/snipmate-snippets.git
snippet array "array"
$${1:arrayName} = array('${2}' => ${3});${4}
endsnippet endsnippet
snippet vdd "php var_dump and die" snippet def "def"
var_dump(${1}); die(); define('${1}'${2});${3}
endsnippet endsnippet
snippet ns "php namespace" b snippet do "do"
namespace ${1:`!p do {
abspath = os.path.abspath(path) ${2:// code... }
m = re.search(r'[A-Z].+(?=/)', abspath) } while (${1:/* condition */});"
if m:
snip.rv = m.group().replace('/', '\\')
`};
endsnippet endsnippet
snippet nc "php namespace and class or interface" b snippet doc_f "doc_f"
namespace ${1:`!p
abspath = os.path.abspath(path)
m = re.search(r'[A-Z].+(?=/)', abspath)
if m:
snip.rv = m.group().replace('/', '\\')
`};
/** /**
* ${3:@author `whoami`}${4} * $2
*/ * @return ${4:void}
`!p * @author ${5:`!v g:snips_author`}
m = re.search(r'Abstract', path) **/
if m: ${1:public }function ${2:someFunc}(${3})
snip.rv = 'abstract ' {${6}
``!p
if re.search(r'Interface', path):
snip.rv = 'interface'
elif re.search(r'Trait', path):
snip.rv = 'trait'
else:
snip.rv = 'class'
` ${2:`!p
snip.rv = re.match(r'.*(?=\.)', fn).group()
`}
{
} }
endsnippet endsnippet
snippet st "php static function" b snippet doc_i "doc_i"
${1:public} static function $2($3)
{
${4}
}
endsnippet
snippet __ "php constructor" b
${1:public} function __construct($2)
{
${3}
}
endsnippet
snippet sg "Setter and Getter" b
/** /**
* @var ${3:`!p snip.rv = t[2][0:1].upper() + t[2][1:]`} * $1
* * @package ${2:default}
* ${4} * @author ${3:`!v g:snips_author`}
**/
interface ${1:someClass}
{${4}
} // END interface $1"
endsnippet
snippet else "else"
else {
${1:// code...}
}
endsnippet
snippet for "for"
for ($${2:i} = 0; $$2 < ${1:count}; $$2${3:++}) {
${4:// code...}
}
endsnippet
snippet foreachk "foreachk"
foreach ($${1:variable} as $${2:key} => $${3:value}){
${4:// code...}
}
endsnippet
snippet get "get"
$_GET['${1}']${2}
endsnippet
snippet if "if"
if (${1:/* condition */}) {
${2:// code...}
}
endsnippet
snippet inc "inc"
include '${1:file}';${2}
endsnippet
snippet log "log"
error_log(var_export(${1}, true));${2}
endsnippet
snippet post "post"
$_POST['${1}']${2}
endsnippet
snippet req1 "req1"
require_once '${1:file}';${2}
endsnippet
snippet session "session"
$_SESSION['${1}']${2}
endsnippet
snippet t "t"
$${1:retVal} = (${2:condition}) ? ${3:a} : ${4:b};${5}
endsnippet
snippet var "var"
var_export(${1});${2}
endsnippet
snippet getter "PHP Class Getter" b
/*
* Getter for $1
*/ */
${1:protected} $${2}; public function get${1/\w+\s*/\u$0/}()
public function set`!p snip.rv = t[2][0:1].upper() + t[2][1:]`(`!p
if re.match(r'^(\\|[A-Z]).*', t[3]):
snip.rv = t[3] + ' '
else:
snip.rv = ''
`$$2)
{ {
$this->$2 = $$2; return $this->$1;$2
return $this;
}
public function get`!p snip.rv = t[2][0:1].upper() + t[2][1:]`()
{
return $this->$2;
} }
$4
endsnippet endsnippet
snippet if "php if" !b snippet setter "PHP Class Setter" b
if (${1}) { /*
${2} * Setter for $1
*/
public function set${1/\w+\s*/\u$0/}($$1)
{
$this->$1 = $$1;$3
${4:return $this;}
} }
$0
endsnippet endsnippet
snippet ife "php ife" !b snippet gs "PHP Class Getter Setter" b
if (${1}) { /*
${2} * Getter for ${1/(\w+)\s*;/$1/}
*/
public function get${1/(\w+)\s*;/\u$1/}()
{
return $this->${1/(\w+)\s*;/$1/};$2
}
/*
* Setter for ${1/(\w+)\s*;/$1/}
*/
public function set${1/(\w+)\s*;/\u$1/}($${1/(\w+)\s*;/$1/})
{
$this->${1/(\w+)\s*;/$1/} = $${1/(\w+)\s*;/$1/};$3
${4:return $this;}
}
$0
endsnippet
snippet pub "Public function" b
public function ${1:name}(${2:$param})
{
${VISUAL}${3:return null;}
}
$0
endsnippet
snippet pro "Protected function" b
protected function ${1:name}(${2:$param})
{
${VISUAL}${3:return null;}
}
$0
endsnippet
snippet pri "Private function" b
private function ${1:name}(${2:$param})
{
${VISUAL}${3:return null;}
}
$0
endsnippet
snippet pubs "Public static function" b
public static function ${1:name}(${2:$param})
{
${VISUAL}${3:return null;}
}
$0
endsnippet
snippet pros "Protected static function" b
protected static function ${1:name}(${2:$param})
{
${VISUAL}${3:return null;}
}
$0
endsnippet
snippet pris "Private static function" b
private static function ${1:name}(${2:$param})
{
${VISUAL}${3:return null;}
}
$0
endsnippet
snippet fu "Function snip" b
function ${1:name}(${2:$param})
{
${VISUAL}${3:return null;}
}
$0
endsnippet
snippet fore "Foreach loop"
foreach ($${1:variable} as $${3:value}){
${VISUAL}${4}
}
$0
endsnippet
snippet new "New class instance" b
$$1 = new $1($2);
$0
endsnippet
snippet ife "if else"
if (${1:/* condition */}) {
${2:// code...}
} else { } else {
${3:// code...}
}
$0
endsnippet
snippet class "Class declaration template" b
/**
* Class ${1:`!p snip.rv=snip.fn.split('.')[0]`}
* @author ${2:`!v g:snips_author`}
*/
class $1
{
public function ${3:__construct}(${4:$options})
{
${4:// code}
}
}
$0
endsnippet
snippet construct "__construct()" b
/**
* @param $2mixed ${1/, /\n * \@param mixed /g}
*/
public function __construct(${1:$dependencies})
{${1/\$(\w+)(, )*/\n $this->$1 = $$1;/g}
}
$0
endsnippet
snippet pr "Dumb debug helper in HTML"
echo '<pre>' . var_export($1, 1) . '</pre>';$0
endsnippet
snippet pc "Dumb debug helper in cli"
var_export($1);$0
endsnippet
# Symfony 2 based snippets
snippet sfa "Symfony 2 Controller action"
/**
* @Route("/${1:route_name}", name="$1")
* @Template()
*/
public function $1Action($2)
{
$3
return ${4:array();}$0
} }
endsnippet endsnippet
snippet /** "php comment block" b # :vim:ft=snippets:
/**
* @${1}
*/
endsnippet

View file

@ -1,7 +1,9 @@
# sugguestion? report bugs? # suggestion? report bugs?
# please go to https://github.com/chrisyue/vim-snippets/issues # please go to https://github.com/chrisyue/vim-snippets/issues
priority -50
snippet test "phpunit test class" b snippet test "phpunit test class" b
namespace `!p namespace `!p
abspath = os.path.abspath(path) abspath = os.path.abspath(path)
m = re.search(r'[A-Z].+(?=/)', abspath) m = re.search(r'[A-Z].+(?=/)', abspath)
if m: if m:

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