347 Commits

Author SHA1 Message Date
Vasily Toropov
1e9e49d6de Merge 3a7919fdb5 into becbd2d353 2024-08-19 16:09:57 -07:00
Israel Chauca Fuentes
becbd2d353 Merge pull request #308 from kevinhwang91/master
fix: &sw may be a zero
2024-08-06 01:02:38 -05:00
kevinhwang91
382c36bf57 fix: &sw may be a zero
E41: Out of memory!
2024-08-06 12:56:21 +08:00
Israel Chauca Fuentes
537a1da0fa Merge pull request #295 from ypid/fix/python-defaults
Set delimitMate_nesting_quotes for Python by default
2020-12-13 22:12:48 -06:00
Robin Schneider
055978491a Set delimitMate_nesting_quotes for Python by default
Closes: #173
2020-12-13 17:49:44 +01:00
Israel Chauca F
16687aec24 Clean s:get() and s:set() up. Force s:set() to take a default value. Closes #287 2020-07-29 11:50:21 -05:00
Israel Chauca Fuentes
728b57a656 Merge pull request #260 from aschrab/command-window
Do setup for command windows
2017-06-19 00:53:36 -04:00
Aaron Schrab
98143957cf Do setup for command windows 2017-06-18 18:35:29 -04:00
Israel Chauca Fuentes
b5719054be Merge pull request #246 from Atcold/patch-1
Fix doc
2016-07-19 16:19:28 -04:00
Alfredo Canziani
39d8f522f7 Fix doc
Fix unusual formatting in section 3.1
2016-07-19 14:11:06 -04:00
Israel Chauca Fuentes
8bc47fd1c4 Merge pull request #227 from wellle/fix-repeat-and-undo
Fix repeat and undo
2015-09-07 14:58:42 -04:00
Christian Wellenbrock
bc97837c71 Don't break undo sequence when moving in insert mode
Since Vim version 7.4.849 [1] we can move in insert mode without
breaking the undo sequence by inserting <C-G>U before the movement key.

Add s:joinUndo which returns "\<C-G>U" if available.
Use s:joinUndo before doing any <Left> or <Right> movements in insert
mode to keep a single undo point which can be repeated and undone
with a single command.

