tomkersten-vixploder 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +4 -0
- data/Manifest.txt +105 -0
- data/PostInstall.txt +21 -0
- data/README.rdoc +131 -0
- data/Rakefile +21 -0
- data/bin/256colors2.pl +63 -0
- data/bin/colortest +365 -0
- data/bin/vixplode +10 -0
- data/lib/dotfiles/aliases +30 -0
- data/lib/dotfiles/gvimrc +20 -0
- data/lib/dotfiles/vim/.VimballRecord +2 -0
- data/lib/dotfiles/vim/after/ftplugin/actionscript_snippets.vim +9 -0
- data/lib/dotfiles/vim/after/ftplugin/aspvbs_snippets.vim +17 -0
- data/lib/dotfiles/vim/after/ftplugin/c_snippets.vim +58 -0
- data/lib/dotfiles/vim/after/ftplugin/css_snippets.vim +30 -0
- data/lib/dotfiles/vim/after/ftplugin/django_model_snippets.vim +61 -0
- data/lib/dotfiles/vim/after/ftplugin/django_template_snippets.vim +32 -0
- data/lib/dotfiles/vim/after/ftplugin/f-script_snippets.vim +14 -0
- data/lib/dotfiles/vim/after/ftplugin/haskell_snippets.vim +9 -0
- data/lib/dotfiles/vim/after/ftplugin/html_snippets.vim +57 -0
- data/lib/dotfiles/vim/after/ftplugin/java_snippets.vim +52 -0
- data/lib/dotfiles/vim/after/ftplugin/javascript_snippets.vim +10 -0
- data/lib/dotfiles/vim/after/ftplugin/latex_snippets.vim +13 -0
- data/lib/dotfiles/vim/after/ftplugin/logo_snippets.vim +9 -0
- data/lib/dotfiles/vim/after/ftplugin/markdown_snippets.vim +10 -0
- data/lib/dotfiles/vim/after/ftplugin/movable_type_snippets.vim +14 -0
- data/lib/dotfiles/vim/after/ftplugin/objc_snippets.vim +53 -0
- data/lib/dotfiles/vim/after/ftplugin/ocaml_snippets.vim +26 -0
- data/lib/dotfiles/vim/after/ftplugin/perl_snippets.vim +23 -0
- data/lib/dotfiles/vim/after/ftplugin/php_snippets.vim +30 -0
- data/lib/dotfiles/vim/after/ftplugin/phpdoc_snippets.vim +19 -0
- data/lib/dotfiles/vim/after/ftplugin/propel_snippets.vim +14 -0
- data/lib/dotfiles/vim/after/ftplugin/python_snippets.vim +202 -0
- data/lib/dotfiles/vim/after/ftplugin/rails_snippets.vim +54 -0
- data/lib/dotfiles/vim/after/ftplugin/ruby_snippets.vim +32 -0
- data/lib/dotfiles/vim/after/ftplugin/sh_snippets.vim +12 -0
- data/lib/dotfiles/vim/after/ftplugin/slate_snippets.vim +19 -0
- data/lib/dotfiles/vim/after/ftplugin/smarty_snippets.vim +35 -0
- data/lib/dotfiles/vim/after/ftplugin/symfony_snippets.vim +21 -0
- data/lib/dotfiles/vim/after/ftplugin/tcl_snippets.vim +14 -0
- data/lib/dotfiles/vim/after/ftplugin/template_toolkit_snippets.vim +13 -0
- data/lib/dotfiles/vim/after/ftplugin/tex_snippets.vim +13 -0
- data/lib/dotfiles/vim/after/ftplugin/xhtml_snippets.vim +48 -0
- data/lib/dotfiles/vim/autoload/fakeclip.vim +253 -0
- data/lib/dotfiles/vim/autoload/rails.vim +4377 -0
- data/lib/dotfiles/vim/autoload/rubycomplete.vim +802 -0
- data/lib/dotfiles/vim/colors/inkpot.vim +212 -0
- data/lib/dotfiles/vim/colors/ir_black.vim +212 -0
- data/lib/dotfiles/vim/colors/ir_black_mod.vim +213 -0
- data/lib/dotfiles/vim/colors/railscasts.vim +100 -0
- data/lib/dotfiles/vim/colors/rubyblue.vim +74 -0
- data/lib/dotfiles/vim/colors/twilight.vim +75 -0
- data/lib/dotfiles/vim/colors/twilight2.vim +74 -0
- data/lib/dotfiles/vim/colors/wombat256.vim +302 -0
- data/lib/dotfiles/vim/compiler/eruby.vim +41 -0
- data/lib/dotfiles/vim/compiler/ruby.vim +68 -0
- data/lib/dotfiles/vim/compiler/rubyunit.vim +35 -0
- data/lib/dotfiles/vim/doc/NERD_tree.txt +1235 -0
- data/lib/dotfiles/vim/doc/fakeclip.txt +190 -0
- data/lib/dotfiles/vim/doc/matchit.txt +406 -0
- data/lib/dotfiles/vim/doc/project.txt +710 -0
- data/lib/dotfiles/vim/doc/rails.txt +1123 -0
- data/lib/dotfiles/vim/doc/snippets_emu.txt +354 -0
- data/lib/dotfiles/vim/doc/surround.txt +218 -0
- data/lib/dotfiles/vim/doc/tags +433 -0
- data/lib/dotfiles/vim/filetype.vim +13 -0
- data/lib/dotfiles/vim/ftdetect/gist.vim +3 -0
- data/lib/dotfiles/vim/ftdetect/ruby.vim +14 -0
- data/lib/dotfiles/vim/ftplugin/eruby.vim +101 -0
- data/lib/dotfiles/vim/ftplugin/ruby.vim +230 -0
- data/lib/dotfiles/vim/indent/eruby.vim +73 -0
- data/lib/dotfiles/vim/indent/ruby.vim +373 -0
- data/lib/dotfiles/vim/plugin/NERD_tree.vim +3536 -0
- data/lib/dotfiles/vim/plugin/comments.vim +321 -0
- data/lib/dotfiles/vim/plugin/fakeclip.vim +174 -0
- data/lib/dotfiles/vim/plugin/fuzzyfinder.vim +1676 -0
- data/lib/dotfiles/vim/plugin/fuzzyfinder_textmate.vim +150 -0
- data/lib/dotfiles/vim/plugin/gist.vim +241 -0
- data/lib/dotfiles/vim/plugin/gitdiff.vim +141 -0
- data/lib/dotfiles/vim/plugin/matchit.vim +812 -0
- data/lib/dotfiles/vim/plugin/mru.vim +787 -0
- data/lib/dotfiles/vim/plugin/rails.vim +310 -0
- data/lib/dotfiles/vim/plugin/rspec.vim +12 -0
- data/lib/dotfiles/vim/plugin/snippets.vim +17 -0
- data/lib/dotfiles/vim/plugin/snippetsEmu.vim +973 -0
- data/lib/dotfiles/vim/plugin/supertab.vim +531 -0
- data/lib/dotfiles/vim/plugin/surround.vim +632 -0
- data/lib/dotfiles/vim/ref_vimrc +80 -0
- data/lib/dotfiles/vim/ruby/fuzzy_file_finder.rb +353 -0
- data/lib/dotfiles/vim/syntax/eruby.vim +85 -0
- data/lib/dotfiles/vim/syntax/haml.vim +113 -0
- data/lib/dotfiles/vim/syntax/mkd.vim +86 -0
- data/lib/dotfiles/vim/syntax/ruby.vim +324 -0
- data/lib/dotfiles/vim/syntax/sass.vim +93 -0
- data/lib/dotfiles/vimrc +269 -0
- data/lib/vixplode/cli.rb +73 -0
- data/lib/vixploder.rb +6 -0
- data/script/console +10 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +10 -0
- data/spec/vixplode_cli_spec.rb +15 -0
- data/spec/vixploder_spec.rb +7 -0
- data/tasks/rspec.rake +21 -0
- metadata +202 -8
@@ -0,0 +1,354 @@
|
|
1
|
+
*snippets_emu.txt* For Vim version 7.0. Last change: 2006 Dec 26
|
2
|
+
|
3
|
+
|
4
|
+
VIM REFERENCE MANUAL by Panos Laganakos and Felix Ingram
|
5
|
+
|
6
|
+
|
7
|
+
1. SnippetsEmu Features |snippets_emu-features|
|
8
|
+
Basic Snippets |basic-snippet|
|
9
|
+
Named Tags |named-tags|
|
10
|
+
Tag Commands |snippet-commands|
|
11
|
+
Buffer Specific Snippets |snip-buffer-specific|
|
12
|
+
Filetype Specific Snippets |snip-ftplugin|
|
13
|
+
Snippets menu |snip-menu|
|
14
|
+
2. SnippetsEmu Options |snippets_emu-options|
|
15
|
+
Start and End Tags |snip-start-end-tags|
|
16
|
+
Element Delimiter |snip-start-end-tags|
|
17
|
+
Remapping the default jump key |snip-remap-key|
|
18
|
+
3. Detailed Explanations |snip-detailed-explanations|
|
19
|
+
Valid Tag Names |snip-tag-name-syntax|
|
20
|
+
Advanced Tag Command Examples |snip-advanced-tag-commands|
|
21
|
+
4. SnippetsEmu Contact Details |snip-contact-details|
|
22
|
+
5. Contributors |snip-contributors|
|
23
|
+
6. SnippetsEmu Known Bugs |snippets_emu-bugs|
|
24
|
+
7. Troubleshooting |snippets_emu-troubleshooting|
|
25
|
+
|
26
|
+
{Vi does not have any of these features}
|
27
|
+
|
28
|
+
==============================================================================
|
29
|
+
SNIPPETSEMU FEATURES *snippets_emu-features*
|
30
|
+
|
31
|
+
SnippetsEmu attempts to emulate several of the snippets features of the OS X
|
32
|
+
editor TextMate, in particular the variable bouncing and replacement behaviour.
|
33
|
+
Simple usage is built up around the following functionality:
|
34
|
+
|
35
|
+
Basic Snippet |basic-snippet|
|
36
|
+
Named Tags |named-tags|
|
37
|
+
Executable Snippet |snippet-commands|
|
38
|
+
Buffer Specific Snippets |snip-buffer-specific|
|
39
|
+
|
40
|
+
*basic-snippet*
|
41
|
+
*:Snippet*
|
42
|
+
Basic Snippet ~
|
43
|
+
|
44
|
+
A basic snippet can save you a lot of typing. Define a word trigger and on
|
45
|
+
insertion it will be expanded to the full snippet. SnippetsEmu allows the
|
46
|
+
user to define markers within the larger piece of text which will be used
|
47
|
+
to place the cursor upon expansion.
|
48
|
+
|
49
|
+
The command used to define a snippet is 'Snippet'.
|
50
|
+
|
51
|
+
Basic Syntax: >
|
52
|
+
|
53
|
+
:Snippet trigger_name The cursor will be placed here: <{}> Trailing text
|
54
|
+
|
55
|
+
In insert mode typing 'trigger_name<Tab>' will remove 'trigger_name' and
|
56
|
+
replace it with the text: 'The cursor will be placed here: Trailing text'.
|
57
|
+
The cursor will be placed between the two spaces before the word 'Trailing'
|
58
|
+
|
59
|
+
NOTE: All text should be entered on the same command line. The formatting of
|
60
|
+
this document may mean that examples are wrapped but they should all be
|
61
|
+
entered on a single line.
|
62
|
+
|
63
|
+
*named-tags*
|
64
|
+
Named tags ~
|
65
|
+
|
66
|
+
Instead of the simple '<{}>' tags used for cursor placement a user can define
|
67
|
+
named tags. When the value of a named tag is changed then all other tags with
|
68
|
+
that name will be changed to the same value.
|
69
|
+
|
70
|
+
E.g. >
|
71
|
+
|
72
|
+
:Snippet trigger My name is <{forename}> <{surname}>. Call me <{forename}>.
|
73
|
+
|
74
|
+
In insert mode typing 'trigger<Tab>' will place the cursor inside the
|
75
|
+
'<{forename}>' tag. Whatever is entered inside the tag will replace the other
|
76
|
+
similarly named tag at the end of the line after the user presses 'Tab'.
|
77
|
+
|
78
|
+
If no value is entered for a named tag then the tag's name will be used
|
79
|
+
instead. This is one way of defining default values.
|
80
|
+
|
81
|
+
Using the above example, entering 'trigger<Tab>' and pressing 'Tab' twice
|
82
|
+
will result in the following text: >
|
83
|
+
|
84
|
+
My name is forename surname. Please call me forename.
|
85
|
+
|
86
|
+
The rules for what constitutes a valid tag name are explained below. See
|
87
|
+
|snip-tag-name-syntax|.
|
88
|
+
*snippet-commands*
|
89
|
+
Tag commands ~
|
90
|
+
|
91
|
+
Tags can contain commands. Commands can be any Vim function, including user
|
92
|
+
defined functions.
|
93
|
+
|
94
|
+
A common example is performing substitutions.
|
95
|
+
|
96
|
+
E.g. >
|
97
|
+
|
98
|
+
:Snippet trigger My name is <{name}>. I SAID: MY NAME IS
|
99
|
+
<{name:substitute(@z,'.','\u&','g')}>!
|
100
|
+
|
101
|
+
The value entered in the <{name}> tag will be passed to the command in the
|
102
|
+
second <{name}> tag in the @z register (any value already in @z will be
|
103
|
+
preserved and restored). The substitute command will change the entered value
|
104
|
+
to be in upper case. I.e. Entering 'trigger<Tab>' and typing 'Tycho<Tab>'
|
105
|
+
will result in the following text: >
|
106
|
+
|
107
|
+
My name is Tycho. I SAID: MY NAME IS TYCHO!
|
108
|
+
~
|
109
|
+
*snip-special-vars*
|
110
|
+
There is a set of special variables which can be included in snippets. These
|
111
|
+
will be replaced before the snippet's text is inserted into the buffer. The
|
112
|
+
list of available variables is detailed below:
|
113
|
+
|
114
|
+
* SNIP_FILE_NAME - The current file name (from 'expand("%")')
|
115
|
+
* SNIP_ISO_DATE - The current date in YYYY-MM-DD format.
|
116
|
+
|
117
|
+
*snip-snippet-commands*
|
118
|
+
In addition to tag commands it is also possible to define commands which will
|
119
|
+
be executed before the snippet is inserted into the buffer. These are defined
|
120
|
+
within double backticks.
|
121
|
+
|
122
|
+
E.g.
|
123
|
+
>
|
124
|
+
:Snippet date The current date is ``strftime("%c")``
|
125
|
+
|
126
|
+
Commands are standard Vim commands and will be 'exec'uted and the command
|
127
|
+
output substituted into the text.
|
128
|
+
|
129
|
+
*snip-buffer-specific*
|
130
|
+
Buffer Specific Snippets ~
|
131
|
+
|
132
|
+
The Snippet command defines buffer specific snippets. This is the recommended
|
133
|
+
option when using filetype specific snippets. It is possible to define
|
134
|
+
'global' snippets which will act across all buffers. These can be defined
|
135
|
+
using the legacy 'Iabbr' command (note the capital 'I').
|
136
|
+
|
137
|
+
E.g. >
|
138
|
+
Iabbr for for <{var}> in <{list}>:<CR><{}>
|
139
|
+
~
|
140
|
+
*snip-ftplugin*
|
141
|
+
The preferred practice for defining filetype specific snippets is to include
|
142
|
+
them in files named <filetype>_snippets.vim and for these files to be placed in the
|
143
|
+
~/.vim/after/ftplugin directory (or vimfiles\after\ftplugin under Windows).
|
144
|
+
When a file of a specific type is loaded so will all of the defined snippets.
|
145
|
+
The 'after' directory is used to ensure that the plugin has been loaded. It is
|
146
|
+
also recommended that the following is included at the top of the file: >
|
147
|
+
|
148
|
+
if !exists('loaded_snippet') || &cp
|
149
|
+
finish
|
150
|
+
endif
|
151
|
+
|
152
|
+
This will stop errors being generated if the plugin has not loaded for any
|
153
|
+
reason.
|
154
|
+
|
155
|
+
Users wishing to add their own filetype snippets should add them to a separate
|
156
|
+
file to ensure they are not lost when upgrading the plugin. Naming the files
|
157
|
+
<filetype>_mysnippets.vim or similar is the preferred practice.
|
158
|
+
|
159
|
+
*snip-menu*
|
160
|
+
When loading the plugin will search for all files named '*_snippets.vim'.
|
161
|
+
These will be added to the 'Snippets' menu which is available in Normal mode.
|
162
|
+
Selecting options from the menu will source the file and hence load any
|
163
|
+
snippets defined within it.
|
164
|
+
|
165
|
+
*creating-snippets* *CreateSnippet*
|
166
|
+
[range]CreateSnippet
|
167
|
+
The CreateSnippet command allows the simple creation of
|
168
|
+
snippets for use within your own file. Without a range the
|
169
|
+
current line will be used. When passed a range then all the
|
170
|
+
lines in the range will be converted for use in a command.
|
171
|
+
|
172
|
+
Snippets created by the command will be added to a scratch
|
173
|
+
buffer called 'Snippets'. The current value of an empty tag
|
174
|
+
(snip_start_tag.snip_end_tag, '<{}>' by default) will be added
|
175
|
+
to the unnamed register and so can be inserted with appropriate
|
176
|
+
paste commands.
|
177
|
+
|
178
|
+
*CreateBundleSnippet*
|
179
|
+
[range]CreateBundleSnippet
|
180
|
+
CreateBundleSnippet works exactly like CreateSnippet but the
|
181
|
+
resulting text will be suitable for including in one of the
|
182
|
+
included bundles. The unnamed register will include the text
|
183
|
+
'"st.et."' so start and end tag agnostic empty tags can be
|
184
|
+
included.
|
185
|
+
|
186
|
+
===============================================================================
|
187
|
+
SNIPPETSEMU OPTIONS *snippets_emu-options*
|
188
|
+
*snip-start-end-tags*
|
189
|
+
Start and End Tags ~
|
190
|
+
|
191
|
+
By default the start and end tags are set to be '<{' and '}>'. These can be
|
192
|
+
changed by setting the following variables in vimrc: >
|
193
|
+
|
194
|
+
g:snip_start_tag
|
195
|
+
g:snip_end_tag
|
196
|
+
|
197
|
+
They can be also changed for a specific buffer by setting the following: >
|
198
|
+
|
199
|
+
b:snip_start_tag
|
200
|
+
b:snip_end_tag
|
201
|
+
~
|
202
|
+
*snip-elem-delimiter*
|
203
|
+
Element Delimiter ~
|
204
|
+
|
205
|
+
The value of snip_elem_delim is used to separate a tag's name and its command.
|
206
|
+
By default it is set to ':' but can be set as above either globally or for a
|
207
|
+
specific buffer using the following variables: >
|
208
|
+
|
209
|
+
g:snip_elem_delim
|
210
|
+
b:snip_elem_delim
|
211
|
+
~
|
212
|
+
*snip-remap-key*
|
213
|
+
Remapping the default jump key ~
|
214
|
+
|
215
|
+
The trigger key is mapped to Tab by default. Some people may wish to remap
|
216
|
+
this if it causes conflicts with other plugins. The key can be set in your
|
217
|
+
<.vimrc> by setting the 'g:snippetsEmu_key' variable.
|
218
|
+
An example
|
219
|
+
>
|
220
|
+
let g:snippetsEmu_key = "<S-Tab>"
|
221
|
+
|
222
|
+
Snippets will now be triggered by Shift-Tab rather than just Tab. NB, this
|
223
|
+
example may not work in all terminals as some trap Shift-Tab before it gets
|
224
|
+
to Vim.
|
225
|
+
|
226
|
+
~
|
227
|
+
==============================================================================
|
228
|
+
DETAILED EXPLANATIONS *snip-detailed-explanations*
|
229
|
+
*snip-tag-name-syntax*
|
230
|
+
Valid Tag Names ~
|
231
|
+
|
232
|
+
Tag names cannot contain whitespace unless they are enclosed in quotes.
|
233
|
+
|
234
|
+
Valid Examples: >
|
235
|
+
<{validName}>
|
236
|
+
<{"valid name"}>
|
237
|
+
<{tagName:command}>
|
238
|
+
<{"Tag Name":command}>
|
239
|
+
|
240
|
+
Invalid Examples: >
|
241
|
+
<{invalid name}>
|
242
|
+
<{Tag Name:command}>
|
243
|
+
<{:command}>
|
244
|
+
|
245
|
+
~
|
246
|
+
*snip-advanced-tag-commands*
|
247
|
+
Advanced Tag Command Examples ~
|
248
|
+
|
249
|
+
Commands in tags can be as complex as desired. Readability is the main
|
250
|
+
limitation as the command will be placed in the document before execution.
|
251
|
+
|
252
|
+
The preferred method for defining complex commands is to hide the
|
253
|
+
functionality in a user function.
|
254
|
+
|
255
|
+
Example:
|
256
|
+
>
|
257
|
+
|
258
|
+
function! Count(haystack, needle)
|
259
|
+
let counter = 0
|
260
|
+
let index = match(a:haystack, a:needle)
|
261
|
+
while index > -1
|
262
|
+
let counter = counter + 1
|
263
|
+
let index = match(a:haystack, a:needle, index+1)
|
264
|
+
endwhile
|
265
|
+
return counter
|
266
|
+
endfunction
|
267
|
+
|
268
|
+
function! PyArgList(count)
|
269
|
+
if a:count == 0
|
270
|
+
return "(,)"
|
271
|
+
else
|
272
|
+
return '('.repeat('<{}>, ', a:count).')'
|
273
|
+
endif
|
274
|
+
endfunction
|
275
|
+
|
276
|
+
Snippet pf print "<{s}>" % <{s:PyArgList(Count(@z, '%[^%]'))}><CR><{}>
|
277
|
+
|
278
|
+
The above snippet will expand 'pf' to 'print "<{s}>" ...'. The user then
|
279
|
+
enters a format string. Once the string is entered the Count and PyArgList
|
280
|
+
functions are used to generate a number of empty tags.
|
281
|
+
|
282
|
+
*snip-limitations*
|
283
|
+
The above represents once of the limitations of the plugin. Due to the way
|
284
|
+
tags are identified it is not possible to include empty tags in another tag's
|
285
|
+
command. The only way to generate empty tags is to return them from a function
|
286
|
+
as in the above example. For other examples see the included bundles.
|
287
|
+
|
288
|
+
*snip-bundles*
|
289
|
+
The included bundles are not defined in the 'preferred style'. In order to
|
290
|
+
accommodate users who wish to redefine the default tags all snippet
|
291
|
+
definitions are 'executed' with the 'exec' command.
|
292
|
+
|
293
|
+
E.g.
|
294
|
+
>
|
295
|
+
exec "Snippet test This isn't the right way to ".st.et." define snippets"
|
296
|
+
|
297
|
+
Executing the command allows 'st' and 'et' to be used in place of start and
|
298
|
+
end tags. 'st' and 'et' are defined elsewhere in the bundle file.
|
299
|
+
|
300
|
+
==============================================================================
|
301
|
+
SNIPPETSEMU CONTACT DETAILS *snip-contact-details*
|
302
|
+
|
303
|
+
To contact the author please email:
|
304
|
+
|
305
|
+
F <dot> Ingram <dot> lists <at> gmail <dot> com
|
306
|
+
|
307
|
+
The author welcomes corrections to this documentation, example snippets and
|
308
|
+
bug reports.
|
309
|
+
|
310
|
+
The plugin is also currently hosted at Google Code:
|
311
|
+
http://code.google.com/p/snippetsemu
|
312
|
+
|
313
|
+
Bug reports can also be posted on the hosting site:
|
314
|
+
http://code.google.com/p/snippetsemu/issues/list
|
315
|
+
|
316
|
+
*snip-contributors*
|
317
|
+
Contributors to SnippetsEmu ~
|
318
|
+
|
319
|
+
Patches:
|
320
|
+
Ori Avtalion - Improvements to Snippet command
|
321
|
+
Freddy Vulto - Improved behaviour
|
322
|
+
Andy Block - Bug with commands on same line. This is why I should do better
|
323
|
+
test suites.
|
324
|
+
bzklrm - Removal of some normal commands
|
325
|
+
Priit Tamboom - Sorting out left and right mappings
|
326
|
+
|
327
|
+
Documentation:
|
328
|
+
Panos Laganakos - Greek translation (coming soon)
|
329
|
+
|
330
|
+
Bundles:
|
331
|
+
Panos Laganakos - Python snippets
|
332
|
+
Alex Pounds - Django snippets
|
333
|
+
Chris Lasher - Python snippets
|
334
|
+
knipknap - Python snippets
|
335
|
+
James Widman - C snippets
|
336
|
+
|
337
|
+
==============================================================================
|
338
|
+
SNIPPETSEMU KNOWN BUGS *snippets_emu-bugs*
|
339
|
+
|
340
|
+
Bugs are currently tracked on Google Code. Please post any you find on the
|
341
|
+
issue tracker:
|
342
|
+
http://code.google.com/p/snippetsemu/issues/list
|
343
|
+
|
344
|
+
==============================================================================
|
345
|
+
SNIPPETSEMU TROUBLESHOOTING *snippets_emu-troubleshooting*
|
346
|
+
|
347
|
+
Problem: Bundles are not loading.
|
348
|
+
Answer: Ensure that you have filetype plugins turned on. Include the
|
349
|
+
following in your vimrc: >
|
350
|
+
|
351
|
+
filetype plugin on
|
352
|
+
|
353
|
+
|
354
|
+
vim:tw=78:sw=4:ts=8:ft=help:norl:
|
@@ -0,0 +1,218 @@
|
|
1
|
+
*surround.txt* Plugin for deleting, changing, and adding "surroundings"
|
2
|
+
|
3
|
+
Author: Tim Pope <vimNOSPAM@tpope.info> *surround-author*
|
4
|
+
License: Same terms as Vim itself (see |license|)
|
5
|
+
|
6
|
+
This plugin is only available if 'compatible' is not set.
|
7
|
+
|
8
|
+
INTRODUCTION *surround*
|
9
|
+
|
10
|
+
This plugin is a tool for dealing with pairs of "surroundings." Examples
|
11
|
+
of surroundings include parentheses, quotes, and HTML tags. They are
|
12
|
+
closely related to what Vim refers to as |text-objects|. Provided
|
13
|
+
are mappings to allow for removing, changing, and adding surroundings.
|
14
|
+
|
15
|
+
Details follow on the exact semantics, but first, consider the following
|
16
|
+
examples. An asterisk (*) is used to denote the cursor position.
|
17
|
+
|
18
|
+
Old text Command New text ~
|
19
|
+
"Hello *world!" ds" Hello world!
|
20
|
+
[123+4*56]/2 cs]) (123+456)/2
|
21
|
+
"Look ma, I'm *HTML!" cs"<q> <q>Look ma, I'm HTML!</q>
|
22
|
+
if *x>3 { ysW( if ( x>3 ) {
|
23
|
+
my $str = *whee!; vlllls' my $str = 'whee!';
|
24
|
+
|
25
|
+
While a few features of this plugin will work in older versions of Vim,
|
26
|
+
Vim 7 is recommended for full functionality.
|
27
|
+
|
28
|
+
MAPPINGS *surround-mappings*
|
29
|
+
|
30
|
+
Delete surroundings is *ds* . The next character given determines the target
|
31
|
+
to delete. The exact nature of the target is explained in |surround-targets|
|
32
|
+
but essentially it is the last character of a |text-object|. This mapping
|
33
|
+
deletes the difference between the "i"nner object and "a"n object. This is
|
34
|
+
easiest to understand with some examples:
|
35
|
+
|
36
|
+
Old text Command New text ~
|
37
|
+
"Hello *world!" ds" Hello world!
|
38
|
+
(123+4*56)/2 ds) 123+456/2
|
39
|
+
<div>Yo!*</div> dst Yo!
|
40
|
+
|
41
|
+
Change surroundings is *cs* . It takes two arguments, a target like with
|
42
|
+
|ds|, and a replacement. Details about the second argument can be found
|
43
|
+
below in |surround-replacements|. Once again, examples are in order.
|
44
|
+
|
45
|
+
Old text Command New text ~
|
46
|
+
"Hello *world!" cs"' 'Hello world!'
|
47
|
+
"Hello *world!" cs"<q> <q>Hello world!</q>
|
48
|
+
(123+4*56)/2 cs)] [123+456]/2
|
49
|
+
(123+4*56)/2 cs)[ [ 123+456 ]/2
|
50
|
+
<div>Yo!*</div> cst<p> <p>Yo!</p>
|
51
|
+
|
52
|
+
*ys* takes a valid Vim motion or text object as the first object, and wraps
|
53
|
+
it using the second argument as with |cs|. (Unfortunately there's no good
|
54
|
+
mnemonic for "ys".)
|
55
|
+
|
56
|
+
Old text Command New text ~
|
57
|
+
Hello w*orld! ysiw) Hello (world)!
|
58
|
+
|
59
|
+
As a special case, *yss* operates on the current line, ignoring leading
|
60
|
+
whitespace.
|
61
|
+
|
62
|
+
Old text Command New text ~
|
63
|
+
Hello w*orld! yssB {Hello world!}
|
64
|
+
|
65
|
+
There is also *yS* and *ySS* which indent the surrounded text and place it
|
66
|
+
on a line of its own.
|
67
|
+
|
68
|
+
In visual mode, a simple "s" with an argument wraps the selection. This is
|
69
|
+
referred to as the *vs* mapping, although ordinarily there will be
|
70
|
+
additional keystrokes between the v and s. In linewise visual mode, the
|
71
|
+
surroundings are placed on separate lines. In blockwise visual mode, each
|
72
|
+
line is surrounded.
|
73
|
+
|
74
|
+
An "S" in visual mode (*vS*) behaves similarly but always places the
|
75
|
+
surroundings on separate lines. Additionally, the surrounded text is
|
76
|
+
indented. In blockwise visual mode, using "S" instead of "s" instead skips
|
77
|
+
trailing whitespace.
|
78
|
+
|
79
|
+
Note that "s" and "S" already have valid meaning in visual mode, but it is
|
80
|
+
identical to "c". If you have muscle memory for "s" and would like to use a
|
81
|
+
different key, add your own mapping and the existing one will be disabled.
|
82
|
+
>
|
83
|
+
vmap <Leader>s <Plug>Vsurround
|
84
|
+
vmap <Leader>S <Plug>VSurround
|
85
|
+
<
|
86
|
+
*i_CTRL-G_s* *i_CTRL-G_S*
|
87
|
+
Finally, there is an experimental insert mode mapping on <C-G>s and <C-S>.
|
88
|
+
Beware that the latter won't work on terminals with flow control (if you
|
89
|
+
accidentally freeze your terminal, use <C-Q> to unfreeze it). The mapping
|
90
|
+
inserts the specified surroundings and puts the cursor between them. If,
|
91
|
+
immediately after the mapping and before the replacement, a second <C-S> or
|
92
|
+
carriage return is pressed, the prefix, cursor, and suffix will be placed on
|
93
|
+
three separate lines. <C-G>S (not <C-G>s) also exhibits this behavior.
|
94
|
+
|
95
|
+
TARGETS *surround-targets*
|
96
|
+
|
97
|
+
The |ds| and |cs| commands both take a target as their first argument. The
|
98
|
+
possible targets are based closely on the |text-objects| provided by Vim.
|
99
|
+
In order for a target to work, the corresponding text object must be
|
100
|
+
supported in the version of Vim used (Vim 7 adds several text objects, and
|
101
|
+
thus is highly recommended). All targets are currently just one character.
|
102
|
+
|
103
|
+
Eight punctuation marks, (, ), {, }, [, ], <, and >, represent themselves
|
104
|
+
and their counterparts. If the opening mark is used, contained whitespace is
|
105
|
+
also trimmed. The targets b, B, r, and a are aliases for ), }, ], and >
|
106
|
+
(the first two mirror Vim; the second two are completely arbitrary and
|
107
|
+
subject to change).
|
108
|
+
|
109
|
+
Three quote marks, ', ", `, represent themselves, in pairs. They are only
|
110
|
+
searched for on the current line.
|
111
|
+
|
112
|
+
A t is a pair of HTML or XML tags. See |tag-blocks| for details. Remember
|
113
|
+
that you can specify a numerical argument if you want to get to a tag other
|
114
|
+
than the innermost one.
|
115
|
+
|
116
|
+
The letters w, W, and s correspond to a |word|, a |WORD|, and a |sentence|,
|
117
|
+
respectively. These are special in that they have nothing to delete, and
|
118
|
+
used with |ds| they are a no-op. With |cs|, one could consider them a
|
119
|
+
slight shortcut for ysi (cswb == ysiwb, more or less).
|
120
|
+
|
121
|
+
A p represents a |paragraph|. This behaves similarly to w, W, and s above;
|
122
|
+
however, newlines are sometimes added and/or removed.
|
123
|
+
|
124
|
+
REPLACEMENTS *surround-replacements*
|
125
|
+
|
126
|
+
A replacement argument is a single character, and is required by |cs|, |ys|,
|
127
|
+
and |vs|. Undefined replacement characters (with the exception of alphabetic
|
128
|
+
characters) default to placing themselves at the beginning and end of the
|
129
|
+
destination, which can be useful for characters like / and |.
|
130
|
+
|
131
|
+
If either ), }, ], or > is used, the text is wrapped in the appropriate pair
|
132
|
+
of characters. Similar behavior can be found with (, {, and [ (but not <),
|
133
|
+
which append an additional space to the inside. Like with the targets above,
|
134
|
+
b, B, r, and a are aliases for ), }, ], and >. To fulfill the common need for
|
135
|
+
code blocks in C-style languages, <C-}> (which is really <C-]>) adds braces on
|
136
|
+
lines separate from the content.
|
137
|
+
|
138
|
+
If t or < is used, Vim prompts for an HTML/XML tag to insert. You may specify
|
139
|
+
attributes here and they will be stripped from the closing tag. End your
|
140
|
+
input by pressing <CR> or >. If <C-T> is used, the tags will appear on lines
|
141
|
+
by themselves.
|
142
|
+
|
143
|
+
A deprecated replacement of a LaTeX environment is provided on \ and l. The
|
144
|
+
name of the environment and any arguments will be input from a prompt. This
|
145
|
+
will be removed once a more fully functional customization system is
|
146
|
+
implemented. The following shows the resulting environment from
|
147
|
+
csp\tabular}{lc<CR>
|
148
|
+
>
|
149
|
+
\begin{tabular}{lc}
|
150
|
+
\end{tabular}
|
151
|
+
<
|
152
|
+
CUSTOMIZING *surround-customizing*
|
153
|
+
|
154
|
+
The following adds a potential replacement on "-" (ASCII 45) in PHP files.
|
155
|
+
(To determine the ASCII code to use, :echo char2nr("-")). The carriage
|
156
|
+
return will be replaced by the original text.
|
157
|
+
>
|
158
|
+
autocmd FileType php let b:surround_45 = "<?php \r ?>"
|
159
|
+
<
|
160
|
+
This can be used in a PHP file as in the following example.
|
161
|
+
|
162
|
+
Old text Command New text ~
|
163
|
+
print "Hello *world!" yss- <?php print "Hello world!" ?>
|
164
|
+
|
165
|
+
Additionally, one can use a global variable for globally available
|
166
|
+
replacements.
|
167
|
+
>
|
168
|
+
let g:surround_45 = "<% \r %>"
|
169
|
+
let g:surround_61 = "<%= \r %>"
|
170
|
+
<
|
171
|
+
Advanced, experimental, and subject to change: One can also prompt for
|
172
|
+
replacement text. The syntax for this is to surround the replacement in pairs
|
173
|
+
of low numbered control characters. If this sounds confusing, that's because
|
174
|
+
it is (but it makes the parsing easy). Consider the following example for a
|
175
|
+
LaTeX environment on the "l" replacement.
|
176
|
+
>
|
177
|
+
let g:surround_108 = "\\begin{\1environment: \1}\r\\end{\1\1}"
|
178
|
+
<
|
179
|
+
When this replacement is used, the user is prompted with an "environment: "
|
180
|
+
prompt for input. This input is inserted between each set of \1's.
|
181
|
+
Additional inputs up to \7 can be used.
|
182
|
+
|
183
|
+
Furthermore, one can specify a regular expression substitution to apply.
|
184
|
+
>
|
185
|
+
let g:surround_108 = "\\begin{\1environment: \1}\r\\end{\1\r}.*\r\1}"
|
186
|
+
<
|
187
|
+
This will remove anything after the first } in the input when the text is
|
188
|
+
placed within the \end{} slot. The first \r marks where the pattern begins,
|
189
|
+
and the second where the replacement text begins.
|
190
|
+
|
191
|
+
Here's a second example for creating an HTML <div>. The substitution cleverly
|
192
|
+
prompts for an id, but only adds id="" if it is non-blank. You may have to
|
193
|
+
read this one a few times slowly before you understand it.
|
194
|
+
>
|
195
|
+
let g:surround_{char2nr("d")} = "<div\1id: \r..*\r id=\"&\"\1>\r</div>"
|
196
|
+
<
|
197
|
+
Inputting text replacements is a proof of concept at this point. The ugly,
|
198
|
+
unintuitive interface and the brevity of the documentation reflect this.
|
199
|
+
|
200
|
+
Finally, It is possible to always append a string to surroundings in insert
|
201
|
+
mode (and only insert mode). This is useful with certain plugins and mappings
|
202
|
+
that allow you to jump to such markings.
|
203
|
+
>
|
204
|
+
let g:surround_insert_tail = "<++>"
|
205
|
+
<
|
206
|
+
ISSUES *surround-issues*
|
207
|
+
|
208
|
+
Vim could potentially get confused when deleting/changing occurs at the very
|
209
|
+
end of the line. Please report any repeatable instances of this.
|
210
|
+
|
211
|
+
Do we need to use |inputsave()|/|inputrestore()| with the tag replacement?
|
212
|
+
|
213
|
+
Indenting is handled haphazardly. Need to decide the most appropriate
|
214
|
+
behavior and implement it. Right now one can do :let b:surround_indent = 1
|
215
|
+
(or the global equivalent) to enable automatic re-indenting by Vim via |=|;
|
216
|
+
should this be the default?
|
217
|
+
|
218
|
+
vim:tw=78:ts=8:ft=help:norl:
|