mirror of
https://github.com/Raimondi/delimitMate.git
synced 2025-12-14 16:37:06 +08:00
Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
becbd2d353 | ||
|
|
382c36bf57 | ||
|
|
537a1da0fa | ||
|
|
055978491a | ||
|
|
16687aec24 | ||
|
|
728b57a656 | ||
|
|
98143957cf | ||
|
|
b5719054be | ||
|
|
39d8f522f7 |
21
LICENSE.txt
21
LICENSE.txt
@@ -1,21 +0,0 @@
|
|||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2017 Israel Chauca
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
82
Makefile
82
Makefile
@@ -1,15 +1,81 @@
|
|||||||
.DEFAULT: test
|
PLUGIN = $(wildcard plugin/*.vim)
|
||||||
|
SOURCES = $(PLUGIN)
|
||||||
|
LIB = $(wildcard autoload/*.vim)
|
||||||
|
SOURCES += $(LIB)
|
||||||
|
DOC = $(wildcard doc/*.txt)
|
||||||
|
SOURCES += $(DOC)
|
||||||
|
NAME = delimitMate
|
||||||
|
VERSION = $(shell $(SED) -n -e '/Current \+release/{s/^ \+\([0-9.]\+\).*/\1/;p;}' $(firstword $(DOC)))
|
||||||
|
FILENAME = $(NAME)-$(VERSION)
|
||||||
|
DESTDIR = $(HOME)/.vim
|
||||||
|
VIM = vim
|
||||||
|
SED = $(shell command -v gsed || command -v sed)
|
||||||
|
PERL = perl
|
||||||
|
comma := ,
|
||||||
|
empty :=
|
||||||
|
space := $(empty) $(empty)
|
||||||
|
|
||||||
test_files := $(wildcard test/*.test)
|
.PHONY: version clean distclean undo release test install uninstall
|
||||||
short_targets := $(patsubst test/%,%,$(test_files))
|
|
||||||
|
|
||||||
.PHONY: monitor test $(test_files) $(short_targets)
|
all: zip gzip
|
||||||
|
dist: version all
|
||||||
|
vimball: $(FILENAME).vmb
|
||||||
|
zip: $(FILENAME).zip $(FILENAME).vmb.zip
|
||||||
|
gzip: $(FILENAME).tar.gz $(FILENAME).vmb.gz
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f */*.orig *.~* .VimballRecord *.zip *.gz *.vmb
|
||||||
|
|
||||||
|
distclean: clean
|
||||||
|
-zsh -c 'setopt extendedglob; rm -f ^(README.md|Makefile|basic_vimrc)(.)'
|
||||||
|
-zsh -c 'setopt extendedglob; rm -f .^(git|README.md|Makefile|basic_vimrc)*'
|
||||||
|
|
||||||
|
undo:
|
||||||
|
for i in */*.orig; do mv -f "$$i" "$${i%.*}"; done
|
||||||
|
|
||||||
|
version:
|
||||||
|
$(PERL) -i.orig -pne 'if (/^"\sVersion:/) {s/(\d+\.\S+)/$(VERSION)/}' $(PLUGIN) $(LIB)
|
||||||
|
$(PERL) -i.orig -pne \
|
||||||
|
'if (/let\sdelimitMate_version/) {s/"(\d+\.\S+)"/"$(VERSION)"/}' $(PLUGIN)
|
||||||
|
$(PERL) -i.orig -pne 'if (/beasts/) {s/(v\d+\.\S+)/v$(VERSION)/}' $(DOC)
|
||||||
|
$(PERL) -i.orig -MPOSIX -pne \
|
||||||
|
'if (/^"\sModified:/) {$$now_string = strftime "%F", localtime; s/(\d+-\d+-\d+)/$$now_string/e}' \
|
||||||
|
$(PLUGIN) $(LIB)
|
||||||
|
$(PERL) -i.orig -MPOSIX -pne \
|
||||||
|
'if (/^\s+$(VERSION)\s+\d+-\d+-\d+\s+\*/) {$$now_string = strftime "%F", localtime; s/(\d+-\d+-\d+)/$$now_string/}' \
|
||||||
|
$(DOC)
|
||||||
|
|
||||||
test:
|
test:
|
||||||
$(MAKE) -C test
|
$(MAKE) -C test
|
||||||
|
|
||||||
monitor:
|
install: $(SOURCES)
|
||||||
$(MAKE) -C test monitor
|
for dir in $(^D);\
|
||||||
|
do install -d -m 0755 $(DESTDIR)$(PREFIX)/$$dir;\
|
||||||
|
done;\
|
||||||
|
for file in $^;\
|
||||||
|
do install -m 0644 $$file $(DESTDIR)$(PREFIX)/$$file;\
|
||||||
|
done;
|
||||||
|
|
||||||
$(test_files) $(short_targets):
|
uninstall:
|
||||||
$(MAKE) -C test $(patsubst test/%,%,$@)
|
for file in $(SOURCES);\
|
||||||
|
do rm -f $(DESTDIR)$(PREFIX)/$$file;\
|
||||||
|
done;
|
||||||
|
|
||||||
|
%.vmb: $(SOURCES)
|
||||||
|
$(VIM) -N -es -u NORC \
|
||||||
|
-c 'call setline(1,["$(subst $(space),"$(comma)",$^)"])'\
|
||||||
|
-c "%MkVimball! $(basename $@) ." -c 'q!'
|
||||||
|
|
||||||
|
%.vmb.zip: vimball
|
||||||
|
zip $@ $(basename $@)
|
||||||
|
|
||||||
|
%.zip: $(SOURCES)
|
||||||
|
zip $@ $^
|
||||||
|
|
||||||
|
%.vmb.gz: vimball
|
||||||
|
gzip -f < $(basename $@) > $@
|
||||||
|
|
||||||
|
%.tar.gz: $(SOURCES)
|
||||||
|
tar -cvzf $@ $^
|
||||||
|
|
||||||
|
# vim:ts=2:sw=2
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -191,6 +191,8 @@ e.g.: >
|
|||||||
let delimitMate_nesting_quotes = ['"','`']
|
let delimitMate_nesting_quotes = ['"','`']
|
||||||
au FileType python let b:delimitMate_nesting_quotes = ['"']
|
au FileType python let b:delimitMate_nesting_quotes = ['"']
|
||||||
<
|
<
|
||||||
|
For Python this is set by default by the plugin.
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
*'delimitMate_expand_cr'*
|
*'delimitMate_expand_cr'*
|
||||||
*'b:delimitMate_expand_cr'*
|
*'b:delimitMate_expand_cr'*
|
||||||
@@ -384,11 +386,11 @@ With auto-close: >
|
|||||||
Type | You get
|
Type | You get
|
||||||
=======================
|
=======================
|
||||||
( | (|)
|
( | (|)
|
||||||
–––––––––––|–––––––––––
|
-----------|-----------
|
||||||
() | ()|
|
() | ()|
|
||||||
–––––––––––|–––––––––––
|
-----------|-----------
|
||||||
(<S-Tab> | ()|
|
(<S-Tab> | ()|
|
||||||
–––––––––––|–––––––––––
|
-----------|-----------
|
||||||
{("<C-G>g | {("")}|
|
{("<C-G>g | {("")}|
|
||||||
<
|
<
|
||||||
Without auto-close: >
|
Without auto-close: >
|
||||||
@@ -396,11 +398,11 @@ Without auto-close: >
|
|||||||
Type | You get
|
Type | You get
|
||||||
=========================
|
=========================
|
||||||
() | (|)
|
() | (|)
|
||||||
–––––––––-----|––––––––––
|
--------------|----------
|
||||||
()) | ()|
|
()) | ()|
|
||||||
–––––––––-----|––––––––––
|
--------------|----------
|
||||||
()<S-Tab> | ()|
|
()<S-Tab> | ()|
|
||||||
––––––––––––––|–––––––––––
|
--------------|----------
|
||||||
{}()""<C-G>g | {("")}|
|
{}()""<C-G>g | {("")}|
|
||||||
<
|
<
|
||||||
NOTE: Abbreviations will not be expanded by delimiters used on delimitMate,
|
NOTE: Abbreviations will not be expanded by delimiters used on delimitMate,
|
||||||
|
|||||||
@@ -1,22 +1,403 @@
|
|||||||
if exists("g:loaded_delimitMate") || &cp || !exists('##InsertCharPre')
|
" File: plugin/delimitMate.vim
|
||||||
|
" Version: 2.7
|
||||||
|
" Modified: 2013-07-15
|
||||||
|
" Description: This plugin provides auto-completion for quotes, parens, etc.
|
||||||
|
" Maintainer: Israel Chauca F. <israelchauca@gmail.com>
|
||||||
|
" Manual: Read ":help delimitMate".
|
||||||
|
" ============================================================================
|
||||||
|
|
||||||
|
" Initialization: {{{
|
||||||
|
|
||||||
|
if exists("g:loaded_delimitMate") || &cp
|
||||||
|
" User doesn't want this plugin or compatible is set, let's get out!
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
let g:loaded_delimitMate = 1
|
let g:loaded_delimitMate = 1
|
||||||
let save_cpo = &cpo
|
let save_cpo = &cpo
|
||||||
set cpo&vim
|
set cpo&vim
|
||||||
|
|
||||||
command! -bar -bang DelimitMateSwitch call delimitMate#ex_cmd(<bang>0, 'switch' )
|
if v:version < 700
|
||||||
command! -bar -bang DelimitMateOn call delimitMate#ex_cmd(<bang>0, 'enable' )
|
echoerr "delimitMate: this plugin requires vim >= 7!"
|
||||||
command! -bar -bang DelimitMateOff call delimitMate#ex_cmd(<bang>0, 'disable')
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:loaded_delimitMate = 1
|
||||||
|
let delimitMate_version = "2.8"
|
||||||
|
|
||||||
|
"}}}
|
||||||
|
|
||||||
|
" Functions: {{{
|
||||||
|
|
||||||
|
function! s:option_init(name, default) "{{{
|
||||||
|
let opt_name = "delimitMate_" . a:name
|
||||||
|
" Find value to use.
|
||||||
|
if !has_key(b:, opt_name) && !has_key(g:, opt_name)
|
||||||
|
let value = a:default
|
||||||
|
elseif has_key(b:, opt_name)
|
||||||
|
let value = b:[opt_name]
|
||||||
|
else
|
||||||
|
let value = g:[opt_name]
|
||||||
|
endif
|
||||||
|
call s:set(a:name, value)
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:init() "{{{
|
||||||
|
" Initialize variables:
|
||||||
|
" autoclose
|
||||||
|
call s:option_init("autoclose", 1)
|
||||||
|
" matchpairs
|
||||||
|
call s:option_init("matchpairs", string(&matchpairs)[1:-2])
|
||||||
|
call s:option_init("matchpairs_list", map(split(s:get('matchpairs', ''), '.:.\zs,\ze.:.'), 'split(v:val, ''^.\zs:\ze.$'')'))
|
||||||
|
let pairs = s:get('matchpairs_list', [])
|
||||||
|
if len(filter(pairs, 'v:val[0] ==# v:val[1]'))
|
||||||
|
echohl ErrorMsg
|
||||||
|
echom 'delimitMate: each member of a pair in delimitMate_matchpairs must be different from each other.'
|
||||||
|
echom 'delimitMate: invalid pairs: ' . join(map(pairs, 'join(v:val, ":")'), ', ')
|
||||||
|
echohl Normal
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
call s:option_init("left_delims", map(copy(s:get('matchpairs_list', [])), 'v:val[0]'))
|
||||||
|
call s:option_init("right_delims", map(copy(s:get('matchpairs_list', [])), 'v:val[1]'))
|
||||||
|
" quotes
|
||||||
|
call s:option_init("quotes", "\" ' `")
|
||||||
|
call s:option_init("quotes_list",split(s:get('quotes', ''), '\s\+'))
|
||||||
|
" nesting_quotes
|
||||||
|
call s:option_init("nesting_quotes", [])
|
||||||
|
" excluded_regions
|
||||||
|
call s:option_init("excluded_regions", "Comment")
|
||||||
|
call s:option_init("excluded_regions_list", split(s:get('excluded_regions', ''), ',\s*'))
|
||||||
|
let enabled = len(s:get('excluded_regions_list', [])) > 0
|
||||||
|
call s:option_init("excluded_regions_enabled", enabled)
|
||||||
|
" expand_space
|
||||||
|
if exists("b:delimitMate_expand_space") && type(b:delimitMate_expand_space) == type("")
|
||||||
|
echom "b:delimitMate_expand_space is '".b:delimitMate_expand_space."' but it must be either 1 or 0!"
|
||||||
|
echom "Read :help 'delimitMate_expand_space' for more details."
|
||||||
|
unlet b:delimitMate_expand_space
|
||||||
|
let b:delimitMate_expand_space = 1
|
||||||
|
endif
|
||||||
|
if exists("g:delimitMate_expand_space") && type(g:delimitMate_expand_space) == type("")
|
||||||
|
echom "delimitMate_expand_space is '".g:delimitMate_expand_space."' but it must be either 1 or 0!"
|
||||||
|
echom "Read :help 'delimitMate_expand_space' for more details."
|
||||||
|
unlet g:delimitMate_expand_space
|
||||||
|
let g:delimitMate_expand_space = 1
|
||||||
|
endif
|
||||||
|
call s:option_init("expand_space", 0)
|
||||||
|
" expand_cr
|
||||||
|
if exists("b:delimitMate_expand_cr") && type(b:delimitMate_expand_cr) == type("")
|
||||||
|
echom "b:delimitMate_expand_cr is '".b:delimitMate_expand_cr."' but it must be either 1 or 0!"
|
||||||
|
echom "Read :help 'delimitMate_expand_cr' for more details."
|
||||||
|
unlet b:delimitMate_expand_cr
|
||||||
|
let b:delimitMate_expand_cr = 1
|
||||||
|
endif
|
||||||
|
if exists("g:delimitMate_expand_cr") && type(g:delimitMate_expand_cr) == type("")
|
||||||
|
echom "delimitMate_expand_cr is '".g:delimitMate_expand_cr."' but it must be either 1 or 0!"
|
||||||
|
echom "Read :help 'delimitMate_expand_cr' for more details."
|
||||||
|
unlet g:delimitMate_expand_cr
|
||||||
|
let g:delimitMate_expand_cr = 1
|
||||||
|
endif
|
||||||
|
if ((&backspace !~ 'eol' || &backspace !~ 'start') && &backspace != 2) &&
|
||||||
|
\ ((exists('b:delimitMate_expand_cr') && b:delimitMate_expand_cr == 1) ||
|
||||||
|
\ (exists('g:delimitMate_expand_cr') && g:delimitMate_expand_cr == 1))
|
||||||
|
echom "delimitMate: There seems to be some incompatibility with your settings that may interfer with the expansion of <CR>. See :help 'delimitMate_expand_cr' for details."
|
||||||
|
endif
|
||||||
|
call s:option_init("expand_cr", 0)
|
||||||
|
" expand_in_quotes
|
||||||
|
call s:option_init('expand_inside_quotes', 0)
|
||||||
|
" jump_expansion
|
||||||
|
call s:option_init("jump_expansion", 0)
|
||||||
|
" smart_matchpairs
|
||||||
|
call s:option_init("smart_matchpairs", '^\%(\w\|\!\|[£$]\|[^[:punct:][:space:]]\)')
|
||||||
|
" smart_quotes
|
||||||
|
" XXX: backward compatibility. Ugly, should go the way of the dodo soon.
|
||||||
|
let quotes = escape(join(s:get('quotes_list', []), ''), '\-^[]')
|
||||||
|
let default_smart_quotes = '\%(\w\|[^[:punct:][:space:]' . quotes . ']\|\%(\\\\\)*\\\)\%#\|\%#\%(\w\|[^[:space:][:punct:]' . quotes . ']\)'
|
||||||
|
if exists('g:delimitMate_smart_quotes') && type(g:delimitMate_smart_quotes) == type(0)
|
||||||
|
if g:delimitMate_smart_quotes
|
||||||
|
unlet g:delimitMate_smart_quotes
|
||||||
|
else
|
||||||
|
unlet g:delimitMate_smart_quotes
|
||||||
|
let g:delimitMate_smart_quotes = ''
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
if exists('b:delimitMate_smart_quotes') && type(b:delimitMate_smart_quotes) == type(0)
|
||||||
|
if b:delimitMate_smart_quotes
|
||||||
|
unlet b:delimitMate_smart_quotes
|
||||||
|
if exists('g:delimitMate_smart_quotes') && type(g:delimitMate_smart_quotes) && g:delimitMate_smart_quotes
|
||||||
|
let b:delimitMate_smart_quotes = default_smart_quotes
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
unlet b:delimitMate_smart_quotes
|
||||||
|
let b:delimitMate_smart_quotes = ''
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
call s:option_init("smart_quotes", default_smart_quotes)
|
||||||
|
" apostrophes
|
||||||
|
call s:option_init("apostrophes", "")
|
||||||
|
call s:option_init("apostrophes_list", split(s:get('apostrophes', ''), ":\s*"))
|
||||||
|
" tab2exit
|
||||||
|
call s:option_init("tab2exit", 1)
|
||||||
|
" balance_matchpairs
|
||||||
|
call s:option_init("balance_matchpairs", 0)
|
||||||
|
" eol marker
|
||||||
|
call s:option_init("insert_eol_marker", 1)
|
||||||
|
call s:option_init("eol_marker", "")
|
||||||
|
" Everything is fine.
|
||||||
|
return 1
|
||||||
|
endfunction "}}} Init()
|
||||||
|
|
||||||
|
function! s:get(name, default) "{{{
|
||||||
|
let bufoptions = delimitMate#Get()
|
||||||
|
return get(bufoptions, a:name, a:default)
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:set(...) " {{{
|
||||||
|
return call('delimitMate#Set', a:000)
|
||||||
|
endfunction " }}}
|
||||||
|
|
||||||
|
function! s:Map() "{{{
|
||||||
|
" Set mappings:
|
||||||
|
try
|
||||||
|
let save_keymap = &keymap
|
||||||
|
let save_iminsert = &iminsert
|
||||||
|
let save_imsearch = &imsearch
|
||||||
|
let save_cpo = &cpo
|
||||||
|
set keymap=
|
||||||
|
set cpo&vim
|
||||||
|
silent! doautocmd <nomodeline> User delimitMate_map
|
||||||
|
if s:get('autoclose', 1)
|
||||||
|
call s:AutoClose()
|
||||||
|
else
|
||||||
|
call s:NoAutoClose()
|
||||||
|
endif
|
||||||
|
call s:ExtraMappings()
|
||||||
|
finally
|
||||||
|
let &cpo = save_cpo
|
||||||
|
let &keymap = save_keymap
|
||||||
|
let &iminsert = save_iminsert
|
||||||
|
let &imsearch = save_imsearch
|
||||||
|
endtry
|
||||||
|
|
||||||
|
let b:delimitMate_enabled = 1
|
||||||
|
endfunction "}}} Map()
|
||||||
|
|
||||||
|
function! s:Unmap() " {{{
|
||||||
|
let imaps =
|
||||||
|
\ s:get('right_delims', []) +
|
||||||
|
\ s:get('left_delims', []) +
|
||||||
|
\ s:get('quotes_list', []) +
|
||||||
|
\ s:get('apostrophes_list', []) +
|
||||||
|
\ ['<BS>', '<C-h>', '<S-BS>', '<Del>', '<CR>', '<Space>', '<S-Tab>', '<Esc>'] +
|
||||||
|
\ ['<Up>', '<Down>', '<Left>', '<Right>', '<LeftMouse>', '<RightMouse>'] +
|
||||||
|
\ ['<C-Left>', '<C-Right>'] +
|
||||||
|
\ ['<Home>', '<End>', '<PageUp>', '<PageDown>', '<S-Down>', '<S-Up>', '<C-G>g']
|
||||||
|
|
||||||
|
for map in imaps
|
||||||
|
if maparg(map, "i") =~# '^<Plug>delimitMate'
|
||||||
|
if map == '|'
|
||||||
|
let map = '<Bar>'
|
||||||
|
endif
|
||||||
|
exec 'silent! iunmap <buffer> ' . map
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
silent! doautocmd <nomodeline> User delimitMate_unmap
|
||||||
|
let b:delimitMate_enabled = 0
|
||||||
|
endfunction " }}} s:Unmap()
|
||||||
|
|
||||||
|
function! s:test() "{{{
|
||||||
|
if &modified
|
||||||
|
let confirm = input("Modified buffer, type \"yes\" to write and proceed "
|
||||||
|
\ . "with test: ") ==? 'yes'
|
||||||
|
if !confirm
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
call delimitMate#Test()
|
||||||
|
g/\%^$/d
|
||||||
|
0
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:setup(...) "{{{
|
||||||
|
let swap = a:0 && a:1 == 2
|
||||||
|
let enable = a:0 && a:1
|
||||||
|
let disable = a:0 && !a:1
|
||||||
|
" First, remove all magic, if needed:
|
||||||
|
if get(b:, 'delimitMate_enabled', 0)
|
||||||
|
call s:Unmap()
|
||||||
|
" Switch
|
||||||
|
if swap
|
||||||
|
echo "delimitMate is disabled."
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
if disable
|
||||||
|
" Just disable the mappings.
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if !a:0
|
||||||
|
" Check if this file type is excluded:
|
||||||
|
if exists("g:delimitMate_excluded_ft") &&
|
||||||
|
\ index(split(g:delimitMate_excluded_ft, ','), &filetype, 0, 1) >= 0
|
||||||
|
" Finish here:
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
" Check if user tried to disable using b:loaded_delimitMate
|
||||||
|
if exists("b:loaded_delimitMate")
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
" Initialize settings:
|
||||||
|
if ! s:init()
|
||||||
|
" Something went wrong.
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if enable || swap || !get(g:, 'delimitMate_offByDefault', 0)
|
||||||
|
" Now, add magic:
|
||||||
|
call s:Map()
|
||||||
|
if a:0
|
||||||
|
echo "delimitMate is enabled."
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:TriggerAbb() "{{{
|
||||||
|
if v:version < 703
|
||||||
|
\ || ( v:version == 703 && !has('patch489') )
|
||||||
|
\ || pumvisible()
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
return "\<C-]>"
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:NoAutoClose() "{{{
|
||||||
|
" inoremap <buffer> ) <C-R>=delimitMate#SkipDelim('\)')<CR>
|
||||||
|
for delim in s:get('right_delims', []) + s:get('quotes_list', [])
|
||||||
|
if delim == '|'
|
||||||
|
let delim = '<Bar>'
|
||||||
|
endif
|
||||||
|
exec 'inoremap <silent> <Plug>delimitMate' . delim . ' <C-R>=<SID>TriggerAbb().delimitMate#SkipDelim("' . escape(delim,'"') . '")<CR>'
|
||||||
|
exec 'silent! imap <unique> <buffer> '.delim.' <Plug>delimitMate'.delim
|
||||||
|
endfor
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:AutoClose() "{{{
|
||||||
|
" Add matching pair and jump to the midle:
|
||||||
|
" inoremap <silent> <buffer> ( ()<Left>
|
||||||
|
let i = 0
|
||||||
|
while i < len(s:get('matchpairs_list', []))
|
||||||
|
let ld = s:get('left_delims', [])[i] == '|' ? '<bar>' : s:get('left_delims', [])[i]
|
||||||
|
let rd = s:get('right_delims', [])[i] == '|' ? '<bar>' : s:get('right_delims', [])[i]
|
||||||
|
exec 'inoremap <expr><silent> <Plug>delimitMate' . ld
|
||||||
|
\. ' <SID>TriggerAbb().delimitMate#ParenDelim("' . escape(rd, '|') . '")'
|
||||||
|
exec 'silent! imap <unique> <buffer> '.ld
|
||||||
|
\.' <Plug>delimitMate'.ld
|
||||||
|
let i += 1
|
||||||
|
endwhile
|
||||||
|
|
||||||
|
" Exit from inside the matching pair:
|
||||||
|
for delim in s:get('right_delims', [])
|
||||||
|
let delim = delim == '|' ? '<bar>' : delim
|
||||||
|
exec 'inoremap <expr><silent> <Plug>delimitMate' . delim
|
||||||
|
\. ' <SID>TriggerAbb().delimitMate#JumpOut("\' . delim . '")'
|
||||||
|
exec 'silent! imap <unique> <buffer> ' . delim
|
||||||
|
\. ' <Plug>delimitMate'. delim
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" Add matching quote and jump to the midle, or exit if inside a pair of matching quotes:
|
||||||
|
" inoremap <silent> <buffer> " <C-R>=delimitMate#QuoteDelim("\"")<CR>
|
||||||
|
for delim in s:get('quotes_list', [])
|
||||||
|
if delim == '|'
|
||||||
|
let delim = '<Bar>'
|
||||||
|
endif
|
||||||
|
exec 'inoremap <expr><silent> <Plug>delimitMate' . delim
|
||||||
|
\. ' <SID>TriggerAbb()."<C-R>=delimitMate#QuoteDelim(\"\\\' . delim . '\")<CR>"'
|
||||||
|
exec 'silent! imap <unique> <buffer> ' . delim
|
||||||
|
\. ' <Plug>delimitMate' . delim
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" Try to fix the use of apostrophes (kept for backward compatibility):
|
||||||
|
" inoremap <silent> <buffer> n't n't
|
||||||
|
for map in s:get('apostrophes_list', [])
|
||||||
|
exec "inoremap <silent> " . map . " " . map
|
||||||
|
exec 'silent! imap <unique> <buffer> ' . map . ' <Plug>delimitMate' . map
|
||||||
|
endfor
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:ExtraMappings() "{{{
|
||||||
|
" If pair is empty, delete both delimiters:
|
||||||
|
inoremap <silent> <Plug>delimitMateBS <C-R>=delimitMate#BS()<CR>
|
||||||
|
if !hasmapto('<Plug>delimitMateBS','i')
|
||||||
|
if empty(maparg('<BS>', 'i'))
|
||||||
|
silent! imap <unique> <buffer> <BS> <Plug>delimitMateBS
|
||||||
|
endif
|
||||||
|
if empty(maparg('<C-H>', 'i'))
|
||||||
|
silent! imap <unique> <buffer> <C-h> <Plug>delimitMateBS
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
" If pair is empty, delete closing delimiter:
|
||||||
|
inoremap <silent> <expr> <Plug>delimitMateS-BS delimitMate#WithinEmptyPair() ? "\<Del>" : "\<S-BS>"
|
||||||
|
if !hasmapto('<Plug>delimitMateS-BS','i') && maparg('<S-BS>', 'i') == ''
|
||||||
|
silent! imap <unique> <buffer> <S-BS> <Plug>delimitMateS-BS
|
||||||
|
endif
|
||||||
|
" Expand return if inside an empty pair:
|
||||||
|
inoremap <expr><silent> <Plug>delimitMateCR <SID>TriggerAbb()."\<C-R>=delimitMate#ExpandReturn()\<CR>"
|
||||||
|
if s:get('expand_cr', 0) && !hasmapto('<Plug>delimitMateCR', 'i') && maparg('<CR>', 'i') == ''
|
||||||
|
silent! imap <unique> <buffer> <CR> <Plug>delimitMateCR
|
||||||
|
endif
|
||||||
|
" Expand space if inside an empty pair:
|
||||||
|
inoremap <expr><silent> <Plug>delimitMateSpace <SID>TriggerAbb()."\<C-R>=delimitMate#ExpandSpace()\<CR>"
|
||||||
|
if s:get('expand_space', 0) && !hasmapto('<Plug>delimitMateSpace', 'i') && maparg('<Space>', 'i') == ''
|
||||||
|
silent! imap <unique> <buffer> <Space> <Plug>delimitMateSpace
|
||||||
|
endif
|
||||||
|
" Jump over any delimiter:
|
||||||
|
inoremap <expr><silent> <Plug>delimitMateS-Tab <SID>TriggerAbb()."\<C-R>=delimitMate#JumpAny()\<CR>"
|
||||||
|
if s:get('tab2exit', 0) && !hasmapto('<Plug>delimitMateS-Tab', 'i') && maparg('<S-Tab>', 'i') == ''
|
||||||
|
silent! imap <unique> <buffer> <S-Tab> <Plug>delimitMateS-Tab
|
||||||
|
endif
|
||||||
|
" Jump over next delimiters
|
||||||
|
inoremap <expr><buffer> <Plug>delimitMateJumpMany <SID>TriggerAbb()."\<C-R>=delimitMate#JumpMany()\<CR>"
|
||||||
|
if !hasmapto('<Plug>delimitMateJumpMany', 'i') && maparg("<C-G>g", 'i') == ''
|
||||||
|
imap <silent> <buffer> <C-G>g <Plug>delimitMateJumpMany
|
||||||
|
endif
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
"}}}
|
||||||
|
|
||||||
|
" Commands: {{{
|
||||||
|
|
||||||
|
" Let me refresh without re-loading the buffer:
|
||||||
|
command! -bar DelimitMateReload call s:setup(1)
|
||||||
|
" Quick test:
|
||||||
|
command! -bar DelimitMateTest call s:test()
|
||||||
|
" Switch On/Off:
|
||||||
|
command! -bar DelimitMateSwitch call s:setup(2)
|
||||||
|
" Enable mappings:
|
||||||
|
command! -bar DelimitMateOn call s:setup(1)
|
||||||
|
" Disable mappings:
|
||||||
|
command! -bar DelimitMateOff call s:setup(0)
|
||||||
|
|
||||||
|
"}}}
|
||||||
|
|
||||||
|
" Autocommands: {{{
|
||||||
|
|
||||||
augroup delimitMate
|
augroup delimitMate
|
||||||
au!
|
au!
|
||||||
au InsertCharPre * call delimitMate#InsertCharPre(v:char)
|
" Run on file type change.
|
||||||
au TextChangedI * call delimitMate#TextChangedI()
|
au FileType * call <SID>setup()
|
||||||
au InsertEnter * call delimitMate#InsertEnter()
|
au FileType python let b:delimitMate_nesting_quotes = ['"', "'"]
|
||||||
au CursorMovedI * call delimitMate#CursorMovedI()
|
|
||||||
|
" Run on new buffers.
|
||||||
|
au BufNewFile,BufRead,BufEnter,CmdwinEnter *
|
||||||
|
\ if !exists('b:delimitMate_was_here') |
|
||||||
|
\ call <SID>setup() |
|
||||||
|
\ let b:delimitMate_was_here = 1 |
|
||||||
|
\ endif
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
|
"}}}
|
||||||
|
|
||||||
|
" This is for the default buffer when it does not have a filetype.
|
||||||
|
call s:setup()
|
||||||
|
|
||||||
let &cpo = save_cpo
|
let &cpo = save_cpo
|
||||||
" GetLatestVimScripts: 2754 1 :AutoInstall: delimitMate.vim
|
" GetLatestVimScripts: 2754 1 :AutoInstall: delimitMate.vim
|
||||||
" vim: sw=2 et
|
" vim:foldmethod=marker:foldcolumn=4:ts=2:sw=2
|
||||||
|
|||||||
@@ -1,14 +1,9 @@
|
|||||||
test_files := $(wildcard *.test)
|
all: build/runVimTests
|
||||||
|
build/runVimTests/bin/runVimTests.sh -0 .
|
||||||
|
|
||||||
.PHONY: all monitor $(test_files)
|
build/runVimTests: build/VimTAP
|
||||||
|
git clone https://github.com/inkarkat/runVimTests $@
|
||||||
|
|
||||||
all:
|
# Use VimTAP as directory name, as used with runVimTestsSetup.vim.
|
||||||
time tclsh all.tcl
|
build/VimTAP:
|
||||||
|
git clone https://github.com/inkarkat/vimtap $@
|
||||||
$(test_files):
|
|
||||||
time tclsh $@
|
|
||||||
printf "\a"
|
|
||||||
|
|
||||||
monitor:
|
|
||||||
fswatch -o ../autoload/*.vim ../plugin/*.vim *.test \
|
|
||||||
| xargs -n1 -I\{\} time tclsh all.tcl || printf "\a"
|
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
set bs=2
|
|
||||||
set hidden
|
|
||||||
set noshowmode
|
|
||||||
set whichwrap=[]
|
|
||||||
set noswapfile
|
|
||||||
let &hl = join(map(split(&hl, ','), 'substitute(v:val, '':.\+'', ''n'', ''g'')'), ',')
|
|
||||||
let &rtp = expand('<sfile>:p:h:h') . ',' . &rtp . ',' . expand('<sfile>:p:h:h') . '/after'
|
let &rtp = expand('<sfile>:p:h:h') . ',' . &rtp . ',' . expand('<sfile>:p:h:h') . '/after'
|
||||||
let g:delimitMate_pairs = ['()','{}','[]','<>','¿?','¡!',',:']
|
set bs=2
|
||||||
let g:delimitMate_quotes = ['"', "'", '`', '«', '|']
|
|
||||||
ru plugin/delimitMate.vim
|
ru plugin/delimitMate.vim
|
||||||
au VimEnter * echom 'Start test'
|
let runVimTests = expand('<sfile>:p:h').'/build/runVimTests'
|
||||||
|
if isdirectory(runVimTests)
|
||||||
|
let &rtp = runVimTests . ',' . &rtp
|
||||||
|
endif
|
||||||
|
let vimTAP = expand('<sfile>:p:h').'/build/VimTAP'
|
||||||
|
if isdirectory(vimTAP)
|
||||||
|
let &rtp = vimTAP . ',' . &rtp
|
||||||
|
endif
|
||||||
|
|
||||||
|
|||||||
18
test/all.tcl
18
test/all.tcl
@@ -1,18 +0,0 @@
|
|||||||
package require tcltest 2
|
|
||||||
namespace import -force ::tcltest::*
|
|
||||||
configure {*}$argv -testdir [file dir [info script]]
|
|
||||||
|
|
||||||
# Hook to determine if any of the tests failed. Then we can exit with
|
|
||||||
# proper exit code: 0=all passed, 1=one or more failed
|
|
||||||
proc tcltest::cleanupTestsHook {} {
|
|
||||||
variable numTests
|
|
||||||
upvar 2 testFileFailures crashed
|
|
||||||
set ::exitCode [expr {$numTests(Failed) > 0}]
|
|
||||||
if {[info exists crashed]} {
|
|
||||||
set ::exitCode [expr {$::exitCode || [llength $crashed]}]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
runAllTests
|
|
||||||
puts "\a"
|
|
||||||
exit $exitCode
|
|
||||||
51
test/autoclose_matchpairs.txt
Normal file
51
test/autoclose_matchpairs.txt
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
let g:delimitMate_autoclose = 1
|
||||||
|
"(x" "(x)"
|
||||||
|
"(\<BS>x" "x"
|
||||||
|
"()x" "()x"
|
||||||
|
"((\<C-G>gx" "(())x"
|
||||||
|
"(x\<Esc>u" ""
|
||||||
|
"@(x" "@(x)"
|
||||||
|
"@#\<Left>(x" "@(x)#"
|
||||||
|
"(\<S-Tab>x" "()x"
|
||||||
|
let g:delimitMate_autoclose = 0
|
||||||
|
"(x" "(x"
|
||||||
|
"()x" "(x)"
|
||||||
|
"())x" "()x"
|
||||||
|
"()\<BS>x" "x"
|
||||||
|
"@()x" "@(x)"
|
||||||
|
"@#\<Left>()x" "@(x)#"
|
||||||
|
let g:delimitMate_expand_space = 1
|
||||||
|
let g:delimitMate_autoclose = 1
|
||||||
|
"(\<Space>x" "( x )"
|
||||||
|
"(\<Space>\<BS>x" "(x)"
|
||||||
|
let g:delimitMate_autoclose = 0
|
||||||
|
"()\<Space>\<BS>x" "(x)"
|
||||||
|
let g:delimitMate_autoclose = 1
|
||||||
|
# Handle backspace gracefully.
|
||||||
|
set backspace=
|
||||||
|
"(\<Esc>a\<BS>x" "(x)"
|
||||||
|
set bs=2
|
||||||
|
# closing parens removes characters. #133
|
||||||
|
"(a\<Esc>i)" "()a)"
|
||||||
|
|
||||||
|
# Add semicolon next to the closing paren. Issue #77.
|
||||||
|
new
|
||||||
|
let b:delimitMate_eol_marker = ';'
|
||||||
|
"abc(x" "abc(x);"
|
||||||
|
%d
|
||||||
|
# BS should behave accordingly.
|
||||||
|
"abc(\<BS>" "abc;"
|
||||||
|
# Expand iabbreviations
|
||||||
|
unlet b:delimitMate_eol_marker
|
||||||
|
iabb def ghi
|
||||||
|
"def(" "ghi()"
|
||||||
|
iunabb def
|
||||||
|
|
||||||
|
"abc а\<Left>(" "abc (а"
|
||||||
|
"abc ñ\<Left>(" "abc (ñ"
|
||||||
|
"abc $\<Left>(" "abc ($"
|
||||||
|
"abc £\<Left>(" "abc (£"
|
||||||
|
"abc d\<Left>(" "abc (d"
|
||||||
|
"abc \<C-V>(\<Left>(" "abc (("
|
||||||
|
"abc .\<Left>(" "abc ()."
|
||||||
|
"abc \<Left>(" "abc () "
|
||||||
42
test/autoclose_matchpairs.vim
Normal file
42
test/autoclose_matchpairs.vim
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
let g:delimitMate_matchpairs = '(:),{:},[:],<:>,¿:?,¡:!,,::'
|
||||||
|
let lines = readfile(expand('<sfile>:t:r').'.txt')
|
||||||
|
call vimtest#StartTap()
|
||||||
|
let testsnumber = len(filter(copy(lines), 'v:val =~ ''^"'''))
|
||||||
|
let itemsnumber = len(split(g:delimitMate_matchpairs, '.:.\zs,\ze.:.'))
|
||||||
|
call vimtap#Plan(testsnumber * itemsnumber)
|
||||||
|
let tcount = 1
|
||||||
|
let reload = 1
|
||||||
|
for item in lines
|
||||||
|
if item =~ '^#\|^\s*$'
|
||||||
|
" A comment or empty line.
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
if item !~ '^"'
|
||||||
|
" A command.
|
||||||
|
exec item
|
||||||
|
call vimtap#Diag(item)
|
||||||
|
let reload = 1
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
if reload
|
||||||
|
DelimitMateReload
|
||||||
|
call vimtap#Diag('DelimitMateReload')
|
||||||
|
let reload = 0
|
||||||
|
endif
|
||||||
|
let [input, output] = split(item, '"\%(\\.\|[^\\"]\)*"\zs\s*\ze"\%(\\.\|[^\\"]\)*"')
|
||||||
|
for [s:l,s:r] in map(split(g:delimitMate_matchpairs, '.:.\zs,\ze.:.'), 'split(v:val, ''.\zs:\ze.'')')
|
||||||
|
let input2 = substitute(input, '(', s:l, 'g')
|
||||||
|
let input2 = substitute(input2, ')', s:r, 'g')
|
||||||
|
let output2 = substitute(output, '(', s:l, 'g')
|
||||||
|
let output2 = substitute(output2, ')', s:r, 'g')
|
||||||
|
%d
|
||||||
|
exec 'normal i'.eval(input2)."\<Esc>"
|
||||||
|
let line = getline('.')
|
||||||
|
let passed = line == eval(output2)
|
||||||
|
call vimtap#Is(line, eval(output2), input2)
|
||||||
|
", input2 . ' => ' . string(line) .
|
||||||
|
" \ (passed ? ' =' : ' !') . '= ' . string(eval(output2)))
|
||||||
|
let tcount += 1
|
||||||
|
endfor
|
||||||
|
endfor
|
||||||
|
call vimtest#Quit()
|
||||||
73
test/autoclose_quotes.txt
Normal file
73
test/autoclose_quotes.txt
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
let g:delimitMate_autoclose = 1
|
||||||
|
"'x" "'x'"
|
||||||
|
"'x\<Esc>u" ""
|
||||||
|
"''x" "''x"
|
||||||
|
"'\<BS>x" "x"
|
||||||
|
"'\<C-G>gx" "''x"
|
||||||
|
# This will fail for double quote.
|
||||||
|
"'\"x" "'\"x\"'"
|
||||||
|
"@'x" "@'x'"
|
||||||
|
"@#\<Left>'x" "@'x'#"
|
||||||
|
"'\<S-Tab>x" "''x"
|
||||||
|
"abc'" "abc'"
|
||||||
|
"abc\\'x" "abc\\'x"
|
||||||
|
"u'Привет'" "u'Привет'"
|
||||||
|
"u'string'" "u'string'"
|
||||||
|
let g:delimitMate_autoclose = 0
|
||||||
|
"'x" "'x"
|
||||||
|
"''x" "'x'"
|
||||||
|
"'''x" "''x"
|
||||||
|
"''\<BS>x" "x"
|
||||||
|
"@''x" "@'x'"
|
||||||
|
"@#\<Left>''x" "@'x'#"
|
||||||
|
let g:delimitMate_expand_space = 1
|
||||||
|
let g:delimitMate_autoclose = 1
|
||||||
|
"'\<Space>x" "' x'"
|
||||||
|
let g:delimitMate_expand_inside_quotes = 1
|
||||||
|
"'\<Space>x" "' x '"
|
||||||
|
"'\<Space>\<BS>x" "'x'"
|
||||||
|
"abc\\''\<Space>x" "abc\\' x'"
|
||||||
|
let g:delimitMate_autoclose = 0
|
||||||
|
"''\<Space>\<BS>x" "'x'"
|
||||||
|
let g:delimitMate_autoclose = 1
|
||||||
|
# Handle backspace gracefully.
|
||||||
|
set backspace=
|
||||||
|
"'\<Esc>a\<BS>x" "'x'"
|
||||||
|
set backspace=2
|
||||||
|
set cpo=ces$
|
||||||
|
"'x" "'x'"
|
||||||
|
# Make sure smart quote works beyond first column.
|
||||||
|
" 'x" " 'x'"
|
||||||
|
# smart quote, check fo char on the right.
|
||||||
|
"a\<space>b\<left>'" "a 'b"
|
||||||
|
# Make sure we jump over a quote on the right. #89.
|
||||||
|
"('test'x" "('test'x)"
|
||||||
|
# Duplicate whole line when inserting quote at bol #105
|
||||||
|
"}\<Home>'" "''}"
|
||||||
|
"'\<Del>abc '" "'abc '"
|
||||||
|
"''abc '" "''abc ''"
|
||||||
|
# Nesting quotes:
|
||||||
|
let g:delimitMate_nesting_quotes = split(g:delimitMate_quotes, '\s\+')
|
||||||
|
"'''x" "'''x'''"
|
||||||
|
"''''x" "''''x''''"
|
||||||
|
"''x" "''x"
|
||||||
|
"'x" "'x'"
|
||||||
|
unlet g:delimitMate_nesting_quotes
|
||||||
|
# expand iabbreviations
|
||||||
|
iabb def ghi
|
||||||
|
"def'" "ghi'"
|
||||||
|
let g:delimitMate_smart_quotes = '\w\%#\_.'
|
||||||
|
"xyz'x" "xyz'x"
|
||||||
|
"xyz 'x" "xyz 'x'"
|
||||||
|
let g:delimitMate_smart_quotes = '\s\%#\_.'
|
||||||
|
"abc'x" "abc'x'"
|
||||||
|
"abc 'x" "abc 'x"
|
||||||
|
# let's try the negated form
|
||||||
|
let g:delimitMate_smart_quotes = '!\w\%#\_.'
|
||||||
|
"cba'x" "cba'x'"
|
||||||
|
"cba 'x" "cba 'x"
|
||||||
|
let g:delimitMate_smart_quotes = '!\s\%#\_.'
|
||||||
|
"zyx'x" "zyx'x"
|
||||||
|
"zyx 'x" "zyx 'x'"
|
||||||
|
unlet g:delimitMate_smart_quotes
|
||||||
|
"'\<CR>\<BS>" "''"
|
||||||
47
test/autoclose_quotes.vim
Normal file
47
test/autoclose_quotes.vim
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
"let g:delimitMate_quotes = '" '' ` ” « |'
|
||||||
|
let g:delimitMate_quotes = '" '' ` « |'
|
||||||
|
let lines = readfile(expand('<sfile>:t:r').'.txt')
|
||||||
|
call vimtest#StartTap()
|
||||||
|
let testsnumber = len(filter(copy(lines), 'v:val =~ ''^"'''))
|
||||||
|
let itemsnumber = len(split(g:delimitMate_quotes, ' '))
|
||||||
|
call vimtap#Plan(testsnumber * itemsnumber)
|
||||||
|
let reload = 1
|
||||||
|
let tcount = 1
|
||||||
|
let linenr = 0
|
||||||
|
for item in lines
|
||||||
|
let linenr += 1
|
||||||
|
if item =~ '^#\|^\s*$'
|
||||||
|
" A comment or empty line.
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
if item !~ '^"'
|
||||||
|
" A command.
|
||||||
|
exec item
|
||||||
|
call vimtap#Diag(item)
|
||||||
|
let reload = 1
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
if reload
|
||||||
|
DelimitMateReload
|
||||||
|
call vimtap#Diag('DelimitMateReload')
|
||||||
|
let reload = 0
|
||||||
|
endif
|
||||||
|
let quotes = split(g:delimitMate_quotes, '\s')
|
||||||
|
for quote in quotes
|
||||||
|
if vimtap#Skip(1, tcount != 26, "This test is invalid for double quote.")
|
||||||
|
let tcount += 1
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
let [input, output] = split(item, '"\%(\\.\|[^\\"]\)*"\zs\s*\ze"\%(\\.\|[^\\"]\)*"')
|
||||||
|
let input_q = substitute(input,"'" , escape(escape(quote, '"'), '\'), 'g')
|
||||||
|
let output_q = substitute(output,"'" , escape(escape(quote, '"'), '\'), 'g')
|
||||||
|
%d
|
||||||
|
exec 'normal i'.eval(input_q)."\<Esc>"
|
||||||
|
if quote == '”'
|
||||||
|
call vimtap#Todo(1)
|
||||||
|
endif
|
||||||
|
call vimtap#Is(getline('.'), eval(output_q), 'Line '.linenr.': '.eval(substitute(input_q, '\\<', '<','g')))
|
||||||
|
let tcount += 1
|
||||||
|
endfor
|
||||||
|
endfor
|
||||||
|
call vimtest#Quit()
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
# singleTest name desc setup input result vimCmds? skipScript?
|
|
||||||
#
|
|
||||||
# - desc can be empty and input would be used.
|
|
||||||
# - vimCmds is a list of ex commands.
|
|
||||||
# - skipScript will be evaluated in the scope of the function "single" and it
|
|
||||||
# should return a keywowd such as toDo, badTest or other as listed in the
|
|
||||||
# docs for tcltest. e.g.:
|
|
||||||
# {expr "[string first {i'} \"${input}\"] > -1 ? {emptyTest} : {}"}
|
|
||||||
# see tcltest documentation for other values.
|
|
||||||
|
|
||||||
# Get some help:
|
|
||||||
source helper.tcl
|
|
||||||
|
|
||||||
set vimCmds [list {let g:delimitMate_expand_cr = 1}]
|
|
||||||
lappend vimCmds {let g:delimitMate_eol_marker = ';'}
|
|
||||||
lappend vimCmds {let g:delimitMate_insert_eol_marker = 0}
|
|
||||||
|
|
||||||
single ins_eol_marker_0-1 {} "" "i(" "()" ${vimCmds}
|
|
||||||
|
|
||||||
single ins_eol_marker_0-2 {} "" "i(\rx" "(\nx\n)" ${vimCmds}
|
|
||||||
|
|
||||||
set vimCmds [list {let g:delimitMate_expand_cr = 1}]
|
|
||||||
lappend vimCmds {let g:delimitMate_eol_marker = ';'}
|
|
||||||
lappend vimCmds {let g:delimitMate_insert_eol_marker = 1}
|
|
||||||
single ins_eol_marker_1-1 {} "" "i(" "();" ${vimCmds}
|
|
||||||
|
|
||||||
single ins_eol_marker_1-2 {} " a" "0i(" "() a" ${vimCmds}
|
|
||||||
|
|
||||||
single ins_eol_marker_1-3 {} "" "i(\rx" "(\nx\n);" ${vimCmds}
|
|
||||||
|
|
||||||
set vimCmds [list {let g:delimitMate_expand_cr = 1}]
|
|
||||||
lappend vimCmds {let g:delimitMate_eol_marker = ';'}
|
|
||||||
lappend vimCmds {let g:delimitMate_insert_eol_marker = 2}
|
|
||||||
single ins_eol_marker_2-1 {} "" "i(" "()" ${vimCmds}
|
|
||||||
|
|
||||||
single ins_eol_marker_2-2 {} "" "i(\rx" "(\nx\n);" ${vimCmds}
|
|
||||||
|
|
||||||
# Issue #195
|
|
||||||
single issue_195-1 {} "" "i{(\rx" "{(\nx\n)}" ${vimCmds}
|
|
||||||
|
|
||||||
# Issue #195
|
|
||||||
single issue_195-2 {} ";" "I{(\rx" "{(\nx\n)};" ${vimCmds}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
################################################################
|
|
||||||
# This gives nice statistics and cleans up the mess left behind.
|
|
||||||
cleanupTests
|
|
||||||
# vim: set filetype=tcl et sw=2 sts=0 ts=8:
|
|
||||||
44
test/eol_marker.vim
Normal file
44
test/eol_marker.vim
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
let g:delimitMate_expand_cr = 1
|
||||||
|
let g:delimitMate_eol_marker = ';'
|
||||||
|
call vimtest#StartTap()
|
||||||
|
call vimtap#Plan(8)
|
||||||
|
" NOTE: Do not forget to update the plan ^
|
||||||
|
let g:delimitMate_insert_eol_marker = 0
|
||||||
|
DelimitMateReload
|
||||||
|
normal i(
|
||||||
|
call vimtap#Is(getline(1), '()', 'value = 1, case 1')
|
||||||
|
%d _
|
||||||
|
exec "normal i(\<CR>x"
|
||||||
|
call vimtap#Like(join(getline(1,line('$')), "\<NL>"),
|
||||||
|
\ '^(\n\s*x\n)$', ' "normal i(\<CR>x", Value = 2, case 2')
|
||||||
|
let g:delimitMate_insert_eol_marker = 1
|
||||||
|
DelimitMateReload
|
||||||
|
%d _
|
||||||
|
normal i(
|
||||||
|
call vimtap#Is(getline(1), '();', '"normal i(", value = 1, case 1')
|
||||||
|
%d _
|
||||||
|
exec "normal i(\<CR>x"
|
||||||
|
call vimtap#Like(join(getline(1,line('$')), "\<NL>"),
|
||||||
|
\ '^(\n\s*x\n);$', '"normal i(\<CR>x", Value = 2, case 2')
|
||||||
|
%d _
|
||||||
|
let g:delimitMate_insert_eol_marker = 2
|
||||||
|
DelimitMateReload
|
||||||
|
normal i(
|
||||||
|
call vimtap#Is(getline(1), '()', '"normal i(", Value = 2, case 1')
|
||||||
|
%d _
|
||||||
|
exec "normal i(\<CR>x"
|
||||||
|
call vimtap#Like(join(getline(1,line('$')), "\<NL>"),
|
||||||
|
\ '^(\n\s*x\n);$', '"normal i(\<CR>x", Value = 2, case 2')
|
||||||
|
|
||||||
|
%d _
|
||||||
|
exec "normal i{(\<CR>x"
|
||||||
|
call vimtap#Like(join(getline(1,line('$')), "\<NL>"),
|
||||||
|
\ '^{(\n\s*x\n)};$', ' "normal i{(\<CR>x", Value = 2, case 3')
|
||||||
|
|
||||||
|
%d _
|
||||||
|
exec "normal i;\<Esc>I{(\<CR>x"
|
||||||
|
call vimtap#Like(join(getline(1,line('$')), "\<NL>"),
|
||||||
|
\ '^{(\n\s*x\n)};$', ' "normal i{(\<CR>x", Value = 2, case 4')
|
||||||
|
|
||||||
|
" End: quit vim.
|
||||||
|
call vimtest#Quit()
|
||||||
@@ -1,92 +0,0 @@
|
|||||||
# singleTest name desc setup input result vimCmds? skipScript?
|
|
||||||
#
|
|
||||||
# - desc can be empty and input would be used.
|
|
||||||
# - vimCmds is a list of ex commands.
|
|
||||||
# - skipScript will be evaluated in the scope of the function "single" and it
|
|
||||||
# should return a keywowd such as toDo, badTest or other as listed in the
|
|
||||||
# docs for tcltest. e.g.:
|
|
||||||
# {expr "[string first {i'} \"${input}\"] > -1 ? {emptyTest} : {}"}
|
|
||||||
# see tcltest documentation for other values.
|
|
||||||
|
|
||||||
# Get some help:
|
|
||||||
source helper.tcl
|
|
||||||
|
|
||||||
set vimCmds [list {let g:delimitMate_expand_cr = 1}]
|
|
||||||
#"let g:delimitMate_eol_marker = ';'
|
|
||||||
lappend vimCmds {filetype indent on}
|
|
||||||
lappend vimCmds {set bs=2 et sts=4 sw=4 ft=javascript}
|
|
||||||
single javascript-1 {} "\$(document).ready(function() {})" "f{a\rx" \
|
|
||||||
"\$(document).ready(function() {\n x\n})" ${vimCmds}
|
|
||||||
|
|
||||||
# Issue #95
|
|
||||||
set vimCmds [list {let g:delimitMate_expand_cr = 1}]
|
|
||||||
lappend vimCmds {let b:delimitMate_jump_expansion = 1}
|
|
||||||
set skipScript {string cat toDo}
|
|
||||||
single issue_95 {} "" "i(\rtest)x" "(\ntest\n)x" ${vimCmds} ${skipScript}
|
|
||||||
|
|
||||||
# Remove CR expansion on BS
|
|
||||||
set skipScript {string cat toDo}
|
|
||||||
single bs {} "" "i(\r\bx" "(x)" ${vimCmds} ${skipScript}
|
|
||||||
|
|
||||||
# Consider indentation with BS inside an empty CR expansion.
|
|
||||||
single bs_indentation {} "" "i( \r\b\bx" "(x)" ${vimCmds}
|
|
||||||
|
|
||||||
# Conflict with indentation settings (cindent). Issue #95
|
|
||||||
lappend vimCmds {se cindent}
|
|
||||||
single issue_95 {} "sub foo {\n while (1) {\n\n }\n}" "3Gi\bx" \
|
|
||||||
"sub foo {\n while (1) {x}\n}" ${vimCmds}
|
|
||||||
|
|
||||||
single nested_expansion-1 {} "sub foo {\n while (1) {\n bar\n }\n}" \
|
|
||||||
"3GA}x" "sub foo {\n while (1) {\n bar\n }x\n}" ${vimCmds}
|
|
||||||
|
|
||||||
single nested_expansion-2 {} "sub foo {\n while (1) {\n bar\n }\n}" \
|
|
||||||
"3GA{x" "sub foo {\n while (1) {\n bar{x}\n }\n}" ${vimCmds}
|
|
||||||
|
|
||||||
single bracketed {} "\"{bracketed}" "\033A\"x" "\"{bracketed}\"x" ${vimCmds}
|
|
||||||
|
|
||||||
# Syntax folding enabled by autocmd breaks expansion.
|
|
||||||
set vimCmds [list {let g:delimitMate_expand_cr = 1}]
|
|
||||||
lappend vimCmds {se cindent}
|
|
||||||
lappend vimCmds {set bs=2 et sts=4 sw=4}
|
|
||||||
lappend vimCmds {autocmd InsertEnter <buffer> let w:fdm=&foldmethod \
|
|
||||||
| setl foldmethod=manual}
|
|
||||||
lappend vimCmds {autocmd InsertLeave <buffer> let &foldmethod = w:fdm}
|
|
||||||
lappend vimCmds {set foldmethod=marker}
|
|
||||||
lappend vimCmds {set foldmarker={,}}
|
|
||||||
lappend vimCmds {set foldlevel=0}
|
|
||||||
lappend vimCmds {set backspace=2}
|
|
||||||
single folding {} "" "iabc {\rx" "abc {\n x\n}" ${vimCmds}
|
|
||||||
|
|
||||||
# expand_cr != 2}
|
|
||||||
set vimCmds [list {let g:delimitMate_expand_cr = 1}]
|
|
||||||
lappend vimCmds {se cindent}
|
|
||||||
lappend vimCmds {set bs=2 et sts=4 sw=4 ft=javascript}
|
|
||||||
lappend vimCmds {let b:delimitMate_jump_expansion = 1}
|
|
||||||
single axpand_cr_no_2 {} "abc(def)" "\$i\rx" "abc(def\n x)" ${vimCmds}
|
|
||||||
|
|
||||||
# expand_cr == 2
|
|
||||||
set vimCmds [list {let g:delimitMate_expand_cr = 2}]
|
|
||||||
lappend vimCmds {se cindent}
|
|
||||||
lappend vimCmds {set bs=2 et sts=4 sw=4 ft=javascript}
|
|
||||||
lappend vimCmds {let b:delimitMate_jump_expansion = 1}
|
|
||||||
single expand_cr_2 {} "abc(def)" "\$i\rx" "abc(def\n x\n )" ${vimCmds}
|
|
||||||
|
|
||||||
# Play nice with smartindent
|
|
||||||
set vimCmds [list {let g:delimitMate_expand_cr = 2}]
|
|
||||||
lappend vimCmds {let b:delimitMate_jump_expansion = 1}
|
|
||||||
lappend vimCmds {set smartindent}
|
|
||||||
single smartindent-1 {} "" "i{\rx" "{\n x\n}" ${vimCmds}
|
|
||||||
|
|
||||||
single quotes-1 {} "" "i\" x" {" x"} ${vimCmds}
|
|
||||||
|
|
||||||
single quotes-2 {} "" "i\"\rx" "\"\nx\"" ${vimCmds}
|
|
||||||
|
|
||||||
lappend vimCmds {let g:delimitMate_expand_inside_quotes = 1}
|
|
||||||
single quotes-3 {} "" "i\"\nx" "\"\nx\n\"" ${vimCmds}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
################################################################
|
|
||||||
# This gives nice statistics and cleans up the mess left behind.
|
|
||||||
cleanupTests
|
|
||||||
# vim: set filetype=tcl et sw=2 sts=0 ts=8:
|
|
||||||
96
test/expand_cr.txt
Normal file
96
test/expand_cr.txt
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
#
|
||||||
|
%d
|
||||||
|
filetype indent on
|
||||||
|
set bs=2 et sts=4 sw=4 ft=javascript
|
||||||
|
call setline(1, '$(document).ready(function() {})')
|
||||||
|
DelimitMateReload
|
||||||
|
exec "normal 31|i\<CR>x\<Esc>"
|
||||||
|
================================================================================
|
||||||
|
$(document).ready(function() {
|
||||||
|
x
|
||||||
|
})
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
# Issue #95
|
||||||
|
new
|
||||||
|
let b:delimitMate_jump_expansion = 1
|
||||||
|
DelimitMateReload
|
||||||
|
exec "normal i(\<CR>test)x"
|
||||||
|
================================================================================
|
||||||
|
(
|
||||||
|
test
|
||||||
|
)x
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
# Remove CR expansion on BS
|
||||||
|
%d
|
||||||
|
exec "normal i(\<CR>\<BS>x"
|
||||||
|
================================================================================
|
||||||
|
(x)
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
# Consider indentation with BS inside an empty CR expansion.
|
||||||
|
%d
|
||||||
|
exec "normal i( \<CR>\<BS>\<BS>x"
|
||||||
|
================================================================================
|
||||||
|
(x)
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
# Conflict with indentation settings (cindent). Issue #95
|
||||||
|
se cindent
|
||||||
|
call setline(1, ['sub foo {',' while (1) {', ' ', ' }', '}'])
|
||||||
|
call cursor(3, 8)
|
||||||
|
normal a}x
|
||||||
|
================================================================================
|
||||||
|
sub foo {
|
||||||
|
while (1) {
|
||||||
|
|
||||||
|
}x
|
||||||
|
}
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
%d
|
||||||
|
call setline(1, '"{bracketed}')
|
||||||
|
normal A"x
|
||||||
|
================================================================================
|
||||||
|
"{bracketed}"x
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
# Syntax folding enabled by autocmd breaks expansion. But ti can't be tested
|
||||||
|
# with :normal
|
||||||
|
new
|
||||||
|
autocmd InsertEnter * let w:fdm=&foldmethod | setl foldmethod=manual
|
||||||
|
autocmd InsertLeave * let &foldmethod = w:fdm
|
||||||
|
set foldmethod=marker
|
||||||
|
set foldmarker={,}
|
||||||
|
set foldlevel=0
|
||||||
|
set backspace=2
|
||||||
|
exec "normal iabc {\<CR>x"
|
||||||
|
================================================================================
|
||||||
|
abc {
|
||||||
|
x
|
||||||
|
}
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
# expand_cr != 2
|
||||||
|
%d_
|
||||||
|
call setline(1, 'abc(def)')
|
||||||
|
exec "normal $i\<CR>x"
|
||||||
|
================================================================================
|
||||||
|
abc(def
|
||||||
|
x)
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
# expand_cr == 2
|
||||||
|
%d_
|
||||||
|
let delimitMate_expand_cr = 2
|
||||||
|
DelimitMateReload
|
||||||
|
call setline(1, 'abc(def)')
|
||||||
|
exec "normal $i\<CR>x"
|
||||||
|
================================================================================
|
||||||
|
abc(def
|
||||||
|
x
|
||||||
|
)
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
# Play nice with smartindent
|
||||||
|
%d_
|
||||||
|
set all&
|
||||||
|
set smartindent
|
||||||
|
exec "normal $i{\<CR>x"
|
||||||
|
================================================================================
|
||||||
|
{
|
||||||
|
x
|
||||||
|
}
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
55
test/expand_cr.vim
Normal file
55
test/expand_cr.vim
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
let g:delimitMate_expand_cr = 1
|
||||||
|
"DelimitMateReload
|
||||||
|
let lines = readfile(expand('<sfile>:t:r').'.txt')
|
||||||
|
call vimtest#StartTap()
|
||||||
|
let testsnumber = len(filter(copy(lines), 'v:val =~ ''^=\{80}$'''))
|
||||||
|
call vimtap#Plan(testsnumber)
|
||||||
|
let tcount = 1
|
||||||
|
let expect = 0
|
||||||
|
let evaluate = 0
|
||||||
|
let commands = []
|
||||||
|
let header = ''
|
||||||
|
for item in lines
|
||||||
|
if item =~ '^=\{80}$'
|
||||||
|
let expect = 1
|
||||||
|
let expected = []
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
|
||||||
|
if item =~ '^#' && expect == 0
|
||||||
|
" A comment.
|
||||||
|
let header = empty(header) ? item[1:] : 'Lines should match.'
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
if item =~ '^\s*$' && expect == 0
|
||||||
|
" An empty line.
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
if ! expect
|
||||||
|
" A command.
|
||||||
|
call add(commands, item)
|
||||||
|
exec item
|
||||||
|
"call vimtap#Diag(item)
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
if item =~ '^-\{80}$'
|
||||||
|
let expect = 0
|
||||||
|
endif
|
||||||
|
if expect
|
||||||
|
call add(expected, item)
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
let lines = getline(1, line('$'))
|
||||||
|
let passed = lines == expected
|
||||||
|
echom string(lines)
|
||||||
|
echom string(expected)
|
||||||
|
call vimtap#Is(lines, expected, header)
|
||||||
|
echom string(commands)
|
||||||
|
for cmd in commands
|
||||||
|
call vimtap#Diag(cmd)
|
||||||
|
endfor
|
||||||
|
let commands = []
|
||||||
|
let header = ''
|
||||||
|
let tcount += 1
|
||||||
|
endfor
|
||||||
|
call vimtest#Quit()
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
# singleTest name desc setup input result vimCmds? skipScript?
|
|
||||||
#
|
|
||||||
# - desc can be empty and input would be used.
|
|
||||||
# - vimCmds is a list of ex commands.
|
|
||||||
# - skipScript will be evaluated in the scope of the function "single" and it
|
|
||||||
# should return a keywowd such as toDo, badTest or other as listed in the
|
|
||||||
# docs for tcltest. e.g.:
|
|
||||||
# {expr "[string first {i'} \"${input}\"] > -1 ? {emptyTest} : {}"}
|
|
||||||
# see tcltest documentation for other values.
|
|
||||||
|
|
||||||
# Get some help:
|
|
||||||
source helper.tcl
|
|
||||||
|
|
||||||
set vimCmds [list {let g:delimitMate_expand_space = 1}]
|
|
||||||
lappend vimCmds {let g:delimitMate_autoclose = 1}
|
|
||||||
|
|
||||||
pairs pairs-1 {} "" "i( x" "( x )" ${vimCmds}
|
|
||||||
|
|
||||||
pairs pairs-2 {} "( )" "la\bx" "(x)" ${vimCmds}
|
|
||||||
|
|
||||||
pairs pairs-3 {} "" "iabc x" "abc x" ${vimCmds}
|
|
||||||
|
|
||||||
quotes quotes-1 {} "" "i' x" "' x'" ${vimCmds}
|
|
||||||
|
|
||||||
lappend vimCmds {let g:delimitMate_expand_inside_quotes = 1}
|
|
||||||
quotes quotes-2 {} "" "i' x" "' x '" ${vimCmds}
|
|
||||||
|
|
||||||
quotes quotes-3 {} "" "i' \bx" "'x'" ${vimCmds}
|
|
||||||
|
|
||||||
set skipScript {string cat quoteBug}
|
|
||||||
lappend vimCmds {let g:delimitMate_autoclose = 0}
|
|
||||||
quotes quotes-4 {} "abc\\" "A'' x" "abc\\'' x '" ${vimCmds} ${skipScript}
|
|
||||||
|
|
||||||
# Issue #95
|
|
||||||
lappend vimCmds {let b:delimitMate_jump_expansion = 1}
|
|
||||||
set skipScript {string cat toDo}
|
|
||||||
pairs issue_95 {} "" "i( test)x" "( test )x" ${vimCmds} ${skipScript}
|
|
||||||
|
|
||||||
pairs pairs-4 {} "" "i() \bx" "(x)" ${vimCmds}
|
|
||||||
|
|
||||||
quotes quotes-5 {} "" "i'' \bx" "'x'" ${vimCmds}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
################################################################
|
|
||||||
# This gives nice statistics and cleans up the mess left behind.
|
|
||||||
cleanupTests
|
|
||||||
# vim: set filetype=tcl et sw=2 sts=0 ts=8:
|
|
||||||
8
test/expand_space.txt
Normal file
8
test/expand_space.txt
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# Issue #95
|
||||||
|
new
|
||||||
|
let b:delimitMate_jump_expansion = 1
|
||||||
|
DelimitMateReload
|
||||||
|
exec "normal i( test)x"
|
||||||
|
================================================================================
|
||||||
|
( test )x
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
42
test/expand_space.vim
Normal file
42
test/expand_space.vim
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
let g:delimitMate_expand_space = 1
|
||||||
|
"DelimitMateReload
|
||||||
|
let lines = readfile(expand('<sfile>:t:r').'.txt')
|
||||||
|
call vimtest#StartTap()
|
||||||
|
let testsnumber = len(filter(copy(lines), 'v:val =~ ''^=\{80}$'''))
|
||||||
|
call vimtap#Plan(testsnumber)
|
||||||
|
let tcount = 1
|
||||||
|
let expect = 0
|
||||||
|
let evaluate = 0
|
||||||
|
for item in lines
|
||||||
|
if item =~ '^=\{80}$'
|
||||||
|
let expect = 1
|
||||||
|
let expected = []
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
|
||||||
|
if item =~ '^#\|^\s*$' && expect == 0
|
||||||
|
" A comment or empty line.
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
if ! expect
|
||||||
|
" A command.
|
||||||
|
exec item
|
||||||
|
call vimtap#Diag(item)
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
if item =~ '^-\{80}$'
|
||||||
|
let expect = 0
|
||||||
|
endif
|
||||||
|
if expect
|
||||||
|
call add(expected, item)
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
let lines = getline(1, line('$'))
|
||||||
|
let passed = lines == expected
|
||||||
|
echom string(lines)
|
||||||
|
echom string(expected)
|
||||||
|
call vimtap#Ok(passed, string(expected) .
|
||||||
|
\ (passed ? ' =' : ' !') . '= ' . string(lines))
|
||||||
|
let tcount += 1
|
||||||
|
endfor
|
||||||
|
call vimtest#Quit()
|
||||||
8
test/first_buffer_no_ft.vim
Normal file
8
test/first_buffer_no_ft.vim
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
let g:delimitMate_expand_cr = 1
|
||||||
|
let g:delimitMate_eol_marker = ';'
|
||||||
|
call vimtest#StartTap()
|
||||||
|
call vimtap#Plan(1)
|
||||||
|
call vimtap#Like(maparg('(', 'i'), '<Plug>delimitMate(', 'Mappings defined for the first buffer without filetype set.')
|
||||||
|
call vimtest#Quit()
|
||||||
|
|
||||||
|
|
||||||
125
test/helper.tcl
125
test/helper.tcl
@@ -1,125 +0,0 @@
|
|||||||
if {[lsearch [namespace children] ::tcltest] == -1} {
|
|
||||||
package require tcltest 2
|
|
||||||
namespace import -force ::tcltest::*
|
|
||||||
}
|
|
||||||
|
|
||||||
configure -verbose {body error skip}
|
|
||||||
#configure -verbose {start msec pass body error skip}
|
|
||||||
|
|
||||||
set charMap [list \
|
|
||||||
"\"" "\\\"" \
|
|
||||||
"\$" "\\$" \
|
|
||||||
"\[" "\\\[" \
|
|
||||||
"\]" "\\\]" \
|
|
||||||
"\\" "\\\\" \
|
|
||||||
"{" "\\{" \
|
|
||||||
"}" "\\}" \
|
|
||||||
]
|
|
||||||
|
|
||||||
# In order to skip a test pass a script that, when evaluated, returns emptyTest
|
|
||||||
# for tests that can not pass, or knownBug for ToDo features. e.g.:
|
|
||||||
# {expr "[string first {i'} \"${input}\"] > -1 ? {emptyTest} : {}"}
|
|
||||||
# see tcltest documentation for other values.
|
|
||||||
|
|
||||||
proc single {name desc setup input result \
|
|
||||||
{vimCmds {}} \
|
|
||||||
{constr {}} \
|
|
||||||
} {
|
|
||||||
set fnamePrefix "test_${name}"
|
|
||||||
global charMap
|
|
||||||
makeFile ${setup} "${fnamePrefix}.in"
|
|
||||||
makeFile {} "${fnamePrefix}.out"
|
|
||||||
makeFile [join ${vimCmds} "\n"] "${fnamePrefix}.vim"
|
|
||||||
set input [string map ${charMap} ${input}]
|
|
||||||
#puts [lindex ${vimCmds} 0]
|
|
||||||
set optCharMap [list {[} {\[} {]} {\]}]
|
|
||||||
set vimArgs [lmap option ${vimCmds} \
|
|
||||||
{string cat " -c \"[string map $charMap ${option}]\""}]
|
|
||||||
set body [string cat "
|
|
||||||
exec -- ./test.exp \"${fnamePrefix}\" \"${input}\"
|
|
||||||
return \[viewFile \"${fnamePrefix}.out\"\]
|
|
||||||
" ]
|
|
||||||
#puts ${body}
|
|
||||||
if {[string length ${desc}] eq 0} {
|
|
||||||
set desc ${input}
|
|
||||||
}
|
|
||||||
if {[string length ${constr}] ne 0} {
|
|
||||||
#puts ${constr}
|
|
||||||
set constr [eval ${constr}]
|
|
||||||
#puts ${constr}
|
|
||||||
}
|
|
||||||
set name "${name}: \"${setup}\", \"${desc}\" ->"
|
|
||||||
#puts $desc
|
|
||||||
#puts $name
|
|
||||||
test ${name} \
|
|
||||||
${desc} \
|
|
||||||
-body ${body} \
|
|
||||||
-constraints ${constr} \
|
|
||||||
-result ${result}
|
|
||||||
}
|
|
||||||
|
|
||||||
proc multi {items evalScript name desc setup input result \
|
|
||||||
{vimCmds {}} \
|
|
||||||
{constr {}} \
|
|
||||||
} {
|
|
||||||
global charMap
|
|
||||||
set minor 0
|
|
||||||
foreach item $items {
|
|
||||||
incr minor
|
|
||||||
eval ${evalScript}
|
|
||||||
foreach var {desc setup input result} {
|
|
||||||
set "the_${var}" [string map ${aCharMap} [expr "$${var}"]]
|
|
||||||
}
|
|
||||||
set the_name "${name}.${minor}"
|
|
||||||
single \
|
|
||||||
${the_name} \
|
|
||||||
${the_desc} \
|
|
||||||
${the_setup} \
|
|
||||||
${the_input} \
|
|
||||||
${the_result} \
|
|
||||||
${vimCmds} \
|
|
||||||
${constr} \
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
proc quotes {name desc setup input result \
|
|
||||||
{vimCmds {}} \
|
|
||||||
{constr {}} \
|
|
||||||
} {
|
|
||||||
set quotes [list {'} \" {`} {«} {|}]
|
|
||||||
set mapScript {set aCharMap [list "'" ${item}]}
|
|
||||||
multi \
|
|
||||||
${quotes} \
|
|
||||||
${mapScript} \
|
|
||||||
${name} \
|
|
||||||
${desc} \
|
|
||||||
${setup} \
|
|
||||||
${input} \
|
|
||||||
${result} \
|
|
||||||
${vimCmds} \
|
|
||||||
${constr} \
|
|
||||||
}
|
|
||||||
|
|
||||||
proc pairs {name desc setup input result \
|
|
||||||
{vimCmds {}} \
|
|
||||||
{constr {}} \
|
|
||||||
} {
|
|
||||||
set pairs [list () \{\} \[\] <> ¿? ¡! ,:]
|
|
||||||
set mapScript {
|
|
||||||
set left [string index ${item} 0]
|
|
||||||
set right [string index ${item} 1]
|
|
||||||
set aCharMap [list ( ${left} ) ${right}]
|
|
||||||
}
|
|
||||||
multi \
|
|
||||||
${pairs} \
|
|
||||||
${mapScript} \
|
|
||||||
${name} \
|
|
||||||
${desc} \
|
|
||||||
${setup} \
|
|
||||||
${input} \
|
|
||||||
${result} \
|
|
||||||
${vimCmds} \
|
|
||||||
${constr} \
|
|
||||||
}
|
|
||||||
|
|
||||||
# vim: set filetype=tcl et sw=2 sts=0 ts=8:
|
|
||||||
153
test/pairs.test
153
test/pairs.test
@@ -1,153 +0,0 @@
|
|||||||
# singleTest name desc setup input result vimCmds? skipScript?
|
|
||||||
#
|
|
||||||
# - desc can be empty and input would be used.
|
|
||||||
# - vimCmds is a list of ex commands.
|
|
||||||
# - skipScript will be evaluated in the scope of the function "single" and it
|
|
||||||
# should return a keywowd such as toDo, badTest or other as listed in the
|
|
||||||
# docs for tcltest. e.g.:
|
|
||||||
# {expr "[string first {i'} \"${input}\"] > -1 ? {emptyTest} : {}"}
|
|
||||||
# see tcltest documentation for other values.
|
|
||||||
|
|
||||||
# Get some help:
|
|
||||||
source helper.tcl
|
|
||||||
|
|
||||||
set vimCmds [list ]
|
|
||||||
pairs autoclose-1 {} {} "i(" "()"
|
|
||||||
|
|
||||||
pairs autoclose-2 {} {()} "a\b" ""
|
|
||||||
|
|
||||||
pairs autoclose-3 {} "()" "a)x" "()x"
|
|
||||||
|
|
||||||
set skipScript {string cat {toDo}}
|
|
||||||
single jump_all {} "" "((<magic>x" "(())x" {} ${skipScript}
|
|
||||||
|
|
||||||
pairs undo {} "" "i(x\033u" ""
|
|
||||||
|
|
||||||
pairs autoclose-4 {} "" "i@(x" "@(x)"
|
|
||||||
|
|
||||||
pairs autoclose-5 {} "@#" "a(x" "@(x)#"
|
|
||||||
|
|
||||||
pairs autoclose-6 {} "\\" "a(x" "\\(x"
|
|
||||||
|
|
||||||
pairs autoclose-7 {} "(\\)" "la)x" "(\\)x)"
|
|
||||||
|
|
||||||
pairs autoclose-8 {} {"abc"} "ifoo(" "foo(\"abc\""
|
|
||||||
|
|
||||||
set vimCmds [list {let g:delimitMate_autoclose = 0}]
|
|
||||||
pairs noautoclose-1 {} "" "i(x" "(x" ${vimCmds}
|
|
||||||
|
|
||||||
pairs noautoclose-2 {} "" "i()x" "(x)" ${vimCmds}
|
|
||||||
|
|
||||||
pairs noautoclose-3 {} "" "i())x" "()x" ${vimCmds}
|
|
||||||
|
|
||||||
pairs noautoclose-4 {} "" "i()\bx" "x" ${vimCmds}
|
|
||||||
|
|
||||||
pairs noautoclose-5 {} "" "i@()x" "@(x)" ${vimCmds}
|
|
||||||
|
|
||||||
pairs noautoclose-6 {} "@#" "a()x" "@(x)#" ${vimCmds}
|
|
||||||
|
|
||||||
#" Handle backspace gracefully.
|
|
||||||
set vimCmds [list {set backspace=}]
|
|
||||||
pairs bad_bs {} "" "i(\033a\bx" "(x)" ${vimCmds}
|
|
||||||
|
|
||||||
set vimCmds [list ]
|
|
||||||
|
|
||||||
# closing parens removes characters. #133
|
|
||||||
pairs autoclose-9 {} "(a)" "a)" "()a)" ${vimCmds}
|
|
||||||
|
|
||||||
# Expand iabbreviations
|
|
||||||
set vimCmds [list {iabb def ghi}]
|
|
||||||
# Not sure how to make it work on the test
|
|
||||||
pairs iabbr {} "" "idef(" "ghi()" ${vimCmds}
|
|
||||||
|
|
||||||
set vimCmds [list ]
|
|
||||||
|
|
||||||
pairs autoclose-10 {} {abc а} {$i(} {abc (а} ${vimCmds}
|
|
||||||
|
|
||||||
pairs autoclose-11 {} "abc ñ" "\$i(" "abc (ñ" ${vimCmds}
|
|
||||||
|
|
||||||
pairs autoclose-12 {} "abc \$" "\$i(" "abc (\$" ${vimCmds}
|
|
||||||
|
|
||||||
pairs autoclose-13 {} "abc £" "\$i(" "abc (£" ${vimCmds}
|
|
||||||
|
|
||||||
pairs autoclose-14 {} "abc d" "\$i(" "abc (d" ${vimCmds}
|
|
||||||
|
|
||||||
pairs autoclose-15 {} "abc ." "\$i(" "abc ()." ${vimCmds}
|
|
||||||
|
|
||||||
pairs autoclose-16 {} "abc " "\$i(" "abc () " ${vimCmds}
|
|
||||||
|
|
||||||
pairs autoclose-17 {} "abc (" "\$i(" "abc ((" ${vimCmds}
|
|
||||||
|
|
||||||
# Play nice with undo.
|
|
||||||
pairs undo {} "" "ia\007u(c)b\033u" "a" ${vimCmds}
|
|
||||||
|
|
||||||
# TODO: way to jump over one or several closing chars
|
|
||||||
set skipScript {string cat {toDo}}
|
|
||||||
single jump_to {} "()" "a\<magic>x" "()x" ${vimCmds} ${skipScript}
|
|
||||||
|
|
||||||
single jump_to {} "{()}" "la\\<magic>x" "{()}x" ${vimCmds} ${skipScript}
|
|
||||||
|
|
||||||
set vimCmds [list {let g:delimitMate_balance_pairs = 0}]
|
|
||||||
pairs no_balance_pairs-1 {} "ab cd)" "la(x" "ab(x) cd)" ${vimCmds}
|
|
||||||
|
|
||||||
# Issue #229
|
|
||||||
pairs issue_229-1 {} "((ab cd)" "\$i)x" "((ab cd)x" ${vimCmds}
|
|
||||||
|
|
||||||
set vimCmds [list ]
|
|
||||||
|
|
||||||
set vimCmds [list {let g:delimitMate_balance_pairs = 1}]
|
|
||||||
pairs issue_229-2 {} "ab cd)" "la(x" "ab(x cd)" ${vimCmds}
|
|
||||||
|
|
||||||
# Issue #229
|
|
||||||
pairs issue_229-3 {} "((ab cd)" "\$i)x" "((ab cd)x)" ${vimCmds}
|
|
||||||
|
|
||||||
# Issue #220
|
|
||||||
set vimCmds [list {let g:delimitMate_jump_next = 0}]
|
|
||||||
pairs issue_220-1 {} "()" "a)" "())" ${vimCmds}
|
|
||||||
|
|
||||||
# Issues #207 and #223
|
|
||||||
set vimCmds [list {let g:delimitMate_jump_long = 1}]
|
|
||||||
pairs jump_long-1 {} "{\[(foobar)\]}" "fbi)x" "{\[(foobar)x\]}" ${vimCmds}
|
|
||||||
|
|
||||||
# Issues #207 and #223
|
|
||||||
set skipScript {expr "[string first {[[foobar]]} \"${setup}\"] > -1 \
|
|
||||||
? {badTest} : {}"}
|
|
||||||
single jump_long-2 {} "{\[(foobar)\]}" "fbi\]x" "{\[(foobar)\]x}" ${vimCmds} ${skipScript}
|
|
||||||
|
|
||||||
# Issues #207 and #223
|
|
||||||
set skipScript {string cat {toDo}}
|
|
||||||
set vimCmds [list {let g:delimitMate_jump_all = 1}]
|
|
||||||
single issues_207_223 {} "{\[(foobar)\]}" "fbi<magic>x" "{\[(foobar)\]}x" \
|
|
||||||
${vimCmds} ${skipScript}
|
|
||||||
|
|
||||||
set vimCmds [list {let g:delimitMate_jump_back = 1}]
|
|
||||||
pairs jump_back {} "" "i()x" "()x" ${vimCmds}
|
|
||||||
|
|
||||||
# Disable on syntax groups
|
|
||||||
set vimCmds [list {syntax on}]
|
|
||||||
lappend vimCmds {set ft=vim}
|
|
||||||
lappend vimCmds {let g:delimitMate_excluded_regions = ['String']}
|
|
||||||
pairs ignore_syntax {} {echo " "} "f\"la(" {echo " ( "} ${vimCmds}
|
|
||||||
|
|
||||||
#" Issue #160
|
|
||||||
set vimCmds [list {filetype indent plugin on}]
|
|
||||||
lappend vimCmds {set ft=php}
|
|
||||||
set skipScript {string cat {toDo}}
|
|
||||||
single issue_160 {} "<?php incl" "A\x18\x0F\x19" "<?php include()" \
|
|
||||||
${vimCmds} ${skipScript}
|
|
||||||
|
|
||||||
set vimCmds [list ]
|
|
||||||
|
|
||||||
# Play nice with redo
|
|
||||||
pairs redo {} "abc " "Afoo(x\033." "abc foo(x)foo(x)" ${vimCmds}
|
|
||||||
|
|
||||||
pairs smart {} {""} "0a(x" {"(x"}
|
|
||||||
|
|
||||||
pairs smart {} {""} "0a()x" {"(x)"}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
################################################################
|
|
||||||
# This gives nice statistics and cleans up the mess left behind.
|
|
||||||
cleanupTests
|
|
||||||
# vim: set filetype=tcl et sw=2 sts=0 ts=8:
|
|
||||||
107
test/quotes.test
107
test/quotes.test
@@ -1,107 +0,0 @@
|
|||||||
# singleTest name desc setup input result vimCmds? skipScript?
|
|
||||||
#
|
|
||||||
# - desc can be empty and input would be used.
|
|
||||||
# - vimCmds is a list of ex commands.
|
|
||||||
# - skipScript will be evaluated in the scope of the function "single" and it
|
|
||||||
# should return a keywowd such as toDo, badTest or other as listed in the
|
|
||||||
# docs for tcltest. e.g.:
|
|
||||||
# {expr "[string first {i'} \"${input}\"] > -1 ? {emptyTest} : {}"}
|
|
||||||
# see tcltest documentation for other values.
|
|
||||||
|
|
||||||
# Get some help:
|
|
||||||
source helper.tcl
|
|
||||||
|
|
||||||
quotes autoclose-1 {} {} "i'x" "'x'"
|
|
||||||
|
|
||||||
quotes autoclose-2 {} {} "i'x\033u" {}
|
|
||||||
|
|
||||||
quotes autoclose-3 {} {} {i''x} {''x}
|
|
||||||
|
|
||||||
quotes autoclose-4 {} {''} "a\bx" {x}
|
|
||||||
|
|
||||||
set skipScript {expr "[string first {i\"} \"${input}\"] > -1 ? {badTest} : {}"}
|
|
||||||
quotes autoclose-5 {} "" "i'x\"" "'x\"'" {} ${skipScript}
|
|
||||||
|
|
||||||
quotes autoclose-6 {} {} "i@'x" "@'x'"
|
|
||||||
|
|
||||||
quotes autoclose-7 {} {@#} "a'x" "@'x'#"
|
|
||||||
|
|
||||||
#quotes autoclose-8 {} {} "'\<S-Tab>x" "''x"
|
|
||||||
|
|
||||||
single autoclose-8 {} {abc'} "A'" "abc'" {} {string cat toDo}
|
|
||||||
|
|
||||||
quotes autoclose-9 {} "abc\\" "A'x" {abc\'x}
|
|
||||||
|
|
||||||
quotes autoclose-10 {} {} "au'Привет'" "u'Привет'"
|
|
||||||
|
|
||||||
quotes autoclose-11 {} {} "au'string'" "u'string'"
|
|
||||||
|
|
||||||
set vimCmds [list {let g:delimitMate_autoclose = 0}]
|
|
||||||
quotes noautoclose-1 {} {} "a'x" "'x" ${vimCmds}
|
|
||||||
|
|
||||||
quotes noautoclose-2 {} {} "a''x" "'x'" ${vimCmds}
|
|
||||||
|
|
||||||
quotes noautoclose-3 {} {} "a'''x" "''x" ${vimCmds}
|
|
||||||
|
|
||||||
quotes noautoclose-4 {} {} "a''\bx" "x" ${vimCmds}
|
|
||||||
|
|
||||||
quotes noautoclose-5 {} {} "a@''x" "@'x'" ${vimCmds}
|
|
||||||
|
|
||||||
quotes noautoclose-6 {} "@#" "a''x" "@'x'#" ${vimCmds}
|
|
||||||
|
|
||||||
set vimCmds [list {let g:delimitMate_autoclose = 1}]
|
|
||||||
# Handle backspace gracefully.
|
|
||||||
lappend vimCmds {set backspace=}
|
|
||||||
quotes badBS-1 {} {} "a'\033a\bx" "'x'" ${vimCmds}
|
|
||||||
|
|
||||||
set vimCmds [list {set cpo=ces$}]
|
|
||||||
quotes cpo {} {} "a'x" "'x'" ${vimCmds}
|
|
||||||
|
|
||||||
# Make sure smart quote works beyond first column.
|
|
||||||
quotes beyond_first_column {} { } "a'x" " 'x'"
|
|
||||||
|
|
||||||
# smart quote, check fo char on the right.
|
|
||||||
quotes smart_quote-1 {} "a b" "la'" "a 'b"
|
|
||||||
|
|
||||||
# Make sure we jump over a quote on the right. #89.
|
|
||||||
quotes autoclose-12 {} {} "a('test'x" "('test'x)"
|
|
||||||
|
|
||||||
# Duplicate whole line when inserting quote at bol #105
|
|
||||||
quotes autoclose-13 {} "}" "i'" "''}"
|
|
||||||
|
|
||||||
quotes autoclose-14 {} "'abc " "A'" "'abc '"
|
|
||||||
|
|
||||||
quotes autoclose-15 {} "''abc " "A'" "''abc ''"
|
|
||||||
|
|
||||||
# Nesting quotes:
|
|
||||||
set vimCmds [list {let g:delimitMate_nesting_quotes = delimitMate#option('quotes')}]
|
|
||||||
quotes nesting-1 {} "''" "A'x" "'''x'''" ${vimCmds}
|
|
||||||
|
|
||||||
quotes nesting-2 {} "'''" "A'x" "''''x''''" ${vimCmds}
|
|
||||||
|
|
||||||
quotes nesting-3 {} {} "i''x" "''x" ${vimCmds}
|
|
||||||
|
|
||||||
quotes nesting-4 {} {} "i'x" "'x'" ${vimCmds}
|
|
||||||
|
|
||||||
set vimCmds [list]
|
|
||||||
|
|
||||||
# expand iabbreviations
|
|
||||||
set vimCmds [list {iabb def ghi}]
|
|
||||||
single iabbr {} {} {idef"} {ghi"} ${vimCmds}
|
|
||||||
|
|
||||||
set vimCmds [list]
|
|
||||||
|
|
||||||
quotes autoclose-16 {} {} "i'\n\b" "''"
|
|
||||||
|
|
||||||
# Double quote starts a comment in viml
|
|
||||||
set vimCmds [list {set ft=vim}]
|
|
||||||
single vim_comment {} {} {i"} {"} ${vimCmds}
|
|
||||||
|
|
||||||
#" Allow quote to exit from string when disabled by syntax group.
|
|
||||||
set vimCmds [list {syntax on}]
|
|
||||||
quotes disabled_syntax {} "'abc'" "\$i'x" "'abc'x" ${vimCmds}
|
|
||||||
|
|
||||||
# --------
|
|
||||||
# This gives nice statistics and cleans up the mess left behind.
|
|
||||||
cleanupTests
|
|
||||||
# vim: set filetype=tcl et sw=2 sts=0 ts=8:
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
#!/usr/bin/env expect -f
|
|
||||||
|
|
||||||
set testName [lindex $argv 0]
|
|
||||||
set filein "${testName}.in"
|
|
||||||
set fileout "${testName}.out"
|
|
||||||
set input [lindex $argv 1]
|
|
||||||
|
|
||||||
set timeout 2
|
|
||||||
spawn env TERM=dumb vim -N -i NONE -u _setup.vim -S "${testName}.vim" -- ${filein}
|
|
||||||
match_max 100000
|
|
||||||
expect -exact "Start test"
|
|
||||||
foreach char [split ${input} {}] {
|
|
||||||
send -- "${char}"
|
|
||||||
sleep .01
|
|
||||||
}
|
|
||||||
send -- " "
|
|
||||||
sleep .01
|
|
||||||
send -- ":w! ${fileout}\r"
|
|
||||||
send -- ":qa!\r"
|
|
||||||
expect eof
|
|
||||||
Reference in New Issue
Block a user