[1] https://github.com/vim/vim/releases/tag/v7.4.849
2015-09-06 15:42:30 +02:00
Vasily Toropov
3a7919fdb5 Fixed closing apostrophe in clojure files 2015-07-26 17:39:30 +10:00
Israel Chauca Fuentes
d24ad6b301 Merge pull request #210 from codebeige/fix_expand_cr_for_excluded_ft
Prevent errors inside excluded filetype
2015-05-18 13:24:02 -04:00
Israel Chauca Fuentes
81de76fe52 Update help. 2015-05-17 19:42:50 -04:00
Israel Chauca Fuentes
5945fdfd14 Consider more characters in smart_matchpairs default value. 2015-05-17 19:34:11 -04:00
Israel Chauca Fuentes
9a77c3aee6 Merge branch 'RGBD-fix-maparg-typo' 2015-05-01 22:35:56 -04:00
Oleg Zubchenko
342a04b427 fix maparg typo 2015-04-27 21:11:57 +03:00
Tibor Claassen
03e94587ae Add a guard clause to disable expansion for excluded filetypes 2015-03-28 15:48:40 +02:00
Israel Chauca Fuentes
c78a6e6d93 Allow using commas and colons in matchpairs. Fix #208. 2015-02-12 09:09:48 -05:00
Israel Chauca Fuentes
470c053a3b Better handling of insert_eol_marker. Should fix #195. 2015-01-17 14:03:48 -05:00
Israel Chauca Fuentes
254a89d67c Call s:setup() directly in the plugin. Should fix #202.
- Move 'call s:setup()' out of the autocmd.
- Add a test for the first buffer without filetype set.
2015-01-15 11:21:09 -05:00
Israel Chauca Fuentes
e7b4dedb84 Add option delimitMate_insert_eol_marker. Closes #195. 2015-01-08 17:14:27 -05:00
Israel Chauca Fuentes
21a3ade90c Use s:get() and s:set() instead of the abbreviated forms. 2015-01-06 08:50:17 -05:00
Israel Chauca Fuentes
8e30e70bcd Refactor reporting code. 2015-01-05 02:16:09 -05:00
Israel Chauca Fuentes
ac792c01b6 Indent with spaces. 2015-01-04 20:25:50 -05:00
Israel Chauca Fuentes
c23ef684e3 Add :DelimitMateOn, :DelimitMateOff & remove s:DelimitMateSwitch(). 2015-01-04 20:13:11 -05:00
Israel Chauca Fuentes
b63924f2b2 Update doc. 2015-01-04 20:09:00 -05:00
Israel Chauca Fuentes
07b7cc969f Merge pull request #201 from kballard/mappings-user-event
Add 2 User events when mapping and unmapping
2015-01-02 20:32:18 -05:00
Israel Chauca Fuentes
13e52d42ae Do not consider quotes for smart_matchpairs. Closes #200. 2015-01-02 12:08:16 -05:00
Israel Chauca Fuentes
aa9d737763 Rename functions. 2015-01-02 12:07:31 -05:00
Daniel Hahler
bf2b68edab Remove call to s:option_init("excluded_ft"): it is a global setting only 2015-01-01 14:58:41 -05:00
Israel Chauca Fuentes
fe9022433d Use :unlet only when necessary. 2015-01-01 09:41:32 -05:00
Israel Chauca Fuentes
6f7e6413ce Fix doco. 2014-12-30 21:02:44 -05:00
Kevin Ballard
a9a37854da Minor documentation tweaks
Fix a typo in a hyperlink, and change the sample code for
delimitMate#JumpAny() to use an <expr> mapping instead of <C-R>=.
2014-12-29 19:33:24 -08:00
Kevin Ballard
0739792d01 Add 2 User events when mapping and unmapping
delimitMate has some nice logic for doing per-filetype mappings, but
this logic can't be used when users provide mappings directly. To remedy
this, add two User events `delimitMate_map` and `delimitMate_unmap` that
are fired at the appropriate times. Users can use these events to define
per-filetype mappings just as delimitMate does.
2014-12-29 19:33:15 -08:00
Kevin Ballard
6f4f1b06d3 Be more conservative about unmapping
Restrict unmapping to check for '^<Plug>delimitMate' (case sensitive)
instead of 'delimitMate' (case insensitive). This should make it less
likely to accidentally trigger on custom user keybinds that reference
delimitMate.
2014-12-29 18:37:51 -08:00
Israel Chauca Fuentes
0049b07a1c Fix Makefile and gitignore. 2014-12-03 17:06:37 -05:00
Israel Chauca Fuentes
fe1983cfa1 Consider ´quotes in smart_quotes`. Close #182.
[:punct:] does not always match the same set of characters.
2014-12-02 11:07:22 -05:00
Israel Chauca Fuentes
a4ac44a84f Add test plugins to the &rtp if they are present. 2014-12-01 00:23:37 -05:00
Israel Chauca Fuentes
4c13ed6aee Make s:g() return default optional values. Close #186. 2014-11-30 11:40:19 -05:00
Israel Chauca Fuentes
eafd832c04 Fix indentation in test. 2014-11-29 16:08:43 -05:00
Israel Chauca Fuentes
e13872fdb2 Fix indentation in test. 2014-11-29 16:08:00 -05:00
Israel Chauca Fuentes
9a9b9edb9a Merge pull request #183 from blueyed/makefile-for-tests
Makefile for tests
2014-11-29 15:32:43 -05:00
Israel Chauca Fuentes
0f353bd2b3 Add test for smartindent and expand_cr. 2014-11-28 12:11:28 -05:00
Israel Chauca Fuentes
c1b832bbf8 Merge pull request #180 from kballard/fix_expand_cr_smartindent
Fix expand_cr behavior with 'smartindent'
2014-11-27 02:45:59 -05:00
Israel Chauca Fuentes
073957f0a1 Add expand_inside_quotes to report and fix doc. Closes #179. 2014-11-27 02:11:12 -05:00
Israel Chauca Fuentes
c678061b79 Fix '<CR><BS>. Closes #178. 2014-11-27 01:48:34 -05:00
Israel Chauca Fuentes
12c7d85ff6 Add a basic vimrc to help with tests. 2014-11-26 19:24:38 -05:00
Israel Chauca Fuentes
66834e7209 Allow custom regex for smart_quotes. Close #164.
- Use search() to match on the current line and remove most of the old
  code in IsSmartQuote().
- Allow using ! to negate the pattern.
- Add tests.
- s:s() :unlet variables before setting them.
2014-11-26 15:03:00 -05:00
Daniel Hahler
21072cf13e gitignore: test/build and test output/generated files 2014-06-15 15:14:40 +02:00
Daniel Hahler
d952f6c721 test: call new Makefile from test subdir 2014-06-15 15:14:40 +02:00
Daniel Hahler
0efe44bc70 Rename README to README.md 2014-06-15 15:14:40 +02:00
Daniel Hahler
631d72465a Add a Makefile to provide make test 2014-06-15 15:14:40 +02:00
Kevin Ballard
4024181af2 Fix expand_cr behavior with 'smartindent'
When indentation is controlled by 'smartindent', the expand_cr behavior
doesn't end up producing the same results that you would get without
delimitMate. The following behavior results instead:

Before: {|}
After: {
		|
	}

The expected behavior is to produce the following:

Before: {|}
After: {
	|
}

To that end, detect when indentation is controlled by 'smartindent' and
adjust the indentation of the close line to match.
2014-06-03 18:26:42 -07:00
Israel Chauca Fuentes
38487bbec8 Merge pull request #169 from blueyed/hack-jumpout-del-and-reinsert
JumpOut: delete and insert char instead of jumping over.
2014-02-19 20:40:27 -05:00
Israel Chauca Fuentes
c74a48ccd8 Merge pull request #167 from blueyed/makefile-detect-sed
Detect $SED dynamically, but do not force `gsed`
2014-02-14 02:41:58 -05:00
Daniel Hahler
df1f32f772 JumpOut: delete and insert char instead of jumping over
Ref: https://github.com/Raimondi/delimitMate/issues/168
2014-02-11 23:55:25 +01:00
Daniel Hahler
f2b9b3a0c2 Detect $SED dynamically, but do not force gsed 2014-02-06 02:24:43 +01:00
Daniel Hahler
1c45f7bbde ParenDelim: improve smart_matchpairs handling
* move the check up
* only handle it when smart_matchpairs is configured (default)
2014-02-06 02:20:29 +01:00
Israel Chauca Fuentes
a1f21e8ef5 Merge pull request #162 from blueyed/handle-dotted-filetype
Fix &ft check in QuoteDelim: handle dotted filetypes
2014-02-02 21:05:39 -08:00
Israel Chauca Fuentes
eba94168ce Merge pull request #161 from blueyed/doc-typo
minor: fix doc typo
2014-02-02 21:03:22 -08:00
Daniel Hahler
06c1f31632 Fix &ft check in QuoteDelim: handle dotted filetypes
From `:h 'filetype'`:

		When a dot appears in the value then this separates two filetype
		names.  Example:
			/* vim: set filetype=c.doxygen : */ ~

I am using `ft=pentadactyl.vim` for my Pentadactyl/Vimperator
configuration files.
2014-01-29 11:23:20 +01:00
Daniel Hahler
9826c667e0 minor: fix doc typo 2014-01-29 11:19:50 +01:00
Israel Chauca Fuentes
35280c1444 Merge pull request #158 from peter50216/patch-1
Run DelimitMateDo() when loading plugin.
2014-01-07 13:07:19 -08:00
peter50216
82160a5de6 run DelimitMateDo() when loading plugin.
Current setting would make this plugin's mapping added last, and cause conflict with https://github.com/tpope/vim-endwise. See https://github.com/tpope/vim-endwise/pull/13.
2014-01-07 12:00:54 +08:00
Israel Chauca Fuentes
07d9fa9ddc Check delimitMate_matchpairs’ syntax. Also some formatting. 2014-01-04 18:14:03 -05:00
Israel Chauca Fuentes
54853a954c Consider | for matchpairs. Also some minor formatting. Fix #155. 2014-01-04 16:43:45 -05:00
Israel Chauca Fuentes
f00f6b6cf2 Simplify TriggerAbb(). 2013-12-25 02:28:46 -05:00
Israel Chauca Fuentes
d280d23a83 Do not try to expand iabbreviations when popup menu on. Should fix #154. 2013-12-25 02:09:41 -05:00
Israel Chauca Fuentes
821e0019fb Consider popup menu when expanding. Close #154. 2013-12-24 13:20:39 -05:00
Israel Chauca Fuentes
5ef40e0234 Do not expand cr and space inside quotes by default. Close #153.
- Add delimitMate_expand_inside_quotes.
- Add tests.
2013-12-24 02:48:35 -05:00
Israel Chauca Fuentes
399e18d669 Merge pull request #152 from Gray-Wind/master
Fix logical issue
2013-12-21 06:45:22 -08:00
Ilya Kolo
92fba35d27 Fix logical issue 2013-12-21 14:31:40 +04:00
Israel Chauca Fuentes
0528bdac15 Only try to expand abbreviations when supported. Close #151. 2013-12-20 18:21:34 -05:00
Israel Chauca Fuentes
5db098e953 Better testing for quotes. 2013-12-19 00:26:58 -05:00
Israel Chauca Fuentes
b45536fe8d Fix expanding abbreviations. Close #145. 2013-12-18 23:55:02 -05:00
Israel Chauca Fuentes
3dde5cc8cb Do not use <C-R>= for matchpairs. Close #150, close #143. 2013-12-18 23:05:30 -05:00
Israel Chauca Fuentes
5787ec4f59 Add explanation about delimitMate_jump_expansion. Close #137. 2013-12-18 12:52:57 -05:00
Israel Chauca Fuentes
2dc880bf1c Merge pull request #147 from mganjoo/master
Add C-h synonym for delimitMateBS
2013-12-18 09:14:10 -08:00
Israel Chauca Fuentes
440f38858f Merge pull request #149 from thiderman/comments
Modify QuoteDelim() to be smart about vim comments
2013-12-15 15:47:18 -08:00
Lowe Thiderman
f7f895c211 Modify QuoteDelim() to be smart about vim comments
Add simple check into QuoteDelim() that checks if the user is about to start
a comment in vim files. If that's the case, don't balance it.
2013-12-15 22:24:20 +01:00
Milind Ganjoo
654dc14e6e Add C-h synonym for delimitMateBS (can't add one for S-BS though) 2013-10-26 17:13:26 -07:00
Israel Chauca Fuentes
543be33b13 Better handling of nested quotes. Closes #134. 2013-07-22 20:52:05 -04:00
Israel Chauca Fuentes
7345bfddef Update readme. 2013-07-22 13:35:59 -04:00
Israel Chauca Fuentes
16a35eefab Update version and doc. 2013-07-22 13:29:36 -04:00
Israel Chauca Fuentes
74ab16ea5b Rewrite makefile. 2013-07-22 13:28:52 -04:00
Israel Chauca Fuentes
2adbf5a8d7 Remove old test script. 2013-07-14 03:34:20 -04:00
Israel Chauca Fuentes
e4a02eb998 Do not modify the line when checking for syntax groups. 2013-07-14 01:31:30 -04:00
Israel Chauca Fuentes
ad11ab2210 Fix tests. 2013-07-14 01:30:05 -04:00
Israel Chauca Fuentes
6b0d448f6a Don't use a char buffer anymore. 2013-07-14 01:29:53 -04:00
Israel Chauca Fuentes
32c9db8f37 Simplify command. 2013-07-13 23:01:02 -04:00
Israel Chauca Fuentes
a77423a46f Remove superfluous unmapping. 2013-07-13 22:59:58 -04:00
Israel Chauca Fuentes
57fd02b2e0 Fix tests. 2013-07-13 22:58:42 -04:00
Israel Chauca Fuentes
14faba1c62 Don't use setline() for left-side matchpair. 2013-07-13 21:57:21 -04:00
Israel Chauca Fuentes
8ab087c95c Don't use setline() with quotes. 2013-07-13 21:27:38 -04:00
Israel Chauca Fuentes
61d62e8920 small fix. 2013-07-13 19:54:23 -04:00
Israel Chauca Fuentes
7ce61655a7 Do not remove caracters when inserting a closing paren. Close #133. 2013-07-09 14:10:28 -04:00
Israel Chauca Fuentes
8d133d4726 Set bs to 2 on tests. 2013-06-27 21:51:28 -04:00
Israel Chauca Fuentes
7caa6092b7 Fix <S-Tab> mapping. Close #132. 2013-06-27 21:35:37 -04:00
Israel Chauca Fuentes
d98d8c0a0d Fix :DelimitMateTest. 2013-06-27 20:59:04 -04:00
Israel Chauca Fuentes
e2d63e38f6 Store internal values in s:options. Close #79. 2013-06-22 00:20:45 -04:00
Israel Chauca Fuentes
579e3520a4 Use setter/getter everywhere (well, almost everywhere). 2013-06-21 23:49:48 -04:00
Israel Chauca Fuentes
90d07a68be Update options list. 2013-06-21 22:42:41 -04:00
Israel Chauca Fuentes
2cb3f4d5e6 Use getter func. 2013-06-21 22:42:15 -04:00
Israel Chauca Fuentes
3a23e89cb5 Jump out of space expansion. Never meant to disable it. Closes #129. 2013-06-21 21:49:07 -04:00
Israel Chauca Fuentes
70e1ac1462 Smart quotes consider balanced quotes on current line. Closes #94. 2013-06-19 00:43:42 -04:00
Israel Chauca Fuentes
d4ba528935 Add eol marker finished. Closes #102. Add s:g(). 2013-06-19 00:06:10 -04:00
Israel Chauca Fuentes
8a8aad183f Fix tests, BS in expansions and close #105. 2013-06-18 18:52:26 -04:00
Israel Chauca Fuentes
cfc6654855 Make jumping over space and CR expansions optional and off by default.
- Closes #130.
- Closes #110.
- As suggested in #95.
2013-06-18 16:02:48 -04:00
Israel Chauca Fuentes
f2efe4331b Merge pull request #128 from matthias-guenther/master
Markdown file ending for README
2013-05-12 13:53:31 -07:00
Matthias Günther
dfa7e9b730 Markdown ending for README 2013-05-11 22:21:28 +02:00
Israel Chauca Fuentes
765bdd80dc Fix typo. 2013-04-10 11:04:15 -04:00
Israel Chauca Fuentes
739d2f9bd4 Call #Finish() only when necessary for <BS>. As mentioned in #124. 2013-03-27 18:33:58 -04:00
Israel Chauca Fuentes
eb7738e4aa Call #Finish() only when necessary. Closes #124. 2013-03-27 16:50:53 -04:00
Israel Chauca Fuentes
32f5d8df07 Do not map over <Esc>. Closes #118. 2013-02-12 10:37:42 -05:00
Israel Chauca Fuentes
7b5887c324 Do not create bogus imap. closes #113 , closes #87. 2013-02-08 20:43:32 -05:00
Israel Chauca Fuentes
0326b7c14a Flush buffer on scrolling. 2012-07-20 15:51:19 -04:00
Israel Chauca Fuentes
1dfe26a538 Fix CR expansion & syn fold enabled by InsertLeave
Benamin Fritz reported the following:

Without the "zv", if the user has syntax folding on, when the mapping
invokes <Esc> the pair of braces which were just separated by a <CR>
could become folded, so that the trailing "o" opens a new line AFTER
the pair.
2012-06-08 16:56:34 -04:00
Israel Chauca Fuentes
9c1564a22f Merge pull request #99 from jamessan/master
Fix spelling mistake in README
2012-05-30 18:51:46 -07:00
James McCoy
028964cf7d README: Fix spelling mistake 2012-05-30 21:43:35 -04:00
Israel Chauca Fuentes
5a84c1a746 Update :DelimitMateTest for eol_marker. 2012-04-15 20:16:44 -04:00
Israel Chauca Fuentes
0f9563969d Update doc about #77. 2012-04-15 01:47:19 -04:00
Israel Chauca Fuentes
d3ffebab74 Replace for loop with map(). Should finish with #77. 2012-04-15 01:34:56 -04:00
Israel Chauca Fuentes
ece6c39a65 Add eol marker only if inserted on the same 'insert session'. 2012-04-15 01:02:28 -04:00
Israel Chauca Fuentes
ad151d3e55 Fix readme. 2012-04-14 19:36:51 -04:00
Israel Chauca Fuentes
b65d719353 Add string next to the closing matchpair when at the eol. Closes #77. 2012-04-14 19:36:51 -04:00
Israel Chauca Fuentes
a42dff4ad8 Merge pull request #97 from grota/master
fix for #96
2012-04-08 08:57:51 -07:00
Giuseppe Rota
4a7d5a6e54 screwup in map checks 2012-04-08 13:37:11 +02:00
Israel Chauca Fuentes
50a0df0be4 Merge pull request #96 from grota/master
Avoid mapping in ExtraMappings when there's already a map.
2012-04-07 20:19:24 -07:00
Giuseppe Rota
cecebf6e86 Avoid mapping in ExtraMappings when there's already a map. 2012-04-07 13:17:34 +02:00
Israel Chauca Fuentes
ad4430706e Fix conflict with cindent. Comment on #95. 2012-04-01 17:59:40 -04:00
Israel Chauca Fuentes
93d4a373fb Correct test for CR expansions. 2012-03-31 17:00:51 -04:00
Israel Chauca Fuentes
a9f51531d9 Consider indentation with BS on empty expanded CR. 2012-03-31 16:56:31 -04:00
Israel Chauca Fuentes
6bb98110b4 Consider space and CR expansions when jumping over. Closes #95. 2012-03-31 13:33:24 -04:00
Israel Chauca Fuentes
0b34aea202 Always jump over the quote on the right. Closes #89. 2012-03-04 00:11:40 -05:00
Israel Chauca Fuentes
f1e92d05d5 Make smart quote work beyond the first column. Closes #89. 2012-03-03 16:09:08 -05:00
Israel Chauca Fuentes
8ec2bcb89a Merge pull request #88 from Glench/patch-2
Fix grammar in README
2012-02-29 16:32:52 -08:00
Glen Chiacchieri
beb87ef41f Fix grammar in README 2012-02-29 19:26:07 -05:00
Israel Chauca Fuentes
26a6def62f Add an option to prevent mapping to ^[OC.
Might be useful in #87.
2012-02-28 18:27:13 -05:00
Israel Chauca Fuentes
0fb597ef36 Make :DelimitMateTest more verbose.
- Add the output of :version.
- Print all mapping regardless of value.
- Ask before overwriting a modified buffer.
2012-02-25 17:45:28 -05:00
Israel Chauca Fuentes
fe5dd9a61a Fix typo in doc. Closes #85. 2012-02-24 20:48:05 -05:00
Israel Chauca Fuentes
bb9b0edcc5 Simplify CR expansion mapping. Add Test for it. 2012-02-24 20:32:42 -05:00
Israel Chauca Fuentes
f3176a664c Merge branch 'master' of https://github.com/gyim/delimitMate 2012-02-23 20:46:02 -05:00
Akos Gyimesi
1cbbe90a09 Allow CR expansion for arbitrary line suffix. 2012-02-23 21:35:40 +01:00
Israel Chauca Fuentes
a9174f65ba Merge pull request #83 from gyim/master
Add mapping for default MacVim movements
2012-02-23 12:01:28 -08:00
Akos Gyimesi
2af2dd2350 Add mapping for default MacVim movements 2012-02-23 20:58:42 +01:00
Israel Chauca Fuentes
9c77b8434a Use default cpo values while creating mappings. Closes #72. 2012-02-22 23:14:01 -05:00
Israel Chauca Fuentes
646794cbda Remove "apostrophe" feature. Closes #81. 2012-02-16 14:53:01 -05:00
Israel Chauca Fuentes
93fdcf92e1 Update README. 2012-02-16 02:30:35 -05:00
Israel Chauca Fuentes
fbbd9514c5 Add real README. 2012-02-16 02:28:10 -05:00
Israel Chauca Fuentes
be5c41b3c1 Add test files. 2012-02-16 01:59:28 -05:00
Israel Chauca Fuentes
b853ee9f35 Handle backspace option gracefully. Quick test for #64. 2012-02-15 22:05:48 -05:00
Israel Chauca Fuentes
eb2625c4a7 Consider non ascii chars for smart quote. 2012-02-15 15:38:11 -05:00
Israel Chauca Fuentes
e17f6cd23c Consider non ascii chars for smart quote. Close #73. 2012-02-15 14:52:53 -05:00
Israel Chauca Fuentes
54acd56b48 Fix space expansion. Closes #68. 2012-02-15 14:25:36 -05:00
Israel Chauca Fuentes
9bdd4b078a Merge pull request #80 from Glench/patch-1
Fix typo in readme.
2012-02-14 17:16:22 -08:00
Israel Chauca Fuentes
f5748da36c Fix issues with quotes. 2012-02-14 18:39:48 -05:00
Israel Chauca Fuentes
eade67b409 Remove noise. 2012-02-12 13:33:04 -05:00
Glen Chiacchieri
b3f62f79c2 Fix typo in readme.
This was bothering me way too much.
2012-02-12 13:25:37 -05:00
Israel Chauca Fuentes
9d133d5b69 Fix flushing of char buffer. 2012-02-09 21:28:53 -05:00
Israel Chauca Fuentes
9f003b5bf5 Add CursorIdx() multibyte aware col(). 2012-02-08 22:44:39 -05:00
Israel Chauca Fuentes
e688e20151 Optimize IsSpaceExpansion. 2012-02-08 03:50:43 -05:00
Israel Chauca Fuentes
8749708115 Optimize IsEmptyPair. 2012-02-08 03:41:11 -05:00
Israel Chauca Fuentes
5cc5d8d9b3 Replace GeetChar*Cursor with GetCharFromCursor. 2012-02-08 03:07:49 -05:00
Israel Chauca Fuentes
98b4119746 Attempt to fix CR expansion. 2012-02-08 01:08:10 -05:00
Israel Chauca Fuentes
c889905e47 Fix duplicated closing paren with <S-Tab>.
Code from @albertosantini. Closes #69.
2012-02-08 00:22:18 -05:00
Israel Chauca Fuentes
db54dadb46 Remove unused var. 2012-02-08 00:22:04 -05:00
Israel Chauca Fuentes
604260f56e Use GetChar*Cursor() instead of byte indexes. 2012-02-08 00:02:58 -05:00
Israel Chauca Fuentes
581a3ebc17 Modify b:_l_delimitMate_matchpairs_list. 2012-02-07 22:32:17 -05:00
Israel Chauca Fuentes
cc1acaba96 Allow multibyte chars with <BS>. Closes #78.
- Add delimitMate#GetCharUnderCursor()
- Add delimitMate#GetCharBeforeCursor()
- Simplify delimitMate#Del()
2012-02-07 22:11:53 -05:00
Israel Chauca Fuentes
7b781ab6b6 Merge branch 'master' of https://github.com/MSch/delimitMate 2012-02-07 18:46:04 -05:00
Israel Chauca Fuentes
233eb52a97 Merge pull request #67 from tmhedberg/master
Option to disable delimitMate in all buffers by default
2012-02-05 21:19:50 -08:00
Martin Schürrer
aff9743269 Also work with <C-Left> and <C-Right> 2011-12-18 12:22:16 +01:00
Taylor Hedberg
ce1d05fac5 [fix] Broken undo after <CR> expanded 2011-11-03 12:47:21 -04:00
Taylor Hedberg
6dad313734 Documentation for delimitMate_offByDefault 2011-08-25 12:42:32 -04:00
Taylor Hedberg
5263e25548 delimitMate_offByDefault option to disable delimitMate by default 2011-08-25 12:36:15 -04:00
Israel Chauca Fuentes
39b8298390 Typo on doc. "brake->break" now all of them. 2011-07-04 16:51:48 -05:00
Israel Chauca Fuentes
57b80ea78a Typo on doc. "brake->break" 2011-07-04 16:50:02 -05:00
Israel Chauca Fuentes
a5b7141fc4 Set and restore &cpo in the right place. 2011-04-17 15:49:27 -05:00
Israel Chauca Fuentes
9efb01da68 UPdate README. 2011-01-14 23:31:20 -06:00
Israel Chauca Fuentes
860c45ab2a Limit autocmd effects. 2011-01-14 22:13:00 -06:00
Israel Chauca Fuentes
8686edfc63 Update version. 2011-01-14 20:59:53 -06:00
Israel Chauca Fuentes
5e7a7c4738 Update change log. 2011-01-14 20:57:56 -06:00
Israel Chauca Fuentes
928cc1146a Fix behaviour of b:loaded_delimitMate. 2011-01-14 20:49:28 -06:00
Israel Chauca Fuentes
d420afdacd Trivial formatting. 2011-01-14 20:37:40 -06:00
Israel Chauca Fuentes
f6015300a0 Modify smart_matchpairs regex. 2011-01-14 20:37:04 -06:00
Israel Chauca Fuentes
e183064744 Update change log. 2011-01-14 20:36:29 -06:00
Israel Chauca Fuentes
40849c94ef Update documentation. 2011-01-14 20:29:22 -06:00
Israel Chauca Fuentes
4c1424f9bd Reorder stuff. 2010-12-11 05:23:59 -06:00
Israel Chauca Fuentes
0783f97fc0 Modify :DelimitMateTest output. 2010-12-11 05:23:27 -06:00
Israel Chauca Fuentes
e551885c24 Prevent indenting from propagating on the report. 2010-12-11 00:16:31 -06:00
Israel Chauca Fuentes
4891a04258 Fix double space. 2010-12-11 00:10:21 -06:00
Israel Chauca Fuentes
ad77a9a75e Append output of :set to report. 2010-12-11 00:08:35 -06:00
Israel Chauca Fuentes
5bf35a6b31 Delete empty <CR> expansion with indentation. 2010-12-11 00:07:59 -06:00
Israel Chauca Fuentes
49044099dd Change format of report. 2010-12-11 00:07:19 -06:00
Israel Chauca Fuentes
7c423067a8 UPdate to delimitMateTests#Main(). 2010-12-10 23:26:21 -06:00
Israel Chauca Fuentes
d08fa765b9 Update doc. 2010-12-10 23:25:10 -06:00
Israel Chauca Fuentes
f47bcd8e3f Reorder mappings. 2010-12-08 21:56:47 -06:00
Israel Chauca Fuentes
873e79ec37 Allow jumping over contiguous delimiters. Closes #44. 2010-12-08 03:34:45 -06:00
Israel Chauca Fuentes
589b2ae85a Merge branch 'master' into jump_over 2010-12-07 17:05:00 -06:00
Israel Chauca Fuentes
f9f2b5f177 Don't leave mappings around.
Some mappings weren't being unmapped on filetype change because options
were initialized before the call to Unmap().
2010-12-07 16:59:09 -06:00
Israel Chauca Fuentes
4157dc8a88 Make jumping back optional. 2010-12-06 22:08:59 -06:00
Israel Chauca Fuentes
d0fc1456b7 Use \# to insert closing pair in smart_matchpairs. 2010-11-17 23:17:25 -06:00
Israel Chauca Fuentes
86f70a7d9c Use regex for smart_matchpairs.
If the text in the line to the right of the cursor matches
smart_matchpairs, do not auto close.

To match the opening paren, insert a escaped bang (\!) in the pattern.
2010-11-17 17:53:33 -06:00
Israel Chauca Fuentes
f7b53f045d Fix typo. 2010-11-09 03:19:44 -06:00
Israel Chauca Fuentes
f3d140e363 Update credits section. 2010-11-09 01:12:26 -06:00
Israel Chauca Fuentes
93a1770f37 Doc update. 2010-11-08 09:47:51 -06:00
Israel Chauca Fuentes
859a732509 Merge git://github.com/ervandew/delimitMate into temporal
Conflicts:
	autoload/delimitMate.vim
2010-11-08 09:22:20 -06:00
Israel Chauca Fuentes
eb778be64b Update OptionsList(). 2010-11-06 22:47:05 -05:00
Israel Chauca Fuentes
2b2ae65182 Eliminate some noise from DelimitMateTest. 2010-11-06 22:43:03 -05:00
Israel Chauca Fuentes
e1b52d3676 Some formating. 2010-11-06 22:41:31 -05:00
Israel Chauca Fuentes
ff4745b191 More flexible test for 'backspace' values. 2010-11-06 22:38:13 -05:00
Israel Chauca Fuentes
2ba694830d Use '\w' instead of '[[:alnum:]]' in smart_quotes. 2010-11-06 22:35:40 -05:00
Israel Chauca Fuentes
12c5c96ca2 Add smart_matchpairs
This option will prevent delimitMate from inserting the closing
delimiter when there is a keyword character on the right of the cursor.
2010-11-06 20:05:40 -05:00
ervandew
a97af1fb97 add option to disable closing delims if open delim added before an alphanumeric 2010-11-06 17:15:23 -07:00
Israel Chauca Fuentes
5bf6a1e30c Fix DelimitMateTest. 2010-10-09 17:23:32 -05:00
Israel Chauca Fuentes
f8883cb700 Release 2.5.1. 2010-09-30 18:55:35 -05:00
Israel Chauca Fuentes
f72ffe3c12 b:vars take precedence over g:vars in report. 2010-09-30 18:50:52 -05:00
Israel Chauca Fuentes
d2e896fbe1 Nicer report. 2010-09-29 14:33:14 -05:00
Israel Chauca Fuentes
a0b1799270 Remove Visual Wrapping. Closes #38. 2010-09-27 15:27:45 -05:00
Israel Chauca Fuentes
1d423ab2b9 Release 2.5. 2010-09-22 21:49:19 -05:00
Israel Chauca Fuentes
7f5df4bf6e Update documentation. 2010-09-20 16:46:36 -05:00
Israel Chauca Fuentes
9f1fdc418d Version and doc update. 2010-09-20 01:47:01 -05:00
Israel Chauca Fuentes
64cf4beb8a Formating. 2010-09-20 00:55:30 -05:00
Israel Chauca Fuentes
119174b7dd Add -bar to commands. 2010-09-20 00:53:12 -05:00
Israel Chauca Fuentes
b3a7728299 Use <Plug> and conditional mappings for delimiters. 2010-08-24 10:15:31 -05:00
Israel Chauca Fuentes
2266a19900 Rename mappings. 2010-08-24 09:04:57 -05:00
Israel Chauca Fuentes
1b587bee9a Better :DelimitMateReport. 2010-08-24 08:29:10 -05:00
Israel Chauca Fuentes
31b289adfe TestMappings handles "|". Closes #37. 2010-08-21 12:33:27 -05:00
Israel Chauca Fuentes
efadb34c84 Allow "|" to be used in mappings. 2010-08-21 11:29:29 -05:00
Israel Chauca Fuentes
58d63b4e5b Fix use of multibyte chars. 2010-08-14 21:10:04 -05:00
Israel Chauca Fuentes
0441a03bb9 Don't use #Finish() until completion has been used. 2010-08-14 20:34:25 -05:00
Israel Chauca Fuentes
90cb449ada Prevent calling autoload on entering Insert mode. 2010-08-14 15:28:15 -05:00
Israel Chauca Fuentes
a678d7baab Move mapping and init funcs to plugin/. 2010-08-14 13:48:52 -05:00
Israel Chauca Fuentes
2911bf33c9 Force visual mappings to be silent. Closes #33. 2010-08-14 13:31:45 -05:00
Israel Chauca Fuentes
221daf6e6a Temporarily revert two last commits. 2010-08-14 13:24:32 -05:00
Israel Chauca Fuentes
8f5a45f9e7 Force visual mappings to be silent. Closes #33. 2010-08-10 12:55:12 -05:00
Israel Chauca Fuentes
6f5fd80e0e Move functions, autoload isn't loaded at startup 2010-08-10 12:51:57 -05:00
Israel Chauca Fuentes
1caeda0799 Consider pop-up menu on mappings. Closes #32 2010-08-09 14:48:41 -05:00
Israel Chauca Fuentes
3fb33b8e47 Add :verbose imap map to Test. 2010-08-08 10:13:24 -05:00
Israel Chauca Fuentes
e6288a7313 Ammend test function to check for mappings. 2010-08-07 17:02:29 -05:00
Israel Chauca Fuentes
7dd7edff64 Mappings made conditional.
All mappings use <Plug> and are not set if there is an existent mapping with the same lhs string or that contains the <Plug> mapping on the rhs.
2010-08-07 15:16:38 -05:00
Israel Chauca Fuentes
4b94c38f95 Release 2.4.1. 2010-07-31 13:01:42 -05:00
Israel Chauca Fuentes
217adb3d8e Update change log. 2010-07-31 10:58:55 -05:00
Israel Chauca Fuentes
e63e373ae1 Reorder doc of options. 2010-07-31 00:48:50 -05:00
Israel Chauca Fuentes
9c11c5cc82 Fix 'smart_quotes' doc. 2010-07-31 00:22:26 -05:00
Israel Chauca Fuentes
8b24f0fd9f Add doc on 'smart_quotes' and delimitMateBalance. 2010-07-30 23:56:21 -05:00
Israel Chauca Fuentes
701e14f72f Rename unbalanced_paren to balance_matchpairs. 2010-07-30 23:54:20 -05:00
Israel Chauca Fuentes
c9c1464075 Silence some noise related to 'backspace'. 2010-07-30 23:51:20 -05:00
Israel Chauca Fuentes
e831d89acf Reset buffer with <Home> and <End>. Closes #27. 2010-07-30 02:59:43 -05:00
Israel Chauca Fuentes
133c125f93 Makefile change. 2010-07-30 02:58:12 -05:00
Israel Chauca Fuentes
b9cea6312a Release 2.4 2010-07-29 18:20:13 -05:00
Israel Chauca Fuentes
1b37d60840 Behave nicely with iminsert and imsearch. Thanks to nailxx@github.com. 2010-07-20 13:27:28 -05:00
Israel Chauca Fuentes
a70aa5285e Doc fix. Missing quotes. 2010-07-20 13:23:41 -05:00
Israel Chauca Fuentes
2eba04961d Added note about abbreviations not being expanded. # 26 2010-07-15 19:20:09 -05:00
Israel Chauca Fuentes
3519f82f79 \<Right\> doesn\'t work under terminal. #25 2010-07-15 04:10:38 -05:00
Israel Chauca Fuentes
e9491e473c Reorder some logic. 2010-07-15 04:07:56 -05:00
Israel Chauca Fuentes
9e3075cff5 Changelog update. 2010-07-03 14:43:20 -05:00
Israel Chauca Fuentes
7c9ba95565 Doc update. 2010-06-28 19:08:27 -05:00
Israel Chauca Fuentes
3ae285424c Expand smart quotes to consider [:alnum:] to the right. 2010-06-28 15:20:32 -05:00
Israel Chauca Fuentes
fa1d3b3d6a Add option to allow nesting quotes. #24 2010-06-28 13:18:04 -05:00
Israel Chauca Fuentes
63f8c2af4f Add note to the docs about <S-BS> not working on terminal. 2010-06-26 13:29:16 -05:00
Israel Chauca Fuentes
29eb98d79d Sort results from Tests#Main(). 2010-06-25 15:18:45 -05:00
Israel Chauca Fuentes
5b004ca49d Comment formatting. 2010-06-25 15:17:51 -05:00
Israel Chauca Fuentes
34df78f8ab Fix vars scope. 2010-06-25 15:17:17 -05:00
Israel Chauca Fuentes
e234e45846 #23 and vars with wrong values. 2010-06-25 15:16:25 -05:00
Israel Chauca Fuentes
081ec279ed Rename internal vars to hide them from completion. 2010-06-25 15:10:50 -05:00
Israel Chauca Fuentes
4399fa327f Doc corrections. 2010-06-23 12:53:58 -05:00
Israel Chauca Fuentes
ceaa6e01ed Deleted IsBlockVisual(). 2010-06-23 12:53:16 -05:00
Israel Chauca Fuentes
235f0dcbfb Fixed duplicate <silent>. 2010-06-23 12:52:18 -05:00
Israel Chauca Fuentes
fadd7fefbc Merge http://github.com/Lokaltog/delimitMate
Conflicts:
	autoload/delimitMate.vim
2010-06-22 21:25:05 -05:00
Israel Chauca Fuentes
193b6027c2 Fix #23. 2010-06-22 21:01:03 -05:00
Kim Silkebækken
a76439a641 Make all mappings silent
This change speeds up vim significantly in a terminal, and prevents the
annoying flickering of commands while typing.
2010-06-20 02:06:23 +02:00
Israel Chauca Fuentes
89cc598217 Update README. 2010-06-16 02:18:52 -05:00
Israel Chauca Fuentes
28ce6213fc Cosmetic changes. 2010-06-16 01:54:58 -05:00
Israel Chauca Fuentes
6d1f48c1bf Fix TestMappings(). 2010-06-16 01:54:40 -05:00
Israel Chauca Fuentes
0e20bcaff8 Use "fork" to open new gvim when testing. 2010-06-16 01:51:53 -05:00
Israel Chauca Fuentes
aae61ad8ba Use 'nomore'. 2010-06-16 01:50:33 -05:00
Israel Chauca Fuentes
4dac6ce6ac Fix TestMappings(). 2010-06-16 01:47:42 -05:00
Israel Chauca Fuentes
875a9e450b Silence some noise on UnMap(). 2010-06-16 01:45:40 -05:00
Israel Chauca Fuentes
48d2e3b9d1 Check for 'backspace' when <CR> expansion is enabled. 2010-06-16 01:44:11 -05:00
Israel Chauca Fuentes
5626a633d5 Escape \\ on options. 2010-06-16 01:40:55 -05:00
Israel Chauca Fuentes
3652ba24e3 Split Init() and simplify the set-up process. 2010-06-16 01:37:08 -05:00
Israel Chauca Fuentes
740fc90ae7 Expansion documentation and intialization fixed. 2010-06-12 22:50:14 -05:00
Israel Chauca Fuentes
e0de2dbf39 Use internal b:vars to read from user options. 2010-06-12 22:15:26 -05:00
Israel Chauca Fuentes
efcf9eb341 Formatting. 2010-06-12 12:28:50 -05:00
Israel Chauca Fuentes
2545fa5967 Reset autocmds on re-loading. 2010-06-12 12:26:30 -05:00
Israel Chauca Fuentes
c91674eed2 Doc update. 2010-06-09 19:10:29 -05:00
Israel Chauca Fuentes
542728671e Fix issue #21. 2010-06-09 12:32:57 -05:00
Israel Chauca Fuentes
d1621b6672 Block-wise visual wrapping works with limitations. 2010-06-09 03:20:11 -05:00
Israel Chauca Fuentes
6d1cc1187b Fixed issue #18 for non xterm terminals. 2010-06-08 21:54:22 -05:00
Israel Chauca Fuentes
377c3a37e1 Do not close on unbalanced parens. 2010-06-08 00:48:34 -05:00
Israel Chauca Fuentes
d03324135c Rename and reorder some function, update doc. 2010-06-07 00:54:55 -05:00
Israel Chauca Fuentes
edeaff4730 Missing quote. 2010-06-06 13:51:31 -05:00
Israel Chauca Fuentes
c85fee6eb5 README update. 2010-06-06 13:28:47 -05:00
Israel Chauca Fuentes
0ccb143a12 Doc and version update. 2010-06-06 13:22:14 -05:00
Israel Chauca Fuentes
941beed3b3 Extend detection of version string in Makefile. 2010-06-06 13:16:55 -05:00
Israel Chauca Fuentes
739a3e606c Fix: extra space inserted after <Space> expansion. 2010-06-06 02:51:30 -05:00
Israel Chauca Fuentes
61cc934b68 Give some feedback for commands. 2010-06-06 02:35:15 -05:00
Israel Chauca Fuentes
7aec4532f9 Change log update and minor doc edits. 2010-06-06 00:41:09 -05:00
Israel Chauca Fuentes
6f22aab0b8 Minor changes. 2010-06-06 00:01:23 -05:00
Israel Chauca Fuentes
592cf2fea1 Fix arrow keys on terminal, #18. 2010-06-02 22:34:01 -05:00
Israel Chauca Fuentes
3d818560eb README update. 2010-05-24 22:16:23 -05:00
Israel Chauca Fuentes
da66a3f7c9 Syntax awareness. 2010-05-24 22:11:23 -05:00
Israel Chauca Fuentes
e5ce5b0967 Fix: automatic indent was broken when expanding <CR>. 2010-05-23 14:29:50 -05:00
Israel Chauca Fuentes
03342b8d22 Makefile update. 2010-05-16 23:59:48 -05:00
Israel Chauca Fuentes
86c1895ceb Small corrections. 2010-05-16 22:55:17 -05:00
Israel Chauca Fuentes
fd4fb482fe Little updates. 2010-05-16 22:19:11 -05:00
Israel Chauca Fuentes
0fbbc0f808 Makefile rewrite. 2010-05-16 22:11:09 -05:00
Israel Chauca Fuentes
ced80ebb21 Doc corrections. 2010-05-16 18:30:18 -05:00
Israel Chauca Fuentes
7b0d9367b2 README file added. 2010-05-16 18:05:45 -05:00
Israel Chauca Fuentes
37512d7f89 Doc update. 2010-05-15 17:41:06 -05:00
Israel Chauca Fuentes
f8b5bbe555 Doc update about b:vars in vimrc. 2010-05-15 17:29:57 -05:00
Israel Chauca Fuentes
698b3f1e43 Doc correction. 2010-05-14 03:19:46 -05:00
Israel Chauca Fuentes
bdf477de4b Doc update 2010-05-13 20:14:06 -05:00
Israel Chauca Fuentes
b03d5dce36 More changes to Tests.vim. 2010-05-13 18:00:51 -05:00
Israel Chauca Fuentes
03390cfb5f Small changes to Tests.vim. 2010-05-13 15:44:04 -05:00
Israel Chauca Fuentes
45c66a4d07 Fix no autoclose at start of line replaces right char. 2010-05-13 15:27:36 -05:00
Israel Chauca Fuentes
a317b6ead7 A couple of updates. 2010-05-12 20:33:43 -05:00
Israel Chauca Fuentes
ed672dd39b Fix duplicate closing delimiter after <CR> 2010-05-12 19:57:48 -05:00
Israel Chauca Fuentes
72e639ff1a Fix #17 <Left> didn't work. 2010-05-11 13:22:51 -05:00
Israel Chauca Fuentes
95c899f3e2 Fix #16 Finish() didn't reset the char buffer. 2010-05-11 09:58:17 -05:00
Israel Chauca Fuentes
6d4113e3c3 Updated documentation about switch command. 2010-05-11 01:40:15 -05:00
Israel Chauca Fuentes
8d720b8932 Implemented command to switch on/off. 2010-05-11 01:27:40 -05:00
Israel Chauca Fuentes
422420c494 Fix maps testing function. 2010-05-10 12:36:36 -05:00
Israel Chauca Fuentes
2c8b586679 Small fixes and documentation updates. 2010-05-09 15:23:30 -05:00
Israel Chauca Fuentes
e748b461b6 Forgot the Tests file. 2010-05-07 14:18:42 -05:00
Israel Chauca Fuentes
17a061a1fa Moved debugging functions outside script files. 2010-05-07 14:06:58 -05:00
Israel Chauca Fuentes
29d42e0771 Added Visual() and simplified VisualMaps(). 2010-05-07 10:54:20 -05:00
Israel Chauca Fuentes
e818c05e33 Moved and simplified UnMap(). 2010-05-06 02:04:30 -05:00
Israel Chauca Fuentes
29cb16c42e Many fixes. 2010-05-06 01:34:18 -05:00
Israel Chauca Fuentes
d478e75178 Fix Tests() and a couple other fucntions. 2010-05-05 11:55:05 -05:00
Israel Chauca Fuentes
eb03c7058e Added debuging function. 2010-05-04 12:28:10 -05:00
Israel Chauca Fuentes
1e7a5c7f6e Fix: Problem with jumping over pre-existing delims. 2010-05-03 13:21:24 -05:00
Israel Chauca Fuentes
b9bd9e3229 Fixed quotes, for re-do. 2010-05-03 03:35:58 -05:00
Israel Chauca Fuentes
b25906e610 Forgot to save <Del> fix :) 2010-05-03 03:22:41 -05:00
Israel Chauca Fuentes
5ca0eee4cd Fixed <Del> re-do-wise. 2010-05-03 03:21:31 -05:00
Israel Chauca Fuentes
a751498fbc Now re-do-safe, except for <CR> expansion. 2010-05-03 03:04:57 -05:00
Israel Chauca Fuentes
9292c9294a Move functions to autoload/ 2010-05-02 23:19:35 -05:00
Israel Chauca Fuentes
4083c581d6 Fixed issue #13 2010-05-02 21:34:29 -05:00
Israel Chauca Fuentes
86ff123318 Fixed a problem when 'keymap' was set before delimitmate was loaded. 2010-04-08 10:56:51 -05:00
Israel Chauca Fuentes
a8cbf2e429 More support for expansions & syntax groups. 2010-04-07 03:35:40 -05:00
Israel Chauca Fuentes
96d53eaa31 More fixes to the testing function. 2010-04-07 00:28:45 -05:00
Israel Chauca Fuentes
b5292f7c58 Fixed testing function. 2010-04-06 23:22:10 -05:00
Israel Chauca Fuentes
6b80cfefb6 Finished <S-Tab> for expansions. 2010-04-06 14:02:05 -05:00
Israel Chauca Fuentes
7540b37e8f <Space> expansion fixed. 2010-04-06 02:01:41 -05:00
20 changed files with 2246 additions and 853 deletions

7
.gitignore vendored
View File

@@ -1,5 +1,12 @@
*.sw?
*.un?
*.vba
*.vmb
*.zip
*.gz
vimball.txt
*.orig
tags
test/build
test/*.tap
test/*.msgout

View File

@@ -1,21 +1,81 @@
PLUGIN=delimitMate
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)
install:
cp -f doc/* ~/.vim/doc/${PLUGIN}.txt
cp -f plugin/* ~/.vim/plugin/${PLUGIN}.vim
.PHONY: version clean distclean undo release test install uninstall
doc_update: install
/usr/bin/vim -u NONE -c ':helptags ~/.vim/doc' -c ':q'
all: zip gzip
dist: version all
vimball: $(FILENAME).vmb
zip: $(FILENAME).zip $(FILENAME).vmb.zip
gzip: $(FILENAME).tar.gz $(FILENAME).vmb.gz
zip:
zip -r ${PLUGIN}.zip doc plugin
zip ${PLUGIN}.zip -d \*.sw\?
clean:
rm -f */*.orig *.~* .VimballRecord *.zip *.gz *.vmb
vimball: install
echo doc/${PLUGIN}.txt > vimball.txt
echo plugin/${PLUGIN}.vim >> vimball.txt
/usr/bin/vim -c 'e vimball.txt' -c '%MkVimball! ${PLUGIN}' -c 'q'
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)*'
gzip: vimball
gzip -f ${PLUGIN}.vba
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:
$(MAKE) -C test
install: $(SOURCES)
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;
uninstall:
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

6
README.md Normal file
View File

@@ -0,0 +1,6 @@
This plug-in provides automatic closing of quotes, parenthesis, brackets, etc., besides some other related features that
should make your time in insert mode a little bit easier, like syntax awareness (will not insert the closing delimiter
in comments and other configurable regions), <CR> and <Space> expansions (off by default), and some more.
Most of the features can be modified or disabled permanently, using global variables, or on a FileType basis, using
:autocmd.

659
autoload/delimitMate.vim Normal file
View File

@@ -0,0 +1,659 @@
" File: autoload/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".
" ============================================================================
"let delimitMate_loaded = 1
if !exists('s:options')
let s:options = {}
endif
function! s:set(name, value) "{{{
let bufnr = bufnr('%')
if !has_key(s:options, bufnr)
let s:options[bufnr] = {}
endif
let s:options[bufnr][a:name] = a:value
endfunction "}}}
function! s:get(...) "{{{
let options = deepcopy(eval('s:options.' . bufnr('%')))
if a:0
return options[a:1]
endif
return options
endfunction "}}}
function! s:exists(name, ...) "{{{
let scope = a:0 ? a:1 : 's'
if scope == 's'
let bufnr = bufnr('%')
let name = 'options.' . bufnr . '.' . a:name
else
let name = 'delimitMate_' . a:name
endif
return exists(scope . ':' . name)
endfunction "}}}
function! s:is_jump(...) "{{{
" Returns 1 if the next character is a closing delimiter.
let char = s:get_char(0)
let list = s:get('right_delims') + s:get('quotes_list')
" Closing delimiter on the right.
if (!a:0 && index(list, char) > -1)
\ || (a:0 && char == a:1)
return 1
endif
" Closing delimiter with space expansion.
let nchar = s:get_char(1)
if !a:0 && s:get('expand_space') && char == " "
if index(list, nchar) > -1
return 2
endif
elseif a:0 && s:get('expand_space') && nchar == a:1 && char == ' '
return 3
endif
if !s:get('jump_expansion')
return 0
endif
" Closing delimiter with CR expansion.
let uchar = matchstr(getline(line('.') + 1), '^\s*\zs\S')
if !a:0 && s:get('expand_cr') && char == ""
if index(list, uchar) > -1
return 4
endif
elseif a:0 && s:get('expand_cr') && uchar == a:1
return 5
endif
return 0
endfunction "}}}
function! s:rquote(char) "{{{
let pos = matchstr(getline('.')[col('.') : ], escape(a:char, '[]*.^$\'), 1)
let i = 0
while s:get_char(i) ==# a:char
let i += 1
endwhile
return i
endfunction "}}}
function! s:lquote(char) "{{{
let i = 0
while s:get_char(i - 1) ==# a:char
let i -= 1
endwhile
return i * -1
endfunction "}}}
function! s:get_char(...) "{{{
let idx = col('.') - 1
if !a:0 || (a:0 && a:1 >= 0)
" Get char from cursor.
let line = getline('.')[idx :]
let pos = a:0 ? a:1 : 0
return matchstr(line, '^'.repeat('.', pos).'\zs.')
endif
" Get char behind cursor.
let line = getline('.')[: idx - 1]
let pos = 0 - (1 + a:1)
return matchstr(line, '.\ze'.repeat('.', pos).'$')
endfunction "s:get_char }}}
function! s:is_cr_expansion(...) " {{{
let nchar = getline(line('.')-1)[-1:]
let schar = matchstr(getline(line('.')+1), '^\s*\zs\S')
let isEmpty = a:0 ? getline('.') =~ '^\s*$' : empty(getline('.'))
if index(s:get('left_delims'), nchar) > -1
\ && index(s:get('left_delims'), nchar)
\ == index(s:get('right_delims'), schar)
\ && isEmpty
return 1
elseif index(s:get('quotes_list'), nchar) > -1
\ && index(s:get('quotes_list'), nchar)
\ == index(s:get('quotes_list'), schar)
\ && isEmpty
return 1
else
return 0
endif
endfunction " }}} s:is_cr_expansion()
function! s:is_space_expansion() " {{{
if col('.') > 2
let pchar = s:get_char(-2)
let nchar = s:get_char(1)
let isSpaces =
\ (s:get_char(-1)
\ == s:get_char(0)
\ && s:get_char(-1) == " ")
if index(s:get('left_delims'), pchar) > -1 &&
\ index(s:get('left_delims'), pchar)
\ == index(s:get('right_delims'), nchar) &&
\ isSpaces
return 1
elseif index(s:get('quotes_list'), pchar) > -1 &&
\ index(s:get('quotes_list'), pchar)
\ == index(s:get('quotes_list'), nchar) &&
\ isSpaces
return 1
endif
endif
return 0
endfunction " }}} IsSpaceExpansion()
function! s:is_empty_matchpair() "{{{
" get char before the cursor.
let open = s:get_char(-1)
let idx = index(s:get('left_delims'), open)
if idx == -1
return 0
endif
let close = get(s:get('right_delims'), idx, '')
return close ==# s:get_char(0)
endfunction "}}}
function! s:is_empty_quotes() "{{{
" get char before the cursor.
let quote = s:get_char(-1)
let idx = index(s:get('quotes_list'), quote)
if idx == -1
return 0
endif
return quote ==# s:get_char(0)
endfunction "}}}
function! s:cursor_idx() "{{{
let idx = len(split(getline('.')[: col('.') - 1], '\zs')) - 1
return idx
endfunction "delimitMate#CursorCol }}}
function! s:get_syn_name() "{{{
let col = col('.')
if col == col('$')
let col = col - 1
endif
return synIDattr(synIDtrans(synID(line('.'), col, 1)), 'name')
endfunction " }}}
function! s:is_excluded_ft(ft) "{{{
if !exists("g:delimitMate_excluded_ft")
return 0
endif
return index(split(g:delimitMate_excluded_ft, ','), a:ft, 0, 1) >= 0
endfunction "}}}
function! s:is_forbidden(char) "{{{
if s:is_excluded_ft(&filetype)
return 1
endif
if !s:get('excluded_regions_enabled')
return 0
endif
let region = s:get_syn_name()
return index(s:get('excluded_regions_list'), region) >= 0
endfunction "}}}
function! s:balance_matchpairs(char) "{{{
" Returns:
" = 0 => Parens balanced.
" > 0 => More opening parens.
" < 0 => More closing parens.
let line = getline('.')
let col = s:cursor_idx() - 1
let col = col >= 0 ? col : 0
let list = split(line, '\zs')
let left = s:get('left_delims')[index(s:get('right_delims'), a:char)]
let right = a:char
let opening = 0
let closing = 0
" If the cursor is not at the beginning, count what's behind it.
if col > 0
" Find the first opening paren:
let start = index(list, left)
" Must be before cursor:
let start = start < col ? start : col - 1
" Now count from the first opening until the cursor, this will prevent
" extra closing parens from being counted.
let opening = count(list[start : col - 1], left)
let closing = count(list[start : col - 1], right)
" I don't care if there are more closing parens than opening parens.
let closing = closing > opening ? opening : closing
endif
" Evaluate parens from the cursor to the end:
let opening += count(list[col :], left)
let closing += count(list[col :], right)
" Return the found balance:
return opening - closing
endfunction "}}}
function! s:is_smart_quote(char) "{{{
" TODO: Allow using a:char in the pattern.
let tmp = s:get('smart_quotes')
if empty(tmp)
return 0
endif
let regex = matchstr(tmp, '^!\?\zs.*')
" Flip matched value if regex starts with !
let mod = tmp =~ '^!' ? [1, 0] : [0, 1]
let matched = search(regex, 'ncb', line('.')) > 0
let noescaped = substitute(getline('.'), '\\.', '', 'g')
let odd = (count(split(noescaped, '\zs'), a:char) % 2)
let result = mod[matched] || odd
return result
endfunction "delimitMate#SmartQuote }}}
function! delimitMate#Set(...) "{{{
return call('s:set', a:000)
endfunction "}}}
function! delimitMate#Get(...) "{{{
return call('s:get', a:000)
endfunction "}}}
function! delimitMate#ShouldJump(...) "{{{
return call('s:is_jump', a:000)
endfunction "}}}
function! delimitMate#IsEmptyPair(str) "{{{
if strlen(substitute(a:str, ".", "x", "g")) != 2
return 0
endif
let idx = index(s:get('left_delims'), matchstr(a:str, '^.'))
if idx > -1 &&
\ s:get('right_delims')[idx] == matchstr(a:str, '.$')
return 1
endif
let idx = index(s:get('quotes_list'), matchstr(a:str, '^.'))
if idx > -1 &&
\ s:get('quotes_list')[idx] == matchstr(a:str, '.$')
return 1
endif
return 0
endfunction "}}}
function! delimitMate#WithinEmptyPair() "{{{
" if cursor is at column 1 return 0
if col('.') == 1
return 0
endif
" get char before the cursor.
let char1 = s:get_char(-1)
" get char under the cursor.
let char2 = s:get_char(0)
return delimitMate#IsEmptyPair( char1.char2 )
endfunction "}}}
function! delimitMate#SkipDelim(char) "{{{
if s:is_forbidden(a:char)
return a:char
endif
let col = col('.') - 1
let line = getline('.')
if col > 0
let cur = s:get_char(0)
let pre = s:get_char(-1)
else
let cur = s:get_char(0)
let pre = ""
endif
if pre == "\\"
" Escaped character
return a:char
elseif cur == a:char
" Exit pair
return a:char . "\<Del>"
elseif delimitMate#IsEmptyPair( pre . a:char )
" Add closing delimiter and jump back to the middle.
return a:char . s:joinUndo() . "\<Left>"
else
" Nothing special here, return the same character.
return a:char
endif
endfunction "}}}
function! delimitMate#ParenDelim(right) " {{{
let left = s:get('left_delims')[index(s:get('right_delims'),a:right)]
if s:is_forbidden(a:right)
return left
endif
" Try to balance matchpairs
if s:get('balance_matchpairs') &&
\ s:balance_matchpairs(a:right) < 0
return left
endif
let line = getline('.')
let col = col('.')-2
if s:get('smart_matchpairs') != ''
let smart_matchpairs = substitute(s:get('smart_matchpairs'), '\\!', left, 'g')
let smart_matchpairs = substitute(smart_matchpairs, '\\#', a:right, 'g')
if line[col+1:] =~ smart_matchpairs
return left
endif
endif
if len(line) == (col + 1) && s:get('insert_eol_marker') == 1
let tail = s:get('eol_marker')
else
let tail = ''
endif
return left . a:right . tail . repeat(s:joinUndo() . "\<Left>", len(split(tail, '\zs')) + 1)
endfunction " }}}
function! delimitMate#QuoteDelim(char) "{{{
if s:is_forbidden(a:char)
return a:char
endif
let char_at = s:get_char(0)
let char_before = s:get_char(-1)
let nesting_on = index(s:get('nesting_quotes'), a:char) > -1
let left_q = nesting_on ? s:lquote(a:char) : 0
if nesting_on && left_q > 1
" Nesting quotes.
let right_q = s:rquote(a:char)
let quotes = right_q > left_q + 1 ? 0 : left_q - right_q + 2
let lefts = quotes - 1
return repeat(a:char, quotes) . repeat(s:joinUndo() . "\<Left>", lefts)
elseif char_at == a:char
" Inside an empty pair, jump out
return a:char . "\<Del>"
elseif a:char == '"' && index(split(&ft, '\.'), "vim") != -1 && getline('.') =~ '^\s*$'
" If we are in a vim file and it looks like we're starting a comment, do
" not add a closing char.
return a:char
elseif a:char == "'" && index(split(&ft, '\.'), "clojure") != -1
" If we are in a clojure file, do not add a closing apostrophe.
return a:char
elseif s:is_smart_quote(a:char)
" Seems like a smart quote, insert a single char.
return a:char
elseif (char_before == a:char && char_at != a:char)
\ && !empty(s:get('smart_quotes'))
" Seems like we have an unbalanced quote, insert one quotation
" mark and jump to the middle.
return a:char . s:joinUndo() . "\<Left>"
else
" Insert a pair and jump to the middle.
let sufix = ''
if !empty(s:get('eol_marker')) && col('.') - 1 == len(getline('.'))
let idx = len(s:get('eol_marker')) * -1
let marker = getline('.')[idx : ]
let has_marker = marker == s:get('eol_marker')
let sufix = !has_marker ? s:get('eol_marker') : ''
endif
return a:char . a:char . s:joinUndo() . "\<Left>"
endif
endfunction "}}}
function! delimitMate#JumpOut(char) "{{{
if s:is_forbidden(a:char)
return a:char
endif
let jump = s:is_jump(a:char)
if jump == 1
" HACK: Instead of <Right>, we remove the char to be jumped over and
" insert it again. This will trigger re-indenting via 'indentkeys'.
" Ref: https://github.com/Raimondi/delimitMate/issues/168
return "\<Del>".a:char
elseif jump == 3
return s:joinUndo() . "\<Right>" . s:joinUndo() . "\<Right>"
elseif jump == 5
return "\<Down>\<C-O>I" . s:joinUndo() . "\<Right>"
else
return a:char
endif
endfunction " }}}
function! delimitMate#JumpAny(...) " {{{
if s:is_forbidden('')
return ''
endif
if !s:is_jump()
return ''
endif
" Let's get the character on the right.
let char = s:get_char(0)
if char == " "
" Space expansion.
return s:joinUndo() . "\<Right>" . s:joinUndo() . "\<Right>"
elseif char == ""
" CR expansion.
return "\<CR>" . getline(line('.') + 1)[0] . "\<Del>\<Del>"
else
return s:joinUndo() . "\<Right>"
endif
endfunction " delimitMate#JumpAny() }}}
function! delimitMate#JumpMany() " {{{
let line = split(getline('.')[col('.') - 1 : ], '\zs')
let rights = ""
let found = 0
for char in line
if index(s:get('quotes_list'), char) >= 0 ||
\ index(s:get('right_delims'), char) >= 0
let rights .= s:joinUndo() . "\<Right>"
let found = 1
elseif found == 0
let rights .= s:joinUndo() . "\<Right>"
else
break
endif
endfor
if found == 1
return rights
else
return ''
endif
endfunction " delimitMate#JumpMany() }}}
function! delimitMate#ExpandReturn() "{{{
if s:is_forbidden("")
return "\<CR>"
endif
let escaped = s:cursor_idx() >= 2
\ && s:get_char(-2) == '\'
let expand_right_matchpair = s:get('expand_cr') == 2
\ && index(s:get('right_delims'), s:get_char(0)) > -1
let expand_inside_quotes = s:get('expand_inside_quotes')
\ && s:is_empty_quotes()
\ && !escaped
let is_empty_matchpair = s:is_empty_matchpair()
if !pumvisible( )
\ && ( is_empty_matchpair
\ || expand_right_matchpair
\ || expand_inside_quotes)
let val = "\<Esc>a"
if is_empty_matchpair && s:get('insert_eol_marker') == 2
\ && !search(escape(s:get('eol_marker'), '[]\.*^$').'$', 'cnW', '.')
let tail = getline('.')[col('.') - 1 : ]
let times = len(split(tail, '\zs'))
let val .= repeat(s:joinUndo() . "\<Right>", times) . s:get('eol_marker') . repeat(s:joinUndo() . "\<Left>", times + 1)
endif
let val .= "\<CR>"
if &smartindent && !&cindent && !&indentexpr
\ && s:get_char(0) == '}'
" indentation is controlled by 'smartindent', and the first character on
" the new line is '}'. If this were typed manually it would reindent to
" match the current line. Let's reproduce that behavior.
let sw = &sw == 0 ? &ts : &sw
let shifts = indent('.') / sw
let spaces = indent('.') - (shifts * sw)
let val .= "^\<C-D>".repeat("\<C-T>", shifts).repeat(' ', spaces)
endif
" Expand:
" XXX zv prevents breaking expansion with syntax folding enabled by
" InsertLeave.
let val .= "\<Esc>zvO"
return val
else
return "\<CR>"
endif
endfunction "}}}
function! delimitMate#ExpandSpace() "{{{
if s:is_forbidden("\<Space>")
return "\<Space>"
endif
let escaped = s:cursor_idx() >= 2
\ && s:get_char(-2) == '\'
let expand_inside_quotes = s:get('expand_inside_quotes')
\ && s:is_empty_quotes()
\ && !escaped
if s:is_empty_matchpair() || expand_inside_quotes
" Expand:
return "\<Space>\<Space>" . s:joinUndo() . "\<Left>"
else
return "\<Space>"
endif
endfunction "}}}
function! delimitMate#BS() " {{{
if s:is_forbidden("")
let extra = ''
elseif &bs !~ 'start\|2'
let extra = ''
elseif delimitMate#WithinEmptyPair()
let extra = "\<Del>"
elseif s:is_space_expansion()
let extra = "\<Del>"
elseif s:is_cr_expansion()
let extra = repeat("\<Del>",
\ len(matchstr(getline(line('.') + 1), '^\s*\S')))
else
let extra = ''
endif
return "\<BS>" . extra
endfunction " }}} delimitMate#BS()
function! delimitMate#Test() "{{{
%d _
" Check for script options:
let result = [
\ 'delimitMate Report',
\ '==================',
\ '',
\ '* Options: ( ) default, (g) global, (b) buffer',
\ '']
for option in sort(keys(s:options[bufnr('%')]))
if s:exists(option, 'b')
let scope = '(b)'
elseif s:exists(option, 'g')
let scope = '(g)'
else
let scope = '( )'
endif
call add(result,
\ scope . ' delimitMate_' . option
\ . ' = '
\ . string(s:get(option)))
endfor
call add(result, '')
let option = 'delimitMate_excluded_ft'
call add(result,
\(exists('g:'.option) ? '(g) ' : '( ) g:') . option . ' = '
\. string(get(g:, option, '')))
call add(result, '--------------------')
call add(result, '')
" Check if mappings were set.
let left_delims = s:get('autoclose') ? s:get('left_delims') : []
let special_keys = ['<BS>', '<S-BS>', '<S-Tab>', '<C-G>g']
if s:get('expand_cr')
call add(special_keys, '<CR>')
endif
if s:get('expand_space')
call add(special_keys, '<Space>')
endif
let maps =
\ s:get('right_delims')
\ + left_delims
\ + s:get('quotes_list')
\ + s:get('apostrophes_list')
\ + special_keys
call add(result, '* Mappings:')
call add(result, '')
for map in maps
let output = ''
if map == '|'
let map = '<Bar>'
endif
redir => output | execute "verbose imap ".map | redir END
call extend(result, split(output, '\n'))
endfor
call add(result, '--------------------')
call add(result, '')
call add(result, '* Showcase:')
call add(result, '')
call setline(1, result)
call s:test_mappings(s:get('left_delims'), 1)
call s:test_mappings(s:get('quotes_list'), 0)
let result = []
redir => setoptions
echo " * Vim configuration:\<NL>"
filetype
echo ""
set
version
redir END
call extend(result, split(setoptions,"\n"))
call add(result, '--------------------')
setlocal nowrap
call append('$', result)
call feedkeys("\<Esc>\<Esc>", 'n')
endfunction "}}}
function! s:test_mappings(list, is_matchpair) "{{{
let prefix = "normal Go0\<C-D>"
let last = "|"
let open = s:get('autoclose') ? 'Open: ' : 'Open & close: '
for s in a:list
if a:is_matchpair
let pair = s:get('right_delims')[index(s:get('left_delims'), s)]
else
let pair = s
endif
if !s:get('autoclose')
let s .= pair
endif
exec prefix . open . s . last
exec prefix . "Delete: " . s . "\<BS>" . last
exec prefix . "Exit: " . s . pair . last
if s:get('expand_space')
\ && (a:is_matchpair || s:get('expand_inside_quotes'))
exec prefix . "Space: " . s . " " . last
exec prefix . "Delete space: " . s . " \<BS>" . last
endif
if s:get('expand_cr')
\ && (a:is_matchpair || s:get('expand_inside_quotes'))
exec prefix . "Car return: " . s . "\<CR>" . last
exec prefix . "Delete car return: " . s . "\<CR>0\<C-D>\<BS>" . last
endif
call append('$', '')
endfor
endfunction "}}}
function! s:joinUndo() "{{{
if v:version < 704
\ || ( v:version == 704 && !has('patch849') )
return ''
endif
return "\<C-G>U"
endfunction "}}}
" vim:foldmethod=marker:foldcolumn=4:ts=2:sw=2

4
basic_vimrc Normal file
View File

@@ -0,0 +1,4 @@
so ./test/_setup.vim
let delimitMate_expand_cr = 1
filetype indent plugin on

File diff suppressed because it is too large Load Diff

View File

@@ -1,635 +1,403 @@
" ============================================================================
" File: delimitMate.vim
" Version: 2.0
" Description: This plugin tries to emulate the auto-completion of delimiters
" that TextMate provides.
" 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".
" Credits: Some of the code is modified or just copied from the following:
"
" - Ian McCracken
" Post titled: Vim, Part II: Matching Pairs:
" http://concisionandconcinnity.blogspot.com/
"
" - Aristotle Pagaltzis
" From the comments on the previous blog post and from:
" http://gist.github.com/144619
"
" - Vim Scripts:
" http://www.vim.org/scripts/
" ============================================================================
" Initialization: {{{
if exists("g:loaded_delimitMate") "{{{
" User doesn't want this plugin, let's get out!
finish
if exists("g:loaded_delimitMate") || &cp
" User doesn't want this plugin or compatible is set, let's get out!
finish
endif
let g:loaded_delimitMate = 1
if exists("s:loaded_delimitMate") && !exists("g:delimitMate_testing")
" Don't define the functions if they already exist: just do the work
" (unless we are testing):
call s:DelimitMateDo()
finish
endif
let save_cpo = &cpo
set cpo&vim
if v:version < 700
echoerr "delimitMate: this plugin requires vim >= 7!"
finish
echoerr "delimitMate: this plugin requires vim >= 7!"
finish
endif
let s:loaded_delimitMate = 1 " }}}
let delimitMate_version = '2.0'
let s:loaded_delimitMate = 1
let delimitMate_version = "2.8"
function! s:Init() "{{{
let b:loaded_delimitMate = 1
" delimitMate_autoclose {{{
if !exists("b:delimitMate_autoclose") && !exists("g:delimitMate_autoclose")
let b:delimitMate_autoclose = 1
elseif !exists("b:delimitMate_autoclose") && exists("g:delimitMate_autoclose")
let b:delimitMate_autoclose = g:delimitMate_autoclose
else
" Nothing to do.
endif " }}}
" delimitMate_matchpairs {{{
if !exists("b:delimitMate_matchpairs") && !exists("g:delimitMate_matchpairs")
if s:ValidMatchpairs(&matchpairs) == 1
let s:matchpairs_temp = &matchpairs
else
echoerr "delimitMate: There seems to be a problem with 'matchpairs', read ':help matchpairs' and fix it or notify the maintainer of this script if this is a bug."
finish
endif
elseif exists("b:delimitMate_matchpairs")
if s:ValidMatchpairs(b:delimitMate_matchpairs) || b:delimitMate_matchpairs == ""
let s:matchpairs_temp = b:delimitMate_matchpairs
else
echoerr "delimitMate: Invalid format in 'b:delimitMate_matchpairs', falling back to matchpairs. Fix the error and use the command :DelimitMateReload to try again."
if s:ValidMatchpairs(&matchpairs) == 1
let s:matchpairs_temp = &matchpairs
else
echoerr "delimitMate: There seems to be a problem with 'matchpairs', read ':help matchpairs' and fix it or notify the maintainer of this script if this is a bug."
let s:matchpairs_temp = ""
endif
endif
else
if s:ValidMatchpairs(g:delimitMate_matchpairs) || g:delimitMate_matchpairs == ""
let s:matchpairs_temp = g:delimitMate_matchpairs
else
echoerr "delimitMate: Invalid format in 'g:delimitMate_matchpairs', falling back to matchpairs. Fix the error and use the command :DelimitMateReload to try again."
if s:ValidMatchpairs(&matchpairs) == 1
let s:matchpairs_temp = &matchpairs
else
echoerr "delimitMate: There seems to be a problem with 'matchpairs', read ':help matchpairs' and fix it or notify the maintainer of this script if this is a bug."
let s:matchpairs_temp = ""
endif
endif
endif " }}}
" delimitMate_quotes {{{
if exists("b:delimitMate_quotes")
if b:delimitMate_quotes =~ '^\(\S\)\(\s\S\)*$' || b:delimitMate_quotes == ""
let s:quotes = split(b:delimitMate_quotes)
else
let s:quotes = split("\" ' `")
echoerr "delimitMate: There is a problem with the format of 'b:delimitMate_quotes', it should be a string of single characters separated by spaces. Falling back to default values."
endif
elseif exists("g:delimitMate_quotes")
if g:delimitMate_quotes =~ '^\(\S\)\(\s\S\)*$' || g:delimitMate_quotes == ""
let s:quotes = split(g:delimitMate_quotes)
else
let s:quotes = split("\" ' `")
echoerr "delimitMate: There is a problem with the format of 'g:delimitMate_quotes', it should be a string of single characters separated by spaces. Falling back to default values."
endif
else
let s:quotes = split("\" ' `")
endif
let b:delimitMate_quotes_list = s:quotes " }}}
" delimitMate_visual_leader {{{
if !exists("b:delimitMate_visual_leader") && !exists("g:delimitMate_visual_leader")
let b:delimitMate_visual_leader = exists('b:maplocalleader') ? b:maplocalleader :
\ exists('g:mapleader') ? g:mapleader : "\\"
elseif !exists("b:delimitMate_visual_leader") && exists("g:delimitMate_visual_leader")
let b:delimitMate_visual_leader = g:delimitMate_visual_leader
else
" Nothing to do.
endif " }}}
" delimitMate_expand_space {{{
if !exists("b:delimitMate_expand_space") && !exists("g:delimitMate_expand_space")
let b:delimitMate_expand_space = 0
elseif !exists("b:delimitMate_expand_space") && !exists("g:delimitMate_expand_space")
let b:delimitMate_expand_space = g:delimitMate_expand_space
else
" Nothing to do.
endif " }}}
" delimitMate_expand_cr {{{
if !exists("b:delimitMate_expand_cr") && !exists("g:delimitMate_expand_cr")
let b:delimitMate_expand_cr = 0
elseif !exists("b:delimitMate_expand_cr") && exists("g:delimitMate_expand_cr")
let b:delimitMate_expand_cr = g:delimitMate_expand_cr
else
" Nothing to do.
endif " }}}
" delimitMate_smart_quotes {{{
if !exists("b:delimitMate_smart_quotes") && !exists("g:delimitMate_smart_quotes")
let b:delimitMate_smart_quotes = 1
elseif !exists("b:delimitMate_smart_quotes") && exists("g:delimitMate_smart_quotes")
let b:delimitMate_smart_quotes = split(g:delimitMate_smart_quotes)
else
" Nothing to do.
endif " }}}
" delimitMate_apostrophes {{{
if !exists("b:delimitMate_apostrophes") && !exists("g:delimitMate_apostrophes")
"let s:apostrophes = split("n't:'s:'re:'m:'d:'ll:'ve:s'",':')
let s:apostrophes = []
elseif !exists("b:delimitMate_apostrophes") && exists("g:delimitMate_apostrophes")
let s:apostrophes = split(g:delimitMate_apostrophes)
else
let s:apostrophes = split(b:delimitMate_apostrophes)
endif
let b:delimitMate_apostrophes_list = s:apostrophes " }}}
" delimitMate_tab2exit {{{
if !exists("b:delimitMate_tab2exit") && !exists("g:delimitMate_tab2exit")
let b:delimitMate_tab2exit = 1
elseif !exists("b:delimitMate_tab2exit") && exists("g:delimitMate_tab2exit")
let b:delimitMate_tab2exit = g:delimitMate_tab2exit
else
" Nothing to do.
endif " }}}
let b:delimitMate_matchpairs_list = split(s:matchpairs_temp, ',')
let b:delimitMate_left_delims = split(s:matchpairs_temp, ':.,\=')
let b:delimitMate_right_delims = split(s:matchpairs_temp, ',\=.:')
let s:VMapMsg = "delimitMate: delimitMate is disabled on blockwise visual mode."
call s:UnMap()
if b:delimitMate_autoclose
call s:AutoClose()
else
call s:NoAutoClose()
endif
call s:VisualMaps()
call s:ExtraMappings()
endfunction "}}} Init()
"}}}
" Utilities: {{{
function! s:ValidMatchpairs(str) "{{{
if a:str !~ '^.:.\(,.:.\)*$'
return 0
endif
for pair in split(a:str,',')
if strpart(pair, 0, 1) == strpart(pair, 2, 1) || strlen(pair) != 3
return 0
endif
endfor
return 1
endfunction "}}}
" Functions: {{{
function! DelimitMate_ShouldJump() "{{{
let char = getline('.')[col('.') - 1]
for pair in b:delimitMate_matchpairs_list
if char == split( pair, ':' )[1]
" Same character on the rigth, jump over it.
return 1
endif
endfor
for quote in b:delimitMate_quotes_list
if char == quote
" Same character on the rigth, jump over it.
return 1
endif
endfor
return 0
endfunction "}}}
function! s:IsBlockVisual() " {{{
if visualmode() == "<C-V>"
return 1
endif
" Store unnamed register values for later use in s:RestoreRegister().
let s:save_reg = getreg('"')
let s:save_reg_mode = getregtype('"')
if len(getline('.')) == 0
" This for proper wrap of empty lines.
let @" = "\n"
endif
return 0
endfunction " }}}
function! s:IsEmptyPair(str) "{{{
for pair in b:delimitMate_matchpairs_list
if a:str == join( split( pair, ':' ),'' )
return 1
endif
endfor
for quote in b:delimitMate_quotes_list
if a:str == quote . quote
return 1
endif
endfor
return 0
endfunction "}}}
function! DelimitMate_WithinEmptyPair() "{{{
let cur = strpart( getline('.'), col('.')-2, 2 )
return s:IsEmptyPair( cur )
endfunction "}}}
function! s:WriteBefore(str) "{{{
let len = len(a:str)
let line = getline('.')
let col = col('.')-2
if col < 0
call setline('.',line[(col+len+1):])
else
call setline('.',line[:(col)].line[(col+len+1):])
endif
return a:str
endfunction " }}}
function! s:WriteAfter(str) "{{{
let len = len(a:str)
let line = getline('.')
let col = col('.')-2
if (col) < 0
call setline('.',a:str.line)
else
call setline('.',line[:(col)].a:str.line[(col+len):])
endif
return ''
endfunction " }}}
function! s:RestoreRegister() " {{{
" Restore unnamed register values store in s:IsBlockVisual().
call setreg('"', s:save_reg, s:save_reg_mode)
echo ""
endfunction " }}}
" }}}
" Doers: {{{
function! s:JumpIn(char) " {{{
let line = getline('.')
let col = col('.')-2
if (col) < 0
call setline('.',a:char.line)
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
"echom string(col).':'.line[:(col)].'|'.line[(col+1):]
call setline('.',line[:(col)].a:char.line[(col+1):])
let value = g:[opt_name]
endif
return ''
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:JumpOut(char) "{{{
let line = getline('.')
let col = col('.')-2
if line[col+1] == a:char
call setline('.',line[:(col)].line[(col+2):])
endif
return a:char
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
function! DelimitMate_JumpAny() " {{{
let nchar = getline('.')[col('.')-1]
return nchar . "\<Del>"
endfunction " DelimitMate_JumpAny() }}}
let b:delimitMate_enabled = 1
endfunction "}}} Map()
function! s:SkipDelim(char) "{{{
let cur = strpart( getline('.'), col('.')-2, 3 )
if cur[0] == "\\"
" Escaped character
return a:char
elseif cur[1] == a:char
" Exit pair
return s:WriteBefore(a:char)
"elseif cur[1] == ' ' && cur[2] == a:char
"" I'm leaving this in case someone likes it. Jump an space and delimiter.
"return "\<Right>\<Right>"
elseif s:IsEmptyPair( cur[0] . a:char )
" Add closing delimiter and jump back to the middle.
return s:WriteAfter(a:char)
else
" Nothing special here, return the same character.
return a:char
endif
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:QuoteDelim(char) "{{{
let line = getline('.')
let col = col('.') - 2
if line[col] == "\\"
" Seems like a escaped character, insert one quotation mark.
return a:char
elseif line[col + 1] == a:char
" Get out of the string.
return s:WriteBefore(a:char)
elseif (line[col] =~ '[a-zA-Z0-9]' && a:char == "'") ||
\(line[col] =~ '[a-zA-Z0-9]' && b:delimitMate_smart_quotes)
" Seems like an apostrophe or a closing, insert a single quote.
return a:char
elseif (line[col] == a:char && line[col + 1 ] != a:char) && b:delimitMate_smart_quotes
" Seems like we have an unbalanced quote, insert one quotation mark and jump to the middle.
return s:WriteAfter(a:char)
else
" Insert a pair and jump to the middle.
call s:WriteAfter(a:char)
return a:char
endif
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:MapMsg(msg) "{{{
redraw
echomsg a:msg
return ""
function! s:TriggerAbb() "{{{
if v:version < 703
\ || ( v:version == 703 && !has('patch489') )
\ || pumvisible()
return ''
endif
return "\<C-]>"
endfunction "}}}
"}}}
" Mappings: {{{
function! s:NoAutoClose() "{{{
" inoremap <buffer> ) <C-R>=<SID>SkipDelim('\)')<CR>
for delim in b:delimitMate_right_delims + b:delimitMate_quotes_list
exec 'inoremap <buffer> ' . delim . ' <C-R>=<SID>SkipDelim("' . escape(delim,'"') . '")<CR>'
endfor
" 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 <buffer> ( ()<Left>
let i = 0
while i < len(b:delimitMate_matchpairs_list)
let ld = b:delimitMate_left_delims[i]
let rd = b:delimitMate_right_delims[i]
exec 'inoremap <buffer> ' . ld . ' ' . ld . '<C-R>=<SID>JumpIn("' . rd . '")<CR>'
let i += 1
endwhile
" 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
" Add matching quote and jump to the midle, or exit if inside a pair of matching quotes:
" inoremap <buffer> " <C-R>=<SID>QuoteDelim("\"")<CR>
for delim in b:delimitMate_quotes_list
exec 'inoremap <buffer> ' . delim . ' <C-R>=<SID>QuoteDelim("\' . delim . '")<CR>'
endfor
" 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
" Exit from inside the matching pair:
for delim in b:delimitMate_right_delims
exec 'inoremap <buffer> ' . delim . ' <C-R>=<SID>JumpOut("\' . delim . '")<CR>'
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 (de-activated by default):
" inoremap <buffer> n't n't
for map in b:delimitMate_apostrophes_list
exec "inoremap <buffer> " . map . " " . map
endfor
endfunction "}}}
function! s:VisualMaps() " {{{
let vleader = b:delimitMate_visual_leader
" Wrap the selection with matching pairs, but do nothing if blockwise visual mode is active:
let i = 0
while i < len(b:delimitMate_matchpairs_list)
" Map left delimiter:
let ld = b:delimitMate_left_delims[i]
let rd = b:delimitMate_right_delims[i]
exec 'vnoremap <buffer> <expr> ' . vleader . ld . ' <SID>IsBlockVisual() ? <SID>MapMsg("' . s:VMapMsg . '") : "s' . ld . '\<C-R>\"' . rd . '\<Esc>:call <SID>RestoreRegister()<CR>"'
" Map right delimiter:
exec 'vnoremap <buffer> <expr> ' . vleader . rd . ' <SID>IsBlockVisual() ? <SID>MapMsg("' . s:VMapMsg . '") : "s' . ld . '\<C-R>\"' . rd . '\<Esc>:call <SID>RestoreRegister()<CR>"'
let i += 1
endwhile
" Wrap the selection with matching quotes, but do nothing if blockwise visual mode is active:
for quote in b:delimitMate_quotes_list
" vnoremap <buffer> <expr> \' <SID>IsBlockVisual() ? <SID>MapMsg("Message") : "s'\<C-R>\"'\<Esc>:call <SID>RestoreRegister()<CR>"
exec 'vnoremap <buffer> <expr> ' . vleader . quote . ' <SID>IsBlockVisual() ? <SID>MapMsg("' . s:VMapMsg . '") : "s' . escape(quote,'"') .'\<C-R>\"' . escape(quote,'"') . '\<Esc>:call <SID>RestoreRegister()<CR>"'
endfor
endfunction "}}}
function! DelimitMate_ExpandReturn() "{{{
" Expand:
return "\<Esc>a\<CR>x\<CR>\<Esc>k$\"_xa"
endfunction "}}}
function! DelimitMate_ExpandSpace() "{{{
" Expand:
return s:WriteAfter(' ') . "\<Space>"
" 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 <buffer> <expr> <BS> DelimitMate_WithinEmptyPair() ? "\<Right>\<BS>\<BS>" : "\<BS>"
" If pair is empty, delete closing delimiter:
inoremap <buffer> <expr> <S-BS> DelimitMate_WithinEmptyPair() ? "\<Del>" : "\<S-BS>"
" Expand return if inside an empty pair:
if b:delimitMate_expand_cr != 0
inoremap <buffer> <expr> <CR> DelimitMate_WithinEmptyPair() ?
\ DelimitMate_ExpandReturn() : "\<CR>"
endif
" Expand space if inside an empty pair:
if b:delimitMate_expand_space != 0
inoremap <buffer> <expr> <Space> DelimitMate_WithinEmptyPair() ?
\ DelimitMate_ExpandSpace() : "\<Space>"
endif
" Jump out ot any empty pair:
if b:delimitMate_tab2exit
inoremap <buffer> <expr> <S-Tab> DelimitMate_ShouldJump() ? DelimitMate_JumpAny() : "\<S-Tab>"
endif
endfunction "}}}
"}}}
" Tools: {{{
function! s:TestMappings() "{{{
if b:delimitMate_autoclose
exec "normal i* AUTOCLOSE:\<CR>"
for i in range(len(b:delimitMate_left_delims))
exec "normal GGAOpen & close: " . b:delimitMate_left_delims[i]. "|"
exec "normal A\<CR>Delete: " . b:delimitMate_left_delims[i] . "\<BS>|"
exec "normal A\<CR>Exit: " . b:delimitMate_left_delims[i] . b:delimitMate_right_delims[i] . "|"
exec "normal A\<CR>Space: " . b:delimitMate_left_delims[i] . " |"
exec "normal GGA\<CR>Visual-L: v\<Esc>v" . b:delimitMate_visual_leader . b:delimitMate_left_delims[i]
exec "normal A\<CR>Visual-R: v\<Esc>v" . b:delimitMate_visual_leader . b:delimitMate_right_delims[i]
exec "normal A\<CR>Car return: " . b:delimitMate_left_delims[i] . "\<CR>|\<Esc>GGA\<CR>\<CR>"
endfor
for i in range(len(b:delimitMate_quotes_list))
exec "normal GGAOpen & close: " . b:delimitMate_quotes_list[i] . "|"
exec "normal A\<CR>Delete: "
exec "normal A". b:delimitMate_quotes_list[i]
exec "normal a\<BS>|"
exec "normal A\<CR>Exit: " . b:delimitMate_quotes_list[i] . b:delimitMate_quotes_list[i] . "|"
exec "normal A\<CR>Space: " . b:delimitMate_quotes_list[i] . " |"
exec "normal GGA\<CR>Visual: v\<Esc>v" . b:delimitMate_visual_leader . b:delimitMate_quotes_list[i]
exec "normal A\<CR>Car return: " . b:delimitMate_quotes_list[i] . "\<CR>|\<Esc>GGA\<CR>\<CR>"
endfor
else
exec "normal i* NO AUTOCLOSE:\<CR>"
for i in range(len(b:delimitMate_left_delims))
exec "normal GGAOpen & close: " . b:delimitMate_left_delims[i] . b:delimitMate_right_delims[i] . "|"
exec "normal A\<CR>Delete: " . b:delimitMate_left_delims[i] . b:delimitMate_right_delims[i] . "\<BS>|"
exec "normal A\<CR>Exit: " . b:delimitMate_left_delims[i] . b:delimitMate_right_delims[i] . b:delimitMate_right_delims[i] . "|"
exec "normal A\<CR>Space: " . b:delimitMate_left_delims[i] . b:delimitMate_right_delims[i] . " |"
exec "normal GGA\<CR>Visual-L: v\<Esc>v" . b:delimitMate_visual_leader . b:delimitMate_left_delims[i]
exec "normal A\<CR>Visual-R: v\<Esc>v" . b:delimitMate_visual_leader . b:delimitMate_right_delims[i]
exec "normal A\<CR>Car return: " . b:delimitMate_left_delims[i] . b:delimitMate_right_delims[i] . "\<CR>|\<Esc>GGA\<CR>\<CR>"
endfor
for i in range(len(b:delimitMate_quotes_list))
exec "normal GGAOpen & close: " . b:delimitMate_quotes_list[i] . b:delimitMate_quotes_list[i] . "|"
exec "normal A\<CR>Delete: " . b:delimitMate_quotes_list[i] . b:delimitMate_quotes_list[i] . "\<BS>|"
exec "normal A\<CR>Exit: " . b:delimitMate_quotes_list[i] . b:delimitMate_quotes_list[i] . b:delimitMate_quotes_list[i] . "|"
exec "normal A\<CR>Space: " . b:delimitMate_quotes_list[i] . b:delimitMate_quotes_list[i] . " |"
exec "normal GGA\<CR>Visual: v\<Esc>v" . b:delimitMate_visual_leader . b:delimitMate_quotes_list[i]
exec "normal A\<CR>Car return: " . b:delimitMate_quotes_list[i] . b:delimitMate_quotes_list[i] . "\<CR>|\<Esc>GGA\<CR>\<CR>"
endfor
endif
exec "normal \<Esc>i"
" 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 "}}}
function! s:SwitchAutoclose() "{{{
if !exists("g:delimitMate_autoclose")
let g:delimitMate_autoclose = 1
elseif g:delimitMate_autoclose == 1
let g:delimitMate_autoclose = 0
else
let g:delimitMate_autoclose = 1
endif
DelimitMateReload
endfunction "}}}
function! s:UnMap() " {{{
" No Autoclose Mappings:
for char in b:delimitMate_right_delims + b:delimitMate_quotes_list
if maparg(char,"i") =~? 'SkipDelim'
exec 'silent! iunmap <buffer> ' . char
"echomsg 'iunmap <buffer> ' . char
endif
endfor
" Autoclose Mappings:
let i = 0
let l = len(b:delimitMate_matchpairs_list)
while i < l
if maparg(b:delimitMate_left_delims[i],"i") =~? 'JumpIn'
exec 'silent! iunmap <buffer> ' . b:delimitMate_left_delims[i]
"echomsg 'iunmap <buffer> ' . b:delimitMate_left_delims[i]
endif
let i += 1
endwhile
for char in b:delimitMate_quotes_list
if maparg(char, "i") =~? 'QuoteDelim'
exec 'silent! iunmap <buffer> ' . char
"echomsg 'iunmap <buffer> ' . char
endif
endfor
for char in b:delimitMate_right_delims
if maparg(char, "i") =~? 'JumpOut'
exec 'silent! iunmap <buffer> ' . char
"echomsg 'iunmap <buffer> ' . char
endif
endfor
for map in b:delimitMate_apostrophes_list
exec "silent! iunmap <buffer> " . map
endfor
" Visual Mappings:
for char in b:delimitMate_right_delims + b:delimitMate_left_delims + b:delimitMate_quotes_list
if maparg(b:delimitMate_visual_leader . char,"v") =~? 'IsBlock'
exec 'silent! vunmap <buffer> ' . b:delimitMate_visual_leader . char
"echomsg 'vunmap <buffer> ' . b:delimitMate_visual_leader . char
endif
endfor
" Expansion Mappings:
if maparg('<BS>', "i") =~? 'WithinEmptyPair'
silent! iunmap <buffer> <BS>
"echomsg "silent! iunmap <buffer> <BS>"
endif
if maparg('<S-BS>', "i") =~? 'WithinEmptyPair'
silent! iunmap <buffer> <BS>
"echomsg "silent! iunmap <buffer> <BS>"
endif
if maparg('<CR>',"i") =~? 'DelimitMate_ExpandReturn'
silent! iunmap <buffer> <CR>
"echomsg "silent! iunmap <buffer> <CR>"
endif
if maparg('<Space>',"i") =~? 'DelimitMate_ExpandSpace'
silent! iunmap <buffer> <Space>
"echomsg "silent! iunmap <buffer> <Space>"
endif
if maparg('<S-Tab>', "i") =~? 'ShouldJump'
silent! iunmap <buffer> <S-Tab>
"echomsg "silent! iunmap <buffer> <S-Tab>"
endif
endfunction " }}} s:ExtraMappings()
function! s:TestMappingsDo() "{{{
"DelimitMateReload
if !exists("g:delimitMate_testing")
"call s:DelimitMateDo()
call s:TestMappings()
else
call s:SwitchAutoclose()
call s:TestMappings()
exec "normal i\<CR>"
call s:SwitchAutoclose()
call s:TestMappings()
endif
endfunction "}}}
function! s:DelimitMateDo() "{{{
if exists("g:delimitMate_excluded_ft")
" Check if this file type is excluded:
for ft in split(g:delimitMate_excluded_ft,',')
if ft ==? &filetype
if !exists("b:delimitMate_quotes_list")
return 1
endif
"echomsg "excluded"
call s:UnMap()
return 1
endif
endfor
endif
try
"echomsg "included"
let save_cpo = &cpo
set cpo&vim
call s:Init()
finally
let &cpo = save_cpo
endtry
endfunction "}}}
"}}}
" Commands: {{{
call s:DelimitMateDo()
" Let me refresh without re-loading the buffer:
command! DelimitMateReload call s:DelimitMateDo()
command! -bar DelimitMateReload call s:setup(1)
" Quick test:
command! DelimitMateTest call s:TestMappingsDo()
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)
" Run on file type events.
"autocmd VimEnter * autocmd FileType * call <SID>DelimitMateDo()
autocmd FileType * call <SID>DelimitMateDo()
" Run on new buffers.
autocmd BufNewFile,BufRead,BufEnter * if !exists("b:loaded_delimitMate") | call <SID>DelimitMateDo() | endif
"function! s:GetSynRegion () | echo synIDattr(synIDtrans(synID(line('.'), col('.'), 1)), 'name') | endfunction
"}}}
" Autocommands: {{{
augroup delimitMate
au!
" Run on file type change.
au FileType * call <SID>setup()
au FileType python let b:delimitMate_nesting_quotes = ['"', "'"]
" 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
"}}}
" This is for the default buffer when it does not have a filetype.
call s:setup()
let &cpo = save_cpo
" GetLatestVimScripts: 2754 1 :AutoInstall: delimitMate.vim
" vim:foldmethod=marker:foldcolumn=4
" vim:foldmethod=marker:foldcolumn=4:ts=2:sw=2

9
test/Makefile Normal file
View File

@@ -0,0 +1,9 @@
all: build/runVimTests
build/runVimTests/bin/runVimTests.sh -0 .
build/runVimTests: build/VimTAP
git clone https://github.com/inkarkat/runVimTests $@
# Use VimTAP as directory name, as used with runVimTestsSetup.vim.
build/VimTAP:
git clone https://github.com/inkarkat/vimtap $@

18
test/README.md Normal file
View File

@@ -0,0 +1,18 @@
# Automatic test setup
You can use `make` (or `make test` from the top level directory) to run the
tests.
# Manual test setup instructions
The plugins [runVimTests](http://www.vim.org/scripts/script.php?script_id=2565)
and [VimTAP](http://www.vim.org/scripts/script.php?script_id=2213) are needed
to run these tests.
Besides the `_setup.vim` configuration file present in this repo you need to
create a global one and place it in the same dir where the runVimTests
executable is located. Assuming the executable is at '~/bin/runVimTests' this
global configuration file should be '~/bin/runVimTestsSetup.vim' and should
have something like the following lines inside of it:
" Prepend tests repos to &rtp
let &runtimepath = '/path/to/runVimTests_dir,' . &rtp
let &runtimepath = '/path/to/vimTAP_dir,' . &rtp

12
test/_setup.vim Normal file
View File

@@ -0,0 +1,12 @@
let &rtp = expand('<sfile>:p:h:h') . ',' . &rtp . ',' . expand('<sfile>:p:h:h') . '/after'
set bs=2
ru plugin/delimitMate.vim
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

View 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 () "

View 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
View 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
View 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()

44
test/eol_marker.vim Normal file
View 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()

96
test/expand_cr.txt Normal file
View 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
View 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()

8
test/expand_space.txt Normal file
View 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
View 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()

View 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()