Mercurial > vim
comparison runtime/kde-tips @ 11:4424b47a0797
updated for version 7.0003
author | vimboss |
---|---|
date | Wed, 30 Jun 2004 16:16:41 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
10:4e2284e71352 | 11:4424b47a0797 |
---|---|
1 *vimtips.txt* This file comes from the Vim Online tip database. These tips | |
2 were downloaded on Tue, 24 Sep 2002 15:27:26 -0700 More tips can be found at <A | |
3 HREF="http://vim.sf.net/tip_index.php">http://vim.sf.net/tip_index.php</A><BR> | |
4 A new tip file can be downloaded from <A | |
5 HREF="http://vim.sf.net/tip_download.php">http://vim.sf.net/tip_download.php</A><BR> | |
6 | |
7 Thanks for using vim online. | |
8 | |
9 <Tip category="KVim"> <html><center>the super star</center> <pre> <A | |
10 HREF="http://vim.sf.net/tip_view.php?tip_id=1">http://vim.sf.net/tip_view.php?tip_id=1</A><BR> | |
11 | |
12 When a discussion started about learning vim on the vim list Juergen Salk | |
13 mentioned the "*" key as something that he wished he had know earlier. When | |
14 I read the mail I had to go help on what the heck the "*" did. I also wish | |
15 I had known earlier... | |
16 | |
17 Using the "*" key while in normal mode searches for the word under the cursor. | |
18 | |
19 If that doesn't save you a lot of typing, I don't know what will. | |
20 | |
21 </pre></tip> </html> <Tip category="KVim"> <html><center>easy | |
22 edit of files in the same directory</center> <pre> <A | |
23 HREF="http://vim.sf.net/tip_view.php?tip_id=2">http://vim.sf.net/tip_view.php?tip_id=2</A><BR> | |
24 | |
25 It was often frustrating when I would open a file deep in the code tree and | |
26 then realize I wanted to open another file in that same directory. Douglas | |
27 Potts taught me a nice way to do this. Add the following snipit to your vimrc: | |
28 | |
29 " Edit another file in the same directory as the current file " uses | |
30 expression to extract path from current file's path " (thanks Douglas Potts) | |
31 if has("unix") | |
32 map ,e :e <C-R>=expand("%:p:h") . "/" <CR> | |
33 else | |
34 map ,e :e <C-R>=expand("%:p:h") . "\" <CR> | |
35 endif | |
36 | |
37 Then when you type ,e in normal mode you can use tab to complete to the | |
38 file. You can also expand this to allow for spitting, etc. Very very nice. | |
39 | |
40 </pre></tip> </html> <Tip category="KVim"> <html><center>use | |
41 vim to quickly compile java files</center> <pre> <A | |
42 HREF="http://vim.sf.net/tip_view.php?tip_id=3">http://vim.sf.net/tip_view.php?tip_id=3</A><BR> | |
43 | |
44 For a number of years I used vim on an SGI box. When I left my job at SGI | |
45 I went to a company that developed on PCs. For 2 years I used IDEs. I was | |
46 unhappy. I was frustrated. I couldn't figure out why. (Beyond my machine | |
47 crashing twice a day.) Finally I upgraded to windows 2000 (kind of stable!) and | |
48 started using vim as an IDE. All was good. Here is how you use vim to compile | |
49 your java: | |
50 | |
51 1. While I'm sure this works with javac, javac is slow slow slow. So download | |
52 the Jikes complier first. (Jikes is from ibm, search on google for jikes | |
53 and you will find it..available on most platforms.) | |
54 | |
55 2. Add the following to your vimrc: | |
56 | |
57 set makeprg=jikes -nowarn -Xstdout +E % set | |
58 errorformat=%f:%l:%c:%*\d:%*\d:%*\s%m | |
59 | |
60 3. When you are editing a java file type :make and it will compile the | |
61 current file and jump you to the first error in the file (if any). Read | |
62 ":help quickfix" for how to move between errors. | |
63 | |
64 To setup your classpath environment either launch gvim from a shell that | |
65 has your classpath/path setup or use the "let" command to configure it in | |
66 your vimrc. | |
67 | |
68 </pre></tip> </html> <Tip category="KVim"> | |
69 <html><center>Any word completion</center> <pre> <A | |
70 HREF="http://vim.sf.net/tip_view.php?tip_id=4">http://vim.sf.net/tip_view.php?tip_id=4</A><BR> | |
71 | |
72 Either when programming or writing, I tend to have some identifiers or words | |
73 that I use all the time. By sheer accident, I noticed the 'ctrl-n' command, | |
74 that will attempt to complete the word under the cursor. Hit it once, and it | |
75 will try to complete it with the first match in the current file. If there is | |
76 no match, it will (at least in the case of C code) search through all files | |
77 included from the current one. Repeated invocations will cycle through all | |
78 found matches. | |
79 | |
80 </pre></tip> </html> <Tip category="KVim"> | |
81 <html><center>Quickly searching for a word</center> <pre> <A | |
82 HREF="http://vim.sf.net/tip_view.php?tip_id=5">http://vim.sf.net/tip_view.php?tip_id=5</A><BR> | |
83 | |
84 To search for a word under the cursor in the current file you can use either | |
85 the "*" or "#" keys. | |
86 | |
87 The "*" key will search for the word from the current cursor position to | |
88 the end of the file. The "#" key will search for the word from the current | |
89 cursor position to the top of the file. | |
90 | |
91 Note that the above two keys will search for the whole word and not the | |
92 partial word. This is equivalent to using the <word> pattern in the | |
93 search commands (/ and ?). | |
94 | |
95 To search for partial matches, you can use the "g*" and "g#" key sequence. | |
96 | |
97 You can also use the mouse to search for a word. This will only work in | |
98 the GUI version of VIM (gvim) or a console version of VIM in an xterm which | |
99 accepts a mouse. Also, the 'mousemodel' should be set to 'extend'. Add the | |
100 following line to your .vimrc: | |
101 | |
102 set mousemodel=extend | |
103 | |
104 To search for a word under the cursor from the current cursor position to | |
105 the end of the file, press the shift key and click on the word using the | |
106 left mouse button. To search in the opposite direction, press the shift | |
107 key and click on the word using the the right mouse button. | |
108 | |
109 To get more help on these, use | |
110 | |
111 :help * :help # :help g* :help g# :help <S-LeftMouse> :help | |
112 <S-RightMouse> | |
113 | |
114 </pre></tip> </html> <Tip category="KVim"> | |
115 <html><center>Using the % key</center> <pre> <A | |
116 HREF="http://vim.sf.net/tip_view.php?tip_id=6">http://vim.sf.net/tip_view.php?tip_id=6</A><BR> | |
117 | |
118 The % key can be used | |
119 | |
120 1. To jump to a matching opening or closing parenthesis, square | |
121 bracket or a curly brace i.e. ([{}]) | |
122 2. To jump to start or end of a C-style comment /* */. 3. To jump to a | |
123 matching #if, #ifdef, #else, #elif, #endif C | |
124 preprocessor conditionals. | |
125 | |
126 To get more information about this, do | |
127 | |
128 :help % | |
129 | |
130 The % key can be extended to support other matching pairs by modifying the | |
131 "matchpairs" option. Read the help on | |
132 | |
133 :help matchpairs | |
134 | |
135 </pre></tip> </html> <Tip category="KVim"> <html><center>Jumping | |
136 to the start and end of a code block</center> <pre> <A | |
137 HREF="http://vim.sf.net/tip_view.php?tip_id=7">http://vim.sf.net/tip_view.php?tip_id=7</A><BR> | |
138 | |
139 To jump to the beginning of a C code block (while, switch, if etc), use the | |
140 [{ command. | |
141 | |
142 To jump to the end of a C code block (while, switch, if etc), use the ]} | |
143 command. | |
144 | |
145 The above two commands will work from anywhere inside the code block. | |
146 | |
147 To jump to the beginning of a parenthesis use the [( command. | |
148 | |
149 To jump to the end of a parenthesis use the ]) command. | |
150 | |
151 To get more help on these commands, do | |
152 | |
153 :help [{ :help ]} :help [( :help ]) | |
154 | |
155 </pre></tip> </html> <Tip category="KVim"> <html><center>Jumping | |
156 to the declaration of a local/global variable</center> <pre> <A | |
157 HREF="http://vim.sf.net/tip_view.php?tip_id=8">http://vim.sf.net/tip_view.php?tip_id=8</A><BR> | |
158 | |
159 'gd' command: To jump to the declaration of a local variable in a C program, | |
160 position the cursor on the name of the variable and use the gd command. | |
161 | |
162 'gD' command: To jump to the declaration of a global variable in a C program, | |
163 position the cursor on the name of the variable and use the gD command. | |
164 | |
165 </pre></tip> </html> <Tip category="KVim"> <html><center>Displaying | |
166 a variable/macro definition</center> <pre> <A | |
167 HREF="http://vim.sf.net/tip_view.php?tip_id=9">http://vim.sf.net/tip_view.php?tip_id=9</A><BR> | |
168 | |
169 To display the definition of a variable, place the cursor on the variable | |
170 and use the [i command. To display a macro definition, place the cursor on | |
171 the macro name and use the [d command. Note that these commands will work | |
172 most of the time (not all the time). To get more help on these commands, use | |
173 | |
174 :help [i :help [d | |
175 | |
176 </pre></tip> </html> <Tip category="KVim"> <html><center>Jumping | |
177 to previosuly visited locations in a file</center> <pre> <A | |
178 HREF="http://vim.sf.net/tip_view.php?tip_id=10">http://vim.sf.net/tip_view.php?tip_id=10</A><BR> | |
179 | |
180 Vim remembers all the locations visited by you in a file in a session. | |
181 You can jump to the older locations by pressing the Ctrl-O key. You can | |
182 jump to the newer locations by pressing the Ctrl-I or the <Tab> key. | |
183 | |
184 To get more help on these keys, use | |
185 | |
186 :help CTRL-O :help CTRL-I :help jump-motions | |
187 | |
188 </pre></tip> </html> <Tip category="KVim"> <html><center>Completing | |
189 words quicky in insert mode</center> <pre> <A | |
190 HREF="http://vim.sf.net/tip_view.php?tip_id=11">http://vim.sf.net/tip_view.php?tip_id=11</A><BR> | |
191 | |
192 In Insert mode, press the Ctrl-p or Ctrl-n key to complete part of a word | |
193 that has been typed. | |
194 | |
195 This is useful while typing C programs to complete long variable and | |
196 function names. This also helps in avoiding typing mistakes. | |
197 | |
198 Note that using the 'complete' option, you can complete keywords defined in | |
199 one of the include files, tag file, etc. | |
200 | |
201 To get more help on this, use | |
202 | |
203 :help i_Ctrl-N :help i_Ctrl-P :help ins-completion :help complete | |
204 | |
205 </pre></tip> </html> <Tip category="KVim"> | |
206 <html><center>Converting tabs to spaces</center> <pre> <A | |
207 HREF="http://vim.sf.net/tip_view.php?tip_id=12">http://vim.sf.net/tip_view.php?tip_id=12</A><BR> | |
208 | |
209 To insert space characters whenever the tab key is pressed, set the | |
210 'expandtab' option: | |
211 | |
212 set expandtab | |
213 | |
214 With this option set, if you want to enter a real tab character use | |
215 Ctrl-V<Tab> key sequence. | |
216 | |
217 To control the number of space characters that will be inserted when the tab | |
218 key is pressed, set the 'tabstop' option. For example, to insert 4 spaces | |
219 for a tab, use: | |
220 | |
221 set tabstop=4 | |
222 | |
223 After the 'expandtab' option is set, all the new tab characters entered will | |
224 be changed to spaces. This will not affect the existing tab characters. | |
225 To change all the existing tab characters to match the current tab settings, | |
226 use | |
227 | |
228 :retab | |
229 | |
230 To change the number of space characters inserted for indentation, use the | |
231 'shiftwidth' option: | |
232 | |
233 set shiftwidth=4 | |
234 | |
235 For example, to get the following coding style, | |
236 - No tabs in the source file - All tab characters are 4 space | |
237 characters | |
238 | |
239 use the following set of options: | |
240 | |
241 set tabstop=4 set shiftwidth=4 set expandtab | |
242 | |
243 Add the above settings to your .vimrc file. | |
244 | |
245 To get more help on these options, use :help tabstop :help shiftwidth :help | |
246 expandtab | |
247 | |
248 </pre></tip> </html> <Tip category="KVim"> | |
249 <html><center>Incremental search</center> <pre> <A | |
250 HREF="http://vim.sf.net/tip_view.php?tip_id=13">http://vim.sf.net/tip_view.php?tip_id=13</A><BR> | |
251 | |
252 To move the cursor to the matched string, while typing the search string, | |
253 set the following option in the .vimrc file: | |
254 | |
255 set incsearch | |
256 | |
257 You can complete the search by pressing the Enter key. To cancel the search, | |
258 press the escape key. | |
259 | |
260 </pre></tip> </html> <Tip category="KVim"> <html><center>Highlighting | |
261 all the search pattern matches</center> <pre> <A | |
262 HREF="http://vim.sf.net/tip_view.php?tip_id=14">http://vim.sf.net/tip_view.php?tip_id=14</A><BR> | |
263 | |
264 To highlight all the search pattern matches in a file set the following option: | |
265 | |
266 :set hlsearch | |
267 | |
268 After this option is set, if you search for a pattern, all the matches in | |
269 the file will be highlighted in yellow. | |
270 | |
271 To disable the highlighting temporarily, use the command | |
272 | |
273 :nohlsearch | |
274 | |
275 This command will remove the highlighting for the current search. | |
276 The highlighting will come back for the next search. | |
277 | |
278 To disable the highlighting completely, set the following option: | |
279 | |
280 :set nohlsearch | |
281 | |
282 By default, the hlsearch option is turned off. | |
283 | |
284 To get more help on this option, use | |
285 | |
286 :help 'hlsearch' :help :nohlsearch | |
287 | |
288 </pre></tip> </html> <Tip category="KVim"> | |
289 <html><center>Displaying status line always</center> <pre> <A | |
290 HREF="http://vim.sf.net/tip_view.php?tip_id=15">http://vim.sf.net/tip_view.php?tip_id=15</A><BR> | |
291 | |
292 To display the status line always, set the following option in your .vimrc | |
293 file: | |
294 | |
295 set laststatus=2 | |
296 | |
297 The advantage of having the status line displayed always is, you can see | |
298 the current mode, file name, file status, ruler, etc. | |
299 | |
300 To get more help on this, use | |
301 | |
302 :help laststatus | |
303 | |
304 </pre></tip> </html> <Tip category="KVim"> <html><center>Avoiding | |
305 the "Hit ENTER to continue" prompts</center> <pre> <A | |
306 HREF="http://vim.sf.net/tip_view.php?tip_id=16">http://vim.sf.net/tip_view.php?tip_id=16</A><BR> | |
307 | |
308 To avoid the "Hit ENTER to continue" prompt, use the 'shortmess' option. | |
309 Add the following line to your .vimrc file: | |
310 | |
311 set shortmess=a | |
312 | |
313 Also, you can increase the height of the command line to 2 | |
314 | |
315 set cmdheight=2 | |
316 | |
317 The default command height is 1. | |
318 | |
319 To get more help on these options, use | |
320 | |
321 :help hit-enter :help shortmess :help cmdheight | |
322 | |
323 </pre></tip> </html> <Tip category="KVim"> <html><center>Erasing | |
324 previosuly entered characters in insert mode</center> <pre> <A | |
325 HREF="http://vim.sf.net/tip_view.php?tip_id=17">http://vim.sf.net/tip_view.php?tip_id=17</A><BR> | |
326 | |
327 In insert mode, to erase previously entered characters, set the following | |
328 option: | |
329 | |
330 set backspace=2 | |
331 | |
332 By default, this option is empty. If this option is empty, in insert mode, | |
333 you can not erase characters entered before this insert mode started. | |
334 This is the standard Vi behavior. | |
335 | |
336 To get more help on this, use | |
337 | |
338 :help 'backspace' | |
339 | |
340 </pre></tip> </html> <Tip category="KVim"> | |
341 <html><center>Cleanup your HTML</center> <pre> <A | |
342 HREF="http://vim.sf.net/tip_view.php?tip_id=18">http://vim.sf.net/tip_view.php?tip_id=18</A><BR> | |
343 | |
344 From Johannes Zellner on the vim list: | |
345 | |
346 You can use vim's makeprg and equalprg to clean up HTML. First download | |
347 html tidy from <A HREF="http://www.w3.org/People/Raggett/tidy/. Then use | |
348 the following commands.">http://www.w3.org/People/Raggett/tidy/. Then use | |
349 the following commands.</A><BR> | |
350 | |
351 vim6? exe 'setlocal equalprg=tidy -quiet -f '.&errorfile setlocal makeprg=tidy | |
352 -quiet -e % | |
353 | |
354 vim5? exe 'set equalprg=tidy -quiet -f '.&errorfile set makeprg=tidy -quiet | |
355 -e % | |
356 | |
357 At this point you can use make to clean up the full file or you can use = | |
358 to clean up sections. | |
359 | |
360 :help = :help equalprg :help makeprg | |
361 | |
362 </pre></tip> </html> <Tip category="KVim"> | |
363 <html><center>line numbers...</center> <pre> <A | |
364 HREF="http://vim.sf.net/tip_view.php?tip_id=19">http://vim.sf.net/tip_view.php?tip_id=19</A><BR> | |
365 | |
366 I have started doing all my code reviews on a laptop because of the number | |
367 command. | |
368 | |
369 :set number will put line numbers along the left side of a window | |
370 | |
371 :help number | |
372 | |
373 </pre></tip> </html> <Tip category="KVim"> <html><center>Are *.swp | |
374 and *~ files littering your working directory?</center> <pre> <A | |
375 HREF="http://vim.sf.net/tip_view.php?tip_id=20">http://vim.sf.net/tip_view.php?tip_id=20</A><BR> | |
376 | |
377 Have you ever been frustrated at swap files and backups cluttering up your | |
378 working directory? | |
379 | |
380 Untidy: | |
381 ons.txt ons.txt~ README README~ tester.py tester.py~ | |
382 | |
383 Here are a couple of options that can help: | |
384 | |
385 set backupdir=./.backup,.,/tmp set directory=.,./.backup,/tmp | |
386 | |
387 This way, if you want your backups to be neatly grouped, just create | |
388 a directory called '.backup' in your working directory. Vim will stash | |
389 backups there. The 'directory' option controls where swap files go. If your | |
390 working directory is not writable, Vim will put the swap file in one of the | |
391 specified places. | |
392 | |
393 </pre></tip> </html> <Tip category="KVim"> | |
394 <html><center>easy pasting to windows apps</center> <pre> <A | |
395 HREF="http://vim.sf.net/tip_view.php?tip_id=21">http://vim.sf.net/tip_view.php?tip_id=21</A><BR> | |
396 | |
397 In Vim, the unnamed register is the " register, and the Windows Clipboard is | |
398 the * register. This means that if you yank something, you have to yank it to | |
399 the * register if you want to paste it into a Windows app. If this is too much | |
400 trouble, set the 'clipboard' option to 'unnamed'. Then you always yank to *. | |
401 | |
402 So pasting to windows apps doesn't require prefixing "* : | |
403 | |
404 set clipboard=unnamed | |
405 | |
406 </pre></tip> </html> <Tip category="KVim"> <html><center>handle | |
407 common typos for :commands</center> <pre> <A | |
408 HREF="http://vim.sf.net/tip_view.php?tip_id=22">http://vim.sf.net/tip_view.php?tip_id=22</A><BR> | |
409 | |
410 I frequently hold the shift key for too long when typing, for instance :wq, | |
411 and end up with :Wq. Vim then whines "Not an editor command: Wq" | |
412 | |
413 In my .vimrc, I have taught vim my common typos: command! Q quit command! W | |
414 write command! Wq wq " this one won't work, because :X is already a built-in | |
415 command command! X xit | |
416 | |
417 </pre></tip> </html> <Tip category="KVim"> | |
418 <html><center>Vim xterm title</center> <pre> <A | |
419 HREF="http://vim.sf.net/tip_view.php?tip_id=23">http://vim.sf.net/tip_view.php?tip_id=23</A><BR> | |
420 | |
421 Check out your .vimrc. If 'set notitle' is an entry, comment it out with | |
422 a quotation mark ("). Now your xterm should inherit the title from Vim. | |
423 e.g. 'Vim - ~/.vimrc'. This can be quite nice when programming and editing | |
424 lots of files at the same time. by [jonasbn@wanadoo.dk] | |
425 | |
426 </pre></tip> </html> <Tip category="KVim"> <html><center>changing | |
427 the default syntax highlighting</center> <pre> <A | |
428 HREF="http://vim.sf.net/tip_view.php?tip_id=24">http://vim.sf.net/tip_view.php?tip_id=24</A><BR> | |
429 | |
430 Here are some pointers to the vim documentation. Notice that the | |
431 mechanism is different in vim 6.0 and vim 5.x. | |
432 | |
433 1. I want *.foo files to be highlighted like HTML files. | |
434 | |
435 :help new-filetype <A | |
436 HREF="http://www.vim.org/html/autocmd.html#new-filetype">http://www.vim.org/html/autocmd.html#new-filetype</A><BR> | |
437 | |
438 2. I want to define a syntax file for *.bar files. Read the above and also | |
439 | |
440 :help mysyntaxfile <A | |
441 HREF="http://www.vim.org/html/syntax.html#mysyntaxfile">http://www.vim.org/html/syntax.html#mysyntaxfile</A><BR> | |
442 | |
443 3. I want to make a few changes to the existing syntax highlighting. | |
444 Depending on the x in 5.x, either read the above and page down a few screens, | |
445 or you may be able to skip right to | |
446 | |
447 :help mysyntaxfile-add <A | |
448 HREF="http://www.vim.org/html/syntax.html#mysyntaxfile-add">http://www.vim.org/html/syntax.html#mysyntaxfile-add</A><BR> | |
449 | |
450 4. I want to change some of the colors from their defaults. Again, read | |
451 | |
452 :help mysyntaxfile <A | |
453 HREF="http://www.vim.org/html/syntax.html#mysyntaxfile">http://www.vim.org/html/syntax.html#mysyntaxfile</A><BR> | |
454 | |
455 </pre></tip> </html> <Tip category="KVim"> <html><center>color | |
456 highlighting on telnet (esp w/ SecureCRT)</center> <pre> <A | |
457 HREF="http://vim.sf.net/tip_view.php?tip_id=25">http://vim.sf.net/tip_view.php?tip_id=25</A><BR> | |
458 | |
459 The following settings in .vimrc will enable color highlighting when using | |
460 SecureCRT and may work on other telnet packages. The terminal type should | |
461 be selected as ANSI and color enabled. | |
462 | |
463 if !has("gui_running") set t_Co=8 set t_Sf=^[[3%p1%dm set t_Sb=^[[4%p1%dm endif | |
464 | |
465 The ^[ is entered as "<ctrl-v><esc>" | |
466 | |
467 </pre></tip> </html> <Tip category="KVim"> <html><center>Getting | |
468 rid of ^M - mixing dos and unix</center> <pre> <A | |
469 HREF="http://vim.sf.net/tip_view.php?tip_id=26">http://vim.sf.net/tip_view.php?tip_id=26</A><BR> | |
470 | |
471 If you work in a mixed environment you will often open files that have ^M's | |
472 in them. An example would be this: | |
473 | |
474 ------------------------------------------------------------------ | |
475 import java.util.Hashtable; ^M import java.util.Properties; ^Mimport | |
476 java.io.IOException; import org.xml.sax.AttributeList; ^M import | |
477 org.xml.sax.HandlerBase; ^Mimport org.xml.sax.SAXException; | |
478 | |
479 /**^M | |
480 * XMLHandler: This class parses the elements contained^M * within a XML | |
481 message and builds a Hashtable^M | |
482 | |
483 [snip] ------------------------------------------------------------------ | |
484 | |
485 Notice that some programs are not consistent in the way they insert the line | |
486 breaks so you end up with some lines that have both a carrage return and a | |
487 ^M and some lines that have a ^M and no carrage return (and so blend into | |
488 one). There are two steps to clean this up. | |
489 | |
490 1. replace all extraneous ^M: | |
491 | |
492 :%s/^M$//g | |
493 | |
494 BE SURE YOU MAKE the ^M USING "CTRL-V CTRL-M" NOT BY TYPING "CARROT M"! This | |
495 expression will replace all the ^M's that have carriage returns after them | |
496 with nothing. (The dollar ties the search to the end of a line) | |
497 | |
498 2. replace all ^M's that need to have carriage returns: | |
499 | |
500 :%s/^M//g | |
501 | |
502 Once again: BE SURE YOU MAKE the ^M USING "CTRL-V CTRL-M" NOT BY TYPING | |
503 "CARROT M"! This expression will replace all the ^M's that didn't have | |
504 carriage returns after them with a carriage return. | |
505 | |
506 Voila! Clean file. Map this to something if you do it frequently. | |
507 | |
508 :help ffs - for more info on file formats | |
509 | |
510 thanks to jonathan merz, douglas potts, and benji fisher | |
511 | |
512 </pre></tip> </html> <Tip category="KVim"> | |
513 <html><center>Convert hex to dec</center> <pre> <A | |
514 HREF="http://vim.sf.net/tip_view.php?tip_id=27">http://vim.sf.net/tip_view.php?tip_id=27</A><BR> | |
515 | |
516 when you check the output of objdump, you'll confused by the $0xFFFFFFc | |
517 operand, this function translate the hexcamal to decimal. function! Hex2Dec() | |
518 let lstr = getline(".") let hexstr = matchstr(lstr, '0x[a-f0-9]+') | |
519 while hexstr != "" | |
520 let hexstr = hexstr + 0 exe 's#0x[a-f0-9]+#'.hexstr."#" let lstr = | |
521 substitute(lstr, '0x[a-f0-9]+', hexstr, "") let hexstr = matchstr(lstr, | |
522 '0x[a-f0-9]+') | |
523 endwhile | |
524 endfunction usage: 5,8call Hex2Dec() | |
525 | |
526 </pre></tip> </html> <Tip category="KVim"> <html><center>add a line-number | |
527 to every line without cat or awk alike utilities.</center> <pre> <A | |
528 HREF="http://vim.sf.net/tip_view.php?tip_id=28">http://vim.sf.net/tip_view.php?tip_id=28</A><BR> | |
529 | |
530 With Unix-like environment, you can use cat or awk to generate a line number | |
531 easily, because vim has a friendly interface with shell, so everything work | |
532 in vim as well as it does in shell. :%!call -n or :%!awk '{print NR,$0}' | |
533 | |
534 But, if you use vim in MS-DOS, of win9x, win2000, you loss these tookit. | |
535 here is a very simple way to archive this only by vim: fu! LineIt() | |
536 exe ":s/^/".line(".")."/" | |
537 endf | |
538 | |
539 Well, a sequence composed with alphabet is as easy as above: | |
540 exe "s/^/".nr2char(line("."))."/" | |
541 | |
542 </pre></tip> </html> <Tip category="KVim"> <html><center>reverse | |
543 all the line with only 7 keystroke in vim</center> <pre> <A | |
544 HREF="http://vim.sf.net/tip_view.php?tip_id=29">http://vim.sf.net/tip_view.php?tip_id=29</A><BR> | |
545 | |
546 :g/^/m0 well, 1. : bring you to command-line mode(also known as ex-mode) | |
547 from normal-mode(also known as command mode). 2. g means you'll take an | |
548 action through the whole file, generally perform a search, `v' also perform | |
549 a search but it match the line not match the canonical expression. 3. / | |
550 begins the regular express 4. ^ is a special character respect the start | |
551 of a line. 5. the second / ends the regular express and indicate that the | |
552 remains is action to do. 6. m means move, `t` and `co' for copy, `d' for | |
553 delete 7. 0 is the destination line. | |
554 | |
555 you can use :g/regexp/t$ to filter all lines and pick the match line together | |
556 and copy them to the end of the buffer or :g/regexp/y A to put them into a | |
557 register(not eax, ebx...) | |
558 | |
559 </pre></tip> </html> <Tip category="KVim"> | |
560 <html><center>Increasing or decreasing numbers</center> <pre> <A | |
561 HREF="http://vim.sf.net/tip_view.php?tip_id=30">http://vim.sf.net/tip_view.php?tip_id=30</A><BR> | |
562 | |
563 To increase a number under or nearest to the right of the cursor, go to | |
564 Normal mode and type: | |
565 Ctrl-A | |
566 | |
567 To decrease, type: | |
568 Ctrl-X | |
569 | |
570 Using this in a macro simplifies generating number sequences a lot. | |
571 | |
572 </pre></tip> </html> <Tip category="KVim"> | |
573 <html><center>Find and Replace</center> <pre> <A | |
574 HREF="http://vim.sf.net/tip_view.php?tip_id=31">http://vim.sf.net/tip_view.php?tip_id=31</A><BR> | |
575 | |
576 To find and replace one or more occurences of a given text pattern with a | |
577 new text string, use the s[ubstitute] command. | |
578 | |
579 There are a variety of options, but these are what you most probably want: | |
580 | |
581 :%s/foo/bar/g find each occurance of 'foo' and replace it with | |
582 'bar' without asking for confirmation | |
583 | |
584 :%s/foo/bar/gc find each occurance of 'foo' and replace it with | |
585 'bar' asking for confirmation first | |
586 | |
587 :%s/<foo>/bar/gc find (match exact word only) and replace each | |
588 occurance of 'foo' with 'bar' | |
589 | |
590 :%s/foo/bar/gci find (case insensitive) and replace each occurance of | |
591 'foo' with 'bar' | |
592 | |
593 :%s/foo/bar/gcI find (case sensitive) and replace each occurance of | |
594 'foo' with 'bar' | |
595 | |
596 NB: Without the 'g' flag, replacement occurs only for the first occurrence | |
597 in each line. | |
598 | |
599 For a full description and some more interesting examples of the substitute | |
600 command refer to | |
601 | |
602 :help substitute | |
603 | |
604 See also: | |
605 | |
606 :help cmdline-ranges :help pattern :help gdefault | |
607 | |
608 </pre></tip> </html> <Tip category="KVim"> <html><center>Write | |
609 your own vim function(scripts)</center> <pre> <A | |
610 HREF="http://vim.sf.net/tip_view.php?tip_id=32">http://vim.sf.net/tip_view.php?tip_id=32</A><BR> | |
611 | |
612 compare to C and shell(bash), herein is some vim specifics about vim-script: | |
613 1. A function name must be capitalized. | |
614 hex2dec is invalid Hex2dec is valid while in c and shell(bash), both | |
615 lowercase and uppercase is allowed. | |
616 2. how to reference the parameters | |
617 fu! Hex2dec(var1, var2) | |
618 let str=a:var1 let str2=a:var2 | |
619 you must prefix the parameter name with "a:", and a:var1 itself is read-only | |
620 in c, you reference the parameter directly and the parameter is writable. | |
621 3. how to implement variable parameter | |
622 fu! Hex2dec(fixpara, ...) | |
623 a:0 is the real number of the variable parameter when you invoke the | |
624 function, with :Hex2dec("asdf", 4,5,6), a:0=3, and a:1=4 a:2=5 a:3=6 | |
625 you can combine "a:" and the number to get the value while i<a:0 | |
626 exe "let num=a:".i let i=i+1 | |
627 endwhile in c, the function get the real number by checking the additional | |
628 parameter such as printf family, or by checking the special value such | |
629 as NULL | |
630 4. where is the vim-library | |
631 yes, vim has its own function-library, just like *.a in c :help functions | |
632 5. can I use += or ++ operator? | |
633 Nop, += and ++ (and -=, -- and so on)operator gone away in vim. | |
634 6. How can I assign a value to a variables and fetch its value? | |
635 let var_Name=value let var1=var2 like it does in c, except you must use | |
636 let keyword | |
637 7. Can I use any ex-mode command in a function? | |
638 As I know, yes, just use it directly, as if every line you type appears | |
639 in the familar : | |
640 8. Can I call a function recurse? | |
641 Yes, but use it carefully to avoid infinte call. | |
642 9. Can I call another function in a function? | |
643 Course, like C does. | |
644 10. Must I compile the function? | |
645 No, you needn't and you can't, just :so script_name, after this you can | |
646 call the function freely. | |
647 11. Is it has integer and char or float data type? | |
648 No, like perl, vim script justify the variable type depend upon the context | |
649 :let a=1 :let a=a."asdf" :echo a you'll get `1asdf' :let a=1 :let a=a+2 | |
650 :echo a you'll get 3 But it differs from perl. | |
651 12. Must I append a `;' in every statement? | |
652 No, never do that. ; is required in C, and optional in shell for each | |
653 statement in a alone line. But is forbidden in vim. if you want combine | |
654 servals statement in one single line, use `|'. Take your mind that every | |
655 statement appears in function should be valid in ex-mode(except for some | |
656 special statement). | |
657 | |
658 </pre></tip> </html> <Tip category="KVim"> <html><center>toggle | |
659 off the line-number when enter on-line help</center> <pre> <A | |
660 HREF="http://vim.sf.net/tip_view.php?tip_id=33">http://vim.sf.net/tip_view.php?tip_id=33</A><BR> | |
661 | |
662 I like the line-number for myself editing. But I hate it in on-line help | |
663 page because it force the screen wrapped. :au filetype help :se nonu | |
664 | |
665 </pre></tip> </html> <Tip category="KVim"> <html><center>control | |
666 the position of the new window</center> <pre> <A | |
667 HREF="http://vim.sf.net/tip_view.php?tip_id=34">http://vim.sf.net/tip_view.php?tip_id=34</A><BR> | |
668 | |
669 :se splitbelow make the new window appears below the current window. | |
670 :se splitright make the new window appears in right.(only 6.0 version can | |
671 do a vsplit) | |
672 | |
673 </pre></tip> </html> <Tip category="KVim"> <html><center>translate | |
674 // style comment to /* */and vice vesa</center> <pre> <A | |
675 HREF="http://vim.sf.net/tip_view.php?tip_id=35">http://vim.sf.net/tip_view.php?tip_id=35</A><BR> | |
676 | |
677 the `|' concatenate servals ex-command in one line. It's the key to translate | |
678 // style comments to /* */ style :g#^s{-}//#s##/*# | s#$#*/# | |
679 | |
680 the `|' keep the current line matchs ^s{-}// to perform s#$#*/ | |
681 | |
682 /* ... */ ---> //style :g#/*(.{-})*/#//1# | |
683 | |
684 /* .... | |
685 .... ..... | |
686 */ =====> //...... //...... //...... style: ? Anyone implement it? | |
687 | |
688 </pre></tip> </html> <Tip category="KVim"> | |
689 <html><center>Using Gnu-info help in vim</center> <pre> <A | |
690 HREF="http://vim.sf.net/tip_view.php?tip_id=36">http://vim.sf.net/tip_view.php?tip_id=36</A><BR> | |
691 | |
692 K in normal bring you the man page about the keyword under current cursor. | |
693 :nnoremap <F1> :exe ":!info ".expand("<cword>") Now press F1 | |
694 while the cursor is hold by a keyword such as printf will bring you to | |
695 Gnu-info help page :h <F1> :h nnoremap | |
696 | |
697 </pre></tip> </html> <Tip category="KVim"> <html><center>The | |
698 basic operation about vim-boolean optionals</center> <pre> <A | |
699 HREF="http://vim.sf.net/tip_view.php?tip_id=37">http://vim.sf.net/tip_view.php?tip_id=37</A><BR> | |
700 | |
701 :set number switch the number on :set nonumber switch it off :set invnumber | |
702 or :set number! switch it inverse against the current setting :set number& | |
703 get the default value vim assums. | |
704 | |
705 replace number with any legal vim-boolean optionals, they all works well. | |
706 for vim-non-boolean optionals :set optional& also works properly. | |
707 | |
708 </pre></tip> </html> <Tip category="KVim"> <html><center>Cursor | |
709 one line at a time when :set wrap</center> <pre> <A | |
710 HREF="http://vim.sf.net/tip_view.php?tip_id=38">http://vim.sf.net/tip_view.php?tip_id=38</A><BR> | |
711 | |
712 If your tierd of the cursor jumping past 5 lines when :set wrap then add | |
713 these mappings to you vimrc file. | |
714 | |
715 nnoremap j gj nnoremap k gk vnoremap j gj vnoremap k gk nnoremap <Down> | |
716 gj nnoremap <Up> gk vnoremap <Down> gj vnoremap <Up> | |
717 gk inoremap <Down> <C-o>gj inoremap <Up> <C-o>gk | |
718 | |
719 What they do is remap the cursor keys to use there `g' equvilant. See :help gj | |
720 | |
721 </pre></tip> </html> <Tip category="KVim"> | |
722 <html><center>Undo and Redo</center> <pre> <A | |
723 HREF="http://vim.sf.net/tip_view.php?tip_id=39">http://vim.sf.net/tip_view.php?tip_id=39</A><BR> | |
724 | |
725 To undo recent changes, use the u[ndo] command: | |
726 | |
727 u undo last change (can be repeated to undo preceding commands) | |
728 U return the line to its original state (undo all changes in | |
729 current line) CTRL-R Redo changes which were undone (undo the undo's). | |
730 | |
731 For a full description of the undo/redo commands refer to | |
732 | |
733 :help undo | |
734 | |
735 </pre></tip> </html> <Tip category="KVim"> | |
736 <html><center>Insert a file</center> <pre> <A | |
737 HREF="http://vim.sf.net/tip_view.php?tip_id=40">http://vim.sf.net/tip_view.php?tip_id=40</A><BR> | |
738 | |
739 To insert the contents of a file (or the output of a system command) into | |
740 the current buffer, use the r[ead] command: | |
741 | |
742 Examples: | |
743 | |
744 :r foo.txt inserts the file foo.txt below the cursor | |
745 | |
746 :0r foo.txt inserts the file foo.txt above the first line | |
747 | |
748 :r !ls inserts a listing of your directory below the cursor | |
749 | |
750 :$r !pwd inserts the current working directory below the last line | |
751 | |
752 For more information about the r[ead] command refer to: | |
753 | |
754 :help read | |
755 | |
756 See also: | |
757 | |
758 :help cmdline-ranges :help !cmd | |
759 | |
760 </pre></tip> </html> <Tip category="KVim"> <html><center>Command-history | |
761 facilities for Oracle/sqlplus user</center> <pre> <A | |
762 HREF="http://vim.sf.net/tip_view.php?tip_id=41">http://vim.sf.net/tip_view.php?tip_id=41</A><BR> | |
763 | |
764 First of all, thanks Benji fisher, Stefan Roemer... | |
765 and others in vim@vim.org which spend much time to answer questions, | |
766 sometimes foolish question asked by someone like me. Without their I can't | |
767 get the final solution for my sqlplus work descripted follows. | |
768 As Oracle user known, sqlplus has a very bad | |
769 command-line edition environment. It has no command-history, don't support | |
770 most of getline facilities. which MySQL and shell does it well. Even Microsoft | |
771 recogonize this point. In Windows2000, doskey is installed by default. | |
772 Below is my vim-solution to sqlplus, which | |
773 record the command-history when you use edit(sqlplus builtin command) to | |
774 open the editor specified by EDITOR environment variable. It saves the SQL | |
775 statement into a standalone file such as .sqlplus.history | |
776 Every time you open the file | |
777 afiedt.buf(sqlplus's default command-buffer file), you get two splited windows, | |
778 the buffer above is afiedt.buf, the buffer below is .sqlplus.history, you | |
779 can see every SQL statement in the windows. If you want to use SQL statement | |
780 in line 5 to replace | |
781 the current command-buffer, just press 5K, then | |
782 :xa to back to you sqlplus. and use / to repeat the command | |
783 saved in command-buffer file called afiedt.buf by default. | |
784 It can't process multi-line SQL statement convinencely. | |
785 Todo this, just use you favorite vim trick to do that: | |
786 fu! VimSQL() | |
787 nnoremap <C-K> :<C-U> | |
788 exe "let linenum=".v:count<CR>:1,$-1d<CR><C-W>j:exe | |
789 lin enum."y"<CR><C-W>kP | |
790 let linenum=line("$") 1,$-1w! >> ~/.sqlplus.history e | |
791 ~/.sqlplus.history execute ":$-".(linenum-1).",$m0" %!uniq if | |
792 line("$")>100 | |
793 101,$d | |
794 endif b# set splitbelow sp ~/.sqlplus.history au! BufEnter afiedt.buf | |
795 endf au BufEnter afiedt.buf call VimSQL() | |
796 | |
797 </pre></tip> </html> <Tip category="KVim"> | |
798 <html><center>Using marks</center> <pre> <A | |
799 HREF="http://vim.sf.net/tip_view.php?tip_id=42">http://vim.sf.net/tip_view.php?tip_id=42</A><BR> | |
800 | |
801 To mark one or more positions in a file, use the m[ark] command. | |
802 | |
803 Examples: | |
804 | |
805 ma - set current cursor location as mark a | |
806 | |
807 'a - jump to beginning of line of mark a | |
808 | |
809 `a - jump to postition of mark a | |
810 | |
811 d'a - delete from current line to line of mark a | |
812 | |
813 d`a - delete from current cursor position to mark a | |
814 | |
815 c'a - change text from current line to line of mark a | |
816 | |
817 y`a - yank text to unnamed buffer from cursor to mark a | |
818 | |
819 :marks - list all the current marks | |
820 | |
821 NB: Lowercase marks (a-z) are valid within one file. Uppercase marks (A-Z), | |
822 also called file marks, are valid between files. | |
823 | |
824 For a detailed description of the m[ark] command refer to | |
825 | |
826 :help mark | |
827 | |
828 See also: | |
829 | |
830 :help various-motions | |
831 | |
832 </pre></tip> </html> <Tip category="KVim"> | |
833 <html><center>Using abbreviations</center> <pre> <A | |
834 HREF="http://vim.sf.net/tip_view.php?tip_id=43">http://vim.sf.net/tip_view.php?tip_id=43</A><BR> | |
835 | |
836 To define abbreviations, use the ab[breviate] command. | |
837 | |
838 Examples: | |
839 | |
840 :ab rtfm read the fine manual - Whenever you type 'rtfm' followed by a | |
841 <space> (or <esc> or <cr>) vim | |
842 will expand this to 'read the fine manual'. | |
843 | |
844 :ab - list all defined abbreviations | |
845 | |
846 :una[bbreviate] rtfm - remove 'rtfm' from the list of abbreviations | |
847 | |
848 :abc[lear] - remove all abbreviations | |
849 | |
850 NB: To avoid expansion in insert mode, type CTRL-V after the last character | |
851 of the abbreviation. | |
852 | |
853 For a detailed description of the ab[breviate] command and some more examples | |
854 refer to | |
855 | |
856 :help abbreviations | |
857 | |
858 </pre></tip> </html> <Tip category="KVim"> | |
859 <html><center>Repeat last changes</center> <pre> <A | |
860 HREF="http://vim.sf.net/tip_view.php?tip_id=44">http://vim.sf.net/tip_view.php?tip_id=44</A><BR> | |
861 | |
862 Simple text changes in normal mode (e.g. "dw" or "J") can be repeated with | |
863 the "." command. The last command-line change (those invoked with ":", | |
864 e.g. ":s/foo/bar") can be repeated with the "@:" command. | |
865 | |
866 For more informations about repeating single changes refer to: | |
867 | |
868 :help single-repeat | |
869 | |
870 </pre></tip> </html> <Tip category="KVim"> | |
871 <html><center>Using command-line history</center> <pre> <A | |
872 HREF="http://vim.sf.net/tip_view.php?tip_id=45">http://vim.sf.net/tip_view.php?tip_id=45</A><BR> | |
873 | |
874 You can recall previous command lines from a history table by hitting the | |
875 <Up> and <Down> cursor keys in command-line mode. For example, | |
876 this can be used to find the previous substitute command: Type ":s" and | |
877 then <Up>. | |
878 | |
879 There are separate history tables for the ':' commands and for previous '/' | |
880 or '?' search strings. | |
881 | |
882 To display the history of last entered commands or search strings, use the | |
883 :his[tory] command: | |
884 | |
885 :his - Display command-line history. | |
886 | |
887 :his s - Display search string history. | |
888 | |
889 | |
890 For a detailed description of the command-line history refer to: | |
891 | |
892 :help cmdline-history | |
893 | |
894 See also: | |
895 | |
896 :help Cmdline-mode | |
897 | |
898 </pre></tip> </html> <Tip category="KVim"> <html><center>Win32 | |
899 binaries with perl, python, and tcl</center> <pre> <A | |
900 HREF="http://vim.sf.net/tip_view.php?tip_id=46">http://vim.sf.net/tip_view.php?tip_id=46</A><BR> | |
901 | |
902 > Does anyone know if windows binaries of vim 5.7 are available with perl | |
903 and > python support turned on? | |
904 | |
905 <A | |
906 HREF="ftp://vim.sourceforge.net/pub/vim/upload_binaries/">ftp://vim.sourceforge.net/pub/vim/upload_binaries/</A><BR> | |
907 | |
908 <A | |
909 HREF="http://vim.sourceforge.net/bin_download/">http://vim.sourceforge.net/bin_download/</A><BR> | |
910 | |
911 </pre></tip> </html> <Tip category="KVim"> <html><center>Swapping | |
912 characters, words and lines</center> <pre> <A | |
913 HREF="http://vim.sf.net/tip_view.php?tip_id=47">http://vim.sf.net/tip_view.php?tip_id=47</A><BR> | |
914 | |
915 To swap two characters or lines, use the following commands: | |
916 | |
917 xp - delete the character under the cursor and put it afterwards. | |
918 (In other words, it swaps the characters.) | |
919 | |
920 ddp - delete the current line and put it afterwards. | |
921 (In other words, it swaps the lines.) | |
922 | |
923 Unfortunately there is no universal solution to swap two words. You may | |
924 try the following ones, but don't expect too much of them: | |
925 | |
926 dawwP - delete the word under the cursor, move forward one word | |
927 and put it back after the cursor. (In other words, it swaps | |
928 the current and following word.) | |
929 | |
930 dawbP - delete the word under the cursor, move backward on word | |
931 and put it back after the cursor. (In other words, it swaps | |
932 the current and preceeding word.) | |
933 | |
934 </pre></tip> </html> <Tip category="KVim"> | |
935 <html><center>Moving around</center> <pre> <A | |
936 HREF="http://vim.sf.net/tip_view.php?tip_id=48">http://vim.sf.net/tip_view.php?tip_id=48</A><BR> | |
937 | |
938 You can save a lot of time when navigating through the text by using | |
939 appropriate movements commands. In most cases the cursor keys, <PageUp> | |
940 or <PageDown> are NOT the best choice. | |
941 | |
942 Here is a selection of some basic movement commands that hopefully helps | |
943 you to acquire a taste for more: | |
944 | |
945 e - move to the end of a word w - move forward to the beginning of a | |
946 word 3w - move forward three words b - move backward to the beginning of | |
947 a word 3b - move backward three words | |
948 | |
949 $ - move to the end of the line <End> - same as $ 0 - | |
950 move to the beginning of the line <Home> - same as 0 | |
951 | |
952 ) - jump forward one sentence ( - jump backward one sentence | |
953 | |
954 } - jump forward one paragraph { - jump backward one paragraph | |
955 | |
956 H - jump to the top of the display M - jump to the middle of the display | |
957 L - jump to the bottom of the display | |
958 | |
959 'm - jump to the beginning of the line of mark m `m - jump to the location | |
960 of mark m | |
961 | |
962 G - jump to end of file 1G - jump to beginning of file 50G - jump to line 50 | |
963 | |
964 '' - return to the line where the cursor was before the latest jump `` - | |
965 return to the cursor position before the latest jump (undo the jump). | |
966 | |
967 % - jump to corresponding item, e.g. from an open brace to its | |
968 matching closing brace | |
969 | |
970 For some more interesting movement commands (especially those for programmers) | |
971 refer to: | |
972 | |
973 :help motion.txt | |
974 | |
975 :help search-commands | |
976 | |
977 </pre></tip> </html> <Tip category="KVim"> | |
978 <html><center>Switching case of characters</center> <pre> <A | |
979 HREF="http://vim.sf.net/tip_view.php?tip_id=49">http://vim.sf.net/tip_view.php?tip_id=49</A><BR> | |
980 | |
981 To switch the case of one or more characters use the "~", "gU" or "gu" | |
982 commands. | |
983 | |
984 Examples: | |
985 | |
986 ~ - switch case of character under cursor | |
987 (in visual-mode: switch case of highlighted text) | |
988 | |
989 3~ - switch case of next three characters | |
990 | |
991 g~~ - switch case of current line | |
992 | |
993 U - in visual-mode: make highlighted text uppercase | |
994 | |
995 gUU - make current line uppercase | |
996 | |
997 u - in visual-mode: make highlighted text lowercase | |
998 | |
999 guu - make current line lowercase | |
1000 | |
1001 gUaw - make current word uppercase | |
1002 | |
1003 guaw - make current word lowercase | |
1004 | |
1005 For some more examples refer to | |
1006 | |
1007 :help ~ | |
1008 | |
1009 See also: | |
1010 | |
1011 :help simple-change | |
1012 | |
1013 </pre></tip> </html> <Tip category="KVim"> | |
1014 <html><center>Recovering files</center> <pre> <A | |
1015 HREF="http://vim.sf.net/tip_view.php?tip_id=50">http://vim.sf.net/tip_view.php?tip_id=50</A><BR> | |
1016 | |
1017 If your computer has crashed while editing a file, you should be able to | |
1018 recover the file by typing | |
1019 | |
1020 vi -r <filename> | |
1021 | |
1022 where <filename> is the name of the file you were editing at the time | |
1023 of the crash. If you were editing without a file name, give an empty string | |
1024 as argument: | |
1025 | |
1026 vim -r "" | |
1027 | |
1028 To get a list of recoverable files start vim without arguments: | |
1029 | |
1030 vim -r | |
1031 | |
1032 For more information about file recovery refer to: | |
1033 | |
1034 :help recovery | |
1035 | |
1036 </pre></tip> </html> <Tip category="KVim"> | |
1037 <html><center>Entering german umlauts</center> <pre> <A | |
1038 HREF="http://vim.sf.net/tip_view.php?tip_id=51">http://vim.sf.net/tip_view.php?tip_id=51</A><BR> | |
1039 | |
1040 To enter german umlauts (or any other of those weired characters) not | |
1041 available on your keyboard use 'digraphs': | |
1042 | |
1043 In insert-mode type for example: | |
1044 | |
1045 CTRL-K "a | |
1046 | |
1047 CTRL-K ^e | |
1048 | |
1049 which gives an 'ä' and 'e' with a hat. | |
1050 | |
1051 You can also set the digraph option: | |
1052 | |
1053 :set digraph (or :set dg) | |
1054 | |
1055 With digraph option set you can enter | |
1056 | |
1057 " <BS> a | |
1058 | |
1059 ^ <BS> e | |
1060 | |
1061 which gives the same result. | |
1062 | |
1063 To get a list of currently defined digraphs type | |
1064 | |
1065 :dig[graphs] | |
1066 | |
1067 For more information about defining and using digraphs refer to: | |
1068 | |
1069 :help digraph.txt | |
1070 | |
1071 </pre></tip> </html> <Tip category="KVim"> | |
1072 <html><center>Scrolling synchronously</center> <pre> <A | |
1073 HREF="http://vim.sf.net/tip_view.php?tip_id=52">http://vim.sf.net/tip_view.php?tip_id=52</A><BR> | |
1074 | |
1075 If you want to bind two or more windows such that when one window is scrolled, | |
1076 the other windows are scrolled simultaneously, set the 'scrollbind' option | |
1077 for these windows: | |
1078 | |
1079 :set scrollbind | |
1080 | |
1081 When a window that has 'scrollbind' set is scrolled, all other 'scrollbind' | |
1082 windows are scrolled the same amount, if possible. | |
1083 | |
1084 For more information about the 'scrollbind' option refer to | |
1085 | |
1086 :help scoll-binding | |
1087 | |
1088 </pre></tip> </html> <Tip category="KVim"> <html><center>Better | |
1089 colors for syntax highlighting</center> <pre> <A | |
1090 HREF="http://vim.sf.net/tip_view.php?tip_id=53">http://vim.sf.net/tip_view.php?tip_id=53</A><BR> | |
1091 | |
1092 For syntax highlighting there are two sets of default color maps: One for a | |
1093 light and another one for a dark background. If you have a black background, | |
1094 use the following command to get a better color map for syntax highlighting: | |
1095 | |
1096 :set background=dark | |
1097 | |
1098 You have to switch off and on again syntax highlighting to activate the new | |
1099 color map: | |
1100 | |
1101 :syntax off :syntax on | |
1102 | |
1103 For a detailled description of syntax highlighting refer to | |
1104 | |
1105 :help syntax.txt | |
1106 | |
1107 See also the Vim syntax support file: $VIMRUNTIME/syntax/synload.vim | |
1108 | |
1109 </pre></tip> </html> <Tip category="KVim"> <html><center>View | |
1110 a Java Class File Decompiled thru Vim</center> <pre> <A | |
1111 HREF="http://vim.sf.net/tip_view.php?tip_id=54">http://vim.sf.net/tip_view.php?tip_id=54</A><BR> | |
1112 | |
1113 Hi All, Wish u could view a Java Class File using Vim, Well ur query | |
1114 ends here. First of all u will need a Java Decompiler to decompile the | |
1115 Class File. I would suggest the JAD decompiler by Pavel Kouznetsov <A | |
1116 HREF="http://www.geocities.com/SiliconValley/Bridge/8617/jad.html">http://www.geocities.com/SiliconValley/Bridge/8617/jad.html</A><BR> | |
1117 | |
1118 Its a command line decompiler and absolutely free. U can use any command | |
1119 line decompiler of ur choice. | |
1120 | |
1121 Next create a vimscript file called jad.vim as ######################### | |
1122 FILE START ################ augr class au! au bufreadpost,filereadpost | |
1123 *.class %!d:jad.exe -noctor -ff -i -p % au bufreadpost,filereadpost | |
1124 *.class set readonly au bufreadpost,filereadpost *.class set ft=java au | |
1125 bufreadpost,filereadpost *.class normal gg=G au bufreadpost,filereadpost | |
1126 *.class set nomodified augr END ######################## FILE END | |
1127 ##################### | |
1128 | |
1129 Note:- Keep the Jad.exe in a directory with out white spaces. The -p options | |
1130 directs JAD to send the output to standard output instead of a .jad file. Other | |
1131 options are described on the JAD site. | |
1132 | |
1133 Next add the following line in the .vimrc file. so jad.vim | |
1134 | |
1135 Next time u do vim abc.class. Viola u have the source code for abc.class. | |
1136 | |
1137 NOTE:- I have written the script so as to open the class file read only, | |
1138 So that u dont accidently modify it. U can also exted this script to unjar | |
1139 a jar file and then view each file in the JAR file. thanks bhaskar Any | |
1140 suggestions are welcome | |
1141 | |
1142 </pre></tip> </html> <Tip category="KVim"> | |
1143 <html><center>previous buffer</center> <pre> <A | |
1144 HREF="http://vim.sf.net/tip_view.php?tip_id=55">http://vim.sf.net/tip_view.php?tip_id=55</A><BR> | |
1145 | |
1146 One of the keys to vim is buffer management. If I have to use another IDE | |
1147 that makes me click on a tab every time I want to look at another file I'm | |
1148 going to go postal. | |
1149 | |
1150 So of course you know about :ls which lists all the current open buffers. This | |
1151 gets a little unweildly once you have a full project open so you can also use | |
1152 :b <any snipit of text> <tab> to complete to an open buffer. This | |
1153 is really nice because you can type any fragment of a file name and it will | |
1154 complete to the matching file. (i.e. RequestManager.java can be completed | |
1155 using "tma"<tab> or "req"<tab> or "r.java"<tab>). | |
1156 | |
1157 Now for awhile I was also using :bn and :bp which jumps you to the next | |
1158 and previous buffer respectively. I found I was often frustrated because I | |
1159 wanted :bp to be the previous buffer I was in, not the previous buffer in | |
1160 the list. So (drum roll) the reason I wrote this tip was because of: | |
1161 | |
1162 :b# | |
1163 | |
1164 jump to the previous buffer you were in. Very very handy. The only thing | |
1165 nicer are tag, but that's a tip for another time. | |
1166 | |
1167 :help buffers :help bn :help bp | |
1168 | |
1169 If anybody knows where to get help on # in this context please add notes. | |
1170 | |
1171 </pre></tip> </html> <Tip category="KVim"> <html><center>how | |
1172 to avoid obliterating window layout</center> <pre> <A | |
1173 HREF="http://vim.sf.net/tip_view.php?tip_id=58">http://vim.sf.net/tip_view.php?tip_id=58</A><BR> | |
1174 | |
1175 If you take the time to lay out several windows with vim (especially vertically | |
1176 in version 6), you may be bummed when you hit an errant key and find that | |
1177 all but what one window disappears. | |
1178 | |
1179 What happens: while navigating between windows, you hit <C-W>j, | |
1180 <C-W>k, etc. At some point you accidently hit <C-W> but then | |
1181 don't follow with a window command. Now hitting 'o' to start insert mode | |
1182 issues a command equivalent to :only, and closes all windows execept for | |
1183 the one you are in (unless some windows have unsaved changes in them). | |
1184 | |
1185 How to avoid this: petition the vim-dev mailing list about how :only is | |
1186 sufficient for the infrequenty use this might get (j/k). | |
1187 | |
1188 Really: use mapping to disable the <C-W>o functionality; put this in | |
1189 your .vimrc: | |
1190 | |
1191 nnoremap <C-W>O :echo "sucker"<CR> nnoremap <C-W>o :echo | |
1192 "sucker"<CR> nnoremap <C-W><C-O> :echo "sucker"<CR> | |
1193 | |
1194 references: | |
1195 | |
1196 :help :only :help CTRL-W_o | |
1197 | |
1198 That is all. Scott | |
1199 | |
1200 </pre></tip> </html> <Tip category="KVim"> <html><center>Applying | |
1201 substitutes to a visual block</center> <pre> <A | |
1202 HREF="http://vim.sf.net/tip_view.php?tip_id=62">http://vim.sf.net/tip_view.php?tip_id=62</A><BR> | |
1203 | |
1204 If you'd like to apply a substitute, or even any ex command, to a visual-block | |
1205 selected text region (ctrl-v and move), then you'll want Stefan Roemer's <A | |
1206 HREF="http://www.erols.com/astronaut/vim/vimscript/vis.vim . Just source | |
1207 it in,">http://www.erols.com/astronaut/vim/vimscript/vis.vim . Just source | |
1208 it in,</A><BR> and then press ":B". On the command line you'll see | |
1209 | |
1210 :'<,'>BCtrl-V | |
1211 | |
1212 Just continue with the substitute or whatever... | |
1213 | |
1214 :'<,'>B s/abc/ABC/g | |
1215 | |
1216 and the substitute will be applied to just that block of text! | |
1217 | |
1218 Example: Ctrl-V Select..........|......Type ..................just | |
1219 the central....|......:B s/abc/ABC/g ..................four | |
1220 "abc"s..............| ..................----------------....|...------------- | |
1221 ..................abcabcabcabc............|......abcabcabcabc | |
1222 ..................abcabcabcabc............|......abcABCABCabc | |
1223 ..................abcabcabcabc............|......abcABCABCabc | |
1224 ..................abcabcabcabc............|......abcabcabcabc | |
1225 (dots inserted to retain tabular format) | |
1226 | |
1227 </pre></tip> </html> <Tip category="KVim"> <html><center>Applying | |
1228 substitutes to a visual block</center> <pre> <A | |
1229 HREF="http://vim.sf.net/tip_view.php?tip_id=63">http://vim.sf.net/tip_view.php?tip_id=63</A><BR> | |
1230 | |
1231 If you'd like to apply a substitute, or even any ex command, to a visual-block | |
1232 selected text region (ctrl-v and move), then you'll want Stefan Roemer's <A | |
1233 HREF="http://www.erols.com/astronaut/vim/vimscript/vis.vim . Just source | |
1234 it in,">http://www.erols.com/astronaut/vim/vimscript/vis.vim . Just source | |
1235 it in,</A><BR> and then press ":B". On the command line you'll see | |
1236 | |
1237 :'<,'>BCtrl-V | |
1238 | |
1239 Just continue with the substitute or whatever... | |
1240 | |
1241 :'<,'>B s/abc/ABC/g | |
1242 | |
1243 and the substitute will be applied to just that block of text! | |
1244 | |
1245 Example: Ctrl-V Select..........|......Type | |
1246 ..................just the central.......|......:B | |
1247 s/abc/ABC/g ..................four "abc"s.................| | |
1248 ..................---------............|...------------- | |
1249 ..................abcabcabcabc............|......abcabcabcabc | |
1250 ..................abcabcabcabc............|......abcABCABCabc | |
1251 ..................abcabcabcabc............|......abcABCABCabc | |
1252 ..................abcabcabcabc............|......abcabcabcabc | |
1253 (dots inserted to retain tabular format) | |
1254 | |
1255 </pre></tip> </html> <Tip category="KVim"> <html><center>Always set | |
1256 your working directory to the file you're editing</center> <pre> <A | |
1257 HREF="http://vim.sf.net/tip_view.php?tip_id=64">http://vim.sf.net/tip_view.php?tip_id=64</A><BR> | |
1258 | |
1259 Sometimes I think it's helpful if your working directory is always the same | |
1260 as the buffer you are editing. You need to put this in your .vimrc: | |
1261 | |
1262 function! CHANGE_CURR_DIR() | |
1263 let _dir = expand("%:p:h") exec "cd " . _dir unlet _dir | |
1264 endfunction | |
1265 | |
1266 autocmd BufEnter * call CHANGE_CURR_DIR() | |
1267 | |
1268 Doing this will make a "cd" command to your the current buffer each time | |
1269 you switch to it. This is actually similar to vimtip#2 but more automatic. | |
1270 | |
1271 You should see for more details: :help autocmd :help expand :help function | |
1272 | |
1273 Note: This tip was contributed by somebody on the list a while ago (sorry | |
1274 for no reference) and it has been extremely helpful to me. Thanks! | |
1275 | |
1276 </pre></tip> </html> <Tip category="KVim"> <html><center>Insert | |
1277 line number into the actuall text of the file.</center> <pre> <A | |
1278 HREF="http://vim.sf.net/tip_view.php?tip_id=65">http://vim.sf.net/tip_view.php?tip_id=65</A><BR> | |
1279 | |
1280 Although :set number will add nice line number for you At time you may wish | |
1281 to actually place the line numbers into the file. For example on GNU Unix | |
1282 you can acomplish a simular task using cat -n file > new_file | |
1283 | |
1284 In VIM you can use the global command to do this | |
1285 | |
1286 :g/^/exec "s/^/".strpart(line(".")." ", 0, 4) | |
1287 | |
1288 What this does is run the exec comand on every line that matches /^/ (All) | |
1289 The exec command taks a string and executes it as if it were typed in. | |
1290 | |
1291 line(".")." " -> returns the number of the current line plus four spaces. | |
1292 strpart("123 ", 0, 4) -> returns only the first four characters ("123 "). | |
1293 "s/^/123 " -> substituts the begining of the line with "123 ". | |
1294 | |
1295 </pre></tip> </html> <Tip category="KVim"> <html><center>Transfer | |
1296 text between two Vim 'sessions',</center> <pre> <A | |
1297 HREF="http://vim.sf.net/tip_view.php?tip_id=66">http://vim.sf.net/tip_view.php?tip_id=66</A><BR> | |
1298 | |
1299 This one is a one of my favorites from Dr. Chip, and I haven't seen it come | |
1300 across vim tips yet... | |
1301 | |
1302 Can use either visual, or marking to denote the text. | |
1303 | |
1304 " transfer/read and write one block of text between vim sessions " Usage: " | |
1305 `from' session: " ma " move to end-of-block " xw " " `to' session: | |
1306 " move to where I want block inserted " xr " if has("unix") | |
1307 nmap xr :r $HOME/.vimxfer<CR> nmap xw | |
1308 :'a,.w! $HOME/.vimxfer<CR> vmap xr c<esc>:r | |
1309 $HOME/.vimxfer<CR> vmap xw :w! $HOME/.vimxfer<CR> | |
1310 else | |
1311 nmap xr :r c:/.vimxfer<CR> nmap xw :'a,.w! c:/.vimxfer<CR> | |
1312 vmap xr c<esc>:r c:/.vimxfer<cr> vmap xw | |
1313 :w! c:/.vimxfer<CR> | |
1314 endif | |
1315 | |
1316 </pre></tip> </html> <Tip category="KVim"> | |
1317 <html><center>Ascii Value</center> <pre> <A | |
1318 HREF="http://vim.sf.net/tip_view.php?tip_id=67">http://vim.sf.net/tip_view.php?tip_id=67</A><BR> | |
1319 | |
1320 Sometimes we, the programmers, need the value of a character, don't we? | |
1321 You can learn the ascii value of a character by pressing g and a keys.(ga)! | |
1322 It displays the value in dec, hex and octal... | |
1323 | |
1324 </pre></tip> </html> <Tip category="KVim"> | |
1325 <html><center>Delete key</center> <pre> <A | |
1326 HREF="http://vim.sf.net/tip_view.php?tip_id=68">http://vim.sf.net/tip_view.php?tip_id=68</A><BR> | |
1327 | |
1328 Don't worry if your delete key does not work properly. Just press | |
1329 <CTRL>-Backspace. It works under both mode(insert or normal). | |
1330 | |
1331 </pre></tip> </html> <Tip category="KVim"> | |
1332 <html><center>dot makes life easier</center> <pre> <A | |
1333 HREF="http://vim.sf.net/tip_view.php?tip_id=69">http://vim.sf.net/tip_view.php?tip_id=69</A><BR> | |
1334 | |
1335 You can copy and paste the last changes you made in the last insert mode | |
1336 without using y and p by pressing . (just dot). Vim memorizes the keys you | |
1337 pressed and echos them if you hit the dot key. You must be in command mode | |
1338 as usual. It can be helpful... | |
1339 | |
1340 </pre></tip> </html> <Tip category="KVim"> | |
1341 <html><center>running a command on all buffers</center> <pre> <A | |
1342 HREF="http://vim.sf.net/tip_view.php?tip_id=70">http://vim.sf.net/tip_view.php?tip_id=70</A><BR> | |
1343 | |
1344 From Peter Bismuti on the vim list: | |
1345 | |
1346 How to global search and replace in all buffers with one command? You need | |
1347 the AllBuffers command: | |
1348 | |
1349 :call AllBuffers("%s/string1/string2/g") | |
1350 | |
1351 "put this in a file and source it function AllBuffers(cmnd) | |
1352 let cmnd = a:cmnd let i = 1 while (i <= bufnr("$")) | |
1353 if bufexists(i) | |
1354 execute "buffer" i execute cmnd | |
1355 endif let i = i+1 | |
1356 endwhile | |
1357 endfun | |
1358 | |
1359 ":call AllBuffers("%s/foo/bar/ge|update") | |
1360 | |
1361 Thanks Peter! | |
1362 | |
1363 </pre></tip> </html> <Tip category="KVim"> <html><center>Transfer | |
1364 text between two gvim sessions using clipboard</center> <pre> <A | |
1365 HREF="http://vim.sf.net/tip_view.php?tip_id=71">http://vim.sf.net/tip_view.php?tip_id=71</A><BR> | |
1366 | |
1367 If you use gvim, you can transfer text from one instance of gvim into another | |
1368 one using clipboard. It is convenient to use * (star) register, like this: | |
1369 | |
1370 In one instance yank two lines into clipboard: | |
1371 "*2yy | |
1372 Paste it in another instance in normal mode: | |
1373 "*p | |
1374 or in insert mode: | |
1375 <Ctrl-R>* | |
1376 | |
1377 </pre></tip> </html> <Tip category="KVim"> | |
1378 <html><center>Remove unwanted empty lines</center> <pre> <A | |
1379 HREF="http://vim.sf.net/tip_view.php?tip_id=72">http://vim.sf.net/tip_view.php?tip_id=72</A><BR> | |
1380 | |
1381 Sometimes to improve the readability of the document I insert empty lines, | |
1382 which will be later removed. To get rid off them try: :%g/^$/d This will | |
1383 remove a l l empty line in the document. Some other tipps you can find | |
1384 under www.linuxclass.de/vim.phtml | |
1385 | |
1386 </pre></tip> </html> <Tip category="KVim"> | |
1387 <html><center>Using vim as calculator</center> <pre> <A | |
1388 HREF="http://vim.sf.net/tip_view.php?tip_id=73">http://vim.sf.net/tip_view.php?tip_id=73</A><BR> | |
1389 | |
1390 Basic calculations can done within vim easily by typing (insert-mode): STRG | |
1391 (=CTRL) + R followed by = then for example 2+2 and hit RETURN the result 4 | |
1392 will be printed in the document. | |
1393 | |
1394 Some other tipps you can find under www.linuxclass.de/vim.phtml | |
1395 | |
1396 </pre></tip> </html> <Tip category="KVim"> <html><center>Using | |
1397 Vim as an outline processor</center> <pre> <A | |
1398 HREF="http://vim.sf.net/tip_view.php?tip_id=74">http://vim.sf.net/tip_view.php?tip_id=74</A><BR> | |
1399 | |
1400 With the addition of folding, Vim6 can function as a high performance outline | |
1401 processor. Simply :set ai and in insert mode use backspace to promote and | |
1402 tab to demote headlines. | |
1403 | |
1404 In command mode, << promotes (n<< to promote multiple lines), | |
1405 and >> demotes. Also, highlight several headlines and < or > | |
1406 to promote or demote. | |
1407 | |
1408 :set foldmethod=indent, and then your z commands can expand or collapse | |
1409 headline trees, filewide or by the tree. | |
1410 | |
1411 The VimOutliner GPL distro contains the scripts and configs to easily | |
1412 configure Vim6 as an outliner, including scripts to create tag files enabling | |
1413 interoutline hyperlinking. | |
1414 | |
1415 The VimOutliner project is at <A | |
1416 HREF="http://www.troubleshooters.com/projects/vimoutliner/index.htm.">http://www.troubleshooters.com/projects/vimoutliner/index.htm.</A><BR> | |
1417 | |
1418 Steve (Litt) slitt@troubleshooters.com | |
1419 | |
1420 </pre></tip> </html> <Tip category="KVim"> <html><center>Remap | |
1421 CAPSLOCK key in Windows 2000 Professional and NT4.0</center> <pre> <A | |
1422 HREF="http://vim.sf.net/tip_view.php?tip_id=75">http://vim.sf.net/tip_view.php?tip_id=75</A><BR> | |
1423 | |
1424 If you're Windows 2000 Professional user and got tired to move your hands off | |
1425 basic row when hitting <ESC> key here the solution (not for Windows 9x.): | |
1426 remap CapsLock key as <ESC> key. It's located in useful position. Put | |
1427 this lines into <EscLock.reg> file and start it in explorer.Reboot.Enjoy. | |
1428 | |
1429 REGEDIT4 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout] | |
1430 "Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,01,00,3a,00,00,00,00,00 | |
1431 | |
1432 To restore you capslock back just delete this entry from Registry and reboot. | |
1433 And below is remapping <capslock> as <Left Control>: | |
1434 | |
1435 REGEDIT4 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout] | |
1436 "Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,1d,00,3a,00,00,00,00,00 | |
1437 | |
1438 </pre></tip> </html> <Tip category="KVim"> | |
1439 <html><center>Folding for Quickfix</center> <pre> <A | |
1440 HREF="http://vim.sf.net/tip_view.php?tip_id=76">http://vim.sf.net/tip_view.php?tip_id=76</A><BR> | |
1441 | |
1442 The Quickfix mode aims to "speed up the edit-compile-edit cycle" according to | |
1443 ':help quickfix'. After executing ':make' or ':grep' it is possible to skim | |
1444 through the list of errors/matches and the appropriate source code locations | |
1445 with, for instance, the ':cnext' command. Another way to get a quick overview | |
1446 is to use VIMs folding mode, to fold away all the error-free/match-free | |
1447 regions. The script at the end of this message can be used for this | |
1448 purpose. It is at the moment not elaborate enough to put it up as a 'script'; | |
1449 but it might give someone inspiration to do so. Big restrictions / bugs are | |
1450 as follows: 1. Vim Perl interface is required, i.e. the output of ':version' | |
1451 must contain '+perl' (People with Vim scripting knowledge might fix this) | |
1452 2. Works only for one file, i.e. the current buffer. 3. It's a quick hack. | |
1453 Sample usage: (a) edit a file, (b) do ':grep regexp %' to get a quickfix | |
1454 error list and (c) ':source foldqf.vim' will fold as described Increasing | |
1455 the value of $CONTEXT gives you more context around the error regions. | |
1456 | |
1457 Here comes it, it should be 7 lines: ---foldqf.vim cwindow perl $CONTEXT = 0; | |
1458 perl @A = map { m/\|(\d+)\|/; $1 +0 } $curbuf->Get(1..$curbuf->Count()); | |
1459 close normal zD perl sub fold { VIM::DoCommand( $_[0] . ',' . ($_[1]) . "fold" | |
1460 ) if( $_[0] < $_[1] ); } perl $last = 0; for (@A) { fold( $last+1+$CONTEXT, | |
1461 $_-1-$CONTEXT ); $last = $_; }; VIM::DoCommand(($A[-1]+1+$CONTEXT ) | |
1462 . ',$fold' ); | |
1463 | |
1464 </pre></tip> </html> <Tip category="KVim"> <html><center>Displaying | |
1465 search results using folds</center> <pre> <A | |
1466 HREF="http://vim.sf.net/tip_view.php?tip_id=77">http://vim.sf.net/tip_view.php?tip_id=77</A><BR> | |
1467 | |
1468 A guy I work with told me about a function that an old IBM text editor had | |
1469 that he said was useful, and that is to create folds in the file after a | |
1470 search such that every line that is visible contains the search pattern(except | |
1471 possibly the first). All lines that do not contain the search pattern are | |
1472 folded up to the last occurence of the pattern or the top of the file. | |
1473 | |
1474 One use for such a function is to be able to make a quick and dirty api of | |
1475 a source file. For example, if working in Java, you could run the function | |
1476 using the pattern "public|protected|private" and ithe results would be that | |
1477 only the method headers would be visible (well, close enough). | |
1478 | |
1479 function! Foldsearch(search) | |
1480 normal zE "erase all folds to begin with normal G$ | |
1481 "move to the end of the file let folded = 0 "flag to set when | |
1482 a fold is found let flags = "w" "allow wrapping in the search let | |
1483 line1 = 0 "set marker for beginning of fold while search(a:search, | |
1484 flags) > 0 | |
1485 let line2 = line(".") "echo "pattern found at line # | |
1486 " line2 if (line2 -1 > line1) | |
1487 "echo line1 . ":" . (line2-1) "echo "A fold goes here." | |
1488 execute ":" . line1 . "," . (line2-1) . "fold" | |
1489 let folded = 1 "at | |
1490 least one fold has been found | |
1491 endif let line1 = line2 "update marker let flags = "W" | |
1492 "turn off wrapping | |
1493 endwhile | |
1494 " Now create the last fold which goes to the end of the file. | |
1495 normal $G let line2 = line(".") | |
1496 "echo "end of file found at line # " line2 | |
1497 if (line2 > line1 && folded == 1) | |
1498 "echo line1 . ":" . line2 "echo "A fold goes here." | |
1499 execute ":". line1 . "," . line2 . "fold" | |
1500 endif | |
1501 endfunction | |
1502 | |
1503 " Command is executed as ':Fs pattern'" command! -nargs=+ -complete=command | |
1504 Fs call Foldsearch(<q-args>) " View the methods and variables in a | |
1505 java source file." command! Japi Fs public\|protected\|private | |
1506 | |
1507 </pre></tip> </html> <Tip category="KVim"> | |
1508 <html><center>rotating mail signatures</center> <pre> <A | |
1509 HREF="http://vim.sf.net/tip_view.php?tip_id=78">http://vim.sf.net/tip_view.php?tip_id=78</A><BR> | |
1510 | |
1511 For people using mutt and vim for mail, the following script will allow | |
1512 you to insert a new signature (and again and again if you don\'t like the | |
1513 current one) at the bottom of your mail. This is usefull eg when you don\'t | |
1514 want to send a potentially offensive quote to someone you don\'t know very | |
1515 well (or a mailing list), but are too lazy to delete the quote, open your | |
1516 quotes file, and cut and paste another one in. (I put it here in \'tips\' | |
1517 and not in \'scripts\' because it is imo too short to be a \'real\' script) | |
1518 | |
1519 " rotate_sig.vim " Maintainer: Roel Vanhout <roel@2e-systems.com> | |
1520 " Version: 0.1 " Last Change: Tuesday, June 12, 2001 " Mapping I use: | |
1521 " nmap ,r :call RotateSig()<CR> " Usage: " -Make sure you delimit | |
1522 your sig with '-- ', or adjust the script " -Adjust the last execute to a | |
1523 command that prints a sig to stdout " Known problems: " - You'll get an | |
1524 error message when you're below the last " '^-- $' in your mail (nothing | |
1525 bad though - just an not- " found marker) | |
1526 | |
1527 function! RotateSig() | |
1528 normal mQG execute '?^-- $' execute ':nohl' normal o<ESC> normal | |
1529 dG normal <CR> execute 'r !~/bin/autosig ~/.quotes \%' normal `Q | |
1530 endfunction | |
1531 | |
1532 </pre></tip> </html> <Tip category="KVim"> <html><center>How to use | |
1533 :grep to get a clickable list of function names</center> <pre> <A | |
1534 HREF="http://vim.sf.net/tip_view.php?tip_id=79">http://vim.sf.net/tip_view.php?tip_id=79</A><BR> | |
1535 | |
1536 The following function will make a :cwindow window with a line per function | |
1537 in the current C source file. NOTE: It writes the file as a side effect. | |
1538 | |
1539 Invoke with ':call ShowFunc()' You may want to do :nmap <somekey> | |
1540 :call ShowFunc()<CR> | |
1541 | |
1542 function! ShowFunc() | |
1543 | |
1544 let gf_s = &grepformat let gp_s = &grepprg | |
1545 | |
1546 let &grepformat = '%*\k%*\sfunction%*\s%l%*\s%f %*\s%m' let &grepprg = | |
1547 'ctags -x --c-types=f --sort=no -o -' | |
1548 | |
1549 write silent! grep % cwindow | |
1550 | |
1551 let &grepformat = gf_s let &grepprg = gp_s | |
1552 | |
1553 endfunc | |
1554 | |
1555 </pre></tip> </html> <Tip category="KVim"> <html><center>Restore | |
1556 cursor to file position in previous editing session</center> <pre> <A | |
1557 HREF="http://vim.sf.net/tip_view.php?tip_id=80">http://vim.sf.net/tip_view.php?tip_id=80</A><BR> | |
1558 | |
1559 Here's something for your <.vimrc> which will allow you to restore | |
1560 your cursor position in a file over several editing sessions. This technique | |
1561 uses the viminfo option: | |
1562 | |
1563 Ex. set viminfo='10,\"100,:20,%,n~/.viminfo | |
1564 au BufReadPost * if line("'\"") > 0|if line("'\"") <= | |
1565 line("$")|exe("norm '\"")|else|exe "norm $"|endif|endif | |
1566 | |
1567 If you're on Unix, the viminfo is probably fine as is (but check up on Vim's | |
1568 help for viminfo to see if you like the settings above). For Windows you'll | |
1569 need to change the "n" suboption to something like | |
1570 | |
1571 Ex. set viminfo='10,\"100,:20,%,nc:\\some\\place\\under\\Windoz\\_viminfo | |
1572 | |
1573 This tip is a somewhat improved version of the example given for :he line() | |
1574 in the Vim on-line documentation. | |
1575 | |
1576 </pre></tip> </html> <Tip category="KVim"> | |
1577 <html><center>Substitution of characters and lines in VIM is | |
1578 made far easier with the s and S commands</center> <pre> <A | |
1579 HREF="http://vim.sf.net/tip_view.php?tip_id=81">http://vim.sf.net/tip_view.php?tip_id=81</A><BR> | |
1580 | |
1581 Substitute Characters ----------------------------------- I was just editing | |
1582 a file that contained the same leading string on many lines. | |
1583 | |
1584 example: | |
1585 | |
1586 foo_bar_baz1=a foo_bar_baz1=abc674 foo_bar_baz1=qrs foo_bar_baz1=m1 | |
1587 foo_bar_baz1=bz90 foo_bar_baz1=bc ... | |
1588 | |
1589 Needing to only substitute a portion of the string, I referred to a VIM | |
1590 reference card and discovered a command answering my need exactly. The s | |
1591 command is used to subsitute a certain number of characters. In my example | |
1592 file above, if I only needed to subsititute the characters foo_bar, I set | |
1593 the cursor on the first character where I'd like the subsitution to begin | |
1594 and type 7s. VIM drops the characters foo_bar and goes to insert mode, | |
1595 waiting for the substitution text. | |
1596 | |
1597 Substitute Lines ----------------------- After years of using vi and VIM and | |
1598 always deleting multiple lines in order to replace them, I just discovered | |
1599 the S command. If you need to subsitute three lines of text, simply type | |
1600 3S. VIM drops the three lines and goes into insert mode, waiting for the | |
1601 subsitution text. | |
1602 | |
1603 </pre></tip> </html> <Tip category="KVim"> <html><center>letting | |
1604 variable values be overwritten in a script</center> <pre> <A | |
1605 HREF="http://vim.sf.net/tip_view.php?tip_id=82">http://vim.sf.net/tip_view.php?tip_id=82</A><BR> | |
1606 | |
1607 this is a simple function i wrote to get the value of a variable from three | |
1608 different places (in that order): the current buffer, the global setting | |
1609 or from the script itself. | |
1610 | |
1611 this allows me to set a default value for a configuration variable inside my | |
1612 script and the user to change it on a global level by setting the same variable | |
1613 with a g: prepended. then, they can further set it on a per-buffer level by | |
1614 the the b: mechanism. one of the examples for this might be my comments script | |
1615 (not uploaded). i have a variable in there that determines whether comment | |
1616 characters (// for java, for example) are placed the beginning of the line or | |
1617 just before the first-non-blanks in the text. i set up a default in my script: | |
1618 | |
1619 let s:comments_hug_start_of_line=0 " comments should hug the text | |
1620 | |
1621 that's fine as a default, but if i want to overwrite it for vim scripts, | |
1622 i just put the following in my ftplugin/vim.vim: | |
1623 | |
1624 let b:comments_hug_start_of_line=1 " vim comments should hug the first | |
1625 column, always | |
1626 | |
1627 " tries to return the buffer-specific value of a variable; if not | |
1628 " found, tries to return the global value -- if that's not found " | |
1629 either, returns the value set in the script itself function! GetVar(varName) | |
1630 if (exists ("b:" . a:varName)) | |
1631 exe "let retVal=b:" . a:varName | |
1632 elseif (exists ("g:" . a:varName)) | |
1633 exe "let retVal=g:" . a:varName | |
1634 elseif (exists ("s:" . a:varName)) | |
1635 exe "let retVal=s:" . a:varName | |
1636 else | |
1637 retVal=-1 | |
1638 endif return retVal | |
1639 endfunction | |
1640 | |
1641 personally, i never let it get to the -1 state by always having an s: set | |
1642 with SOME default value. | |
1643 | |
1644 </pre></tip> </html> <Tip category="KVim"> <html><center>how | |
1645 to indent (useful for source code)</center> <pre> <A | |
1646 HREF="http://vim.sf.net/tip_view.php?tip_id=83">http://vim.sf.net/tip_view.php?tip_id=83</A><BR> | |
1647 | |
1648 Here is the most useful vim command that I know of and I'm surprised that | |
1649 it's not yet in the tips list. | |
1650 | |
1651 I use the indent features of vim all the time. Basically, it lets you indent | |
1652 your source code. | |
1653 | |
1654 SETUP: To make indentation work nicely I have the following in my .vimrc file: | |
1655 set et set sw=4 set smarttab | |
1656 | |
1657 these make vim behave nicely when indenting, giving 4 spaces (not tabs) | |
1658 for each "tabstop". | |
1659 | |
1660 HOW TO USE: in command mode, == will indent the current line selecting a range | |
1661 of lines (with shift-v) then == will indent your selection typing a number | |
1662 then == will indent that many lines, starting from your cursor (you get the | |
1663 idea, there are many other things you can do to select a range of lines) | |
1664 | |
1665 Tell me that isn't great? | |
1666 | |
1667 </pre></tip> </html> <Tip category="KVim"> <html><center>Changing | |
1668 the behaviour of . to include visual mode</center> <pre> <A | |
1669 HREF="http://vim.sf.net/tip_view.php?tip_id=84">http://vim.sf.net/tip_view.php?tip_id=84</A><BR> | |
1670 | |
1671 one of the things i do a lot in vim is to make a change to the beginning or | |
1672 end of the line (such as adding the text '// remove' at the end of java | |
1673 debug code). a quick way of doing this is to use a to append the text to | |
1674 the end of the first line and then move down one, hit . (repeat last edit), | |
1675 move down, hit . etc. etc. the following mapping allows one to simply | |
1676 highlight the region in question and hit . -- it will automatically | |
1677 execute the . once on each line: | |
1678 | |
1679 " allow the . to execute once for each line of a visual selection vnoremap | |
1680 . :normal .<CR> | |
1681 | |
1682 another thing i do a lot is to record a quick macro in the "a" register | |
1683 and then play it back a number of times. while @@ can be used to repeat the | |
1684 last register used, my recorded macros sometimes use other registers so @@ | |
1685 doesn't necessarily give me the same results as @a. also, i have mapped ' | |
1686 to ` because i like to go to the precise location of my marks -- always -- | |
1687 and never to the beginning of the line. this leaves my ` key unused. so: | |
1688 | |
1689 " make ` execute the contents of the a register nnoremap ` @a | |
1690 | |
1691 then, in keeping with the visual . above, i did the same for the ` -- is | |
1692 thexecutes @a once on each highlighed line. | |
1693 | |
1694 vnoremap ` :normal @a<CR> | |
1695 | |
1696 as an example, say i have the following lines of java code: | |
1697 | |
1698 public String m_asdf; public String m_lkhj; public int m_hjkhjkh; | |
1699 | |
1700 and, for some reason, i need to get the following: | |
1701 | |
1702 "asdf" "lkhj" "hjkhjkh" | |
1703 | |
1704 i record the following into a: | |
1705 | |
1706 ^cf_"<ESC>$r" | |
1707 | |
1708 the ^ is because my java code is indented and i don't want to go to | |
1709 column 0 and the <esc> is an actual escape i hit to exit insert mode. | |
1710 | |
1711 then, i simply select (visually) the other lines (only two in case -- | |
1712 admittedly not an overly useful example) and just hit `. | |
1713 | |
1714 </pre></tip> </html> <Tip category="KVim"> <html><center>How to mimic | |
1715 the vim 6.0 plugin feature with older versions</center> <pre> <A | |
1716 HREF="http://vim.sf.net/tip_view.php?tip_id=85">http://vim.sf.net/tip_view.php?tip_id=85</A><BR> | |
1717 | |
1718 If you do not have vim 6.0, but would like to mimic the plugins directory | |
1719 feature then copy and paste this into your vimrc: | |
1720 | |
1721 exec "source " . substitute(glob($VIM."/plugins/*.vim"), "\n", "\nsource ", | |
1722 "g") | |
1723 | |
1724 It will automatically source every vim script file located in the vim/plugins | |
1725 directory. Now, to add a new plugin, just drop the script in this directory | |
1726 and vim will automatically find it. | |
1727 | |
1728 </pre></tip> </html> <Tip category="KVim"> <html><center>Helps | |
1729 undo 1 line when entered many</center> <pre> <A | |
1730 HREF="http://vim.sf.net/tip_view.php?tip_id=86">http://vim.sf.net/tip_view.php?tip_id=86</A><BR> | |
1731 | |
1732 When U entered text, U cannot undo only 1 line, for example, when U press | |
1733 "u", all entered in last "insert" text removed. | |
1734 | |
1735 If U add this line to .vimrc: inoremap <Return> <Return>^O^[ | |
1736 where "^O" or "^[" is 1 char "u" will undo (remove) only 1 line. | |
1737 | |
1738 </pre></tip> </html> <Tip category="KVim"> <html><center>Get | |
1739 vim 5.x window in vim 6.x</center> <pre> <A | |
1740 HREF="http://vim.sf.net/tip_view.php?tip_id=87">http://vim.sf.net/tip_view.php?tip_id=87</A><BR> | |
1741 | |
1742 The format of the window title in vim 5.x (well, at least for 5.7,.8, for | |
1743 Win32) used to be VIM - <full filename with path>. It's not in the | |
1744 win32 binary of 6.0an that I found. I want my old way back. | |
1745 | |
1746 Turns out, all that it takes to get it back is :set title titlestring=VIM\ | |
1747 -\ %F "make sure that the window caption setting is turned on and set caption | |
1748 to vim 5.x style | |
1749 | |
1750 Oh, however, one thing I did like about the 6.0 style is that it puts the | |
1751 word "help" in the title when the current buffer is a help file; so, I just | |
1752 tacked %h to my titlestring giving: | |
1753 | |
1754 :set title titlestring=VIM\ -\ %F\ %h "make sure that the window caption | |
1755 setting is turned on and set caption to vim 5.x style | |
1756 | |
1757 see also: :he 'titlestring' :he 'statusline' "for the format for titlestring | |
1758 | |
1759 </pre></tip> </html> <Tip category="KVim"> <html><center>How | |
1760 to maximize vim on entry (win32)</center> <pre> <A | |
1761 HREF="http://vim.sf.net/tip_view.php?tip_id=88">http://vim.sf.net/tip_view.php?tip_id=88</A><BR> | |
1762 | |
1763 Maybe it's just because I have far too small of a monitor, because I can | |
1764 get distracted while coding if I have other stuff on the screen, or because I | |
1765 starting using vim on a console, but I definitely like my vim window maximized. | |
1766 Anyway, sticking the following in your vimrc will always maximize your vim | |
1767 window on startup. | |
1768 | |
1769 au GUIEnter * simalt ~x | |
1770 | |
1771 :he win16-maximized | |
1772 | |
1773 </pre></tip> </html> <Tip category="KVim"> <html><center>Get more | |
1774 screen real estate by hidding toolbar and/or menus</center> <pre> <A | |
1775 HREF="http://vim.sf.net/tip_view.php?tip_id=89">http://vim.sf.net/tip_view.php?tip_id=89</A><BR> | |
1776 | |
1777 I use gvim over console vim because gvim is much more readable (under Windows). | |
1778 However, that doesn't mean I want to dedicate screen space to things I'll | |
1779 never use (i.e. the toolbar and the menus). | |
1780 | |
1781 Anyway, you can give the following a try if you'd like. | |
1782 | |
1783 set guioptions-=T "get rid of toolbar set guioptions-=m "get rid of menu | |
1784 | |
1785 Oh, yeah. If you decide that you don't really like being without your the | |
1786 toolbar or menus, issue the following: | |
1787 | |
1788 set guioptions+=T "bring back toolbar set guioptions+=m "bring back menu | |
1789 | |
1790 see also: :he 'guioptions | |
1791 | |
1792 </pre></tip> </html> <Tip category="KVim"> | |
1793 <html><center>Encryption</center> <pre> <A | |
1794 HREF="http://vim.sf.net/tip_view.php?tip_id=90">http://vim.sf.net/tip_view.php?tip_id=90</A><BR> | |
1795 | |
1796 You can encrypt your texts by using vim. :X prompts for an encryption key. | |
1797 After writing your key, if you save your document it will be encrypted | |
1798 and no one else (but you and vim) can read your documents. If you reopen | |
1799 the file, VIM will ask for the key. If you want to disable encryption, | |
1800 just type :set key= if you forget your key you will lose your document. | |
1801 So please DO NOT forget your key, | |
1802 | |
1803 | |
1804 </pre></tip> </html> <Tip category="KVim"> | |
1805 <html><center>Dictionary completions</center> <pre> <A | |
1806 HREF="http://vim.sf.net/tip_view.php?tip_id=91">http://vim.sf.net/tip_view.php?tip_id=91</A><BR> | |
1807 | |
1808 This tip will will explain how to use the dictionary completion facilities | |
1809 provided by vim. This can be useful if you use vim to type your email, | |
1810 edit code, etc. | |
1811 | |
1812 Dictionary completion is one of many search facilites provided by Insert mode | |
1813 completion. It allows the user to get a list of keywords, based off of the | |
1814 current word at the cursor. This is useful if you are typing a long word | |
1815 (e.g. acknowledgeable) and don't want to finish typing or don't remember | |
1816 the spelling. | |
1817 | |
1818 To start, we must first tell vim where our dictionary is located. This is done | |
1819 via the 'dictionary' option. Below is an example. Your location may vary. | |
1820 See :help 'dictionary' for hints as to where you should look. | |
1821 | |
1822 :set dictionary-=/usr/share/dict/words | |
1823 dictionary+=/usr/share/dict/words | |
1824 | |
1825 Now, to use this list we have to enter insert mode completion. This is done | |
1826 by hitting CTRL-X while in insert mode. Next, you have to specify what you | |
1827 want to complete. For dictionaries use CTRL-K. Once in this mode the keys | |
1828 CTRL-N and CTRL-P will cycle through the matches. So, to complete the word | |
1829 "acknowledgeable" I would do the following in insert mode: | |
1830 | |
1831 acknow<CTRL-X><CTRL-K><CTRL-N> | |
1832 | |
1833 It can be cumbersome to type CTRL-X CTRL-K for many different completions. | |
1834 So, vim gives us a shortcut. While in insert mode CTRL-N and CTRL-P | |
1835 will cycle through a predetermined set of completion sources. By default, | |
1836 dictionary completion is not a part of this set. This set is defined by the | |
1837 'complete' option. Therefore, we must add dictionary to this as shown below: | |
1838 | |
1839 :set complete-=k complete+=k | |
1840 | |
1841 Now, while in insert mode we can type the following to complete our example: | |
1842 | |
1843 acknow<CTRL-N><CTRL-N> | |
1844 | |
1845 This shortcut may not save a whole lot of typing. However, I find that it | |
1846 requires less hand movement to only worry myself with two key combinations, | |
1847 rather than 4. | |
1848 | |
1849 I find that the completion facilites provided by vim save me a *HUGE* amount | |
1850 of typing. These savings can be realized in only a short amount of time if | |
1851 you are editing some code with functions and variables that have long names | |
1852 with underscores in them. | |
1853 | |
1854 For more help: | |
1855 help ins-completion help compl-dictionary help 'complete' help | |
1856 'dictionary' help :set+= | |
1857 | |
1858 </pre></tip> </html> <Tip category="KVim"> | |
1859 <html><center>Reducing 'doc' directory size</center> <pre> <A | |
1860 HREF="http://vim.sf.net/tip_view.php?tip_id=92">http://vim.sf.net/tip_view.php?tip_id=92</A><BR> | |
1861 | |
1862 As everyone knows, the $VIMRUNTIME/doc is increasing rapidly in size. The | |
1863 directory contained so many plain-text documents that I often compress | |
1864 them to save my diskspace. With the support of VIM's GZIP plugin, | |
1865 VIM will automatically uncompress the files when we need to read them. | |
1866 Here is my procedure: 1. If you have the source, go to 'runtime/doc' | |
1867 and edit 'doctags.c', change printf("%s\t%s\t/*", p1, argv[0]); to | |
1868 printf("%s\t%s.gz\t/*", p1, argv[0]); | |
1869 then make. This is to modify the tag, or you'll have to change the | |
1870 'tags' file by hand if you don't have doctags.c. | |
1871 2. Edit the new generated 'tags' file to rename 'help.txt.gz' back to | |
1872 'help.txt' because it's hard-written in VIM executable binary. | |
1873 :% s/help\.txt\.gz/help\.txt/g | |
1874 3. Copy the new 'tags' to $VIMRNUTIME/doc and run 'gzip *.txt; gunzip help.txt' | |
1875 | |
1876 On VIM 6.0an, we can reduce the original size (3302k) to 1326k. I don't | |
1877 know if this helps, but if someone likes to compress documents... this can | |
1878 be reffered :) | |
1879 | |
1880 | |
1881 </pre></tip> </html> <Tip category="KVim"> <html><center>if you use | |
1882 'highlight search' feature, map a key to :noh</center> <pre> <A | |
1883 HREF="http://vim.sf.net/tip_view.php?tip_id=93">http://vim.sf.net/tip_view.php?tip_id=93</A><BR> | |
1884 | |
1885 It is very convenient to use 'hlsearch' option. However it can be annoying | |
1886 to have the highlight stick longer than you want it. In order to run it | |
1887 off you have to type at least 4 keystrokes, ":noh". So, it's a good idea | |
1888 to map this to a key. I like to map it to control-n. This is the line I | |
1889 use in my .vimrc file to do it: | |
1890 | |
1891 nmap <silent> <C-N> :silent noh<CR> | |
1892 | |
1893 </pre></tip> </html> <Tip category="KVim"> <html><center>Questions | |
1894 & Answers about using tags with Vim</center> <pre> <A | |
1895 HREF="http://vim.sf.net/tip_view.php?tip_id=94">http://vim.sf.net/tip_view.php?tip_id=94</A><BR> | |
1896 | |
1897 Using tags file with Vim ------------------------ This document gives you | |
1898 a idea about the various facilities available in Vim for using a tags file | |
1899 to browse through program source files. You can read the Vim online help, | |
1900 which explains in detail the tags support, using :help tagsearch.txt. You can | |
1901 also use the help keywords mentioned in this document to read more about a | |
1902 particular command or option. To read more about a particular command or | |
1903 option use, :help <helpkeyword> in Vim. | |
1904 | |
1905 1. How do I create a tags file? | |
1906 | |
1907 You can create a tags file either using the ctags utility or using a | |
1908 custom script or utility. | |
1909 | |
1910 Help keyword(s): tag | |
1911 | |
1912 2. Where can I download the tools to generate the tags file? | |
1913 | |
1914 There are several utilities available to generate the tags file. | |
1915 Depending on the programming language, you can use any one of them. | |
1916 | |
1917 1. Exuberant ctags generates tags for the following programming | |
1918 language files: | |
1919 | |
1920 Assembler, AWK, ASP, BETA, Bourne/Korn/Zsh Shell, C, C++, COBOL, | |
1921 Eiffel, Fortran, Java, Lisp, Make, Pascal, Perl, PHP, Python, REXX, | |
1922 Ruby, S-Lang, Scheme, Tcl, and Vim. | |
1923 | |
1924 You can download exuberant ctags from <A | |
1925 HREF="http://ctags.sourceforge.net/">http://ctags.sourceforge.net/</A><BR> | |
1926 | |
1927 2. On Unix, you can use the /usr/bin/ctags utility. This utility | |
1928 is present in most of the Unix installations. | |
1929 | |
1930 3. You can use jtags for generating tags file for java programs. | |
1931 You can download jtags from: <A | |
1932 HREF="http://www.fleiner.com/jtags/">http://www.fleiner.com/jtags/</A><BR> | |
1933 | |
1934 4. You can use ptags for generating tags file for perl programs. | |
1935 You can download ptags from: <A | |
1936 HREF="http://www.eleves.ens.fr:8080/home/nthiery/Tags/">http://www.eleves.ens.fr:8080/home/nthiery/Tags/</A><BR> | |
1937 | |
1938 5. You can download scripts from the following links for | |
1939 generating tags file for verilog files: | |
1940 | |
1941 <A | |
1942 HREF="http://www.probo.com/vtags.htm">http://www.probo.com/vtags.htm</A><BR> | |
1943 <A | |
1944 HREF="http://www.cs.albany.edu/~mosh/Perl/veri-tags">http://www.cs.albany.edu/~mosh/Perl/veri-tags</A><BR> | |
1945 <A | |
1946 HREF="http://www.verilog.net/vrtags.txt">http://www.verilog.net/vrtags.txt</A><BR> | |
1947 | |
1948 6. You can download Hdrtag from the following linke: | |
1949 | |
1950 <A | |
1951 HREF="http://www.erols.com/astronaut/vim/index.html#Tags">http://www.erols.com/astronaut/vim/index.html#Tags</A><BR> | |
1952 | |
1953 This utility generates tags file for the following programming languages: | |
1954 assembly, c/c++, header files, lex, yacc,LaTeX, vim, and Maple V. | |
1955 | |
1956 7. You can also use the following scripts which are part of the Vim | |
1957 runtime files: | |
1958 | |
1959 pltags.pl - Create tags file for perl code tcltags - Create tags | |
1960 file for TCL code shtags.pl - Create tags file for shell script | |
1961 | |
1962 Help keyword(s): ctags | |
1963 | |
1964 3. How do I generate a tags file using ctags? | |
1965 | |
1966 You can generate a tags file for all the C files in the current directory | |
1967 using the following command: | |
1968 | |
1969 $ ctags *.c | |
1970 | |
1971 You can generate tags file for all the files in the current directory | |
1972 and all the sub-directories using (this applies only to exuberant ctags): | |
1973 | |
1974 $ ctags -R . | |
1975 | |
1976 You can generate tags file for all the files listed in a text file named | |
1977 flist using (this applies only to exuberant ctags) | |
1978 | |
1979 $ ctags -L flist | |
1980 | |
1981 4. How do I configure Vim to locate a tags file? | |
1982 | |
1983 You can set the 'tags' option in Vim to specify a particular tags file. | |
1984 | |
1985 set tags=/my/dir/tags | |
1986 | |
1987 Help keyword(s): 'tags', tags-option | |
1988 | |
1989 5. How do I configure Vim to use multiple tags files? | |
1990 | |
1991 The 'tags' option can specify more than one tags file. The tag filenames | |
1992 are separated using either comma or spaces. | |
1993 | |
1994 set tags=/my/dir1/tags, /my/dir2/tags | |
1995 | |
1996 6. How do I configure Vim to locate a tags file in a directory tree? | |
1997 | |
1998 Note that the following will work only in Vim 6.0 and above. You can set | |
1999 the 'tags' option to make Vim search for the tags file in a directory tree. | |
2000 For example, if the 'tags' option is set like this: | |
2001 | |
2002 set tags=tags;/ | |
2003 | |
2004 Vim will search for the file named 'tags', starting with the current | |
2005 directory and then going to the parent directory and then recursively to | |
2006 the directory one level above, till it either locates the 'tags' file or | |
2007 reaches the root '/' directory. | |
2008 | |
2009 Help keyword(s): file-searching | |
2010 | |
2011 7. How do I jump to a tag? | |
2012 | |
2013 There are several ways to jump to a tag location. | |
2014 1. You can use the 'tag' ex command. For example, | |
2015 | |
2016 :tag <tagname> | |
2017 | |
2018 will jump to the tag named <tagname>. | |
2019 2. You can position the cursor over a tag name and then press | |
2020 Ctrl-]. | |
2021 3. You can visually select a text and then press Ctrl-] to | |
2022 jump to the tag matching the selected text. | |
2023 4. You can click on the tag name using the left mouse button, | |
2024 while pressing the <Ctrl> key. | |
2025 5. You can press the g key and then click on the tag name | |
2026 using the left mouse button. | |
2027 6. You can use the 'stag' ex command, to open the tag in a new | |
2028 window. For example, | |
2029 | |
2030 :stag func1 | |
2031 | |
2032 will open the func1 definition in a new window. | |
2033 7. You can position the cursor over a tag name and then press | |
2034 Ctrl-W ]. This will open the tag location in a new window. | |
2035 | |
2036 Help keyword(s): :tag, Ctrl-], v_CTRL_], <C-LeftMouse>, | |
2037 g<LeftMouse>, :stag, Ctrl-W_] | |
2038 | |
2039 8. How do I come back from a tag jump? | |
2040 | |
2041 There are several ways to come back to the old location from a tag jump. | |
2042 1. You can use the 'pop' ex command. 2. You can press Ctrl-t. | |
2043 3. You can click the right mouse button, while pressing the | |
2044 <Ctrl> key. | |
2045 4. You can press the g key and then click the right mouse | |
2046 button. | |
2047 | |
2048 Help keyword(s): :pop, Ctrl-T, <C-RightMouse>, g<RightMouse> | |
2049 | |
2050 9. How do I jump again to a previously jumped tag location? | |
2051 | |
2052 You can use the 'tag' ex command to jump to a previously jumped tag | |
2053 location, which is stored in the tag stack. | |
2054 | |
2055 Help keyword(s): tag | |
2056 | |
2057 10. How do I list the contents of the tag stack? | |
2058 | |
2059 Vim remembers the location from which you jumped to a tag in the tag stack. | |
2060 You can list the current tag stack using the 'tags' ex command. | |
2061 | |
2062 Help keyword(s): :tags, tagstack | |
2063 | |
2064 11. How do I jump to a particular tag match, if there are multiple | |
2065 matching tags? | |
2066 | |
2067 In some situations, there can be more than one match for a tag. | |
2068 For example, a C function or definition may be present in more than one | |
2069 file in a source tree. There are several ways to jump to a specific | |
2070 tag from a list of matching tags. | |
2071 | |
2072 1. You can use the 'tselect' ex command to list all the tag | |
2073 matches. For example, | |
2074 | |
2075 :tselect func1 | |
2076 | |
2077 will list all the locations where func1 is defined. You can then | |
2078 enter the number of a tag match to jump to that location. | |
2079 2. You can position the cursor over the tag name and press g] | |
2080 to get a list of matching tags. | |
2081 3. You can visually select a text and press g] to get a list | |
2082 of matching tags. | |
2083 4. You can use the 'stselect' ex command. This will open the | |
2084 selected tag from the tag list in a new window. | |
2085 5. You can position the cursor over the tag name and press | |
2086 Ctrl-W g] to do a :stselect. | |
2087 | |
2088 Help keyword(s): tag-matchlist, :tselect, g], v_g], :stselect, | |
2089 Ctrl-W_g] | |
2090 | |
2091 12. I want to jump to a tag, if there is only one matching tag, | |
2092 otherwise a list of matching tags should be displayed. How do I do this? | |
2093 | |
2094 There are several ways to make Vim to jump to a tag directly, if there | |
2095 is only one tag match, otherwise present a list of tag matches. | |
2096 | |
2097 1. You can use the 'tjump' ex command. For example, | |
2098 | |
2099 :tjump func1 | |
2100 | |
2101 will jump to the definition func1, if it is defined only once. | |
2102 If func1 is defined multiple times, a list of matching tags will | |
2103 be presented. | |
2104 2. You can position the cursor over the tag and press g | |
2105 Ctrl-]. | |
2106 3. You can visually select a text and press g Ctrl-] to jump | |
2107 or list the matching tags. | |
2108 4. You can use the 'stjump' ex command. This will open the | |
2109 matching or selected tag from the tag list in a new window. | |
2110 5. You can press Ctrl-W g Ctrl-] to do a :stjump. | |
2111 | |
2112 Help keyword(s): :tjump, g_Ctrl-], v_g_CTRL-], :stjump, | |
2113 Ctrl-W_g_Ctrl-] | |
2114 | |
2115 13. How do browse through a list of multiple tag matches? | |
2116 | |
2117 If there are multiple tag matches, you can browse through all of them | |
2118 using several of the Vim ex commands. | |
2119 | |
2120 1. To go to the first tag in the list, use the 'tfirst' or | |
2121 'trewind' ex command. | |
2122 2. To go to the last tag in the list, use the 'tlast' ex command. | |
2123 3. To go to the next matching tag in the list, use the 'tnext' ex | |
2124 command. | |
2125 4. To go to the previous matching tag in the list, use the | |
2126 'tprevious' or 'tNext' ex command. | |
2127 | |
2128 Help keyword(s): :tfirst, :trewind, :tlast, :tnext, :tprevious, | |
2129 :tNext | |
2130 | |
2131 14. How do I preview a tag? | |
2132 | |
2133 You can use the preview window to preview a tag, without leaving the | |
2134 original window. There are several ways to preview a tag: | |
2135 | |
2136 1. You can use the 'ptag' ex command to open a tag in the | |
2137 preview window. | |
2138 2. You can position the cursor on a tag name and press Ctrl-W | |
2139 } to open the tag in the preview window. | |
2140 3. You can use the 'ptselect' ex command to do the equivalent | |
2141 of the 'tselect' ex command in the preview window. | |
2142 4. You can use the 'ptjump' ex command to do the equivalent of | |
2143 the 'tjump' ex command in the preview window. | |
2144 5. You can position the cursor on the tag and press Ctrl-W g} | |
2145 to do a :ptjump on the tag. | |
2146 | |
2147 Help keyword(s): :preview-window, :ptag, Ctrl-W_}, :ptselect, | |
2148 :ptjump, Ctrl-W_g} | |
2149 | |
2150 15. How do I browse through the tag list in a preview window? | |
2151 | |
2152 If there are multiple tag matches, you can browse through all of them | |
2153 in the preview window using several of the Vim ex commands. | |
2154 | |
2155 1. To go to the first tag in the list, use the 'ptfirst' or | |
2156 'ptrewind' ex command. | |
2157 2. To go to the last tag in the list, use the 'ptlast' ex command. | |
2158 3. To go to the next matching tag in the list, use the 'ptnext' ex | |
2159 command. | |
2160 4. To go to the previous matching tag in the list, use the | |
2161 'ptprevious' or 'ptNext' ex command. | |
2162 | |
2163 Help keyword(s): :ptfirst, :ptrewind, :ptlast, :ptnext, | |
2164 :ptprevious, :ptNext | |
2165 | |
2166 16. How do I start Vim to start editing a file at a given tag match? | |
2167 | |
2168 While starting Vim, you can use the command line option '-t' to supply | |
2169 a tag name. Vim will directly jump to the supplied tag location. | |
2170 | |
2171 Help keyword(s): -t | |
2172 | |
2173 17. How do I list all the tags matching a search pattern? | |
2174 | |
2175 There are several ways to go through a list of all tags matching a pattern. | |
2176 | |
2177 1. You can list all the tags matching a particular regular | |
2178 expression pattern by prepending the tag name with the '/' | |
2179 search character. For example, | |
2180 | |
2181 :tag /<pattern> :stag /<pattern> :ptag | |
2182 /<pattern> :tselect /<pattern> :tjump | |
2183 /<pattern> :ptselect /<pattern> :ptjump | |
2184 /<pattern> | |
2185 | |
2186 2. If you have the 'wildmenu' option set, then you can press | |
2187 the <Tab> key to display a list of all the matching tags | |
2188 in the status bar. You can use the arrow keys to move between | |
2189 the tags and then use the <Enter> key to select a tag. | |
2190 | |
2191 3. If you don't have the 'wildmenu' option set, you can still | |
2192 use the <Tab> key to browse through the list of matching | |
2193 tags. | |
2194 | |
2195 Help keyword(s): tag-regexp, wildmenu | |
2196 | |
2197 18. What options are available to control how Vim handles the tags | |
2198 file? | |
2199 | |
2200 You can use the following options to control the handling of tags file | |
2201 by Vim: | |
2202 | |
2203 1. 'tagrelative' - Controls how the file names in the tags file | |
2204 are treated. When on, the filenames are relative to | |
2205 the directory where the tags file is present. | |
2206 | |
2207 2. 'taglength' - Controls the number of significant characters | |
2208 used for recognizing a tag. | |
2209 | |
2210 3. 'tagbsearch' - Controls the method used to search the tags file | |
2211 for a tag. If this option is on, binary search is | |
2212 used to search the tags file. Otherwise, linear search | |
2213 is used. | |
2214 | |
2215 4. 'tagstack' - Controls how the tag stack is used. | |
2216 | |
2217 Help keyword(s): 'tagrelative', 'taglength', 'tagbsearch', | |
2218 'tagstack' | |
2219 | |
2220 19. Is it possible to highlight all the tags in the current file? | |
2221 | |
2222 Yes. Read the Vim online help on "tag-highlight". | |
2223 | |
2224 20. Is it possible to create a menu with all the tags in the current | |
2225 file? | |
2226 | |
2227 Yes. It is possible to create a menu with all the tags in the current | |
2228 file using a Vim script. Download the TagsMenu.vim script from the | |
2229 following link: | |
2230 | |
2231 <A | |
2232 HREF="http://members.home.net/jayglanville/tagsmenu/TagsMenu.html">http://members.home.net/jayglanville/tagsmenu/TagsMenu.html</A><BR> | |
2233 | |
2234 21. Is there a workaround to make the Ctrl-] key not to be treated as | |
2235 the telnet escape character? | |
2236 | |
2237 The default escape characters for telnet in Unix systems is Ctrl-]. | |
2238 While using Vim in a telnet session, if you use Ctrl-] to jump to a tag, | |
2239 you will get the telnet prompt. There are two ways to avoid this problem: | |
2240 | |
2241 1. Map the telnet escape character to some other character using | |
2242 the "-e <escape character>" telnet command line option | |
2243 | |
2244 2. Disable the telnet escape character using the "-E" telnet | |
2245 command line option. | |
2246 | |
2247 Help keyword(s): telnet-CTRL-] | |
2248 | |
2249 </pre></tip> </html> <Tip category="KVim"> <html><center>How do I pipe | |
2250 the output from ex commands into the text buffer?</center> <pre> <A | |
2251 HREF="http://vim.sf.net/tip_view.php?tip_id=95">http://vim.sf.net/tip_view.php?tip_id=95</A><BR> | |
2252 | |
2253 This is a *request* for a tip. I need to be able to pipe the output of a | |
2254 :blah ex command into the vim text buffer for editing. I wanted to do this | |
2255 many times for different reasons and could never find a way! | |
2256 | |
2257 I would just love to be able to do :hi --> textBuffer and examine the output | |
2258 at my own leasure scrolling up and down and using vim search commands on it. | |
2259 Same thing for :set all, and other things. Considering that cut and paste | |
2260 is horrible in windows, I can't for example do :set guioptions? then cut | |
2261 and paste! So I have to retype it, or cut and paste from the help manual. | |
2262 I really want to be able to pipe the output of ex commands into the text | |
2263 buffer. Can someone help me? | |
2264 | |
2265 </pre></tip> </html> <Tip category="KVim"> <html><center>Cooperation | |
2266 of Gvim and AutoCad [MTEXT]</center> <pre> <A | |
2267 HREF="http://vim.sf.net/tip_view.php?tip_id=96">http://vim.sf.net/tip_view.php?tip_id=96</A><BR> | |
2268 | |
2269 You can - like me :o) - use gvim, like replacement of internal AutoCad | |
2270 MTEXT editor. You need switch variable MTEXTED to "gvim" (or maybe fullpath, | |
2271 something like "c:\vim\vim60aq\gvim" ), and to your _vimrc you can put line: | |
2272 | |
2273 autocmd BufRead,BufNewFile *.tmp source c:\vim\aacad.vim | |
2274 | |
2275 And when you edit MTEXT in acad, menu AutoCad will be for your use in gvim | |
2276 (only in INSERT and VISUAL mode) | |
2277 | |
2278 [NOTE: Only I can't start gvim like gvim -y (for any other person, not so | |
2279 accustomed vith gvim) or start gvim from gvim.lnk or gvim.bat (I'am using | |
2280 windows95) and automatic skip to INSERT mode -latest word star, on end of | |
2281 script- is without functionality(?) Maybe someone advise me?? ] | |
2282 | |
2283 Well, script aacad.vim is listed here: | |
2284 | |
2285 "VIM menu for AutoCad's MTEXT editation "brz; | |
2286 mailto:brz@centrum.cz; 8. 8. 2001 " Version Mk.I | |
2287 "-------------------------------------------------------------------------- | |
2288 | |
2289 imenu &AutoCad.Insert.Space \~ vmenu &AutoCad.Insert.Space | |
2290 <Esc>`<i\~<Esc>% imenu &AutoCad.Insert.Backslash \\ | |
2291 vmenu &AutoCad.Insert.Backslash <Esc>`<i\\<Esc>% imenu | |
2292 &AutoCad.Insert.Brackets \{\}<Esc>F\i vmenu &AutoCad.Insert.Brackets | |
2293 <Esc>`>a\}<Esc>`<i\{<Esc>% imenu | |
2294 &AutoCad.Insert.Paragraph \P vmenu &AutoCad.Insert.Paragraph | |
2295 <Esc>`>a\P<Esc>% | |
2296 | |
2297 imenu &AutoCad.-SEP1- : | |
2298 | |
2299 imenu &AutoCad.Colour.Red \C1; vmenu &AutoCad.Colour.Red | |
2300 <Esc>`>a\C7;<Esc>`<i\C1;<Esc>% imenu | |
2301 &AutoCad.Colour.Yellow \C2; vmenu &AutoCad.Colour.Yellow | |
2302 <Esc>`>a\C7;<Esc>`<i\C2;<Esc>% imenu | |
2303 &AutoCad.Colour.Green \C3; vmenu &AutoCad.Colour.Green | |
2304 <Esc>`>a\C7;<Esc>`<i\C3;<Esc>% | |
2305 imenu &AutoCad.Colour.Cyan \C4; vmenu &AutoCad.Colour.Cyan | |
2306 <Esc>`>a\C7;<Esc>`<i\C4;<Esc>% | |
2307 imenu &AutoCad.Colour.Blue \C5; vmenu &AutoCad.Colour.Blue | |
2308 <Esc>`>a\C7;<Esc>`<i\C5;<Esc>% imenu | |
2309 &AutoCad.Colour.Violet \C6; vmenu &AutoCad.Colour.Violet | |
2310 <Esc>`>a\C7;<Esc>`<i\C6;<Esc>% | |
2311 imenu &AutoCad.Colour.Black \C7; vmenu &AutoCad.Colour.Black | |
2312 <Esc>`>a\C7;<Esc>`<i\C7;<Esc>% imenu | |
2313 &AutoCad.Colour.D_Grey \C8; vmenu &AutoCad.Colour.D_Grey | |
2314 <Esc>`>a\C7;<Esc>`<i\C8;<Esc>% imenu | |
2315 &AutoCad.Colour.L_Grey \C9; vmenu &AutoCad.Colour.L_Grey | |
2316 <Esc>`>a\C7;<Esc>`<i\C9;<Esc>% | |
2317 | |
2318 imenu &AutoCad.Font.Arial \fArial; vmenu &AutoCad.Font.Arial | |
2319 <Esc>`<i\fArial;<Esc>% imenu &AutoCad.Font.Symbol \Fsymbol; | |
2320 vmenu &AutoCad.Font.Symbol <Esc>`<i\Fsymbol;<Esc>% | |
2321 imenu &AutoCad.Font.RomanC \Fromanc; imenu &AutoCad.Font.RomanC | |
2322 <Esc>`<i\Fromanc;<Esc>% imenu &AutoCad.Font.RomanS \Fromans; | |
2323 vmenu &AutoCad.Font.RomanS <Esc>`<i\Fromans;<Esc>% | |
2324 imenu &AutoCad.Font.RomanD \Fromand; vmenu &AutoCad.Font.RomanD | |
2325 <Esc>`<i\Fromand;<Esc>% imenu &AutoCad.Font.RomanT \Fromant; | |
2326 vmenu &AutoCad.Font.RomanT <Esc>`<i\Fromant;<Esc>% | |
2327 | |
2328 imenu &AutoCad.Size.0_5x \H0.5x; vmenu &AutoCad.Size.0_5x | |
2329 <Esc>`<i\H0.5x;<Esc>% imenu &AutoCad.Size.1_5x \H1.5x; vmenu | |
2330 &AutoCad.Size.1_5x <Esc>`<i\H1.5x;<Esc>% imenu &AutoCad.Size.2x | |
2331 \H2x; vmenu &AutoCad.Size.2x <Esc>`<i\H2x;<Esc>% | |
2332 imenu &AutoCad.Size.3x \H3x; vmenu &AutoCad.Size.3x | |
2333 <Esc>`<i\H3x;<Esc>% | |
2334 | |
2335 imenu &AutoCad.Effects.Set_Out_1_5 \T1.5; vmenu &AutoCad.Effects.Set_Out_1_5 | |
2336 <Esc>`>a\T1;<Esc>`<i\T1.5;<Esc>% imenu | |
2337 &AutoCad.Effects.Set_Out_2 \T2; vmenu &AutoCad.Effects.Set_Out_2 | |
2338 <Esc>`>a\T1;<Esc>`<i\T2;<Esc>% | |
2339 | |
2340 imenu &AutoCad.Effects.-SEP3- : imenu | |
2341 &AutoCad.Effects.Tilt_15deg \Q15; vmenu &AutoCad.Effects.Tilt_15deg | |
2342 <Esc>`>a\Q0;<Esc>`<i\Q10;<Esc>% imenu | |
2343 &AutoCad.Effects.Tilt_20deg \Q20; vmenu &AutoCad.Effects.Tilt_20deg | |
2344 <Esc>`>a\Q0;<Esc>`<i\Q20;<Esc>% imenu | |
2345 &AutoCad.Effects.Tilt_30deg \Q30; vmenu &AutoCad.Effects.Tilt_30deg | |
2346 <Esc>`>a\Q0;<Esc>`<i\Q30;<Esc>% | |
2347 | |
2348 imenu &AutoCad.Effects.-SEP4- : imenu &AutoCad.Effects.Change_Width_0_5x | |
2349 \W0.5; vmenu &AutoCad.Effects.Change_Width_0_5x | |
2350 <Esc>`>a\W1;<Esc>`<i\W0.5;<Esc>% imenu | |
2351 &AutoCad.Effects.Change_Width_2x \W2; vmenu &AutoCad.Effects.Change_Width_2x | |
2352 <Esc>`>a\W1;<Esc>`<i\W2;<Esc>% | |
2353 | |
2354 imenu &AutoCad.Effects.-SEP5- : imenu &AutoCad.Effects.Justify_Down \A0; | |
2355 vmenu &AutoCad.Effects.Justify_Down <Esc>`<i\A0;<Esc>% | |
2356 imenu &AutoCad.Effects.Justify_Middle \A1; vmenu | |
2357 &AutoCad.Effects.Justify_Middle <Esc>`<i\A1;<Esc>% | |
2358 imenu &AutoCad.Effects.Justify_Up \A2; vmenu &AutoCad.Effects.Justify_Up | |
2359 <Esc>`<i\A2;<Esc>% imenu &AutoCad.Effects.Overlined_Characters | |
2360 \O\o<Esc>F\i vmenu &AutoCad.Effects.Overlined_Characters | |
2361 <Esc>`>a\O<Esc>`<i\o<Esc>% imenu | |
2362 &AutoCad.Effects.Underlined_Characters \L\l<Esc>F\i | |
2363 vmenu &AutoCad.Effects.Underlined_Characters | |
2364 <Esc>`>a\l<Esc>`<i\L<Esc>% imenu | |
2365 &AutoCad.Effects.Index_Top \S^; | |
2366 | |
2367 imenu &AutoCad.-SEP6- : imenu &AutoCad.Help <CR><CR>***Quit | |
2368 Editor: press Alt-F4 and 'No' ***<CR><CR> | |
2369 | |
2370 star | |
2371 | |
2372 </pre></tip> </html> <Tip category="KVim"> <html><center>How | |
2373 do I add a current time string inside Vim?</center> <pre> <A | |
2374 HREF="http://vim.sf.net/tip_view.php?tip_id=97">http://vim.sf.net/tip_view.php?tip_id=97</A><BR> | |
2375 | |
2376 This is a *request* for a tip. Sometimes (eg. editing HTML pages) I need | |
2377 to add a timestamp string to my editing buffer. On UNIX systems, I can use | |
2378 :r!date | |
2379 to get a localized date time string; but on Windows ('date' on Windows will | |
2380 query the user to input new date) or other platforms which does not have | |
2381 'date' command, how do I get a timestamp easily? | |
2382 | |
2383 </pre></tip> </html> <Tip category="KVim"> <html><center>Getting | |
2384 vim help from mailing lists and newsgroups.</center> <pre> <A | |
2385 HREF="http://vim.sf.net/tip_view.php?tip_id=98">http://vim.sf.net/tip_view.php?tip_id=98</A><BR> | |
2386 | |
2387 There have been a few "requests for tips" entered into the tips database | |
2388 lately. If you have specific questions that aren't answered by the existing | |
2389 tips, there are a couple of resources that may be more appropriate: | |
2390 | |
2391 The mailing list vim@vim.org is for vim users. If you send an email | |
2392 to vim-help@vim.org, you'll get a message back telling you how | |
2393 to subscribe, as well as how to request old messages and contact | |
2394 the list maintainer. This mailing list is also archived at <A | |
2395 HREF="http://groups.yahoo.com/group/vim.">http://groups.yahoo.com/group/vim.</A><BR> | |
2396 | |
2397 The newsgroup comp.editors discusses many different editors, but most of | |
2398 the traffic is about vim. When posting, it is appreciated if you include | |
2399 "vim" in the subject line. The comp.editors newsgroup is archived at <A | |
2400 HREF="http://groups.google.com/groups?hl=en&safe=off&group=comp.editors.">http://groups.google.com/groups?hl=en&safe=off&group=comp.editors.</A><BR> | |
2401 | |
2402 Using the tips database for asking questions is not likely to work well. | |
2403 For example, if you ask a question titled "Searching for strings in a file" | |
2404 and I read this site and see that tip, I'm not going to read it if I already | |
2405 know how to search for strings in a file. In comp.editors and vim@vim.org, | |
2406 people expect to find questions from others and are therefore more likely | |
2407 to see your questions. | |
2408 | |
2409 After finding the answer to your question, please consider whether it would | |
2410 make an appropriate tip, and if so, add it to the tips database. | |
2411 | |
2412 </pre></tip> </html> <Tip category="KVim"> <html><center>How to | |
2413 tell what syntax highlighting group *that* is!</center> <pre> <A | |
2414 HREF="http://vim.sf.net/tip_view.php?tip_id=99">http://vim.sf.net/tip_view.php?tip_id=99</A><BR> | |
2415 | |
2416 Here's a (what should be a one-line) map to help you tell just what syntax | |
2417 highlighting groups the item under the cursor actually is: | |
2418 | |
2419 map <F10> :echo "hi<" | |
2420 . synIDattr(synID(line("."),col("."),1),"name") . '> trans<' | |
2421 . synIDattr(synID(line("."),col("."),0),"name") . "> lo<" | |
2422 . synIDattr(synIDtrans(synID(line("."),col("."),1)),"name") . ">"<CR> | |
2423 | |
2424 Once known you can override the current highlighting with whatever you want. | |
2425 If you're debugging a syntax highlighting file (a rare occupation), sometimes | |
2426 you'll wish to know the entire chain of syntax highlighting. For that, | |
2427 check out | |
2428 | |
2429 <A | |
2430 HREF="http://www.erols.com/astronaut/vim/vimscript/hilinks.vim">http://www.erols.com/astronaut/vim/vimscript/hilinks.vim</A><BR> | |
2431 | |
2432 </pre></tip> </html> <Tip category="KVim"> <html><center>Jump to | |
2433 tag (e.g. help topic) with German keyboard (PC)</center> <pre> <A | |
2434 HREF="http://vim.sf.net/tip_view.php?tip_id=100">http://vim.sf.net/tip_view.php?tip_id=100</A><BR> | |
2435 | |
2436 You're a newbie in vim and need some ":help"? Well, help.txt reads: | |
2437 | |
2438 "Jump to a subject: Position the cursor on a tag between |bars| and hit | |
2439 CTRL-]." | |
2440 | |
2441 Unfortunately there is no "]" key on German keyboards. On Win32 try CTRL-+ | |
2442 (Strg-+), on Linux console I use CTRL-AltGr-9 (Strg-AltGr-9). | |
2443 | |
2444 Kind regards | |
2445 | |
2446 </pre></tip> </html> <Tip category="KVim"> <html><center>Change automatically | |
2447 to the directory the file in the current buffer is in</center> <pre> <A | |
2448 HREF="http://vim.sf.net/tip_view.php?tip_id=101">http://vim.sf.net/tip_view.php?tip_id=101</A><BR> | |
2449 | |
2450 To change automatically to the directory the file in the current buffer is | |
2451 in add a line (below) to the file .vimrc . The file .vimrc should have | |
2452 the following if-statement to control the autocmd feature: | |
2453 | |
2454 if has("autocmd") | |
2455 | |
2456 < ... lot of autocmd stuff ... > | |
2457 | |
2458 " Change to the directory the file in your current buffer is in autocmd | |
2459 BufEnter * :cd %:p:h | |
2460 | |
2461 endif " has("autocmd") | |
2462 | |
2463 Add the line above the endif and restart vim/gvim. | |
2464 | |
2465 </pre></tip> </html> <Tip category="KVim"> <html><center>smart | |
2466 mapping for tab completion</center> <pre> <A | |
2467 HREF="http://vim.sf.net/tip_view.php?tip_id=102">http://vim.sf.net/tip_view.php?tip_id=102</A><BR> | |
2468 | |
2469 I'm used to complete words with <tab>, however when editing source | |
2470 I can't just map that to vim keyword completion because I sometime need to | |
2471 insert real tabs, since it mostly happen when at the beginning of the line or | |
2472 after a ; and before a one line comma (java, c++ or perl anyone...) I've come | |
2473 to find the following really usefull This is how you can map the <tab> | |
2474 key in insert mode while still being able to use it when at the start of | |
2475 a line or when the preceding char is not a keyword character. in a script | |
2476 file in a plugin directory or in your .vimrc file: first define a function | |
2477 which returns a <tab> or a <C-N> depending on the context: | |
2478 | |
2479 function InsertTabWrapper() | |
2480 let col = col('.') - 1 if !col || getline('.')[col - 1] !~ '\k' | |
2481 return "\<tab>" | |
2482 else | |
2483 return "\<c-p>" | |
2484 endif | |
2485 endfunction | |
2486 | |
2487 then define the appropriate mapping: inoremap <tab> | |
2488 <c-r>=InsertTabWrapper()<cr> | |
2489 | |
2490 the trick here is the use of the <c-r>= in insert mode to be able to | |
2491 call your function without leaving insert mode. :help i_CTRL-R Benoit | |
2492 | |
2493 </pre></tip> </html> <Tip category="KVim"> <html><center>Move | |
2494 to next/previous line with same indentation</center> <pre> <A | |
2495 HREF="http://vim.sf.net/tip_view.php?tip_id=103">http://vim.sf.net/tip_view.php?tip_id=103</A><BR> | |
2496 | |
2497 When working with Python and other languages which don't use braces, it's | |
2498 useful to be able to jump to and from lines which have the same indentation | |
2499 as the line you are currently on. | |
2500 | |
2501 nn <M-,> k:call search ("^". matchstr (getline (line (".")+ 1), | |
2502 '\(\s*\)') ."\\S", 'b')<CR>^ nn <M-.> :call search ("^". matchstr | |
2503 (getline (line (".")), '\(\s*\)') ."\\S")<CR>^ | |
2504 | |
2505 will map Alt-< and Alt-> in Normal mode to upward and downward searching | |
2506 for lines with the same indent as the current line. | |
2507 | |
2508 </pre></tip> </html> <Tip category="KVim"> <html><center>using | |
2509 vim to complement Perl's DBI::Shell</center> <pre> <A | |
2510 HREF="http://vim.sf.net/tip_view.php?tip_id=104">http://vim.sf.net/tip_view.php?tip_id=104</A><BR> | |
2511 | |
2512 DBI::Shell is a Perl module that is used as a shell interface to Perl's | |
2513 popular DBI (database interface) package. Forget your favorite SQL navigation | |
2514 gui and give this method a shot. This has only been tested in UNIX. | |
2515 | |
2516 1. run dbish (runs DBI::Shell; installed with DBI::Shell) and connect to any | |
2517 database 2. in dbish, set /format box 3. enter your query 4. to execute query, | |
2518 type "/ | vim -" | |
2519 | |
2520 This runs the query and pipes the output to the standard input of vim. Here | |
2521 are some follow-up tips: -use gvim instead of vim so a new window will pop | |
2522 up -set nowrap once in vim -make a syntax highlighting file for me! | |
2523 | |
2524 -Adam Monsen | |
2525 | |
2526 </pre></tip> </html> <Tip category="KVim"> | |
2527 <html><center>combining move and scroll</center> <pre> <A | |
2528 HREF="http://vim.sf.net/tip_view.php?tip_id=105">http://vim.sf.net/tip_view.php?tip_id=105</A><BR> | |
2529 | |
2530 I sometimes found myself moving down a few lines with j, then scrolling | |
2531 down about the same number of lines with <C-E> to put the cursor in | |
2532 roughly the same place as it started. I decided I wanted to map <C-J> | |
2533 (and <C-K>, respectively) to the move-and-scroll operation. First, I did | |
2534 | |
2535 :map <C-J> <C-E>j | |
2536 | |
2537 This was pretty good, but behaved funny at the beginning and end of files. | |
2538 Then, I realized that <C-D> already combined move and scroll, so I | |
2539 figured that giving <C-D> a count of 1 would do it: | |
2540 | |
2541 :map <C-J> 1<C-D> | |
2542 | |
2543 Unfortunately, this permanently attaches a count to <C-D> (ugh!), | |
2544 so I have to undo that: | |
2545 | |
2546 :map <C-J> 1<C-D>:set scroll=0<CR> | |
2547 | |
2548 This has the drawback of not necessarily resetting scroll to its original | |
2549 value, but since I never change scroll, it's good enough for me. It would be | |
2550 nice if there were a version of <C-D> that did not have the side-affect | |
2551 of changing scroll. | |
2552 | |
2553 Happy vimming, Andrew | |
2554 | |
2555 </pre></tip> </html> <Tip category="KVim"> | |
2556 <html><center>Supersimple one-line solution</center> <pre> <A | |
2557 HREF="http://vim.sf.net/tip_view.php?tip_id=106">http://vim.sf.net/tip_view.php?tip_id=106</A><BR> | |
2558 | |
2559 Hallo, next solution for _most_simple_ signature rotater: You can | |
2560 only put one line to your .vimrc || _vimrc: map <Leader>ms :e | |
2561 c:\sign.txt<CR>ggV/--<CR>k"*xG$a<C-R><C-O>*<Esc>:w<CR>:bd<CR>G$a<C-M><Esc>"*P | |
2562 | |
2563 Must exist file (from eg above) c:\sign.txt, with content: -- first signature | |
2564 -- second signature -- third signature -- | |
2565 | |
2566 When You finished mail, only call shortcut \ms and 'first signature' will | |
2567 be insert in your mail. In c:\sign.txt will be first signature pushed | |
2568 to the end of this file. When You want use other signature, only press | |
2569 'u' and \ms again (Or You can change \ms to e.g. <F12>, indeed. ) | |
2570 You can change this and append one part like 'basic' from command and | |
2571 append 'changing' part from .signature file, as you like... Ok, one | |
2572 unpleasant thing is here: your signature must not contain '--' (signature | |
2573 separator)... Anyhow, I find it useful brz* <brz@centrum.cz> <A | |
2574 HREF="http://brz.d2.cz/">http://brz.d2.cz/</A><BR> | |
2575 | |
2576 </pre></tip> </html> <Tip category="KVim"> | |
2577 <html><center>convert enum to string table</center> <pre> <A | |
2578 HREF="http://vim.sf.net/tip_view.php?tip_id=107">http://vim.sf.net/tip_view.php?tip_id=107</A><BR> | |
2579 | |
2580 When testing your own C/C++ programs you sometimes wish to have a trace output, | |
2581 which shows you, which enum value is used. You can do this by creating | |
2582 a string table for that enum type, which contains the enum identifyer as | |
2583 a string. e.g. printf ("%s", MyEnumStringTable [ MyEnumVal] ); | |
2584 | |
2585 You can create the complete string table by - marking the lines containing | |
2586 the complete typedef enum - select menu C/C++.transform enum2Stringtab | |
2587 | |
2588 You can create string table entries by - marking the lines within the typedef | |
2589 enum - select menu C/C++.transform enum2String | |
2590 | |
2591 This makes it easy to keep the enum (on changes) consistent to the string | |
2592 table. | |
2593 | |
2594 Add the following lines to your _GVIMRC file: 31amenu C/C++.transform\ | |
2595 enum2Stringtab :s#[ ]*\\(\\w\\+\\)#/* \\1 */ | |
2596 "\\1"#<CR>o};<ESC>uOstatic const char* const Names[] = | |
2597 {<ESC><CR>/sdfsdf<CR> 31vmenu C/C++.transform\ enum2Stringtab | |
2598 :s#[ ]*\\(\\w\\+\\)#/* \\1 */ "\\1"#<CR>o};<ESC>uOstatic | |
2599 const char* const Names[] = {<ESC><CR>/sdfsdf<CR> | |
2600 | |
2601 31amenu C/C++.transform\ enum2String :s#[ ]*\\(\\w\\+\\)#/* | |
2602 \\1 */ "\\1"#<CR>o}<ESC>/sdfsdf<CR> 31vmenu | |
2603 C/C++.transform\ enum2String :s#[ ]*\\(\\w\\+\\)#/* \\1 */ | |
2604 "\\1"#<CR>o}<ESC>/sdfsdf<CR> | |
2605 | |
2606 hint: '/sdfsdf' is added for deactivating search highlighting, ok, you'll | |
2607 sure find a better way to do this. | |
2608 | |
2609 </pre></tip> </html> <Tip category="KVim"> <html><center>Toggle | |
2610 a fold with a single keystroke</center> <pre> <A | |
2611 HREF="http://vim.sf.net/tip_view.php?tip_id=108">http://vim.sf.net/tip_view.php?tip_id=108</A><BR> | |
2612 | |
2613 When viewing/editing a folded file, it is often needed to inspect/close | |
2614 some fold. To speed up these operation use the following (put in your | |
2615 $HOME/.vimrc): | |
2616 | |
2617 " Toggle fold state between closed and opened. " " If there is no fold at | |
2618 current line, just moves forward. " If it is present, reverse it's state. | |
2619 fun! ToggleFold() | |
2620 if foldlevel('.') == 0 | |
2621 normal! l | |
2622 else | |
2623 if foldclosed('.') < 0 | |
2624 . foldclose | |
2625 else | |
2626 . foldopen | |
2627 endif | |
2628 endif " Clear status line echo | |
2629 endfun | |
2630 | |
2631 " Map this function to Space key. noremap <space> :call | |
2632 ToggleFold()<CR> | |
2633 | |
2634 See :help folding for more information about folding. | |
2635 | |
2636 </pre></tip> </html> <Tip category="KVim"> | |
2637 <html><center>jump between files</center> <pre> <A | |
2638 HREF="http://vim.sf.net/tip_view.php?tip_id=109">http://vim.sf.net/tip_view.php?tip_id=109</A><BR> | |
2639 | |
2640 Often I know I'm likely to edit many files. I run 'vim *.pl' and get a whole | |
2641 bunch of open files. | |
2642 | |
2643 To make jumping between files to a pleasure, I defined to mapss: | |
2644 | |
2645 map <f1> :previous<cr> map <f2> :next<cr> | |
2646 | |
2647 Press F1 to go back and F2 to go forward. | |
2648 | |
2649 -- Kirill | |
2650 | |
2651 </pre></tip> </html> <Tip category="KVim"> | |
2652 <html><center>text->html table converter.</center> <pre> <A | |
2653 HREF="http://vim.sf.net/tip_view.php?tip_id=110">http://vim.sf.net/tip_view.php?tip_id=110</A><BR> | |
2654 | |
2655 Below are two functions and a mapping which will convert lines of plain | |
2656 text into HTML table code. For example, you have several lines like: | |
2657 ----------------------------------------------- 1 2 3 | |
2658 | |
2659 4 5 6 --------------------------------------------------- by visualizing | |
2660 all the 7 lines and press <F5>, you can change the text into | |
2661 <table><tr> | |
2662 <td>1</td> <td>2</td> <td>3</td> | |
2663 </tr><tr> | |
2664 <td>4</td> <td>5</td> <td>6</td> | |
2665 </tr></table> which will eventually render into a table. So the | |
2666 rule is: Every line is a table item, every empty line means starting of a | |
2667 new table row. | |
2668 | |
2669 "A text->html table code converter "By: Wenzhi Liang wzhliang@yahoo.com | |
2670 "You can distribute/change this file freely as long as you keep the title | |
2671 area. Thanks | |
2672 | |
2673 func Table() | |
2674 let end=line("'>") let start=line("'<") let i=start | |
2675 | |
2676 wh i <= end | |
2677 exe ":" . i let e=Empty() if e == 1 | |
2678 exe "normal I</tr><tr>" | |
2679 else | |
2680 exe "normal I<td>A</td>>>" | |
2681 endif let i=i+1 | |
2682 endwh | |
2683 | |
2684 exe "normal o</tr></table><<" exe ":" . start exe | |
2685 "normal O<table><tr><<" | |
2686 endfunc | |
2687 | |
2688 vmap <F5> <ESC>:call Table()<CR> | |
2689 | |
2690 func Empty() | |
2691 let line_nr= line (".") let a=getline ( line_nr ) let m=match(a, | |
2692 "\\S") if m == -1 | |
2693 return 1 | |
2694 else | |
2695 return 0 | |
2696 endif | |
2697 endfunc | |
2698 | |
2699 </pre></tip> </html> <Tip category="KVim"> <html><center>Printing with | |
2700 syntax highlighting independent of your normal highlighting</center> <pre> <A | |
2701 HREF="http://vim.sf.net/tip_view.php?tip_id=111">http://vim.sf.net/tip_view.php?tip_id=111</A><BR> | |
2702 | |
2703 I have found it undesirable to use :hardcopy directly because it uses the | |
2704 current syntax highlighting to determine how to print the text. For example, | |
2705 I like to print comments in italics, but I don't like italic fonts on the | |
2706 screen. This tip will show you how to set up a colorscheme for printing and | |
2707 use it only when you print. | |
2708 | |
2709 I copied an existing colorscheme to ~/.vim/colors/print.vim, and changed | |
2710 all the lines like this: | |
2711 | |
2712 highlight Normal ctermbg=DarkGrey ctermfg=White guifg=White guibg=grey20 | |
2713 to this: | |
2714 highlight clear Normal | |
2715 | |
2716 Then I set the syntax groups how I wanted them to be printed on the printer: | |
2717 | |
2718 highlight Comment term=italic cterm=italic gui=italic highlight | |
2719 Constant term=bold cterm=bold gui=bold etc.... | |
2720 | |
2721 I then defined the following command in my .vimrc file: | |
2722 | |
2723 command! -nargs=* Hardcopy call DoMyPrint("<args>") | |
2724 | |
2725 And, finally, I defined this function in my .vimrc: | |
2726 | |
2727 function DoMyPrint(args) | |
2728 let colorsave=g:colors_name color print exec "hardcopy ".a:args exec | |
2729 'color '.colorsave | |
2730 endfunction | |
2731 | |
2732 After this is complete, you can do: | |
2733 :Hardcopy > /tmp/out.ps | |
2734 or just | |
2735 :Hardcopy | |
2736 (Note the capital H) | |
2737 | |
2738 </pre></tip> </html> <Tip category="KVim"> <html><center>Back | |
2739 and forth between indented lines again</center> <pre> <A | |
2740 HREF="http://vim.sf.net/tip_view.php?tip_id=112">http://vim.sf.net/tip_view.php?tip_id=112</A><BR> | |
2741 | |
2742 Paul Wright posted a tip which explained how to jump back and forth between | |
2743 lines with the same indentation level. I do this a lot, so I came up with | |
2744 this slightly more comprehensive solution. | |
2745 | |
2746 The example mappings below work as follows: | |
2747 | |
2748 [l and ]l jump to the previous or the next line with the same indentation | |
2749 level as the one you're currently on. | |
2750 | |
2751 [L and ]L jump to the previous or the next line with an indentation level | |
2752 lower than the line you're currently on. | |
2753 | |
2754 These movements also work in visual mode and (only as of one of the 6.0 alpha | |
2755 versions) in operator pending mode, meaning that you can do a d]l. The motion | |
2756 is specified as being exclusive when in operator pending mode. | |
2757 | |
2758 When might you use this? If you're writing programs in Python, Haskell, | |
2759 or editing XML files, they will be very useful. E.g. in XML you can jump to | |
2760 the outer enclosing tag, or the next matching tag. I use it for practically | |
2761 anything I edit, so it's not limited to this. | |
2762 | |
2763 " " NextIndent() " " Jump to the next or previous line that has the same level | |
2764 or a lower " level of indentation than the current line. " " exclusive (bool): | |
2765 true: Motion is exclusive " false: Motion is inclusive " | |
2766 fwd (bool): true: Go to next line " false: Go to | |
2767 previous line " lowerlevel (bool): true: Go to line with lower indentation | |
2768 level " false: Go to line with the same indentation level | |
2769 " skipblanks (bool): true: Skip blank lines " false: | |
2770 Don't skip blank lines | |
2771 | |
2772 function! NextIndent(exclusive, fwd, lowerlevel, skipblanks) | |
2773 let line = line('.') let column = col('.') let lastline = line('$') | |
2774 let indent = indent(line) let stepvalue = a:fwd ? 1 : -1 | |
2775 | |
2776 while (line > 0 && line <= lastline) | |
2777 let line = line + stepvalue if ( ! a:lowerlevel && | |
2778 indent(line) == indent || | |
2779 \ a:lowerlevel && indent(line) < indent) | |
2780 if (! a:skipblanks || strlen(getline(line)) > 0) | |
2781 if (a:exclusive) | |
2782 let line = line - stepvalue | |
2783 endif exe line exe "normal " column . "|" | |
2784 return | |
2785 endif | |
2786 endif | |
2787 endwhile | |
2788 endfunc | |
2789 | |
2790 " Moving back and forth between lines of same or lower indentation. | |
2791 nnoremap <silent> [l :call NextIndent(0, 0, 0, 1)<cr> | |
2792 nnoremap <silent> ]l :call NextIndent(0, 1, 0, 1)<cr> | |
2793 nnoremap <silent> [L :call NextIndent(0, 0, 1, 1)<cr> | |
2794 nnoremap <silent> ]L :call NextIndent(0, 1, 1, 1)<cr> vnoremap | |
2795 <silent> [l <esc>:call NextIndent(0, 0, 0, 1)<cr>m'gv'' | |
2796 vnoremap <silent> ]l <esc>:call NextIndent(0, 1, 0, | |
2797 1)<cr>m'gv'' vnoremap <silent> [L <esc>:call NextIndent(0, 0, | |
2798 1, 1)<cr>m'gv'' vnoremap <silent> ]L <esc>:call NextIndent(0, | |
2799 1, 1, 1)<cr>m'gv'' onoremap <silent> [l :call NextIndent(0, 0, 0, | |
2800 1)<cr> onoremap <silent> ]l :call NextIndent(0, 1, 0, 1)<cr> | |
2801 onoremap <silent> [L :call NextIndent(1, 0, 1, 1)<cr> onoremap | |
2802 <silent> ]L :call NextIndent(1, 1, 1, 1)<cr> | |
2803 | |
2804 </pre></tip> </html> <Tip category="KVim"> <html><center>Translator | |
2805 in vim (Windows solution)</center> <pre> <A | |
2806 HREF="http://vim.sf.net/tip_view.php?tip_id=113">http://vim.sf.net/tip_view.php?tip_id=113</A><BR> | |
2807 | |
2808 Hallo, today I found script "translate.vim", but on Windows this will be | |
2809 probably difficult to run it (maybe with Cygwin is it possible). I've simpler | |
2810 solution of keymap for vim interlacing to dictionary: Must exist file with | |
2811 vocabulary (e.g. "an-cs.txt"), which is called for word under cursor. In | |
2812 'normal' is only displayed window with translations, in 'insert' is word | |
2813 under cursor deleted and is insert selected form of word from translantion | |
2814 window (select it by mouse and than press right button: It works fine on | |
2815 W2k). Key _F12_ is looking for "word", shifted _S-F12_ is looking for | |
2816 "pattern". For windows is needed agrep, which is localy placed on <A | |
2817 HREF="http://www.tgries.de/agrep/index.html">http://www.tgries.de/agrep/index.html</A><BR> | |
2818 | |
2819 map <F12> b"*yw<Esc>:! c:/bin/agrep -wih | |
2820 <C-R>* "c:/dict/an-cs.txt"<CR> imap <F12> | |
2821 <Esc>b"*yw<Esc>:! c:/bin/agrep -wih <C-R>* | |
2822 "c:/dict/an-cs.txt"<CR>dwi <C-R>* map <S-F12> | |
2823 b"*yw<Esc>:! c:/bin/agrep -ih <C-R>* "c:/dict/an-cs.txt"<CR> | |
2824 imap <S-F12> <Esc>b"*yw<Esc>:! c:/bin/agrep -ih <C-R>* | |
2825 "c:/dict/an-cs.txt"<CR>dwi <C-R>* | |
2826 | |
2827 brz* <brz@centrum.cz> | |
2828 | |
2829 </pre></tip> </html> <Tip category="KVim"> | |
2830 <html><center>Browsing by paragraph</center> <pre> <A | |
2831 HREF="http://vim.sf.net/tip_view.php?tip_id=114">http://vim.sf.net/tip_view.php?tip_id=114</A><BR> | |
2832 | |
2833 It can be done by reaching the blank lines in up and down directions just | |
2834 by pressing | |
2835 | |
2836 { ---- For going to the blank line above the paragraph } ---- For | |
2837 going to the blank line below the paragraph | |
2838 | |
2839 </pre></tip> </html> <Tip category="KVim"> | |
2840 <html><center>Browsing by paragraph</center> <pre> <A | |
2841 HREF="http://vim.sf.net/tip_view.php?tip_id=115">http://vim.sf.net/tip_view.php?tip_id=115</A><BR> | |
2842 | |
2843 It can be done by reaching the blank lines in up and down directions just | |
2844 by pressing | |
2845 | |
2846 { ---- For going to the blank line above the paragraph } ---- For | |
2847 going to the blank line below the paragraph | |
2848 | |
2849 </pre></tip> </html> <Tip category="KVim"> <html><center>Search all | |
2850 occurances of the word under cursor in all the open files</center> <pre> <A | |
2851 HREF="http://vim.sf.net/tip_view.php?tip_id=116">http://vim.sf.net/tip_view.php?tip_id=116</A><BR> | |
2852 | |
2853 Sometimes it is useful to know all the occurances of the word under cursor in | |
2854 all the open files. This can be done by pressing [I ( bracket and capital I ) | |
2855 . it shows the results found in the command window. | |
2856 | |
2857 </pre></tip> </html> <Tip category="KVim"> <html><center>FAST | |
2858 SEARCH ACROSS THE PROJECT</center> <pre> <A | |
2859 HREF="http://vim.sf.net/tip_view.php?tip_id=117">http://vim.sf.net/tip_view.php?tip_id=117</A><BR> | |
2860 | |
2861 Searching for a word across the project wastes most of the | |
2862 developres time, which can be avoided by the use of GNU Id_utils | |
2863 with VIM. The procedure needs to be followed is as follows: | |
2864 download GNU idutils 3.2d (mkid,lid,fid,fnid,xtokid) from <A | |
2865 HREF="http://www.mossbayeng.com/~ron/vim/builds.html">http://www.mossbayeng.com/~ron/vim/builds.html</A><BR> | |
2866 | |
2867 uncompress and store these files in the directory from where vim is running. | |
2868 | |
2869 goto the top level directory of the project, and run mkid, it will create ID | |
2870 file in that directory (As it is time consuming process, so be patient). copy | |
2871 this file ID to the directory from where vim is running. | |
2872 | |
2873 USAGE: | |
2874 | |
2875 Put these lines in your .vimrc: | |
2876 | |
2877 map _u :call ID_search()<Bar>execute "/\\<" . g:word | |
2878 . "\\>"<CR> map _n :n<Bar>execute "/\\<" . g:word | |
2879 . "\\>"<CR> | |
2880 | |
2881 function ID_search() | |
2882 let g:word = expand("<cword>") let x = system("lid --key=none | |
2883 ". g:word) let x = substitute(x, "\n", " ", "g") execute "next " . x | |
2884 endfun | |
2885 | |
2886 To use it, place the cursor on a word, type "_u" and vim will load the file | |
2887 that contains the word. Search for the next ocurance of the word in the | |
2888 same file with "n". Go to the next file with "_n". | |
2889 | |
2890 The mapping of "_u" and "_n" can be done to some other key as per your | |
2891 preference but I use ^K and ^L for this purpose. | |
2892 | |
2893 </pre></tip> </html> <Tip category="KVim"> <html><center>Configuring | |
2894 gVim as Internet Explorer 'View Source' editor</center> <pre> <A | |
2895 HREF="http://vim.sf.net/tip_view.php?tip_id=118">http://vim.sf.net/tip_view.php?tip_id=118</A><BR> | |
2896 | |
2897 Within the registry, you can specify the source editor to be used by Internet | |
2898 Explorer when {View|Source} is selected. Unfortunately, you can't specify a | |
2899 quoted filename argument here, i.e. "%1". The editor specified is supposed | |
2900 to handle filenames which contain spaces. This will cause problems for | |
2901 Vim because Vim treats each space as an argument separator. If an unquoted | |
2902 filename contains spaces, Vim treats the filename as multiple arguments and | |
2903 will open multiple files instead of one. To workaround this problem a quoted | |
2904 filename has to be passed to Vim. This can be done by creating the following | |
2905 Visual Basic Script file gVim.vbs: | |
2906 | |
2907 '--- gVim.vbs ----------------------------------------------------------------- | |
2908 'function: Start gvim, combining multiple arguments to single file argument. | |
2909 'changes: 20010905: Quoted 'oWShell.Run' filename argument, allowing spaces. | |
2910 ' 20010518: Created. 'author: Freddy Vulto <fvu@fvu.myweb.nl> | |
2911 | |
2912 ' Making variable declaration mandatory | |
2913 option explicit | |
2914 | |
2915 dim oWShell, sArg, sFile | |
2916 | |
2917 ' Create script object | |
2918 set oWShell = CreateObject("wscript.shell") | |
2919 ' Loop through arguments | |
2920 for each sArg in wscript.arguments | |
2921 ' Add argument to filename | |
2922 sFile = sFile & sArg & " " | |
2923 next | |
2924 ' Remove excess space | |
2925 sFile = Trim(sFile) | |
2926 ' Run Vim with file argument. Additional arguments: ' -R: View file | |
2927 readonly ' -c "set syntax=html": Use HTML syntax-highlighting ' NOTE: | |
2928 Use "-c ""set ft=html""" to make it work for Vim v6. | |
2929 oWShell.Run _ | |
2930 """D:\Programs\Vim\Vim58\gvim.exe """ & _ "-R """ & sFile & """ " & _ | |
2931 "-c ""set syntax=html""" | |
2932 | |
2933 ' Destroy script object | |
2934 set oWShell = NOTHING | |
2935 | |
2936 The source editor now can be specified by adding the following key to the | |
2937 registry: | |
2938 | |
2939 HKEY_LOCAL_MACHINE |- Software | |
2940 |- Microsoft | |
2941 |- Internet Explorer | |
2942 |- View Source Editor | |
2943 |- Editor Name (Default) = D:\Programs\Vim\gvim.vbs | |
2944 | |
2945 Freddy Vulto <fvu@fvu.myweb.nl> <A | |
2946 HREF="http://fvu.myweb.nl/Projects/Vim/Web/vim.htm">http://fvu.myweb.nl/Projects/Vim/Web/vim.htm</A><BR> | |
2947 | |
2948 </pre></tip> </html> <Tip category="KVim"> | |
2949 <html><center>Explorer startup and shutdown</center> <pre> <A | |
2950 HREF="http://vim.sf.net/tip_view.php?tip_id=119">http://vim.sf.net/tip_view.php?tip_id=119</A><BR> | |
2951 | |
2952 I really like the new explorer window, but I wanted it to function a little | |
2953 more seemlessly in the editor. The following code does two things. First, | |
2954 the explorer is started when vim is started. I also noticed and fixed | |
2955 that the explorers size is not equal to the window size, hence the strange | |
2956 behavior when popping between two windows. The other major function of | |
2957 the code is to close the explorer when it's the only window that's left. | |
2958 I'd actually like to take this a step further and close the window if the | |
2959 last _document_ window is closed. I'd prefer that multiple explorers or help | |
2960 windows don't keep the application running - only having a file open keeps the | |
2961 application running. But I didn't see an easy way to do this... anyone else? | |
2962 | |
2963 BTW, thank you Bram for the help figuring this out. | |
2964 | |
2965 Code (which currently lives in my _vimrc): | |
2966 | |
2967 " FILE BROWSER STARTUP func OpenFileWindow() | |
2968 " :runtime plugin/*.vim " this would be useful if you were | |
2969 calling this | |
2970 " function from the .vimrc directly | |
2971 let g:explDetailedList=1 " show size and date by default let | |
2972 g:explVertical=1 " Split vertically let g:explStartRight=0 | |
2973 " Put new explorer window to the left of the current window :Sexplore | |
2974 set nonu set winwidth=15 " Make the width of the window match | |
2975 the explorer setting "let g:explVertical=0 " Split vertically | |
2976 doautocmd fileExplorer BufEnter " Forces the directory refresh to | |
2977 occur :winc l " change to the document window | |
2978 endfunc | |
2979 | |
2980 func CloseIfLast() | |
2981 if exists("b:completePath") " this is how I determine that I'm | |
2982 in an explorer window | |
2983 let n = winnr() wincmd p if n == winnr() | |
2984 quit " quit the window | |
2985 endif wincmd p | |
2986 endif | |
2987 endfunc | |
2988 | |
2989 if has("autocmd") | |
2990 if !exists("rudyautocommands") | |
2991 let rudyautocommands = 1 autocmd VimEnter * call | |
2992 OpenFileWindow() autocmd WinEnter * call CloseIfLast() | |
2993 | |
2994 endif | |
2995 endif | |
2996 | |
2997 </pre></tip> </html> <Tip category="KVim"> <html><center>Compiling | |
2998 Java with Sun JDK (javac) within VIM</center> <pre> <A | |
2999 HREF="http://vim.sf.net/tip_view.php?tip_id=120">http://vim.sf.net/tip_view.php?tip_id=120</A><BR> | |
3000 | |
3001 The $VIMRUNTIME/compiler has 'jikes.vim', but there's nothing for traditional | |
3002 Sun JDK(javac), so I tried (Only tested on Win 2000): | |
3003 | |
3004 " Vim Compiler File javac.vim " Compiler: Sun/IBM JDK: Javac | |
3005 | |
3006 if exists("current_compiler") | |
3007 finish | |
3008 endif let current_compiler = "javac" | |
3009 | |
3010 " Javac defaults to printing output on stderr and no options can convert, | |
3011 so we have to set 'shellpipe' setlocal shellpipe=2> " 2> works on Win | |
3012 NT and UNIX setlocal makeprg=javac\ #<.java setlocal errorformat=%f:%l:%m | |
3013 " Sorry I'm not familiar with 'errorformat', so I set it very simple. | |
3014 | |
3015 </pre></tip> </html> <Tip category="KVim"> <html><center>Using | |
3016 vim as a syntax-highlighting pager</center> <pre> <A | |
3017 HREF="http://vim.sf.net/tip_view.php?tip_id=121">http://vim.sf.net/tip_view.php?tip_id=121</A><BR> | |
3018 | |
3019 If you want to use Vim's syntax highlighting in a "more"-style pager, here's | |
3020 one way to set it up: | |
3021 | |
3022 First, create a vimrc like the following -- I called mine ~/.vimrc.more | |
3023 | |
3024 ---8<---cut here---8<--- " No compatibility -- necessary for mappings | |
3025 to work. set nocompatible | |
3026 | |
3027 " Status line set laststatus=0 set cmdheight=1 set nomodifiable " | |
3028 Only in version 6.0 set readonly | |
3029 | |
3030 " Syntax colouring -- lines taken from syntax.txt discussion on colour xterms. | |
3031 " See ':help color-xterm'. Use appropriate lines for your own set-up. | |
3032 if has("terminfo") | |
3033 set t_Co=16 set t_Sf=[3%p1%dm set t_Sb=[4%p1%dm | |
3034 else | |
3035 set t_Co=16 set t_Sf=[3%dm set t_Sb=[4%dm | |
3036 endif " My xterms have a navy-blue background, so I need this line too. | |
3037 set background=dark " Turn syntax on syntax on | |
3038 | |
3039 " Key bindings. nmap b <C-B><C-G> nmap q :q<CR> " To | |
3040 type the following line, type *two* C-V's followed by two spaces. This " | |
3041 is how you map the spacebar. nmap ^V <C-F><C-G> ---8<---cut | |
3042 here---8<--- | |
3043 | |
3044 Then, to use this .vimrc, add an alias. If you're using tcsh, the syntax | |
3045 will be something like: | |
3046 | |
3047 alias vmore "vim -u ~/.vimrc.more" | |
3048 | |
3049 Then you can type "vmore [filename]" to view a file in this "pager". Spacebar | |
3050 will move down, 'b' will move back up, and 'q' quits. You can add mappings | |
3051 for other keys if you want to, also. | |
3052 | |
3053 </pre></tip> </html> <Tip category="KVim"> <html><center>Skip | |
3054 blank lines when folding text.</center> <pre> <A | |
3055 HREF="http://vim.sf.net/tip_view.php?tip_id=122">http://vim.sf.net/tip_view.php?tip_id=122</A><BR> | |
3056 | |
3057 I love the text folding capabilities of vim. I didn't like that it would | |
3058 display the first line of the range as the "title" for the fold. I like | |
3059 to write my comments with the "/*" on a line by itself. So I wrote this | |
3060 little function that will skip over anything that isn't a character, and | |
3061 then display whatever it finds after that character. | |
3062 | |
3063 Just include this in your ~/.vimrc (or ~/.gvimrc): | |
3064 | |
3065 function GetFirstLineWithChars() | |
3066 let line_num = 0 let charline = matchstr(getline(v:foldstart), | |
3067 '[a-zA-Z][a-zA-Z ]*') while strlen(charline) == 0 | |
3068 let line_num = line_num + 1 let charline = | |
3069 matchstr(getline(v:foldstart + line_num), '[a-zA-Z][a-zA-Z ]*') | |
3070 endw return charline | |
3071 endfunction set | |
3072 foldtext='+'.v:folddashes.substitute(GetFirstLineWithChars(),'\\\/\\\/\\\|\\*\\\|\\*\\\|{{{\\d\\=','','g') | |
3073 set fillchars=fold: hi folded guibg=black guifg=yellow gui=bold | |
3074 | |
3075 And as an added bonus, for those new to text folding, add this to your .vimrc | |
3076 file too: | |
3077 | |
3078 autocmd BufWinLeave *.* mkview autocmd BufWinEnter *.* silent loadview | |
3079 | |
3080 That way whatever folds you set won't get lost when you quit. I had that | |
3081 happen after spending 15 minutes folding up a 3000+ line file. Happy vimming! | |
3082 | |
3083 </pre></tip> </html> <Tip category="KVim"> <html><center>use | |
3084 functionality similar to the * search on multiple files</center> <pre> <A | |
3085 HREF="http://vim.sf.net/tip_view.php?tip_id=123">http://vim.sf.net/tip_view.php?tip_id=123</A><BR> | |
3086 | |
3087 The use of star as in vimtip#1 and vimtip#5 is great, here is how to use | |
3088 this type of search accross a whole directory: Just add the mappings (or | |
3089 choose different letter combinations): map gr :grep <cword> *<cr> | |
3090 map gr :grep <cword> %:p:h/*<cr> map gR :grep \b<cword>\b | |
3091 *<cr> map GR :grep \b<cword>\b %:p:h/*<cr> | |
3092 | |
3093 mapping one will search for the word under the cursor (like g*) in any of | |
3094 the files in the current directory mapping two will search for the word | |
3095 under the cursor (like g*) in any of the files in the same directory as the | |
3096 current file mapping three will search for the word under the cursor by itself | |
3097 (i.e. surrounded by word boundary like *) in any of the files in the current | |
3098 directory mapping four will search for the word under the cursor by itself | |
3099 (i.e. surrounded by word boundary like *) in any of the files in the same | |
3100 directory as the current file | |
3101 | |
3102 Benoit | |
3103 | |
3104 </pre></tip> </html> <Tip category="KVim"> | |
3105 <html><center>Number a group of lines</center> <pre> <A | |
3106 HREF="http://vim.sf.net/tip_view.php?tip_id=124">http://vim.sf.net/tip_view.php?tip_id=124</A><BR> | |
3107 | |
3108 Below is a way to number a set of lines. Here is an exaple before and | |
3109 after snapshot: | |
3110 | |
3111 apple bob pear tree | |
3112 | |
3113 1 apple 2 bob 3 pear 4 tree | |
3114 | |
3115 " Description: " This provides a command and a function. They both can be | |
3116 called with or " without a range. In addition, they can be called with or | |
3117 without " arguments. Without a range they operate on the current line. " " | |
3118 There are two supported arguments. They are described below: " arg1 -> | |
3119 the number to start at. The default is one. This will " number | |
3120 your selected lines sequentially. The start can be a " number, | |
3121 ., $, or, 'x (like getline). " arg2 -> Text to append after numbers. | |
3122 The default is a space. " " Examples: " To provide your functionality: | |
3123 " :%Nlist 20 " :%call Nlist(20) " To make a list start at | |
3124 1: " :'<,'>Nlist " :'<,'>call Nlist() " To | |
3125 number the whole buffer (with it's actual line number): " :%Nlist " | |
3126 :%call Nlist() " To number a subset of lines with their line number (and | |
3127 put a '] ' in " front of every number): " :'<,'>Nlist . ]\ | |
3128 " :'<,'>call Nlist(".", "] ") | |
3129 | |
3130 command! -nargs=* -range Nlist <line1>,<line2>call | |
3131 Nlist(<f-args>) function! Nlist(...) range | |
3132 if 2 == a:0 | |
3133 let start = a:1 let append = a:2 | |
3134 elseif 1 == a:0 | |
3135 let start = a:1 let append = " " | |
3136 else | |
3137 let start = 1 let append = " " | |
3138 endif | |
3139 | |
3140 " try to work like getline (i.e. allow the user to pass in . $ or 'x) | |
3141 if 0 == (start + 0) | |
3142 let start = line(start) | |
3143 endif | |
3144 | |
3145 exe a:firstline . "," . a:lastline | |
3146 . 's/^/\=line(".")-a:firstline+start.append/' | |
3147 endfunction | |
3148 | |
3149 </pre></tip> </html> <Tip category="KVim"> | |
3150 <html><center>Auto commenting for "}"</center> <pre> <A | |
3151 HREF="http://vim.sf.net/tip_view.php?tip_id=125">http://vim.sf.net/tip_view.php?tip_id=125</A><BR> | |
3152 | |
3153 I always wanted a script that would auto-comment the end of a conditional | |
3154 block. So, I wrote one. This function searches for the previous matching | |
3155 "{", grabs the line, and inserts it as a comment after the "}". If there | |
3156 is no previous matching "{", it inserts nothing. | |
3157 | |
3158 So... | |
3159 | |
3160 if (test){ | |
3161 | |
3162 will generate: | |
3163 } // if (test) | |
3164 | |
3165 This is obviously not work if you use a different style. If you use | |
3166 | |
3167 if (test) { | |
3168 | |
3169 then substituting 'getline(".")', use 'getline(line(".") - 1)' should work. | |
3170 | |
3171 Put the following in your .vimrc: au BufNewFile,BufRead *.c,*.cc,*.C,*.h | |
3172 imap } <ESC>:call CurlyBracket()<CR>a | |
3173 | |
3174 function CurlyBracket() | |
3175 let l:my_linenum = line(".") iunmap } sil exe "normal i}" imap } | |
3176 <ESC>:call CurlyBracket()<CR> let l:result1 = searchpair('{', | |
3177 '', '}', 'bW') if (result1 > 0) | |
3178 let l:my_string = substitute(getline("."), '^\s*\(.*\){', '\1', "") | |
3179 sil exe ":" . l:my_linenum sil exe "normal a //" . l:my_string | |
3180 endif | |
3181 endfunction | |
3182 | |
3183 </pre></tip> </html> <Tip category="KVim"> <html><center>how do | |
3184 I get rid of that bold stuff with my xterm?</center> <pre> <A | |
3185 HREF="http://vim.sf.net/tip_view.php?tip_id=126">http://vim.sf.net/tip_view.php?tip_id=126</A><BR> | |
3186 | |
3187 Having problems setting up your syntax highlighting because everything is | |
3188 coming up in bold? | |
3189 | |
3190 You're probably using an 8 color xterm and setting up highlighting lines such | |
3191 as hi Normal ... ctermfg=green . The solution: use numbers! 0=black, 1=red, | |
3192 2=green, 3=yellow, 4=blue, 5=magenta, 6=cyan, and 7=white. Vim tries to use | |
3193 "bright" colors when its given names (because Windoz machines prefer to use | |
3194 dim text unless its been made bold). | |
3195 | |
3196 Read more about it under :help highlight-ctermfg . | |
3197 | |
3198 </pre></tip> </html> <Tip category="KVim"> | |
3199 <html><center>Preview HTML files quickly</center> <pre> <A | |
3200 HREF="http://vim.sf.net/tip_view.php?tip_id=127">http://vim.sf.net/tip_view.php?tip_id=127</A><BR> | |
3201 | |
3202 I've found while writing HTML files that it can become cumbersome when I have | |
3203 to switch to a web browser, load my page, and move back to VIM regularly to | |
3204 preview what I've written. I've come up with the following tricks. | |
3205 | |
3206 The first one requires that you have lynx (the text-based browser) installed | |
3207 on your computer (available from <A HREF="http://lynx.isc.org/release/). | |
3208 If your HTML page is primarily text, with few (if any) images, you can | |
3209 set up the following function and mapping:">http://lynx.isc.org/release/). | |
3210 If your HTML page is primarily text, with few (if any) images, you can set | |
3211 up the following function and mapping:</A><BR> | |
3212 | |
3213 function PreviewHTML_TextOnly() | |
3214 let l:fname = expand("%:p" ) new set buftype=nofile nonumber exe "%!lynx | |
3215 " . l:fname . " -dump -nolist -underscore -width " . winwidth( 0 ) | |
3216 endfunction | |
3217 | |
3218 map <Leader>pt :call PreviewHTML_TextOnly()<CR> | |
3219 | |
3220 This will open a new window and display your formatted HTML document in | |
3221 that window. Note that bold-face, italics, links, etc. will be lost -- | |
3222 all you will see is the text -- but the "-underscore" parameter to Lynx | |
3223 causes any text that would have been bold, italicized, or underlined to be | |
3224 displayed like _this_. | |
3225 | |
3226 The other trick requires that vim be running on your current machine, and that | |
3227 you be running a GUI of some sort (X-Windows, Windows, etc.). You can cause | |
3228 vim to invoke your favorite browser and have it display the file, like this: | |
3229 function PreviewHTML_External() | |
3230 exe "silent !mozilla -remote \"openurl(file://" . expand( "%:p" ) . ")\"" | |
3231 endfunction | |
3232 | |
3233 map <Leader>pp :call PreviewHTML_External()<CR> | |
3234 If you don't use mozilla, you will need to modify the function to use your | |
3235 preferred browser. | |
3236 | |
3237 Happy vimming! | |
3238 | |
3239 </pre></tip> </html> <Tip category="KVim"> <html><center>grep, | |
3240 diff, patch, idutils, etc. for Windows systems</center> <pre> <A | |
3241 HREF="http://vim.sf.net/tip_view.php?tip_id=128">http://vim.sf.net/tip_view.php?tip_id=128</A><BR> | |
3242 | |
3243 If you use Vim on Windows, and you wish you had some of those nifty | |
3244 UNIX command-line tools, | |
3245 but do not feel like installing all of Cygwin, you | |
3246 can get many of the most-used tools from Ron Aaron's web site: <A | |
3247 HREF="http://www.mossbayeng.com/~ron/vim/builds.html">http://www.mossbayeng.com/~ron/vim/builds.html</A><BR> | |
3248 Since Ron is a big Vim fan (see <A | |
3249 HREF="http://www.mossbayeng.com/~ron/vim/vimrant.html ) you can count | |
3250 on">http://www.mossbayeng.com/~ron/vim/vimrant.html ) you can count on</A><BR> | |
3251 these tools' working well with Vim. For some hints on how to use them, | |
3252 read :help :grep :help lid inside Vim. | |
3253 Happy Vimming! | |
3254 | |
3255 </pre></tip> </html> <Tip category="KVim"> <html><center>Removing | |
3256 automatic comment leaders</center> <pre> <A | |
3257 HREF="http://vim.sf.net/tip_view.php?tip_id=129">http://vim.sf.net/tip_view.php?tip_id=129</A><BR> | |
3258 | |
3259 If you include the "r" flag in the 'formatoptions' option (:help 'fo' | |
3260 , :help fo-table ) then the comment leader is inserted | |
3261 automatically when you start a new line in a comment. For example, in TeX | |
3262 the "%" character is the comment leader, and you might type | |
3263 | |
3264 % This is a tex file. % The comment leaders on all lines but the first | |
3265 were generated automatically. % This is the last line of the comment, | |
3266 but Vim will insert the comment leader on the next line. % | |
3267 | |
3268 You can get rid of the comment leader (along with anything you may already | |
3269 have typed on the line) without affecting the indent, if any, by typing | |
3270 "<C-U>" while in Insert mode. | |
3271 | |
3272 Related point: if you want to adjust the indent while in Insert mode, | |
3273 you can use "<C-D>" (to Decrease the indent) | |
3274 or "<C-T>" (to increase it). In the docs for Vim 6.0, this is described | |
3275 in the users' manual, :help 30.4 . | |
3276 | |
3277 </pre></tip> </html> <Tip category="KVim"> | |
3278 <html><center>disabling default ftplugins</center> <pre> <A | |
3279 HREF="http://vim.sf.net/tip_view.php?tip_id=130">http://vim.sf.net/tip_view.php?tip_id=130</A><BR> | |
3280 | |
3281 For an overview of ftplugins (filetype plugins) see | |
3282 | |
3283 :help ftplugins | |
3284 | |
3285 If you want to disable all ftplugins, or disable a particular default | |
3286 ftplugin, see | |
3287 | |
3288 :help :filetype :help ftplugin-overrule | |
3289 | |
3290 If you have your own ftplugins, and you want to disable all the default | |
3291 ones, then do NOT include a check for b:did_ftplugin in your ftplugin files, | |
3292 and add the line | |
3293 | |
3294 :autocmd BufEnter * let b:did_ftplugin = 1 | |
3295 | |
3296 to your VIMRC file, BEFORE the ":filetype ftplugin on" line. | |
3297 | |
3298 </pre></tip> </html> <Tip category="KVim"> | |
3299 <html><center>Scroll alternate window</center> <pre> <A | |
3300 HREF="http://vim.sf.net/tip_view.php?tip_id=131">http://vim.sf.net/tip_view.php?tip_id=131</A><BR> | |
3301 | |
3302 This mapping allow you to quickly scroll inactive window when displaying | |
3303 several windows concurrently. | |
3304 | |
3305 nmap <silent> <M-Down> :call ScrollOtherWindow("down")<CR> | |
3306 nmap <silent> <M-Up> :call ScrollOtherWindow("up")<CR> | |
3307 | |
3308 fun! ScrollOtherWindow(dir) | |
3309 if a:dir == "down" | |
3310 let move = "\<C-E>" | |
3311 elseif a:dir == "up" | |
3312 let move = "\<C-Y>" | |
3313 endif exec "normal \<C-W>p" . move . "\<C-W>p" | |
3314 endfun | |
3315 | |
3316 PS: Original idea and discussion of this tip appeared on vim@vim.org mailing | |
3317 list, I'm just prettified it a little. | |
3318 | |
3319 </pre></tip> </html> <Tip category="KVim"> | |
3320 <html><center>window zooming convenience</center> <pre> <A | |
3321 HREF="http://vim.sf.net/tip_view.php?tip_id=132">http://vim.sf.net/tip_view.php?tip_id=132</A><BR> | |
3322 | |
3323 i frequently have multiple windows open in vim -- this reduces the number | |
3324 of lines each window displays -- i almost always have my windows either all | |
3325 the same size or the current one as big as possible. | |
3326 | |
3327 the following function can be toggled on or off by typing <Leader>max | |
3328 (i can do this quite quickly); just change the mapping at the bottom to | |
3329 something else if you prefer. | |
3330 | |
3331 this causes the current window to be as big as possible (moving into another | |
3332 window causes that one to become big) and all the others get very small. | |
3333 i actually use this ALL the time. turning it off (by typing the hotkey | |
3334 sequence again) will cause all windows to have the same height. | |
3335 | |
3336 "toggles whether or not the current window is automatically zoomed | |
3337 function! ToggleMaxWins () | |
3338 if exists ('g:windowMax') | |
3339 au! maxCurrWin exe "normal \<c-w>=" unlet g:windowMax | |
3340 else | |
3341 augroup maxCurrWin " au BufEnter * exe "normal | |
3342 \<c-w>_\<c-w>\<bar>" " " only max it vertically | |
3343 au! BufEnter * exe "normal \<c-w>_" augroup END do maxCurrWin | |
3344 BufEnter let g:windowMax=1 | |
3345 endif | |
3346 endfunction map <Leader>max :call ToggleMaxWins ()<CR> | |
3347 | |
3348 </pre></tip> </html> <Tip category="KVim"> | |
3349 <html><center>Windo and Bufdo</center> <pre> <A | |
3350 HREF="http://vim.sf.net/tip_view.php?tip_id=133">http://vim.sf.net/tip_view.php?tip_id=133</A><BR> | |
3351 | |
3352 i like bufdo and windo but i don't like the fact that the commands end in | |
3353 a different window/buffer than from where i executed them. these versions | |
3354 (starts with a capital letter) will restore the current window or buffer | |
3355 when the command's done. | |
3356 | |
3357 for example, to turn on line numbers everywhere, i use :Windo set nu -- | |
3358 :windo set nu does the trick also but leaves me in a different window than | |
3359 where i started. | |
3360 | |
3361 " just like windo but restores the current window when it's done | |
3362 function! WinDo(command) | |
3363 let currwin=winnr() execute 'windo ' . a:command execute currwin . 'wincmd w' | |
3364 endfunction com! -nargs=+ -complete=command Windo call WinDo(<q-args>) | |
3365 | |
3366 " just like bufdo but restores the current buffer when it's done | |
3367 function! BufDo(command) | |
3368 let currBuff=bufnr("%") execute 'bufdo ' . a:command execute 'buffer ' | |
3369 . currBuff | |
3370 endfunction com! -nargs=+ -complete=command Bufdo call BufDo(<q-args>) | |
3371 | |
3372 </pre></tip> </html> <Tip category="KVim"> | |
3373 <html><center>View Source in IE6 using VIM</center> <pre> <A | |
3374 HREF="http://vim.sf.net/tip_view.php?tip_id=134">http://vim.sf.net/tip_view.php?tip_id=134</A><BR> | |
3375 | |
3376 You can change the "View Source" editor of IE6 by adding the following to | |
3377 the Windows Registry. Change the path in case you installed VIM in another | |
3378 location. | |
3379 | |
3380 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\View Source | |
3381 Editor\Editor Name] @="C:\\vim\\vim60\\gvim.exe" | |
3382 | |
3383 </pre></tip> </html> <Tip category="KVim"> | |
3384 <html><center>Vim buffer FAQ</center> <pre> <A | |
3385 HREF="http://vim.sf.net/tip_view.php?tip_id=135">http://vim.sf.net/tip_view.php?tip_id=135</A><BR> | |
3386 | |
3387 Vim provides various commands and options to support editing multiple buffers. | |
3388 This document covers some of the questions asked about using multiple buffers | |
3389 with Vim. You can get more detailed information about Vim buffer support using | |
3390 ":help windows.txt" in Vim. You can also use the help keywords mentioned in | |
3391 this document to read more about a particular command or option. To read more | |
3392 about a particular command or option use, ":help <helpkeyword>" in Vim. | |
3393 | |
3394 1. What is a Vim buffer? | |
3395 A buffer is a file loaded into memory for editing. All opened files | |
3396 are associated with a buffer. There are also buffers not associated with | |
3397 any file. | |
3398 | |
3399 Help keyword(s): windows-intro | |
3400 | |
3401 2. How do I identify a buffer? | |
3402 Vim buffers are identified using a name and a number. The name of the | |
3403 buffer is the name of the file associated with that buffer. The buffer | |
3404 number is a unique sequential number assigned by Vim. This buffer number | |
3405 will not change in a single Vim session. | |
3406 | |
3407 Help keyword(s): :buffers | |
3408 | |
3409 3. How do I create a buffer? | |
3410 When you open a file using any of the Vim commands, a buffer is | |
3411 automatically created. For example, if you use the ":edit file" command | |
3412 to edit a file, a new buffer is automatically created. | |
3413 | |
3414 4. How do I add a new buffer for a file to the buffer list without opening | |
3415 the file? You can add a new buffer for a file without opening it, using | |
3416 the ":badd" ex command. For example, | |
3417 | |
3418 :badd f1.txt :badd f2.txt | |
3419 | |
3420 The above commands will add two new buffers for the files f1.txt and | |
3421 f2.txt to the buffer list. | |
3422 | |
3423 Help keyword(s): :badd | |
3424 | |
3425 5. How do I get a list of all the existing buffers? | |
3426 You can get a list of all the existing buffers using the ":buffers" or | |
3427 ":ls" or ":files" ex command. This list is called the 'buffer list'. | |
3428 | |
3429 In Vim 6.0, to display all the buffers including unlisted buffers, use the | |
3430 ":buffers!" or ":ls!" or ":files!" ex command. | |
3431 | |
3432 Help keyword(s): :buffers, :ls, :files | |
3433 | |
3434 6. How do I delete a buffer? | |
3435 You can delete a buffer using the ":bdelete" ex command. You can use either | |
3436 the buffer name or the buffer number to specify a buffer. For example, | |
3437 | |
3438 :bdelete f1.txt :bdelete 4 | |
3439 | |
3440 The above commands will delete the buffer named "f1.txt" and the fourth | |
3441 buffer in the buffer list. The ":bdelete" command will remove the buffer | |
3442 from the buffer list. | |
3443 | |
3444 In Vim 6.0, when a buffer is deleted, the buffer becomes an unlisted-buffer | |
3445 and is no longer included in the buffer list. But the buffer name and other | |
3446 information associated with the buffer is still remembered. To completely | |
3447 delete the buffer, use the ":bwipeout" ex command. This command will remove | |
3448 the buffer completely (i.e. the buffer will not become a unlisted buffer). | |
3449 | |
3450 Help keyword(s): :bdelete, :bwipeout | |
3451 | |
3452 7. How do I delete multiple buffers? | |
3453 You can delete multiple buffers in several ways: | |
3454 | |
3455 1. Pass a range argument to the ":bdelete" command. For example, | |
3456 | |
3457 :3,5bdelete | |
3458 | |
3459 This command will delete the buffers 3, 4 and 5. | |
3460 2. Pass multiple buffer names to the ":bdelete" command. For example, | |
3461 | |
3462 :bdelete buf1.txt buf2.c buf3.h | |
3463 | |
3464 This command will delete buf1.txt, buf2.c and buf3.h buffers. In this | |
3465 example, after typing ":bdelete buf", you can press <Ctrl-A> | |
3466 to expand all the buffer names starting with 'buf'. | |
3467 | |
3468 Help keyword(s): :bdelete, :bwipeout | |
3469 | |
3470 8. How do I remove a buffer from a window? | |
3471 You can remove a buffer displayed in a window in several ways: | |
3472 | |
3473 1. Close the window or edit another buffer/file in that window. 2. Use | |
3474 the ":bunload" ex command. This command will remove the buffer | |
3475 from the window and unload the buffer contents from memory. The buffer | |
3476 will not be removed from the buffer list. | |
3477 | |
3478 Help keyword(s): :bunload | |
3479 | |
3480 9. How do I edit an existing buffer from the buffer list? | |
3481 You can edit or jump to a buffer in the buffer list in several ways: | |
3482 | |
3483 1. Use the ":buffer" ex command passing the name of an existing buffer | |
3484 or the buffer number. Note that buffer name completion can be used | |
3485 here by pressing the <Tab> key. | |
3486 2. You can enter the buffer number you want to jump/edit and press the | |
3487 Ctrl-^ key. | |
3488 3. Use the ":sbuffer" ex command passing the name of the buffer or the | |
3489 buffer number. Vim will split open a new window and open the specified | |
3490 buffer in that window. | |
3491 4. You can enter the buffer number you want to jump/edit and press the | |
3492 Ctrl-W ^ or Ctrl-W Ctrl-^ keys. This will open the specified buffer | |
3493 in a new window. | |
3494 | |
3495 Help keyword(s): :buffer, :sbuffer, CTRL-W_^, CTRL-^ | |
3496 | |
3497 10. How do I browse through all the available buffers? | |
3498 You can browse through the buffers in the buffer list in several ways: | |
3499 | |
3500 1. To jump to the first buffer in the buffer list, use the ":bfirst" or | |
3501 ":brewind" ex command. | |
3502 2. To jump to the first buffer in the buffer list in a new window, use | |
3503 the ":sbfirst" or ":sbrewind" ex command. | |
3504 3. To edit the next buffer in the buffer list, use the ":bnext" ex | |
3505 command. | |
3506 4. To open the next buffer in the buffer list in a new window, use the | |
3507 ":sbnext" ex command. | |
3508 5. To edit the previous buffer in the buffer list, use the ":bprevious" | |
3509 or ":bNext" ex command. | |
3510 6. To open the previous buffer in the buffer list in a new window, use | |
3511 the ":sbprevious" or ":sbNext" ex command. | |
3512 7. To open the last buffer in the buffer list, use the ":blast" ex | |
3513 command. | |
3514 8. To open the last buffer in the buffer list in a new window, use the | |
3515 ":sblast" ex command. | |
3516 | |
3517 Help keyword(s): :bfirst, :brewind, :sbfirst, :sbrewind, :bnext, | |
3518 :sbnext, :bprevious, :bNext, :sbprevious, :sbNext, | |
3519 :blast, :sblast | |
3520 | |
3521 11. How do I open all the buffers in the buffer list? | |
3522 You can open all the buffers present in the buffer list using the ":ball" | |
3523 or ":sball" ex commands. | |
3524 | |
3525 Help keyword(s): :ball, :sball | |
3526 | |
3527 12. How do I open all the loaded buffers? | |
3528 You can open all the loaded buffers in the buffer list using the ":unhide" | |
3529 or ":sunhide" ex commands. Each buffer will be loaded in a separate | |
3530 new window. | |
3531 | |
3532 Help keyword(s): :unhide, :sunhide | |
3533 | |
3534 13. How do I open the next modified buffer? | |
3535 You can open the next or a specific modified buffer using the ":bmodified" | |
3536 ex command. You can open the next or a specific modified buffer in a | |
3537 new window using the ":sbmodified" ex command. | |
3538 | |
3539 Help keyword(s): :bmodified, :sbmodified | |
3540 | |
3541 14. I am using the GUI version of Vim (gvim), is there a simpler way for | |
3542 using the buffers instead of the ex commands? Yes. In the GUI version of | |
3543 Vim, you can use the 'Buffers' menu, which simplifies the use of buffers. | |
3544 All the buffers in the buffer list are listed in this menu. You can | |
3545 select a buffer name from this menu to edit the buffer. You can also | |
3546 delete a buffer or browse the buffer list. | |
3547 | |
3548 Help keyword(s): buffers-menu | |
3549 | |
3550 15. Is there a Vim script that simplifies using buffers with Vim? | |
3551 Yes. You can use the bufexplorer.vim script to simplify the process of | |
3552 using buffers. You can download the bufexplorer script from: | |
3553 | |
3554 <A | |
3555 HREF="http://lanzarotta.tripod.com/vim.html">http://lanzarotta.tripod.com/vim.html</A><BR> | |
3556 | |
3557 16. Is it possible to save and restore the buffer list across Vim sessions? | |
3558 Yes. To save and restore the buffer list across Vim session, include the | |
3559 '%' flag in the 'viminfo' option. Note that if Vim is invoked with a | |
3560 filename argument, then the buffer list will not be restored from the | |
3561 last session. To use buffer lists across sessions, invoke Vim without | |
3562 passing filename arguments. | |
3563 | |
3564 Help keyword(s): 'viminfo', viminfo | |
3565 | |
3566 17. How do I remove all the entries from the buffer list? | |
3567 You can remove all the entries in the buffer list by starting Vim with | |
3568 a file argument. You can also manually remove all the buffers using the | |
3569 ":bdelete" ex command. | |
3570 | |
3571 18. What is a hidden buffer? | |
3572 A hidden buffer is a buffer with some unsaved modifications and is not | |
3573 displayed in a window. Hidden buffers are useful, if you want to edit | |
3574 multiple buffers without saving the modifications made to a buffer while | |
3575 loading other buffers. | |
3576 | |
3577 Help keyword(s): :buffer-!, 'hidden', hidden-buffer, buffer-hidden | |
3578 | |
3579 19. How do I load buffers in a window, which currently has a buffer with | |
3580 unsaved modifications? By setting the option 'hidden', you can load | |
3581 buffers in a window that currently has a modified buffer. Vim will | |
3582 remember your modifications to the buffer. When you quit Vim, you will be | |
3583 asked to save the modified buffers. It is important to note that, if you | |
3584 have the 'hidden' option set, and you quit Vim forcibly, for example using | |
3585 ":quit!", then you will lose all your modifications to the hidden buffers. | |
3586 | |
3587 Help keyword(s): 'hidden' | |
3588 | |
3589 20. Is it possible to unload or delete a buffer when it becomes hidden? | |
3590 The following works only in Vim 6.0 and above. By setting the 'bufhidden' | |
3591 option to either 'hide' or 'unload' or 'delete', you can control what | |
3592 happens to a buffer when it becomes hidden. When 'bufhidden' is set to | |
3593 'delete', the buffer is deleted when it becomes hidden. When 'bufhidden' | |
3594 is set to 'unload', the buffer is unloaded when it becomes hidden. | |
3595 When 'bufhidden' is set to 'hide', the buffer is hidden. | |
3596 | |
3597 Help keyword(s): 'bufhidden' | |
3598 | |
3599 21. How do I execute a command on all the buffers in the buffer list? | |
3600 In Vim 6.0, you can use the ":bufdo" ex command to execute an ex command | |
3601 on all the buffers in the buffer list. | |
3602 | |
3603 Help keyword(s): :bufdo | |
3604 | |
3605 22. When I open an existing buffer from the buffer list, if the buffer is | |
3606 already displayed in one of the existing windows, I want Vim to jump to | |
3607 that window instead of creating a new window for this buffer. How do I | |
3608 do this? When opening a buffer using one of the split open buffer commands | |
3609 (:sbuffer, :sbnext), Vim will open the specified buffer in a new window. | |
3610 If the buffer is already opened in one of the existing windows, then | |
3611 you will have two windows containing the same buffer. You can change | |
3612 this behavior by setting the 'switchbuf' option to 'useopen'. With this | |
3613 setting, if a buffer is already opened in one of the windows, Vim will | |
3614 jump to that window, instead of creating a new window. | |
3615 | |
3616 Help keyword(s): 'switchbuf' | |
3617 | |
3618 23. What information is stored as part of a buffer? | |
3619 Every buffer in the buffer list contains information about the last | |
3620 cursor position, marks, jump list, etc. | |
3621 | |
3622 24. What is the difference between deleting a buffer and unloading a | |
3623 buffer? When a buffer is unloaded, it is not removed from the buffer list. | |
3624 Only the file contents associated with the buffer are removed from memory. | |
3625 When a buffer is deleted, it is unloaded and removed from the buffer list. | |
3626 In Vim 6, a deleted buffer becomes an 'unlisted' buffer. | |
3627 | |
3628 Help keyword(s): :bunload, :bdelete, :bwipeout, unlisted-buffer | |
3629 | |
3630 25. Is it possible to configure Vim, by setting some option, to re-use the | |
3631 number of a deleted buffer for a new buffer? No. Vim will not re-use the | |
3632 buffer number of a deleted buffer for a new buffer. Vim will always assign | |
3633 the next sequential number for a new buffer. The buffer number assignment | |
3634 is implemented this way, so that you can always jump to a buffer using the | |
3635 same buffer number. One method to achieve buffer number reordering is to | |
3636 restart Vim. If you restart Vim, it will re-assign numbers sequentially | |
3637 to all the buffers in the buffer list (assuming you have properly set | |
3638 'viminfo' to save and restore the buffer list across vim sessions). | |
3639 | |
3640 Help keyword(s): :buffers | |
3641 | |
3642 26. What options do I need to set for a scratch (temporary) buffer? | |
3643 The following works only in Vim 6.0 and above. You can set the the | |
3644 following options to create a scratch (temporary) buffer: | |
3645 | |
3646 :set buftype=nofile :set bufhidden=hide :setlocal noswapfile | |
3647 | |
3648 This will create a buffer which is not associated with a file, which | |
3649 does not have a associated swap file and will be hidden when removed | |
3650 from a window. | |
3651 | |
3652 Help keyword(s): special-buffers, 'buftype' | |
3653 | |
3654 27. How do I prevent a buffer from being added to the buffer list? | |
3655 The following works only in Vim 6.0 and above. You can prevent a buffer | |
3656 from being added to the buffer list by resetting the 'buflisted' option. | |
3657 | |
3658 :set nobuflisted | |
3659 | |
3660 Help keyword(s): 'buflisted' | |
3661 | |
3662 28. How do I determine whether a buffer is modified or not? | |
3663 There are several ways to find out whether a buffer is modified or not. | |
3664 The simplest way is to look at the status line or the title bar. If the | |
3665 displayed string contains a '+' character, then the buffer is modified. | |
3666 Another way is to check whether the 'modified' option is set or not. | |
3667 If 'modified' is set, then the buffer is modified. To check the value | |
3668 of modified, use | |
3669 | |
3670 :set modified? | |
3671 | |
3672 You can also explicitly set the 'modified' option to mark the buffer as | |
3673 modified like this: | |
3674 | |
3675 :set modified | |
3676 | |
3677 Help keyword(s): 'modified' | |
3678 | |
3679 29. How can I prevent modifications to a buffer? | |
3680 The following works only in Vim 6.0 and above. You can prevent any | |
3681 modification to a buffer by re-setting the 'modifiable' option. To reset | |
3682 this option, use | |
3683 | |
3684 :set nomodifiable | |
3685 | |
3686 To again allow modifications to the buffer, use: | |
3687 | |
3688 :set modifiable | |
3689 | |
3690 Help keyword(s): 'modifiable' | |
3691 | |
3692 30. How do I set options specific to the current buffer? | |
3693 The following works only in Vim 6.0 and above. You can set Vim options | |
3694 which are specific to a buffer using the "setlocal" command. For example, | |
3695 | |
3696 :setlocal textwidth=70 | |
3697 | |
3698 This will set the 'textwidth' option to 70 only for the current buffer. | |
3699 All other buffers will have the default or the previous 'textwidth' value. | |
3700 | |
3701 Help keyword(s): 'setlocal', local-options | |
3702 | |
3703 31. How do I define mappings specific to the current buffer? | |
3704 The following works only in Vim 6.0 and above. You can define mappings | |
3705 specific to the current buffer by using the keyword "<buffer>" | |
3706 in the map command. For example, | |
3707 | |
3708 :map <buffer> ,w /[.,;]<CR> | |
3709 | |
3710 Help keyword(s): :map-local | |
3711 | |
3712 32. How do I define abbreviations specific to the current buffer? | |
3713 The following works only in Vim 6.0 and above. You can define | |
3714 abbreviations specific to the current buffer by using the keyword | |
3715 "<buffer>" in the :abbreviate command. For example, | |
3716 | |
3717 :abb <buffer> FF for (i = 0; i < ; ++i) | |
3718 | |
3719 Help keyword(s): :abbreviate-local | |
3720 | |
3721 </pre></tip> </html> <Tip category="KVim"> <html><center>Remapping | |
3722 Alt, Ctrl and Caps in Win2k</center> <pre> <A | |
3723 HREF="http://vim.sf.net/tip_view.php?tip_id=136">http://vim.sf.net/tip_view.php?tip_id=136</A><BR> | |
3724 | |
3725 Since I installed Win2K on my laptop, I had been unable to locate a utilitie | |
3726 that would simply enable me to remap my Crtl Alt and Caps the way I think they | |
3727 should be and the way they were until MS kill all competition in computing, | |
3728 that is Crtl on the left of the letter A, Alt to the left bottom of the | |
3729 letter Z and Caps approximately until the C. | |
3730 | |
3731 After some research, I came across a tip posted here by juano@mindspring.com. I | |
3732 tried to make sense of it and then downloaded the MS scan keys map at the | |
3733 URL he mentionned. | |
3734 | |
3735 Extrapolating his tip, I wrote this ASCI file that I named keys2000.reg : | |
3736 | |
3737 Regedit4 [HKey_Local_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard | |
3738 Layout] "Scancode | |
3739 Map"=hex:00,00,00,00,00,00,00,00,04,00,00,00,3A,00,38,00,38,00,1D,00,1D,00,3A,00,00,00,00 | |
3740 | |
3741 Once you have saved this file, left click on it from Explorer and answer | |
3742 yes to the prompt "do you want to enter this into the registry". | |
3743 | |
3744 Reboot and you are done. | |
3745 | |
3746 A few explanations :04 stands for 3 remappings (Caps lock to Control, Control | |
3747 to Alt and Alt to Caps Lock) plus the closing one which is always required | |
3748 (1 remapping would require 02, 2 would require 03, and so on). 3A,00,38 | |
3749 remaps Caps to Left Alt, 38,00,1D remaps Left Alt to Left Ctrl and 1D,00,3A | |
3750 remaps Left Ctrl to Caps Lock since 3A=Caps, 1D=Left Ctrl and 38=Left Alt. | |
3751 | |
3752 Based on Juano tip and on this one, I believe a lot of remapping can be done | |
3753 as long as you keep the separators 00 and remember to add one to the number | |
3754 of remappings. What I do not know is how far you can extend this instruction | |
3755 without getting into trouble with the registry. At worst, if you keyboard does | |
3756 not behave as expected, go into the registry and delete this instruction (be | |
3757 careful here since it is easy to confuse this instruction with the Keyboard | |
3758 LayoutS (S for emphasis) which must not be deleted. | |
3759 | |
3760 Again, thanks to Juano@mindspring.com who got me going and suggested I | |
3761 post my tip. Took me some time to retrieve the VIM Url but fortunately, | |
3762 I had printed his tip. | |
3763 | |
3764 Regards | |
3765 | |
3766 </pre></tip> </html> <Tip category="KVim"> | |
3767 <html><center>automatically wrap left and right</center> <pre> <A | |
3768 HREF="http://vim.sf.net/tip_view.php?tip_id=137">http://vim.sf.net/tip_view.php?tip_id=137</A><BR> | |
3769 | |
3770 I hate it when I hit left (or h) and my screen flickers. I want it to go up | |
3771 to the next line. Ditto fir right (or l). Below are two functions / mappings | |
3772 to help with that. I'm pretty sure that if you remove the <silent>, | |
3773 then it will work in 5.x... | |
3774 | |
3775 nnoremap <silent> <Left> :call WrapLeft()<cr> nnoremap | |
3776 <silent> <Right> :call WrapRight()<cr> | |
3777 | |
3778 nnoremap <silent> h :call WrapLeft()<cr> nnoremap | |
3779 <silent> l :call WrapRight()<cr> | |
3780 | |
3781 function! WrapLeft() | |
3782 let col = col(".") | |
3783 | |
3784 if 1 == col | |
3785 " don't wrap if we're on the first line if 1 == line(".") | |
3786 return | |
3787 endif normal! k$ | |
3788 else | |
3789 normal! h | |
3790 endif | |
3791 endfunction | |
3792 | |
3793 function! WrapRight() | |
3794 let col = col(".") if 1 != col("$") | |
3795 let col = col + 1 | |
3796 endif | |
3797 | |
3798 if col("$") == col | |
3799 " don't wrap if we're on the last line if line("$") == line(".") | |
3800 return | |
3801 endif normal! j1| | |
3802 else | |
3803 normal! l | |
3804 endif | |
3805 endfunction | |
3806 | |
3807 </pre></tip> </html> <Tip category="KVim"> | |
3808 <html><center>Getting name of the function</center> <pre> <A | |
3809 HREF="http://vim.sf.net/tip_view.php?tip_id=138">http://vim.sf.net/tip_view.php?tip_id=138</A><BR> | |
3810 | |
3811 Hi All, | |
3812 | |
3813 While browsing code one always needs to know which function you are currently | |
3814 looking. Getting the name is very painful when the functions are lengthy | |
3815 and you are currently browsing NOT near to the start of the function. You | |
3816 can get the function's name by using this simple mapping. | |
3817 | |
3818 Just place this in your .vimrc. | |
3819 | |
3820 map _F ma[[k"xyy`a:echo @x<CR> | |
3821 | |
3822 now _F will display which function you are currently in. | |
3823 | |
3824 Enjoy the power of Vim -Nitin Raut | |
3825 | |
3826 PS: The working is as follows, mark the current line with a, jump to the | |
3827 previous '{' in the first column, go one line up, yank the line in register | |
3828 x, return to the mark a, echo the value of register x, which is the wanted | |
3829 function name. | |
3830 | |
3831 </pre></tip> </html> <Tip category="KVim"> <html><center>=, | |
3832 LaTeX tables, declarations, etc</center> <pre> <A | |
3833 HREF="http://vim.sf.net/tip_view.php?tip_id=139">http://vim.sf.net/tip_view.php?tip_id=139</A><BR> | |
3834 | |
3835 Check out | |
3836 | |
3837 <A | |
3838 HREF="http://www.erols.com/astronaut/vim/textab.html">http://www.erols.com/astronaut/vim/textab.html</A><BR> | |
3839 | |
3840 and see some examples of text alignment (its hopeless to do it here with | |
3841 proportional fonts). You'll be able to download textab source, a Windows-based | |
3842 textab executable, and a scriptfile containing a convenient interface | |
3843 (ttalign.vim). The textab program coupled with <ttalign.vim> lets you: | |
3844 | |
3845 1. align C language statements on their = += -= /= etc symbols 2. align C | |
3846 language declararations: separate columns for types, *[, variable | |
3847 names, initializations (=), and comments (// or /* .. */) | |
3848 3. align C/C++ language comments (//, /* .. */) 4. align C/C++ language | |
3849 (ansi) function argument lists 5. align LaTeX tables on their && separators | |
3850 6. align HTML tables with </TD><TD> separators 7. align on | |
3851 several characters: < ? : | @ ; (or modify them to handle whatever | |
3852 alignment characters you want) | |
3853 | |
3854 </pre></tip> </html> <Tip category="KVim"> <html><center>tip | |
3855 using embedded perl interpreter</center> <pre> <A | |
3856 HREF="http://vim.sf.net/tip_view.php?tip_id=140">http://vim.sf.net/tip_view.php?tip_id=140</A><BR> | |
3857 | |
3858 When writing scripts using the embedded interpreter available if vim has the | |
3859 +perl ore +perl/dyn on gives you access to this powerfull and FAST scripting | |
3860 language (especially fast compared to vim scripts) there are some gotchas. | |
3861 | |
3862 First: never embed complex perl command in the body of a vim function this | |
3863 will be recompiled and evaled each time for a tremendous loss of time.instead | |
3864 to it like this | |
3865 | |
3866 perl << EOF sub mySub { | |
3867 #some usefull perl stuff | |
3868 } EOF | |
3869 | |
3870 function! MyFunction perl mySub "an argument", "another" endfunction | |
3871 | |
3872 to pass computed argument to your perl sub use the vim exec command | |
3873 function! MyFunction exec "perl mySub " . aLocalVar . ", " b:aBufferLocalVar | |
3874 endfunction | |
3875 | |
3876 It may be very hard to debug your perl sub since the output of the perl | |
3877 compiler is somehow lost in the middle of nowhere and the debugger is not | |
3878 available. When a compilation error occurs in your sub definition you'll get | |
3879 an error message when you try to call it saying that the sub does not exists. | |
3880 One thing which I have found very usefull is to write a fake VIM module with | |
3881 stub methods which will allow you to use the command line perl interpretor | |
3882 to at least compile your program. You could make your stub smart enough to | |
3883 fake a vim and use the debugger. Here is a sample for such a fake module | |
3884 defining just those method which I was using. | |
3885 | |
3886 package VIM; use diagnostics; use strict; sub VIM::Eval { | |
3887 $_ = shift; | |
3888 | |
3889 print "Eval $_\n"; | |
3890 | |
3891 { | |
3892 return | |
3893 '^(?!!)([^\t]*)\t[^\t]*\t(.*);"\t([^\t]*)\tline:(\d*).*$' | |
3894 if (/g:TagsBase_pattern/); return $ARGV[0] if | |
3895 (/b:fileName/); return '$3' if (/g:TagsBase_typePar/); | |
3896 return '$1' if (/g:TagsBase_namePar/); return '$4' if | |
3897 (/g:TagsBase_linePar/); return 'Ta&gs' if (/s:menu_name/); | |
3898 return $ARGV[1] if (/g:TagsBase_groupByType/); | |
3899 die "unknown eval $_"; | |
3900 } | |
3901 } sub VIM::Msg { | |
3902 my $msg = shift; print "MSG $msg\n"; | |
3903 } sub VIM::DoCommand { | |
3904 my $package; my $filename; my $line; | |
3905 ($package, $filename, $line) = caller; | |
3906 | |
3907 my $command = shift; print "at $filename $line\n"; print "DoCommand | |
3908 $command\n"; | |
3909 } 1; | |
3910 | |
3911 Then you can copy other your perl code in a separate file and add a use VIM; | |
3912 at the top and your set to debug. | |
3913 | |
3914 Good Vimming good perling. Benoit PS: this tips are probably true for other | |
3915 scripting languages | |
3916 | |
3917 </pre></tip> </html> <Tip category="KVim"> <html><center>Add | |
3918 your function heading with a keystroke</center> <pre> <A | |
3919 HREF="http://vim.sf.net/tip_view.php?tip_id=141">http://vim.sf.net/tip_view.php?tip_id=141</A><BR> | |
3920 | |
3921 Below is a tip that the C/C++ Newbies may find interesting and handy to use. | |
3922 The following code will add a function heading and position your cursor just | |
3923 after Description so that one can document as one proceeds with code. | |
3924 | |
3925 function FileHeading() | |
3926 let s:line=line(".") call | |
3927 setline(s:line,"/***************************************************") | |
3928 call append(s:line,"* Description - ") call append(s:line+1,"* | |
3929 Author - Mohit Kalra") call append(s:line+2,"* Date | |
3930 - ".strftime("%b %d %Y")) call append(s:line+3,"* | |
3931 *************************************************/") unlet s:line | |
3932 endfunction | |
3933 | |
3934 imap <F4> <esc>mz:execute FileHeading()<RET>`zjA | |
3935 | |
3936 Where <esc> stands for ^V+ESC and <RET> for ^V+ENTER | |
3937 | |
3938 </pre></tip> </html> <Tip category="KVim"> <html><center>Automatic | |
3939 function end commenting for C++ and Java</center> <pre> <A | |
3940 HREF="http://vim.sf.net/tip_view.php?tip_id=142">http://vim.sf.net/tip_view.php?tip_id=142</A><BR> | |
3941 | |
3942 Some people have a habit of adding the function name as a comment to the | |
3943 end of that function, if it is long, so that he/she knows which function the | |
3944 '}' ends. Here's a way to automate the process. | |
3945 | |
3946 Use the following abbreviation: iab }// } // END: | |
3947 <esc>10h%$?\w\+\s*(<cr>"xy/\s*(<cr>/{<cr>:nohl<cr>%$"xpa | |
3948 | |
3949 If you now end the function with '}//', the follwoing string will be | |
3950 automatically generated: '} //END: functionname' | |
3951 | |
3952 </pre></tip> </html> <Tip category="KVim"> <html><center>Use | |
3953 of Vim folds for javadocs</center> <pre> <A | |
3954 HREF="http://vim.sf.net/tip_view.php?tip_id=143">http://vim.sf.net/tip_view.php?tip_id=143</A><BR> | |
3955 | |
3956 Hi, | |
3957 | |
3958 The fold-method marker can be effectively use to set the folds in your | |
3959 Java source. Define some marker and place it inside HTML comments <!-- | |
3960 xx -->. This way, it does not affect the Javadocs generated without the | |
3961 necessity of a seprate comment line. e.g. | |
3962 | |
3963 /** | |
3964 * <!-- zz.FOLDSTART class AbcClass --> * The class description. | |
3965 * ... */ | |
3966 public class AbcClass { | |
3967 | |
3968 /** | |
3969 * <!-- method zz.FOLDSTART someMethod() --> * Method description. | |
3970 */ | |
3971 public void someMethod(); | |
3972 | |
3973 ... | |
3974 | |
3975 } /* zz.END: AbcClass */ | |
3976 | |
3977 /* Put this at the end of your file */ /* vim:fdm=marker | |
3978 fmr=zz.FOLDSTART,zz.END fdl=2 fdc=2: */ | |
3979 | |
3980 Now, the files will be opened with the methods neatly folded. You can use | |
3981 "zR" to open all folds (or click on the "+" at the left column). | |
3982 | |
3983 Sameer. | |
3984 | |
3985 </pre></tip> </html> <Tip category="KVim"> <html><center>recording | |
3986 keystrokes by "q" for repested jobs</center> <pre> <A | |
3987 HREF="http://vim.sf.net/tip_view.php?tip_id=144">http://vim.sf.net/tip_view.php?tip_id=144</A><BR> | |
3988 | |
3989 The most useful feature that I find in VIM is the "recording" feature (:help | |
3990 recording). I have used this to automatically insert function headers, | |
3991 re-indent lines, and convert some 34 source files into HTML. | |
3992 | |
3993 This feature is most useful when you want to do some repeated jobs, which | |
3994 you cant do easily using ".". You can set about writing a function, define | |
3995 a mapping, etc, but then these things might take time. By recording, you | |
3996 can try out and find the actual keystrokes that does the job. | |
3997 | |
3998 To start recording, press "q" in normal mode followed by any of "0-9a-z". | |
3999 This will start recording the keystrokes to the register you choose. You can | |
4000 also see the word "recording" in the status(?) line. You can start the key | |
4001 sequences that you want to record. You can go to insert mode and type if | |
4002 you want. | |
4003 | |
4004 To stop recording, press "q" in the normal mode. | |
4005 | |
4006 To playback your keystrokes, press "@" followed by the character you choose. | |
4007 Pressing "@@" will repeat the same again. | |
4008 | |
4009 Sameer. | |
4010 | |
4011 </pre></tip> </html> <Tip category="KVim"> <html><center>Changing | |
4012 DOS style end of line to UNIX, or vise-versa</center> <pre> <A | |
4013 HREF="http://vim.sf.net/tip_view.php?tip_id=145">http://vim.sf.net/tip_view.php?tip_id=145</A><BR> | |
4014 | |
4015 Those of us doomed to work in both the Unix and Windows world have many times | |
4016 encountered files that were create/editted on systems other that the one | |
4017 we are on at the time of our edits. We can easily correct the dreaded '^M' | |
4018 at the end of our Unix lines, or make files have more than one line in DOS by: | |
4019 | |
4020 To change from <CR><LF> (DOS) to just <LF> (Unix): :set | |
4021 fileformat=unix :w | |
4022 | |
4023 Or to change back the other way: :set fileformat=dos :w | |
4024 | |
4025 It also works for Apple land: :set fileformat=mac :w | |
4026 | |
4027 And to tell the difference: set statusline=%<%f%h%m%r%=%{&ff}\ %l,%c%V\ %P | |
4028 ^^^^^ This shows what the | |
4029 current file's format is. | |
4030 | |
4031 Happy Vimming! | |
4032 | |
4033 </pre></tip> </html> <Tip category="KVim"> <html><center>opening | |
4034 multiple files from a single command-line</center> <pre> <A | |
4035 HREF="http://vim.sf.net/tip_view.php?tip_id=146">http://vim.sf.net/tip_view.php?tip_id=146</A><BR> | |
4036 | |
4037 i use the :split command a lot -- both to open a second window containing | |
4038 the currently edited file and to edit a new file altogether (with the :split | |
4039 <filename> option). however, i also like to be able to edit more than | |
4040 one file and calling :sp multiple times is inconvenient. so, i created the | |
4041 following command, function and abbreviation: | |
4042 | |
4043 function! Sp(...) | |
4044 if(a:0 == 0) | |
4045 sp | |
4046 else | |
4047 let i = a:0 while(i > 0) | |
4048 execute 'let file = a:' . i execute 'sp ' . file | |
4049 | |
4050 let i = i - 1 | |
4051 endwhile | |
4052 endif | |
4053 endfunction com! -nargs=* -complete=file Sp call Sp(<f-args>) cab sp Sp | |
4054 | |
4055 this retains the behaviour of :sp in that i can still type :sp (the | |
4056 abbreviation takes care of that). :Sp takes any number of files and opens | |
4057 them all up, one after the other. | |
4058 | |
4059 the things i have noticed are that this causes 'sp' to be expanded to 'Sp' | |
4060 everywhere, even in search patterns. also, prepending 'vert' doesn't work. | |
4061 if there is interest, i'll do that. | |
4062 | |
4063 </pre></tip> </html> <Tip category="KVim"> | |
4064 <html><center>How to write a plugin</center> <pre> <A | |
4065 HREF="http://vim.sf.net/tip_view.php?tip_id=147">http://vim.sf.net/tip_view.php?tip_id=147</A><BR> | |
4066 | |
4067 This tip gives a skeleton for writing a plugin; Vim's help files have plenty | |
4068 of details (:he plugin, :he write-plugin, :he plugin-details). | |
4069 | |
4070 # | |
4071 ------------------------------------------------------------------------------ | |
4072 # Exit when your app has already been loaded (or "compatible" mode set) | |
4073 if exists("loaded_YourAppName") || &cp | |
4074 finish | |
4075 endif | |
4076 | |
4077 # Public Interface: # AppFunction: is a function you expect your users to | |
4078 call # PickAMap: some sequence of characters that will run your AppFunction # | |
4079 Repeat these three lines as needed for multiple functions which will # be used | |
4080 to provide an interface for the user if !hasmapto('<Plug>AppFunction') | |
4081 map <unique> <Leader>PickAMap <Plug>AppFunction | |
4082 endif | |
4083 | |
4084 # Global Maps: # map <silent> <unique> | |
4085 <script> <Plug>AppFunction \ :set lz<CR>:call | |
4086 <SID>AppFunc<CR>:set nolz<CR> | |
4087 | |
4088 # | |
4089 ------------------------------------------------------------------------------ | |
4090 | |
4091 # AppFunction: this function is available vi the <Plug>/<script> | |
4092 interface above fu! <SID>AppFunction() ..whatever.. | |
4093 | |
4094 # your script function can set up maps to internal functions | |
4095 nmap <silent> <left> :set lz<CR>:silent! call | |
4096 <SID>AppFunction2<CR>:set nolz<CR> | |
4097 | |
4098 # your app can call functions in its own script and not worry about | |
4099 name # clashes by preceding those function names with <SID> call | |
4100 <SID>InternalAppFunction(...) | |
4101 | |
4102 # or you could call it with call s:InternalAppFunction(...) endf # | |
4103 ------------------------------------------------------------------------------ | |
4104 | |
4105 # InternalAppFunction: this function cannot be called from outside the # | |
4106 script, and its name won't clash with whatever else the user has loaded | |
4107 fu! <SID>InternalAppFunction(...) ..whatever.. endf | |
4108 | |
4109 # | |
4110 ------------------------------------------------------------------------------ | |
4111 | |
4112 Plugins are intended to be "drop into <.vim/plugin>" and work. | |
4113 The problem that the <Plug>, <SID>, etc stuff is intended to | |
4114 resolve: what to do about functions that have the same names in different | |
4115 plugins, and what to do about maps that use the same sequence of characters? | |
4116 The first problem is solved with <SID> (a script identifier number) | |
4117 that vim assigns: program with it and your users will be happier when your | |
4118 stuff works with all their other stuff. The second problem: what to about | |
4119 those maps is addressed with <Plug>, <unique>, etc. Basically | |
4120 the idea is: let the user know that there are clashes and don't overwrite | |
4121 previously existing maps. Use the user's preferred map-introducer sequence | |
4122 (I like the backslash, but there are many keyboards which make producing | |
4123 backslashes unpleasant, and those users usually prefer something else). | |
4124 | |
4125 What I like to do is to have a pair of start/stop maps to reduce my impact | |
4126 on the namespace. When the starting map is used, it kicks off a starting | |
4127 function that introduces all the maps needed. When the stopping map is | |
4128 used, it not only removes the maps the starter made but restores any maps | |
4129 the user had had that would have clashed. I also use the start/stop pair | |
4130 of functions to set and restore options that cause my scripts difficulties. | |
4131 | |
4132 Check out DrawIt.vim's SaveMap() function for a way to save user maps. | |
4133 Restoring maps with it is easy: | |
4134 | |
4135 if b:restoremap != "" | |
4136 exe b:restoremap unlet b:restoremap | |
4137 endif | |
4138 | |
4139 So you can see it sets up a string variable with all the maps that the user | |
4140 had that would have clashed with my application. | |
4141 | |
4142 One final thing: if your application needs to share information between | |
4143 its various functions, see if you can use s:varname (a variable that only | |
4144 your script's functions can access) or b:varname (a variable that anything | |
4145 associated with the buffer your application is running with can access) | |
4146 instead of using global variables. | |
4147 | |
4148 Good luck and happy Vimming! | |
4149 | |
4150 </pre></tip> </html> <Tip category="KVim"> <html><center>Make | |
4151 great use of those homemade menus</center> <pre> <A | |
4152 HREF="http://vim.sf.net/tip_view.php?tip_id=148">http://vim.sf.net/tip_view.php?tip_id=148</A><BR> | |
4153 | |
4154 Accidently discovered that using <alt><Menu Hotletter><cr> | |
4155 (e.g <alt>b<cr> - for the buffer menu) causes the menu to break | |
4156 out in a seperate window. Selecting the menu with the mouse and then hitting | |
4157 enter does not seem to do it. | |
4158 | |
4159 I will have to learn to add hotletters to my menus now so that the mouse | |
4160 can take a break. | |
4161 | |
4162 I am a total newbie with vim, but constantly amazed.... | |
4163 | |
4164 </pre></tip> </html> <Tip category="KVim"> <html><center>Automatically | |
4165 update your diff upon writing.</center> <pre> <A | |
4166 HREF="http://vim.sf.net/tip_view.php?tip_id=149">http://vim.sf.net/tip_view.php?tip_id=149</A><BR> | |
4167 | |
4168 When trying to reconcile differences between files, and using the new 'diff' | |
4169 functionality in Vim 6.0 you may want to automatically update the differences | |
4170 as you are working along. A convienent time is when you write out either of | |
4171 the files you are diff'ing. This autocmd will take care of doing that for you. | |
4172 | |
4173 " If doing a diff. Upon writing changes to file, automatically update the | |
4174 " differences au BufWritePost * if &diff == | |
4175 1 au BufWritePost * :diffupdate au BufWritePost | |
4176 * endif | |
4177 | |
4178 </pre></tip> </html> <Tip category="KVim"> <html><center>Generating | |
4179 a column of increasing numbers</center> <pre> <A | |
4180 HREF="http://vim.sf.net/tip_view.php?tip_id=150">http://vim.sf.net/tip_view.php?tip_id=150</A><BR> | |
4181 | |
4182 You can use the "Visual Incrementing" script from | |
4183 | |
4184 <A | |
4185 HREF="http://www.erols.com/astronaut/vim/index.html#VimFuncs">http://www.erols.com/astronaut/vim/index.html#VimFuncs</A><BR> | |
4186 | |
4187 to convert a block of numbers selected via ctrl-v (visual block) into a | |
4188 column of increasing integers. Select the column, press :I<CR>, and | |
4189 the first line's number will be used as a starting value. Subsequent lines's | |
4190 numbers will be incremented by one. | |
4191 | |
4192 If the ctrl-v block is "ragged right", which can happen when "$" is used to | |
4193 select the right hand side, the block will have spaces appended as needed | |
4194 to straighten it out. If the strlen of the count exceeds the visual-block | |
4195 allotment of spaces, then additional spaces will be inserted. | |
4196 | |
4197 Example: Put cursor on topmost zero, select column with ctrl-v, then :I | |
4198 | |
4199 vector[0]= 1; vector[0]= 1; vector[0]= 1; vector[1]= 1; | |
4200 vector[0]= 1; --> vector[2]= 1; vector[0]= 1; vector[3]= 1; | |
4201 vector[0]= 1; vector[4]= 1; | |
4202 | |
4203 This script works with both vim 5.7 (:so visincr.vim) or vim 6.0 (source it | |
4204 as for vim 5.7 or drop it into the .vim/plugin directory). | |
4205 | |
4206 </pre></tip> </html> <Tip category="KVim"> | |
4207 <html><center>an ascii table</center> <pre> <A | |
4208 HREF="http://vim.sf.net/tip_view.php?tip_id=151">http://vim.sf.net/tip_view.php?tip_id=151</A><BR> | |
4209 | |
4210 There is an ascii table in the vim-help files, but it's hard to find. Thus, | |
4211 I shall give a pointer to it: | |
4212 | |
4213 :help digraph-table | |
4214 | |
4215 </pre></tip> </html> <Tip category="KVim"> <html><center>Dutch, | |
4216 English, German, Hungarian, and Yiddish</center> <pre> <A | |
4217 HREF="http://vim.sf.net/tip_view.php?tip_id=152">http://vim.sf.net/tip_view.php?tip_id=152</A><BR> | |
4218 | |
4219 Under <A | |
4220 HREF="http://www.erols.com/astronaut/vim/index.html#vimlinks_scripts">http://www.erols.com/astronaut/vim/index.html#vimlinks_scripts</A><BR> | |
4221 are links to spelling checkers for Dutch, English, German, Hungarian, | |
4222 and Yiddish, all based on the original engspchk.vim. The spelling checker | |
4223 provides as-you-type spell checking; with vim6.0 it will avoid checking on | |
4224 partially typed words. | |
4225 | |
4226 Provided are several maps: | |
4227 | |
4228 \et : add word under cursor into database for just this file \es : save | |
4229 word under cursor into database (permanently) \en : move cursor to the | |
4230 next spelling error \ep : move cursor to the previous spelling error | |
4231 \ea : look for alternative spellings of word under cursor | |
4232 | |
4233 To use \ea you will need agrep: | |
4234 | |
4235 agrep source: <A | |
4236 HREF="ftp://sunsite.unc.edu/pub/Linux/utils/text/agrep-2.04.tar.Z">ftp://sunsite.unc.edu/pub/Linux/utils/text/agrep-2.04.tar.Z</A><BR> | |
4237 agrep Win exe: <A | |
4238 HREF="http://www.tgries.de/agrep">http://www.tgries.de/agrep</A><BR> | |
4239 | |
4240 To use the spell checkers just source it in: | |
4241 | |
4242 ex. so engspchk.vim | |
4243 | |
4244 To read more about it see | |
4245 | |
4246 <A | |
4247 HREF="http://www.erols.com/astronaut/vim/index.html#Spelling">http://www.erols.com/astronaut/vim/index.html#Spelling</A><BR> | |
4248 | |
4249 </pre></tip> </html> <Tip category="KVim"> <html><center>Making | |
4250 Parenthesis And Brackets Handling Easier</center> <pre> <A | |
4251 HREF="http://vim.sf.net/tip_view.php?tip_id=153">http://vim.sf.net/tip_view.php?tip_id=153</A><BR> | |
4252 | |
4253 1) ++++++++++++++++++++++++++ "Automatic" bracket setting | |
4254 +++++++++++++++++++++++++++++ 2) +++++++++++++ Further improvement of | |
4255 parenthesis/bracket expanding +++++++++++++++++ 3) ++++++++++++++++++++++++++++ | |
4256 "Late" bracketing of text +++++++++++++++++++++++++++++ 4) | |
4257 +++++++++++++++++++++++++++++ Conclusion ++++++++++++++++++++++++++++++++++++++ | |
4258 ++++ | |
4259 | |
4260 ======================================================================================= | |
4261 | |
4262 1) ++++++++++++++++++++++++++ "Automatic" bracket setting | |
4263 +++++++++++++++++++++++++++++ | |
4264 | |
4265 To automatically insert a closing parenthesis when typing an opening | |
4266 parenthesis you can insert the following simple mapping to your vimrc: | |
4267 | |
4268 :inoremap ( ()<ESC>i | |
4269 | |
4270 This ends up with the cursor between the opening and the closing parenthesis | |
4271 in insert mode. | |
4272 | |
4273 You can apply this and the following tips, of course, with the kind of | |
4274 parenthesis/bracket character you want to, i.e. (, {, [, < ..... and, | |
4275 pretty useful as well, quotation marks ",',.... (to be continued) | |
4276 | |
4277 2) +++++++++++++++ Further improvement of parenthesis/bracket expanding | |
4278 ++++++++++++++++++ | |
4279 | |
4280 I you are ready with filling the parenthesis/brackets, you likely want to | |
4281 "escape" from the brackets again to continue coding. To make this pretty | |
4282 comfortable, I invented the following kind of mappings, which get out of | |
4283 the last expanded parenthesis/bracket, regardless of the actual type of it, | |
4284 and enter append mode again. I mapped this kind of "getaway" with CTRL_j, | |
4285 you may use your favorite keystroke with it. | |
4286 | |
4287 ... | |
4288 :inoremap ( ()<ESC>:let leavechar=")"<CR>i :inoremap [ | |
4289 []<ESC>:let leavechar="]"<CR>i | |
4290 ... | |
4291 :imap <C-j> <ESC>:exec "normal f" . leavechar<CR>a | |
4292 | |
4293 Explanation: The variable "leavechar" contents the actual char which is to | |
4294 "escape" from. | |
4295 | |
4296 3) ++++++++++++++++++++++++++++ "Late" bracketing of text | |
4297 +++++++++++++++++++++++++++++ | |
4298 | |
4299 Occasionally I later want already written text parts to put in parenthesis. | |
4300 | |
4301 I use the following macro, which brackets previously visually selected text. | |
4302 I mapped it with _(. | |
4303 | |
4304 :vnoremap _( <ESC>`>a)<ESC>`<i(<ESC> | |
4305 | |
4306 Furthermore, a sort of mapping for bracketing a *single word* is conceivable. | |
4307 Because this is not as general like the kind of visual mode mapping, I use | |
4308 this kind of "word bracketing" only for surrounding the word right behind | |
4309 the cursor in insert mode with **. I use the following macro to "emphasize" | |
4310 the word i just typed, for newsgroup articles. | |
4311 | |
4312 :imap _* <Esc>bi*<Esc>ea*<Space> | |
4313 | |
4314 4) ++++++++++++++++++++++++++++++ Conclusion | |
4315 ++++++++++++++++++++++++++++++++++++++++++ | |
4316 | |
4317 Since I use these macros, I never caused a syntax error because of missing | |
4318 brackets, and furthermore I can quickly insert parenthesis and qutotes into | |
4319 code- and non-code files. | |
4320 | |
4321 JH 04.11.2001 | |
4322 | |
4323 </pre></tip> </html> <Tip category="KVim"> <html><center>Mappings | |
4324 to facilitate the creation of text</center> <pre> <A | |
4325 HREF="http://vim.sf.net/tip_view.php?tip_id=154">http://vim.sf.net/tip_view.php?tip_id=154</A><BR> | |
4326 | |
4327 " " Mappings to facilitate the creation of text " " Author: Suresh Govindachar | |
4328 sgovindachar@yahoo.com " Date: November 5, 2001 " " While typing text to | |
4329 create a document, I often end up hitting " <Esc>, issuing some commands | |
4330 (with or without ":") and getting back " to typing by issuing a command such | |
4331 as "i", "O", "s" etc. " " I looked into using "set insertmode" to speed | |
4332 up such actions, but " found that too confusing. " " I have come up with | |
4333 a set of mappings that have speeded up my process " of creating documents. | |
4334 I have saved these mappings in a file, named " FullScreenVI.vim, in vim's | |
4335 plugin directory. " " Perhaps you will find these mappings helpful too. | |
4336 " " Please send me feedback. " | |
4337 | |
4338 "To allow overriding the Alt key set winaltkeys=no "To enable viewing messages | |
4339 from commands issued using the mappings presented here set cmdheight=2 | |
4340 | |
4341 "The fundamental mapping that makes full-screen editing possible imap | |
4342 <A-o> <C-o> imap <A-;> <C-o>: | |
4343 | |
4344 "Basic motions imap <A-h> <Left> imap <A-j> <Down> | |
4345 imap <A-k> <Up> imap <A-l> <Right> imap <A-f> | |
4346 <PageDown> imap <A-b> <PageUp> imap <A-^> | |
4347 <Home> imap <A-$> <End> | |
4348 | |
4349 "Numbers for repeats imap <A-1> <C-o>1 imap <A-2> | |
4350 <C-o>2 imap <A-3> <C-o>3 imap <A-4> <C-o>4 | |
4351 imap <A-5> <C-o>5 imap <A-6> <C-o>6 imap <A-7> | |
4352 <C-o>7 imap <A-8> <C-o>8 imap <A-9> <C-o>9 | |
4353 | |
4354 "Basic searches imap <A-/> <C-o>/ imap <A-*> <C-o>* | |
4355 imap <A-#> <C-o># imap <A-n> <C-o>n imap <A-N> | |
4356 <C-o>N | |
4357 | |
4358 "Deleting imap <A-x> <C-o>x imap <A-d> <C-o>d imap | |
4359 <A-D> <C-o>D | |
4360 | |
4361 "Yanking and putting imap <A-y> <C-o>y imap <A-Y> | |
4362 <C-o>Y imap <A-p> <C-o>p imap <A-P> <C-o>P | |
4363 | |
4364 "Common prefixes: marking, matching etc. imap <A-~> <C-o>~ | |
4365 imap <A-m> <C-o>m imap <A-`> <C-o>` imap <A-"> | |
4366 <C-o>" imap <A-%> <C-o>% imap <A-h> <C-o>:h | |
4367 imap <A-s> <C-o>:s | |
4368 | |
4369 "Interacting with the 'outside' imap <A-!> <C-o>:! imap | |
4370 <A-w> <C-o>:w<CR> imap <A-e> <C-o>:e | |
4371 | |
4372 "Other commands imap <A-u> <C-o>u imap <A-.> <C-o>. | |
4373 | |
4374 </pre></tip> </html> <Tip category="KVim"> <html><center>Decompile | |
4375 Java .class files automatically</center> <pre> <A | |
4376 HREF="http://vim.sf.net/tip_view.php?tip_id=155">http://vim.sf.net/tip_view.php?tip_id=155</A><BR> | |
4377 | |
4378 Here's a plugin to automatically decompile Java .class files as they're | |
4379 read in. Tweak the javap flags for what you want to see. I didn't post | |
4380 this as a script because it's too simple and it's really more useful for | |
4381 demonstrating how to read decompilable files (or other binary files that | |
4382 can be converted to text). | |
4383 | |
4384 function s:ReadClass(dir, classname) | |
4385 execute "cd " . a:dir execute "0read !javap -c " . a:classname 1 setlocal | |
4386 readonly setlocal nomodified | |
4387 endfunction | |
4388 | |
4389 autocmd BufReadCmd *.class | |
4390 \ call <SID>ReadClass(expand("<afile>:p:h"), | |
4391 expand("<afile>:t:r")) | |
4392 | |
4393 </pre></tip> </html> <Tip category="KVim"> <html><center>describe | |
4394 <table name> from vim</center> <pre> <A | |
4395 HREF="http://vim.sf.net/tip_view.php?tip_id=156">http://vim.sf.net/tip_view.php?tip_id=156</A><BR> | |
4396 | |
4397 i had some trouble with the sqlplus scripts (probably my fault). but it | |
4398 seemed a little heavy for what i need, usually all i want is a listing of | |
4399 the columns for a given table while i'm whipping on some sql inside vim. | |
4400 | |
4401 so i wrote a bash script (describe)... | |
4402 | |
4403 ~~~~~~~~~~~~~~~begin describe script #!/usr/bin/bash | |
4404 | |
4405 f=aTempFile.sql u=<uName> p=<pWord> d=<dBase> | |
4406 | |
4407 echo "/* describe for $1" echo "describe $1;" > $f; echo "quit;" | |
4408 >> $f; | |
4409 | |
4410 sqlplus -S $u/$p@$d @$f rm -f $f; echo " end describe for $1 */" | |
4411 ~~~~~~~~~~~~~~~end describe script | |
4412 | |
4413 your path needs to include the script (as well as sqlplus), then from vim | |
4414 you can just type.... | |
4415 | |
4416 :r !describe <tableName> | |
4417 | |
4418 and you get a listing of the table columns slammed into wherever your cursor | |
4419 was, complete with java/c comments | |
4420 | |
4421 </pre></tip> </html> <Tip category="KVim"> | |
4422 <html><center>Incredible new functionality</center> <pre> <A | |
4423 HREF="http://vim.sf.net/tip_view.php?tip_id=157">http://vim.sf.net/tip_view.php?tip_id=157</A><BR> | |
4424 | |
4425 if you get away from vim and get any other editor that was built *after* | |
4426 1970.... | |
4427 | |
4428 </pre></tip> </html> <Tip category="KVim"> <html><center>Using | |
4429 Computer Modern TT as gvim font (Win32)</center> <pre> <A | |
4430 HREF="http://vim.sf.net/tip_view.php?tip_id=158">http://vim.sf.net/tip_view.php?tip_id=158</A><BR> | |
4431 | |
4432 If you really like the Computer Modern typewriter font (as seen in most TeX | |
4433 distributions) you can use it as the font in gvim! (looks excellent with | |
4434 font smoothing turned on) | |
4435 | |
4436 First, get hold of the free Blue Sky Type 1 PS versions of the CM fonts from | |
4437 your local CTAN mirror. Unpack to a suitable directory. | |
4438 | |
4439 Next locate the cmtt8.pfb file and open it (in Vim, naturally ;) - find the | |
4440 line saying dup 32 /visiblespace put | |
4441 | |
4442 and change it to dup 32 /space put | |
4443 | |
4444 that is, inserting enough spaces to keep the file size exactly the same | |
4445 (IMPORTANT!) | |
4446 | |
4447 Save the file in Mac format (:set fileformat=mac). | |
4448 | |
4449 Now install the cmtt.pfm file - in Win9x/NT4, you'll need Adobe Type Manager | |
4450 (free download), but in Win2k, you can just drop the .pfm file into the | |
4451 Fonts folder. | |
4452 | |
4453 Now in your _gvimrc: set guifont=CMTT8:h11:cSYMBOL | |
4454 | |
4455 (use whatever height you like instead of h11) | |
4456 | |
4457 ..and enjoy! It's the first scalable font I can bear to edit code in... %-) | |
4458 | |
4459 </pre></tip> </html> <Tip category="KVim"> <html><center>Keystroke | |
4460 Saving Substituting and Searching</center> <pre> <A | |
4461 HREF="http://vim.sf.net/tip_view.php?tip_id=159">http://vim.sf.net/tip_view.php?tip_id=159</A><BR> | |
4462 | |
4463 1) ++++++++++++++ Saving Keystrokes for common Searching | |
4464 and Substituting +++++++++++ --- a) Searching b) Substituting | |
4465 --------------------------------------------------- 2) ++++ Searching for | |
4466 resp. Substituting of the current word under the cursor ++++++ --- a) Searching | |
4467 b) Substituting --------------------------------------------------- | |
4468 3) ++ Searching and Substituting for an arbitrary visually | |
4469 selected part of text ++++ --- a) Searching b) Substituting | |
4470 --------------------------------------------------- | |
4471 4) ++++++++++++++++++++++++++++++++ Conclusion | |
4472 +++++++++++++++++++++++++++++++++++++ | |
4473 | |
4474 ===================================================================================== | |
4475 | |
4476 1) ++++++++++++++ Saving Keystrokes for common Substituting and Searching | |
4477 +++++++++++ | |
4478 | |
4479 a) Searching ............ Sorry, there is not much that can be saved for | |
4480 common Searching. It's just hitting /mypattern<RETURN> | |
4481 | |
4482 b) Substituting ......... I think, common substitution requires pretty many | |
4483 keystrokes. So I use the following macro with my favorite substitution options: | |
4484 | |
4485 :map <F4> :%s//gc<Left><Left><Left> | |
4486 | |
4487 This ends up with the cursor after the first '/' in the | |
4488 commandline. To complete it, you only have to enter -> | |
4489 myoldpattern/mynewpattern<RETURN> | |
4490 | |
4491 Remark: I mapped it to <F4> (cause of tribute to the <F4> of | |
4492 the good old Norton Commander editor). You may map it where you want to. | |
4493 | |
4494 2) ++++ Searching for resp. Substituting of the current word under the | |
4495 cursor ++++++ | |
4496 | |
4497 a) Searching ............ If you don't know how to look for the next | |
4498 occurence of the word under the cursor, you should *now* type :help * or | |
4499 :help star or refer to the tips vimtip #1 or vimtip #5 ((Tip within tip: | |
4500 To make your pattern more visible, look for :help hls)) | |
4501 | |
4502 b) Substituting ......... The following macro extends the one above with | |
4503 automatically inserting the current word under the cursor into the from - | |
4504 pattern of the :s command. | |
4505 | |
4506 :map <S-F4> | |
4507 :%s/<C-r><C-w>//gc<Left><Left><Left> | |
4508 | |
4509 To complete it, just enter -> mynewpattern<RETURN> | |
4510 | |
4511 I use this i.e. for reliable and quickly renaming a variable in the entire | |
4512 buffer. I mapped it to Shift-<F4>. You may map it to the keystroke | |
4513 you want. | |
4514 | |
4515 Explanation: CTRL-v+CTRL-w expands to the word under the cursor. | |
4516 | |
4517 3) ++ Searching and Substituting for an arbitrary visually selected part of | |
4518 text ++++ | |
4519 | |
4520 If you want to look or substitute (for) an *arbritary* pattern (which | |
4521 already exists at least once in your text), the following 2 mappings do it | |
4522 for you. The advantage is that you dont have to type again or cut & paste | |
4523 the appropriate text but only have to visually select it. | |
4524 | |
4525 a) Searching ........... | |
4526 | |
4527 :vmap / y:execute "/".escape(@",'[]/\.*')<CR> | |
4528 | |
4529 This immediately finds to the next occurence of the previously visually | |
4530 selected text. | |
4531 | |
4532 b) Substituting ......... | |
4533 | |
4534 :vmap <F4> y:execute | |
4535 "%s/".escape(@",'[]/\')."//gc"<Left><Left><Left><Left> | |
4536 | |
4537 Again, as in the mapping in chapter 2), you just have to complete it by | |
4538 entering -> mynewpattern<RETURN> | |
4539 | |
4540 Explanation/Discussion: What both Substituting and Searching in this way | |
4541 generally does is: - *y*anking the selected text - Inserting the visually | |
4542 selected via adressing the '"' register with '@"' as a | |
4543 parameter of the escape() function going finally into the 'myoldpattern' | |
4544 part. The trickery problem is, if you have characters in your myoldpattern, | |
4545 which are regular expression chars, they are recognized and threated | |
4546 accordingly. That is most likely not what you wanted. To escape them, these | |
4547 chars have to be declared by the second parameter of the excape() function, | |
4548 which then escapes them with a backslash. The few characters above work | |
4549 for me. If you run into problems, you should check for additional regexp | |
4550 chars in your text, and try to escape them by adding them to the escape() | |
4551 function parameter. | |
4552 | |
4553 4) ++++++++++++++++++++++++++++++++ Conclusion | |
4554 +++++++++++++++++++++++++++++++++++++ | |
4555 | |
4556 With the appropriate mappings in your vimrc you can save keystrokes when | |
4557 Searching or Substituting and avoid typing errors. That way, you can take | |
4558 lunch sooner | |
4559 | |
4560 </pre></tip> </html> <Tip category="KVim"> | |
4561 <html><center>Dutch spelling checker</center> <pre> <A | |
4562 HREF="http://vim.sf.net/tip_view.php?tip_id=161">http://vim.sf.net/tip_view.php?tip_id=161</A><BR> | |
4563 | |
4564 Download at <A | |
4565 HREF="http://www.thomer.com/thomer/vi/nlspchk.vim.gz.">http://www.thomer.com/thomer/vi/nlspchk.vim.gz.</A><BR> | |
4566 | |
4567 This sciript is based on Charles E. Campbell's English spelling checker script | |
4568 for ViM (<A HREF="http://users.erols.com/astronaut/vim/) and Piet Tutelaers' | |
4569 Dutch word list (http://www.ntg.nl/spell-nl-v5b/) using Thomas Köhler's | |
4570 script (http://jeanluc-picard.de/vim/gerspchk/create). In other words, I | |
4571 didn't do much.">http://users.erols.com/astronaut/vim/) and Piet Tutelaers' | |
4572 Dutch word list (http://www.ntg.nl/spell-nl-v5b/) using Thomas Köhler's | |
4573 script (http://jeanluc-picard.de/vim/gerspchk/create). In other words, | |
4574 I didn't do much.</A><BR> | |
4575 | |
4576 </pre></tip> </html> <Tip category="KVim"> <html><center>write | |
4577 plugin with explorer like interfaces</center> <pre> <A | |
4578 HREF="http://vim.sf.net/tip_view.php?tip_id=162">http://vim.sf.net/tip_view.php?tip_id=162</A><BR> | |
4579 | |
4580 Several plugins use a text base interface based on a special buffer, this | |
4581 is the case of the standard explorer plugin, several bufexplorer plugins, | |
4582 the option buffer and others... Here is a quick guide in how to do this | |
4583 | |
4584 Writing a special buf script | |
4585 | using a special buffer is a common technic when writing | |
4586 Vim scripts, it is used by | explorer, bufexplorer, | |
4587 DirDiff... | I'm currently writing one for TagsBase.vim | <A | |
4588 HREF="http://vim.sourceforge.net/scripts/script.php?script_id=100 | |
4589 ">http://vim.sourceforge.net/scripts/script.php?script_id=100 </A><BR> | |
4590 | and I'll use this document to take notes on how to do it. | | |
4591 | |
4592 Setting up the buffer | |
4593 Opening the window TODO | |
4594 | |
4595 Using a setup function | |
4596 Principle | |
4597 | we can use a specific function to open and setup | |
4598 the special buffer. s:SetupBuf() | |
4599 Setup Function advantage | |
4600 | since the command will be defined in the main | |
4601 script you | can use script local functions | |
4602 Using a special filetype | |
4603 Principle | |
4604 | we can also use a new filetype and distribute a | |
4605 syntax and an ftplugin for this | filetype, the only | |
4606 thing needed in this case is to set the | filetype | |
4607 after creating the buffer | |
4608 Filetype advantage | |
4609 | better separations of different parts of your | |
4610 script. If | the main function of your plugin is | |
4611 not to have this | special buffer then it is nice | |
4612 to avoid clutering it. | |
4613 Things which needs to be done to setup the buffer | |
4614 The buffer should not be listed and does not correspond to | |
4615 a file | |
4616 * setlocal buftype=nofile - options always local | |
4617 to buffer * set nobuflisted * set bufhidden=delete * | |
4618 set nomodifiable | |
4619 Setup the syntax for this buffer | |
4620 | see :help syntax | This is usually done in two | |
4621 steps, first describe the | syntax groups using :syn | |
4622 commands then setup the | hilighting using :hi def | |
4623 link commands. Usually it is | best to link the | |
4624 newly defined groups to predefine ones in | order | |
4625 to make the coloring work fine with colorschemes. | |
4626 | You'll find the list of predefined group by doing: | |
4627 | :help group-name | |
4628 Setup the special mappings | |
4629 | since we have chosen to use the set nomodifiable | |
4630 option | our buffer will never be in insert mode. All | |
4631 our mapping | are in Normal, Visual or operator | |
4632 pending, they should | therefore use the map, nmap, | |
4633 vmap and omap mapping command | plus the associated | |
4634 'nore' version. I usually find it | better to use the | |
4635 'nore' version to avoid surprises due to | mapping | |
4636 in the user configuration. | | We also want our | |
4637 mappings to be local to the special | buffer so all | |
4638 the commands will use the <buffer> modifier. | |
4639 | | Finally we want our mappings not to polute the | |
4640 status bar | so we use the <silent> modifier | | |
4641 | Putting all this together we end up with mapping | |
4642 commands | which look like: | noremap <buffer> | |
4643 <silent> {lhs} {rhs} | |
4644 Setup the special command | |
4645 | we will then setup special commands for this buffer. | |
4646 Like | for the mapping there are some precautions to | |
4647 take: | we don't want an error message if the command | |
4648 is defined | twice so we use the command! variant. | | |
4649 We want a command local to our buffer wo we use the | | |
4650 -buffer attribute. The rests of the command attributes | |
4651 | and options depend on the actual command. | So | |
4652 our commands look like: | command! -buffer {attr} | |
4653 {cmd} {rep} | where attr is optional. | |
4654 | |
4655 </pre></tip> </html> <Tip category="KVim"> | |
4656 <html><center>Toggle Search Highlighting</center> <pre> <A | |
4657 HREF="http://vim.sf.net/tip_view.php?tip_id=163">http://vim.sf.net/tip_view.php?tip_id=163</A><BR> | |
4658 | |
4659 " Map H to toggle search highlighting map H :let &hlsearch = | |
4660 !&hlsearch<CR> | |
4661 | |
4662 </pre></tip> </html> <Tip category="KVim"> <html><center>Make | |
4663 non-ASCII characters displayed on console</center> <pre> <A | |
4664 HREF="http://vim.sf.net/tip_view.php?tip_id=164">http://vim.sf.net/tip_view.php?tip_id=164</A><BR> | |
4665 | |
4666 I had a problem with VIM on the FreeBSD console: it didn't display characters | |
4667 like German umlauts correctly, but escaped them with a tilde. The solution | |
4668 is to teach VIM about printable characters. I use the following on my .vimrc: | |
4669 | |
4670 set isprint=@,128-255 | |
4671 | |
4672 </pre></tip> </html> <Tip category="KVim"> <html><center>Deleting | |
4673 a buffer without closing the window</center> <pre> <A | |
4674 HREF="http://vim.sf.net/tip_view.php?tip_id=165">http://vim.sf.net/tip_view.php?tip_id=165</A><BR> | |
4675 | |
4676 I'm not sure if this functionality is already within Vim, but I sometimes I | |
4677 find it useful to keep a split window from closing when deleting a buffer. | |
4678 This has already been discussed on the vim@vim.org mailing list. However, | |
4679 I feel this solution is a little easier to use. | |
4680 | |
4681 " Put this into .vimrc or make it a plugin. " Mapping :Bclose to some | |
4682 keystroke would probably be more useful. " I like the way buflisted() | |
4683 behaves, but some may like the behavior " of other buffer testing functions. | |
4684 | |
4685 command! Bclose call <SID>BufcloseCloseIt() | |
4686 | |
4687 function! <SID>BufcloseCloseIt() | |
4688 let l:currentBufNum = bufnr("%") let l:alternateBufNum = bufnr("#") | |
4689 | |
4690 if buflisted(l:alternateBufNum) | |
4691 buffer # | |
4692 else | |
4693 bnext | |
4694 endif | |
4695 | |
4696 if bufnr("%") == l:currentBufNum | |
4697 new | |
4698 endif | |
4699 | |
4700 if buflisted(l:currentBufNum) | |
4701 execute("bdelete ".l:currentBufNum) | |
4702 endif | |
4703 endfunction | |
4704 | |
4705 </pre></tip> </html> <Tip category="KVim"> <html><center>Mapping | |
4706 caps lock to esc in XWindows</center> <pre> <A | |
4707 HREF="http://vim.sf.net/tip_view.php?tip_id=166">http://vim.sf.net/tip_view.php?tip_id=166</A><BR> | |
4708 | |
4709 (This originally appeared on the vim mailing list as post by Adam Monsen <A | |
4710 HREF="http://groups.yahoo.com/group/vim/message/19856)">http://groups.yahoo.com/group/vim/message/19856)</A><BR> | |
4711 | |
4712 If you want to completely swap caps lock and escape, you have to replace | |
4713 the "Lock" on caps lock. Drop this file in your home dir:<br> | |
4714 -----------start------------<br> ! Swap caps lock and escape<br> | |
4715 remove Lock = Caps_Lock<br> keysym Escape = Caps_Lock<br> | |
4716 keysym Caps_Lock = Escape<br> add Lock = Caps_Lock<br> | |
4717 ------------end-------------<br> and call it ".speedswapper". Then | |
4718 open a terminal and type<br> $ xmodmap .speedswapper<br> | |
4719 and you'll be twice as efficient in vim. Who needs caps lock anyway? The | |
4720 swapping lasts for the duration of the X session, so you can put it in a | |
4721 .xinitrc or similar startup file. As far as other people using my laptop, | |
4722 I'd rather they didn't! Using a Dvorak layout might protect me even more... :) | |
4723 | |
4724 </pre></tip> </html> <Tip category="KVim"> <html><center>Using | |
4725 vim as a man-page viewer under Unix</center> <pre> <A | |
4726 HREF="http://vim.sf.net/tip_view.php?tip_id=167">http://vim.sf.net/tip_view.php?tip_id=167</A><BR> | |
4727 | |
4728 To use vim as a man-page viewer involves setting an environment variable: | |
4729 | |
4730 sh, ksh: export MANPAGER="col -b | view -c 'set ft=man nomod nolist' | |
4731 -" csh : setenv MANPAGER "col -b | view -c 'set ft=man nomod nolist' -" | |
4732 | |
4733 Put one of the above two lines into your <.profile> or <.login> | |
4734 file as appropriate for your shell. | |
4735 | |
4736 The man pages will then be displayed with vim called as "view" and | |
4737 will use the <man.vim> syntax highlighting. I myself use some | |
4738 additional highlighting which is enabled by putting the following file into | |
4739 <.vim/after/syntax/man.vim>. I usually use the <astronaut> | |
4740 colorscheme (also available from this archive); those who use bright | |
4741 backgrounds may find the colors selected for manSubSectionStart and | |
4742 manSubSection something they'll want to change: | |
4743 | |
4744 --------------------------------------------------------------------- | |
4745 " DrChip's additional <man.vim> stuff | |
4746 | |
4747 syn match manSectionHeading "^\s\+[0-9]\+\.[0-9.]*\s\+[A-Z].*$" | |
4748 contains=manSectionNumber syn match manSectionNumber | |
4749 "^\s\+[0-9]\+\.[0-9]*" contained syn region manDQString | |
4750 start='[^a-zA-Z"]"[^", )]'lc=1 end='"' contains=manSQString | |
4751 syn region manSQString start="[ \t]'[^', )]"lc=1 end="'" | |
4752 syn region manSQString start="^'[^', )]"lc=1 end="'" | |
4753 syn region manBQString start="[^a-zA-Z`]`[^`, )]"lc=1 end="[`']" | |
4754 syn region manBQSQString start="``[^),']" end="''" | |
4755 syn match manBulletZone transparent "^\s\+o\s" contains=manBullet | |
4756 syn case match syn keyword manBullet contained o syn match manBullet | |
4757 contained "\[+*]" syn match manSubSectionStart "^\*" skipwhite | |
4758 nextgroup=manSubSection syn match manSubSection ".*$" contained | |
4759 | |
4760 hi link manSectionNumber Number hi link manDQString String hi | |
4761 link manSQString String hi link manBQString String hi | |
4762 link manBQSQString String hi link manBullet Special hi | |
4763 manSubSectionStart term=NONE cterm=NONE gui=NONE ctermfg=black | |
4764 ctermbg=black guifg=navyblue guibg=navyblue hi manSubSection | |
4765 term=underline cterm=underline gui=underline ctermfg=green guifg=green set ts=8 | |
4766 --------------------------------------------------------------------- | |
4767 | |
4768 | |
4769 </pre></tip> </html> <Tip category="KVim"> <html><center>Viewing | |
4770 the actual XPM data in GVIM</center> <pre> <A | |
4771 HREF="http://vim.sf.net/tip_view.php?tip_id=168">http://vim.sf.net/tip_view.php?tip_id=168</A><BR> | |
4772 | |
4773 GVIM has an excellent syntax highlighting for XPM images, but sometimes | |
4774 it's useful to view the actual data. This can be achieved by searching for | |
4775 everything, type in "/." and all characters will be highlighted and therefore | |
4776 the old colouring is lost. To regain the normal highlighting you can search | |
4777 for a non-existent sequence, like "/foo". | |
4778 | |
4779 </pre></tip> </html> <Tip category="KVim"> <html><center><Tab> | |
4780 = <C-I> and <Esc> = <C-[></center> <pre> <A | |
4781 HREF="http://vim.sf.net/tip_view.php?tip_id=169">http://vim.sf.net/tip_view.php?tip_id=169</A><BR> | |
4782 | |
4783 An FAQ on the vim users' mailing list is whether <Tab> and | |
4784 <C-I> | |
4785 can be mapped to different things. The answer is no. As I understand it, | |
4786 this is a low level issue: <Tab> and <C-I> are different names | |
4787 for the same ASCII code, and there is no way for vim to tell them apart. | |
4788 Similarly, <Esc> and <C-[> are the same thing. | |
4789 | |
4790 </pre></tip> </html> <Tip category="KVim"> <html><center>Repeating | |
4791 a sequence of commands without defining a macro</center> <pre> <A | |
4792 HREF="http://vim.sf.net/tip_view.php?tip_id=170">http://vim.sf.net/tip_view.php?tip_id=170</A><BR> | |
4793 | |
4794 Imagine. | |
4795 | |
4796 You have just finished a complicated modification of a file, involving | |
4797 numerous replace commands :%s/xxx/yyyy/g, and other ex commands. | |
4798 | |
4799 Then you realize, you have done it a little bit wrong, and you have to begin | |
4800 all the operation again, just to change one replace string, or do one more | |
4801 operation "somewhere 10 commands ago". | |
4802 | |
4803 Or you realize, you will have to do the same stuff tomorrow with another file. | |
4804 | |
4805 or you realize, you want to perform the same sequence of commands, you have | |
4806 typed a few days ago | |
4807 | |
4808 You should have made it a macro (normal command q), but you haven't. | |
4809 | |
4810 Nothing is lost yet. | |
4811 | |
4812 You go to the command line (by typing :) and press Ctrl+F. (Ctrl+F in other | |
4813 modes scrolls the screen) | |
4814 | |
4815 You get a temporary window, listing the history of command line. | |
4816 It is possible to yank appropriate lines here, make a new file called | |
4817 $VIMRUNTIME/macros/something.vim put those lines here, edit them and save | |
4818 | |
4819 see :help cedit | |
4820 | |
4821 Then you can call the macro using :source something.vim | |
4822 | |
4823 You might want to set variable 'history' to a higher number then default in | |
4824 your vimrc file like :set history=300 see :help history :help vimrc | |
4825 | |
4826 </pre></tip> </html> <Tip category="KVim"> <html><center>Do | |
4827 you know the "g/" and "g?" commands?</center> <pre> <A | |
4828 HREF="http://vim.sf.net/tip_view.php?tip_id=171">http://vim.sf.net/tip_view.php?tip_id=171</A><BR> | |
4829 | |
4830 Directly from the Vim Todo list: | |
4831 | |
4832 7 For Visual mode: Command to do a search for the string in the marked area. | |
4833 Only when less than two lines. Use "g/" and "g?". | |
4834 | |
4835 In other words, a way to search for visually selected text !! :-) | |
4836 | |
4837 "==== vsearch.vim ==== | |
4838 | |
4839 " Visual mode search | |
4840 | |
4841 vmap g/ :call VsearchPatternSave()<cr>/<c-r>/<cr> vmap | |
4842 g? :call VsearchPatternSave()<cr>?<c-r>/<cr> | |
4843 | |
4844 function! VsearchPatternSave() | |
4845 let l:temp = @@ normal gvy let @/ = substitute(escape(@@, '/\'), "\n", | |
4846 "\\\\n", "g") let @@ = l:temp unlet l:temp | |
4847 endfunction | |
4848 | |
4849 "==== END ==== | |
4850 | |
4851 Normally, this file should reside in the plugins directory and be | |
4852 automatically sourced. If not, you must manually source this file using | |
4853 ':source vsearch.vim'. | |
4854 | |
4855 In Visual mode, highlight the text for searching. Then you can use the | |
4856 default visual key mappings | |
4857 | |
4858 g/ - search forwards g? - search backwards | |
4859 | |
4860 Visual searches behave like normal searches. The 'n' and 'N' commands | |
4861 work as they should, and the search history correctly records each search. | |
4862 Multi-line searches behave as they should (this corrects the 'yank-only' | |
4863 method mentioned in the Vim help files). Block visual searches do not | |
4864 work yet. Hopefully, someone can figure out a way to do this easily. | |
4865 | |
4866 I've only tested this on Win2000 and Redhat Linux 7.1. I'm not really clear | |
4867 on how the carriage returns are dealt with on other systems. | |
4868 | |
4869 Anyway, enjoy! | |
4870 | |
4871 </pre></tip> </html> <Tip category="KVim"> <html><center>Using | |
4872 Ispell on a highlighted region</center> <pre> <A | |
4873 HREF="http://vim.sf.net/tip_view.php?tip_id=172">http://vim.sf.net/tip_view.php?tip_id=172</A><BR> | |
4874 | |
4875 Suppose you would like to use Ispell to check a word or region that you've | |
4876 visually highlighted. The following macro will do the job. Just type | |
4877 Shift-Insert while in visual mode. | |
4878 | |
4879 vnoremap <S-Insert> <C-C>`<v`>s<Space><Esc>mq:e | |
4880 ispell.tmp<CR>i<C-R>"<Esc>:w<CR>:! xterm | |
4881 -bg ivory -fn 10x20 -e ispell %<CR><CR>:e | |
4882 %<CR><CR>ggVG<Esc>`<v`>s<Esc>:bwipeout!<CR>:!rm | |
4883 ispell.tmp*<CR>`q"_s<C-R>"<Esc> | |
4884 | |
4885 This is based on Chip Campbell's macro which uses Ispell on the whole file | |
4886 (in normal mode). | |
4887 | |
4888 noremap <S-Insert> :w<CR>:! xterm -bg ivory -fn 10x20 -e ispell | |
4889 %<CR><Space>:e %<CR><Space> | |
4890 | |
4891 Carl Mueller | |
4892 | |
4893 </pre></tip> </html> <Tip category="KVim"> <html><center>Switch | |
4894 between splits very fast (for multi-file editing)</center> <pre> <A | |
4895 HREF="http://vim.sf.net/tip_view.php?tip_id=173">http://vim.sf.net/tip_view.php?tip_id=173</A><BR> | |
4896 | |
4897 I am a Web developer and I use Vim as my primary editor. | |
4898 | |
4899 Most programming projects (and Web programming projects, in particular) | |
4900 are spread out over multiple files, which you often want to have open | |
4901 concurrently. If you don't already know, Vim supports this very well! Just use: | |
4902 | |
4903 :sp name-of-another-file-to-edit | |
4904 | |
4905 My problems were that (1) it took too long to move between files, and (2) | |
4906 the files were taking up too much room on the screen. | |
4907 | |
4908 (1) In order to move to the file in the split above my current window, I was | |
4909 typing Ctrl-W, Up (move up a window) Ctrl-W, _ (maximize the menu). That's | |
4910 four keystrokes (more if you count Ctrl and Shift), and they are all over | |
4911 the keyboard. To help avoid this problem, I created this mapping in my .vimrc: | |
4912 | |
4913 map <C-J> <C-W>j<C-W>_ map <C-K> | |
4914 <C-W>k<C-W>_ | |
4915 | |
4916 Now I can hold down Ctrl and move between windows with the standard Vim | |
4917 movement keys. Much, much quicker! | |
4918 | |
4919 (2) By default, Vim displays the current line of each minimized file, which | |
4920 (to me) isn't much help and takes up too much screen real estate. I use this | |
4921 line in my .vimrc: | |
4922 | |
4923 set wmh=0 | |
4924 | |
4925 This sets the minimum window height to 0, so you can stack many more files | |
4926 before things get crowded. Vim will only display the filename. | |
4927 | |
4928 Hope this helps those of you who are working on projects with large numbers | |
4929 of files you're constantly flipping through. Happy Vimming! | |
4930 | |
4931 </pre></tip> </html> <Tip category="KVim"> | |
4932 <html><center>Footnotes</center> <pre> <A | |
4933 HREF="http://vim.sf.net/tip_view.php?tip_id=174">http://vim.sf.net/tip_view.php?tip_id=174</A><BR> | |
4934 | |
4935 ab (1 | |
4936 [1]<esc>:/^--\s/-1/<cr>o<insert><cr>Footnotes:<cr>----------<cr>[1] | |
4937 ab (2 [2]<esc>:/^Footnotes\:/+2/<cr>o<insert>[2] | |
4938 ab (3 [3]<esc>:/^Footnotes\:/+3/<cr>o<insert>[3] ab | |
4939 (4 [4]<esc>:/^Footnotes\:/+4/<cr>o<insert>[4] ab (5 | |
4940 [5]<esc>:/^Footnotes\:/+5/<cr>o<insert>[5] | |
4941 | |
4942 </pre></tip> </html> <Tip category="KVim"> <html><center>how to make | |
4943 VIM as ur default editor even without root ac.</center> <pre> <A | |
4944 HREF="http://vim.sf.net/tip_view.php?tip_id=175">http://vim.sf.net/tip_view.php?tip_id=175</A><BR> | |
4945 | |
4946 hi, if u have installed vim in your home directory somewhere and u don't have a | |
4947 root account, and you want to make VIM the default editor for anything u do. | |
4948 i.e if ur using SQLplus and want to edit a sql command. normally typing | |
4949 edit brings up the vi editor and not vim editor. to solve this problem. | |
4950 define these three variables in your .profile VIM=<base directory where | |
4951 vim executable is placed> VIMRUNTIME=<base direcoty where vim runtimes | |
4952 are kept> EDITOR=$VIM/vim | |
4953 | |
4954 note if u have installed vim with another name, say vim.exe then change | |
4955 EDITOR=$VIM/vim to EDITOR=$VIM/vim.exe | |
4956 | |
4957 source the .profile and viola. next time u start an editor from any program | |
4958 u have the vim editor. | |
4959 | |
4960 Njoy. | |
4961 | |
4962 </pre></tip> </html> <Tip category="KVim"> | |
4963 <html><center>Autocheckout from perforce</center> <pre> <A | |
4964 HREF="http://vim.sf.net/tip_view.php?tip_id=176">http://vim.sf.net/tip_view.php?tip_id=176</A><BR> | |
4965 | |
4966 The following code automatically checks out files from perforce when the | |
4967 user modifies them. It first confirms the check-out with the user. | |
4968 | |
4969 (Perforce is a commercial version control system. I imagine this could be | |
4970 modified for RCS, CVS, etc., but I don't use those.) | |
4971 | |
4972 I'm a vim newbie -- I've used vi since 1984, but just started with vim a couple | |
4973 days ago. Color me impressed! Please excuse any stupidity in the code.. | |
4974 | |
4975 Note that this function needs the "P4HOME" environment variable to be set. | |
4976 I could extract it by invoking "p4 client", but I don't want to invoke p4 | |
4977 every time I start vim. So I assume the user sets it in the environment. | |
4978 | |
4979 " Set a buffer-local variable to the perforce path, if this file is under | |
4980 the perforce root. function IsUnderPerforce() | |
4981 if exists("$P4HOME") | |
4982 if expand("%:p") =~ ("^" . $P4HOME) | |
4983 let b:p4path = substitute(expand("%:p"), $P4HOME, "//depot", "") | |
4984 endif | |
4985 endif | |
4986 endfunction " Confirm with the user, then checkout a file from perforce. | |
4987 function P4Checkout() | |
4988 if exists("b:p4path") | |
4989 if (confirm("Checkout from Perforce?", "&Yes\n&No", 1) == 1) | |
4990 call system("p4 edit " . b:p4path . " > /dev/null") if | |
4991 v:shell_error == 0 | |
4992 set noreadonly | |
4993 endif | |
4994 endif | |
4995 endif | |
4996 endfunction | |
4997 | |
4998 if !exists("au_p4_cmd") | |
4999 let au_p4_cmd=1 | |
5000 | |
5001 au BufEnter * call IsUnderPerforce() au FileChangedRO * call P4Checkout() | |
5002 endif | |
5003 | |
5004 </pre></tip> </html> <Tip category="KVim"> <html><center>Highlight | |
5005 matching brackets as one moves in normal mode (plugin)</center> <pre> <A | |
5006 HREF="http://vim.sf.net/tip_view.php?tip_id=177">http://vim.sf.net/tip_view.php?tip_id=177</A><BR> | |
5007 | |
5008 Check out <A HREF="http://www.erols.com/astronaut/vim/index.html#VimFuncs | |
5009 for">http://www.erols.com/astronaut/vim/index.html#VimFuncs for</A><BR> | |
5010 a plugin script which highlights matching brackets. The script has two | |
5011 always-on maps: | |
5012 \[i : start [HiMtchBrkt] mode \[s : stop [HiMtchBrkt] mode | |
5013 The plugin will save all user maps and options that the plugin uses and will | |
5014 restore them when the mode is stopped. | |
5015 | |
5016 </pre></tip> </html> <Tip category="KVim"> <html><center>Making | |
5017 a "derived" colorscheme without copy & paste</center> <pre> <A | |
5018 HREF="http://vim.sf.net/tip_view.php?tip_id=178">http://vim.sf.net/tip_view.php?tip_id=178</A><BR> | |
5019 | |
5020 Suppose there's a colorscheme that you're pretty fond of, but hate one or | |
5021 two particular aspects about. For example, I love the "blue" colorscheme | |
5022 that ships with vim, but I find it's colors for the non-active status line | |
5023 to be unreadable. Here's how to create a colorscheme which extends "blue" | |
5024 without copying it to a new file and editing it. | |
5025 | |
5026 In my ~/.vim/colors, I created a "my-blue.vim" file with these contents: | |
5027 | |
5028 "these lines are suggested to be at the top of every colorscheme hi clear | |
5029 if exists("syntax_on") | |
5030 syntax reset | |
5031 endif | |
5032 | |
5033 "Load the 'base' colorscheme - the one you want to alter runtime | |
5034 colors/blue.vim | |
5035 | |
5036 "Override the name of the base colorscheme with the name of this custom one | |
5037 let g:colors_name = "my-blue" | |
5038 | |
5039 "Clear the colors for any items that you don't like hi clear StatusLine hi | |
5040 clear StatusLineNC | |
5041 | |
5042 "Set up your new & improved colors hi StatusLine guifg=black guibg=white hi | |
5043 StatusLineNC guifg=LightCyan guibg=blue gui=bold | |
5044 | |
5045 That's all there is to it. | |
5046 | |
5047 </pre></tip> </html> <Tip category="KVim"> | |
5048 <html><center>Simplify help buffer navigation</center> <pre> <A | |
5049 HREF="http://vim.sf.net/tip_view.php?tip_id=179">http://vim.sf.net/tip_view.php?tip_id=179</A><BR> | |
5050 | |
5051 Vim is distributed with comprehensive help system, which has basic hyperlink | |
5052 support - you can press <C-]> over |some subject| or 'some option' | |
5053 to read more about particular term. | |
5054 | |
5055 The following mappings simplify help buffer navigation: pressing s(or S) | |
5056 will find next(previous) subject from cursor position pressing o(or O) will | |
5057 find next(previous) option from cursor position pressing Enter will jump to | |
5058 subject under cursor pressing Backspace will return from the last jump | |
5059 | |
5060 Put them into help filetype plugin (like ~/.vim/ftplugin/help.vim on UNIX). | |
5061 | |
5062 nmap <buffer> <CR> <C-]> nmap <buffer> <BS> | |
5063 <C-T> nmap <buffer> o /'[a-z]\{2,\}'<CR> nmap <buffer> | |
5064 O ?'[a-z]\{2,\}'<CR> nmap <buffer> s /\|\S\+\|<CR> nmap | |
5065 <buffer> S ?\|\S\+\|<CR> | |
5066 | |
5067 </pre></tip> </html> <Tip category="KVim"> <html><center>Reload | |
5068 your filetype/syntax plugin</center> <pre> <A | |
5069 HREF="http://vim.sf.net/tip_view.php?tip_id=180">http://vim.sf.net/tip_view.php?tip_id=180</A><BR> | |
5070 | |
5071 Ever tried to write/debug your own filetype/syntax plugin? | |
5072 | |
5073 It's an iterative process which involves editing plugin code and testing it | |
5074 on some sample file. To see changes you made in your plugin simply do :e | |
5075 on sample file. This will force Vim to reload all buffer-specific files, | |
5076 including your plugin. | |
5077 | |
5078 </pre></tip> </html> <Tip category="KVim"> | |
5079 <html><center>get the vim patched source</center> <pre> <A | |
5080 HREF="http://vim.sf.net/tip_view.php?tip_id=181">http://vim.sf.net/tip_view.php?tip_id=181</A><BR> | |
5081 | |
5082 Hi, there has been a number of person (including) asking in the vim list how | |
5083 to keep up with Bram's incredible bug correction and patch writing skills, but | |
5084 there is a great way to do this! Use the cvs source which is available at <A | |
5085 HREF="http://sourceforge.net/cvs/?group_id=8">http://sourceforge.net/cvs/?group_id=8</A><BR> | |
5086 it is kept up to date and its a lot easier than applying all the patch | |
5087 in order. Benoit | |
5088 | |
5089 </pre></tip> </html> <Tip category="KVim"> <html><center>Keep | |
5090 your cursor centered vertically on the screen</center> <pre> <A | |
5091 HREF="http://vim.sf.net/tip_view.php?tip_id=182">http://vim.sf.net/tip_view.php?tip_id=182</A><BR> | |
5092 | |
5093 i hope i don't hear a collective 'DUH!' from around the world but i just | |
5094 did this and i think it's kinda cool. | |
5095 | |
5096 in your .vimrc add... | |
5097 | |
5098 map j jzz map k kzz | |
5099 | |
5100 so whenever you go up or down, vim does that and then re-centers. obviously it | |
5101 doesn't work when you page up/ down. | |
5102 | |
5103 </pre></tip> </html> <Tip category="KVim"> <html><center>Select | |
5104 a buffer from those matching a pattern</center> <pre> <A | |
5105 HREF="http://vim.sf.net/tip_view.php?tip_id=183">http://vim.sf.net/tip_view.php?tip_id=183</A><BR> | |
5106 | |
5107 The :bu command will take a pattern as an argument and jump to the matching | |
5108 buffer. However, it's not very helpful if there is more than one buffer | |
5109 matching the pattern. In that case, it will jump to the first match, which | |
5110 may not be what you want. The following function and user-command will | |
5111 print a list of the matching buffers in the command-line area, and allow | |
5112 you to select one of the matching buffers by number. | |
5113 | |
5114 "Select from buffers matching a certain pattern "the 'pattern' argument | |
5115 shouldn't be prepended with a slash | |
5116 | |
5117 function! BufSel(pattern) | |
5118 let bufcount = bufnr("$") let currbufnr = 1 while currbufnr <= bufcount | |
5119 if(bufexists(currbufnr)) | |
5120 let currbufname = bufname(currbufnr) if(match(currbufname, a:pattern) | |
5121 > -1) | |
5122 echo currbufnr . ": ". bufname(currbufnr) | |
5123 endif | |
5124 endif let currbufnr = currbufnr + 1 | |
5125 endwhile let desiredbufnr = input("Enter buffer number: ") | |
5126 if(strlen(desiredbufnr) != 0) | |
5127 exe ":bu ". desiredbufnr | |
5128 endif | |
5129 endfunction | |
5130 | |
5131 "Bind the BufSel() function to a user-command command! -nargs=1 Bs :call | |
5132 BufSel("<args>") | |
5133 | |
5134 </pre></tip> </html> <Tip category="KVim"> <html><center>How | |
5135 to obscure text instantaneously</center> <pre> <A | |
5136 HREF="http://vim.sf.net/tip_view.php?tip_id=184">http://vim.sf.net/tip_view.php?tip_id=184</A><BR> | |
5137 | |
5138 Hi, Lets say your writing some imp. doc. and your colleague comes along. you | |
5139 don't wan't him to see what you are typing. so u start fumbling to type | |
5140 :wq! or switch with Alt-TAB. etc. but wouldn't it be nice to just obsucre the | |
5141 text temporarily, so that u don't have to quit or swith to another application | |
5142 using Alt-tab. (and if u don;t have any other window open u can;t even use | |
5143 alt-tab) well rot-13 comes to help. vim has a built in rot-13 encoder. | |
5144 | |
5145 jut put the follwoing in your .vimrc | |
5146 | |
5147 map <F3> ggVGg? | |
5148 | |
5149 so next time some body comes along just press <F3> and all the buffer | |
5150 will be rot-13 encoded. to decode just press <f3> again. Njoy | |
5151 | |
5152 </pre></tip> </html> <Tip category="KVim"> <html><center>Make vim the | |
5153 editor for files with unregistered extensions in Windows</center> <pre> <A | |
5154 HREF="http://vim.sf.net/tip_view.php?tip_id=185">http://vim.sf.net/tip_view.php?tip_id=185</A><BR> | |
5155 | |
5156 Normally in Windows, if you try to "launch" a file whose extension is not | |
5157 registered with the system, the OS will prompt you for what editor you would | |
5158 like to use to open the file. A much more appealing solution, in my mind, | |
5159 is to make vim the default editor for any unregistered extension. | |
5160 | |
5161 To set vim up as the default editor for unregistered extensions, follow | |
5162 these steps: 1. Copy the following into a file named unregistered.reg | |
5163 -------------begin unregistered.reg----------------- REGEDIT4 | |
5164 [HKEY_CLASSES_ROOT\Unknown\shell\Open\Command] @="d:\\program | |
5165 files\\vim\\vim60\\gvim.exe \"%1\"" -------------end | |
5166 unregistered.reg----------------- | |
5167 | |
5168 2. Import unregistered into your registry. This can be done in vim by | |
5169 executing the following :!regedit "unregistered.reg" | |
5170 | |
5171 Disclaimer: This has been tested only on NT4. | |
5172 | |
5173 </pre></tip> </html> <Tip category="KVim"> | |
5174 <html><center>Making search powerful</center> <pre> <A | |
5175 HREF="http://vim.sf.net/tip_view.php?tip_id=186">http://vim.sf.net/tip_view.php?tip_id=186</A><BR> | |
5176 | |
5177 My tip is just a bunch of mappings that can be used while searching. | |
5178 | |
5179 </pre></tip> </html> <Tip category="KVim"> | |
5180 <html><center>Making search powerful</center> <pre> <A | |
5181 HREF="http://vim.sf.net/tip_view.php?tip_id=187">http://vim.sf.net/tip_view.php?tip_id=187</A><BR> | |
5182 | |
5183 (Sorry, I think I accidentally added an incomplete tip) | |
5184 | |
5185 My tip is just a bunch of mappings that can be used while searching. | |
5186 What it does? | |
5187 o. Extend your current search. (kinda emacs search where you can search | |
5188 each occurences | |
5189 one by one and go back to the cursor position. | |
5190 o. Scroll/position during mapping. o. Other miscellaneous stuffs ;) read on | |
5191 | |
5192 How to use? | |
5193 o. copy and paste the mappings into a file o. open vim (like vim .profile) | |
5194 o. :so <saved-file> o. start using the mappings | |
5195 | |
5196 Note: | |
5197 In case these mappings dont work run like, 'vim -u NONE -U NONE -c | |
5198 "so the-saved-file.vim"' | |
5199 | |
5200 Some of my mappings override the default vim bindings. (like Ctrl-A, | |
5201 Ctrl-Q). I selected those because, I feel by taking those I can do all | |
5202 the search stuff with my left hand. | |
5203 | |
5204 One thing I did not like with this is, I usually miss the "search hit | |
5205 bottom" message. I could have handled that by complicating the current | |
5206 mappings, but I preferred to make it simple | |
5207 | |
5208 Mappings Used / => regular forward search start ? => | |
5209 regular backward search start Rest of the mappings are used during search | |
5210 Ctrl-A => search again forward (In normal mode, search forward with | |
5211 the word under cursor) Ctrl-Q => search again backward (in normal mode, | |
5212 search backward with the word under cursor) Ctrl-X => restore cursor (use | |
5213 at any point of time/during-any-operation mentioned during searching) Ctrl-F | |
5214 => search with the word under cursor Ctrl-G => incrementally add the | |
5215 letters following the search pattern (in current line) Ctrl-T Ctrl-T => | |
5216 search for the exact Ctrl-T Ctrl-Y => search partial (just strips \< | |
5217 and \>) Ctrl-E => scroll up during searching Ctrl-Y => scroll down | |
5218 during searching Ctrl-Z Ctrl-Z => position the cursor to mid of screen | |
5219 (like zz in normal) Ctrl-Z Ctrl-A => position the cursor to top of screen | |
5220 (like zt in normal) Ctrl-Z Ctrl-X => position the cursor to bottom of | |
5221 screen (like zb in normal) | |
5222 | |
5223 Misc: Ctrl-K during search save the current matching line Ctrl-K in normal | |
5224 mode pastes the saved line | |
5225 | |
5226 C mappings Ctrl-V Ctrl-G search for the global variable of the search | |
5227 pattern/word under cursor Ctrl-V Ctrl-H search for the local variable of | |
5228 the search pattern/word under cursor | |
5229 | |
5230 " --- cut n paste from here to end of document --- se nocp incsearch " core | |
5231 mappings noremap / mg/ noremap ? mg? ounmap / ounmap ? noremap <C-A> | |
5232 mg"gyiw/<C-R>g cnoremap <C-A> <CR>/<Up> cnoremap | |
5233 <C-X> <CR>`g cnoremap <C-Q> <CR>?<Up> | |
5234 | |
5235 " extending current search mappings cnoremap <C-F> | |
5236 <CR>yiw<BS>/<C-R>" cnoremap <C-G> | |
5237 <CR>y/<Up>/e+1<CR><BS>/<C-R>=escape(@",'.*\/?')<CR> | |
5238 | |
5239 " miscellaneous: copy current line during search and later paste in NORMAL | |
5240 mode cnoremap <C-K> <CR>"hyy?<Up><CR>/<Up> | |
5241 noremap <C-K> "hp | |
5242 | |
5243 " exact/partial search mappings cnoremap <C-T><C-T> | |
5244 <Home>\<<C-End>\> cnoremap <C-T><C-Y> | |
5245 <Home><Del><Del><End><Del><Del> | |
5246 | |
5247 " C global/local variable search mappings noremap <C-V><C-G> | |
5248 mgyiw<CR>gg/\<<C-R>"\> noremap <C-V><C-H> | |
5249 mgyiw?^{<CR>/\<<C-R>"\> cnoremap <C-V><C-G> | |
5250 <CR>yiwgg/\<<C-R>"\> cnoremap <C-V><C-H> | |
5251 <CR>yiw?^{<CR>/\<<C-R>"\> | |
5252 | |
5253 " positioning/scrolling during search mappings cnoremap <C-E> | |
5254 <CR>mt<C-E>`t<BS>/<Up> cnoremap <C-Y> | |
5255 <CR><C-Y><BS>/<Up> cnoremap <C-Z><C-A> | |
5256 <CR>zt<BS>/<Up> cnoremap <C-Z><C-X> | |
5257 <CR>zb<BS>/<Up> cnoremap <C-Z><C-Z> | |
5258 <CR>zz<BS>/<Up> | |
5259 | |
5260 " VISUAL mappings vnoremap / ymg/<C-R>=escape(@",'.*\/?')<CR> | |
5261 vnoremap ? ymg?<C-R>=escape(@",'.*\/?')<CR> | |
5262 | |
5263 </pre></tip> </html> <Tip category="KVim"> <html><center>Searching | |
5264 for more than one word at the same time.</center> <pre> <A | |
5265 HREF="http://vim.sf.net/tip_view.php?tip_id=188">http://vim.sf.net/tip_view.php?tip_id=188</A><BR> | |
5266 | |
5267 Did you know that with VIM u can search for more than one word with a single | |
5268 command. say you want to search all occurances of "bill" or "ted", or "harry" | |
5269 in a text. in normal mode do the following. /\(bill\)\|\(ted\)\|\(harry\) | |
5270 <Enter> | |
5271 | |
5272 this will match all instances of either "bill", or "ted", or "harry" in your | |
5273 text. the key is the \(\) and \| operators. \(\) group characters in a word | |
5274 and \| is for ORing. | |
5275 | |
5276 this is so cool u can even use it for replacing text. to replace all | |
5277 instances of "bill" or "ted" or "harry" with "greg" do the following | |
5278 :%s/\(bill\)\|\(ted\)\|\(harry\)/greg/g <enter> (note :- if u have | |
5279 set the option "gdefault" u don't need the "g" at the end of the above command) | |
5280 | |
5281 I don't know of any other editor which can do this, with so much ease. | |
5282 Rock on VIM Njoy | |
5283 | |
5284 </pre></tip> </html> <Tip category="KVim"> <html><center>Make | |
5285 Ctrl-Backspace delete previous word (like GTK inputs)</center> <pre> <A | |
5286 HREF="http://vim.sf.net/tip_view.php?tip_id=189">http://vim.sf.net/tip_view.php?tip_id=189</A><BR> | |
5287 | |
5288 Stuff this into your ~/.gvimrc and then you'll be able to type | |
5289 Control-Backspace to delete the previous word. I had gotten so used to | |
5290 C-BS working a certain way in all my editors with a ceezy input area (like | |
5291 mozilla/galeon, gabber, etc...), that I wanted the same behaviour when I | |
5292 used gvim. | |
5293 | |
5294 " map control-backspace to delete the previous word :imap <C-BS> | |
5295 <Esc>vBc | |
5296 | |
5297 Simple, I know, but reasonably useful. | |
5298 | |
5299 --Robert | |
5300 | |
5301 </pre></tip> </html> <Tip category="KVim"> <html><center>XP > | |
5302 I-Explorer > HTML Editor < REG files</center> <pre> <A | |
5303 HREF="http://vim.sf.net/tip_view.php?tip_id=190">http://vim.sf.net/tip_view.php?tip_id=190</A><BR> | |
5304 | |
5305 The issue is permitting other programs, besides NOTEPAD, be the HTML editor | |
5306 under Internet Explorer. (Adding "Edit" as a New Action in the publicly | |
5307 exposed Files Types for HTM/L does NOT do the job.) | |
5308 | |
5309 Given below are two REG files for vim. Just cut 'em up where indicated. | |
5310 They have been tested under Windows XP. | |
5311 | |
5312 -------------------------------------------------------CUT HERE--------------- | |
5313 Windows Registry Editor Version 5.00 | |
5314 | |
5315 ; GOAL: Set gvim as HTML editor in Internet Explorer 6.0 ; Vim version : | |
5316 6.0 ; Windows version: XP ; EASY USAGE: name this file iex-vim60.reg and | |
5317 double click on it ; Hard Usage: IMPORT this file using REGEDIT.EXE found | |
5318 in c:\WINDOWS ; Last modified date : Dec 16, 2001 | |
5319 | |
5320 ; gvim is expected in "C:\Program Files\Vim\vim60\gvim.exe" ; Be sure to | |
5321 also reset Explorer>Tools>Internet Options>Programs | |
5322 | |
5323 ; Microsoft documentation ; <A | |
5324 HREF="http://msdn.microsoft.com/workshop/browser/configuration/clientreg/clientregistrylayout.asp">http://msdn.microsoft.com/workshop/browser/configuration/clientreg/clientregistrylayout.asp</A><BR> | |
5325 | |
5326 ; Add Vim in the list of supported HTML editors | |
5327 [HKEY_CLASSES_ROOT\.htm\OpenWithList\Vim] | |
5328 | |
5329 [HKEY_CLASSES_ROOT\.htm\OpenWithList\Vim\shell] | |
5330 | |
5331 [HKEY_CLASSES_ROOT\.htm\OpenWithList\Vim\shell\edit] | |
5332 | |
5333 [HKEY_CLASSES_ROOT\.htm\OpenWithList\Vim\shell\edit\command] @="\"C:\\Program | |
5334 Files\\Vim\\vim60\\gvim.exe\" \"%1\"" | |
5335 | |
5336 ; Do NOT add to .html, registry for .htm type suffices | |
5337 ;[HKEY_CLASSES_ROOT\.html\OpenWithList\Vim] | |
5338 | |
5339 ;[HKEY_CLASSES_ROOT\.html\OpenWithList\Vim\shell] | |
5340 | |
5341 ;[HKEY_CLASSES_ROOT\.html\OpenWithList\Vim\shell\edit] | |
5342 | |
5343 ;[HKEY_CLASSES_ROOT\.html\OpenWithList\Vim\shell\edit\command] | |
5344 ;@="\"C:\\Program Files\\Vim\\vim60\\gvim.exe\" \"%1\"" | |
5345 | |
5346 ; OPTIONAL: Within Internet Explorer "View Source" with gvim | |
5347 ; but prefer to use Edit button (got to add this) on Toolbar | |
5348 ;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\View Source Editor] | |
5349 | |
5350 ;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\View Source | |
5351 Editor\Editor Name] ;@="C:\\Program Files\\Vim\\vim60\\gvim.exe" | |
5352 | |
5353 ; ============================================= EOF | |
5354 | |
5355 -------------------------------------------------------CUT HERE--------------- | |
5356 Windows Registry Editor Version 5.00 | |
5357 | |
5358 ; GOAL: UNINSTALL gvim as HTML editor in Internet Explorer 6.0 ; Vim version : | |
5359 6.0 ; Windows version: XP ; EASY USAGE: name this file iex-vim60-uninstall.reg | |
5360 and double click on it ; Hard Usage: IMPORT this file using REGEDIT.EXE | |
5361 found in c:\WINDOWS ; Last modified date : Dec 16, 2001 | |
5362 | |
5363 ; gvim is expected in "C:\Program Files\Vim\vim60\gvim.exe" ; Be sure to | |
5364 also reset Explorer>Tools>Internet Options>Programs | |
5365 | |
5366 ; Microsoft documentation ; <A | |
5367 HREF="http://msdn.microsoft.com/workshop/browser/configuration/clientreg/clientregistrylayout.asp">http://msdn.microsoft.com/workshop/browser/configuration/clientreg/clientregistrylayout.asp</A><BR> | |
5368 | |
5369 [-HKEY_CLASSES_ROOT\.htm\OpenWithList\Vim] | |
5370 | |
5371 [-HKEY_CLASSES_ROOT\.html\OpenWithList\Vim] | |
5372 | |
5373 [-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\View Source Editor] | |
5374 | |
5375 ; ============================================= EOF | |
5376 -------------------------------------------------------CUT HERE--------------- | |
5377 | |
5378 Happy Vimming... | |
5379 | |
5380 </pre></tip> </html> <Tip category="KVim"> | |
5381 <html><center>Transposing</center> <pre> <A | |
5382 HREF="http://vim.sf.net/tip_view.php?tip_id=191">http://vim.sf.net/tip_view.php?tip_id=191</A><BR> | |
5383 | |
5384 You can easily move lines with these maps using <C-Up> and <C-Down> | |
5385 (only in GUI version :( ) (Works in normal, insert, and visual mode, but | |
5386 you can't add a count to them) " Transposing lines nmap <C-Down> | |
5387 :<C-u>move .+1<CR> nmap <C-Up> :<C-u>move .-2<CR> | |
5388 | |
5389 imap <C-Down> <C-o>:<C-u>move .+1<CR> imap <C-Up> | |
5390 <C-o>:<C-u>move .-2<CR> | |
5391 | |
5392 vmap <C-Down> :move '>+1<CR>gv vmap <C-Up> :move | |
5393 '<-2<CR>gv | |
5394 | |
5395 " Transpose chars (like Ctrl-T in emacs, shell...) imap <C-F> | |
5396 <Esc>Xpa | |
5397 | |
5398 </pre></tip> </html> <Tip category="KVim"> | |
5399 <html><center>Latex Help for VIM</center> <pre> <A | |
5400 HREF="http://vim.sf.net/tip_view.php?tip_id=192">http://vim.sf.net/tip_view.php?tip_id=192</A><BR> | |
5401 | |
5402 LaTeX Help for aucTeX `translated' as vim help file. | |
5403 | |
5404 Installing | |
5405 | |
5406 :help add-local-help | |
5407 | |
5408 </pre></tip> </html> <Tip category="KVim"> <html><center>Insert | |
5409 the current filename at cursor postion.</center> <pre> <A | |
5410 HREF="http://vim.sf.net/tip_view.php?tip_id=193">http://vim.sf.net/tip_view.php?tip_id=193</A><BR> | |
5411 | |
5412 I found this one good for when I was starting to learn Java, it simply inserts | |
5413 the current filename, at the cursor position, when you are in insert mode. | |
5414 Honestly, its a mish-mash of some other tips I found here, but I thought it | |
5415 might be useful. | |
5416 | |
5417 imap \fn <C-R>=expand("%:t:r")<CR> | |
5418 | |
5419 Enjoy! | |
5420 | |
5421 </pre></tip> </html> <Tip category="KVim"> | |
5422 <html><center>Inserting text in multiple lines</center> <pre> <A | |
5423 HREF="http://vim.sf.net/tip_view.php?tip_id=194">http://vim.sf.net/tip_view.php?tip_id=194</A><BR> | |
5424 | |
5425 Do you know the I key in visual-block mode? | |
5426 | |
5427 Suppose you have let a=2 let b=3 let c=4 | |
5428 | |
5429 You want to make these variables script-wise. Then you move to over a, hit | |
5430 <C-v>, press jj and now press I. You will be in insert mode before a | |
5431 Now enter s:<Esc>, and when you press <Esc>, b and c will have | |
5432 the s: prefix too. See |v_b_I| | |
5433 | |
5434 Happy vimming! Gergely Kontra | |
5435 | |
5436 </pre></tip> </html> <Tip category="KVim"> | |
5437 <html><center>Switching between files</center> <pre> <A | |
5438 HREF="http://vim.sf.net/tip_view.php?tip_id=195">http://vim.sf.net/tip_view.php?tip_id=195</A><BR> | |
5439 | |
5440 When you edit multiple files, you often need to change windows. You can set | |
5441 up vim in windows and gvim to switch between windows with the commonly used | |
5442 Ctrl-Tab and Ctrl-Shift-Tab The mappings nmap <C-Tab> <C-w>w | |
5443 nmap <C-S-Tab><C-w>W (They wrap around) See also |Ctrl-w| | |
5444 | |
5445 </pre></tip> </html> <Tip category="KVim"> <html><center>FileName | |
5446 Completion in Shell Scripts</center> <pre> <A | |
5447 HREF="http://vim.sf.net/tip_view.php?tip_id=196">http://vim.sf.net/tip_view.php?tip_id=196</A><BR> | |
5448 | |
5449 In shell scripts, you often define environment variables for diff directory | |
5450 names. i.e. JAVA_HOME=/opt/java/jdk1.4 PATH=/usr/local/bin:/bin.... | |
5451 | |
5452 Normally typing Ctrl-X Ctrl-F is used to complete FileName under cursor. | |
5453 But this does not work if used on lines given above. This is because vim | |
5454 treats "=" sign as a valid filename character. Since the actual possibility | |
5455 of "=" being in any filename is very less, this char can be removed from | |
5456 the list of valid filename char. | |
5457 | |
5458 set isfname-== | |
5459 | |
5460 putting the above line in .vimrc will remove "=" from the list of valid | |
5461 filename chars. thus u can easyly complete filenames using <Ctrl-X> | |
5462 <Ctrl-F> Njoy | |
5463 | |
5464 </pre></tip> </html> <Tip category="KVim"> <html><center>Open | |
5465 file in already running vim from elsewhere</center> <pre> <A | |
5466 HREF="http://vim.sf.net/tip_view.php?tip_id=197">http://vim.sf.net/tip_view.php?tip_id=197</A><BR> | |
5467 | |
5468 If you want edit new file, and you want do it in alrady running vim, | |
5469 instead of launching another instance, you may use --remote argument: | |
5470 | |
5471 gvim first_file gvim --remote +split first_file | |
5472 | |
5473 :he --remote It requires X windows (but works in terminal version of vim | |
5474 there too) or MS windows and built-in client-server mechanism. If there are | |
5475 several instances of vim already running, you may choose to which you talk | |
5476 using --servername :help --servername | |
5477 | |
5478 </pre></tip> </html> <Tip category="KVim"> <html><center>Pasting | |
5479 code with syntax coloring in emails</center> <pre> <A | |
5480 HREF="http://vim.sf.net/tip_view.php?tip_id=198">http://vim.sf.net/tip_view.php?tip_id=198</A><BR> | |
5481 | |
5482 When sending code snippets or diffs to your colleagues either for code review | |
5483 or for something else as email, how nice and clear it will be if you can | |
5484 paste it with the Vim syntax highlighting? I am sure they will be impressed | |
5485 and feel much easier to read the code. It is also very easy and fast (once | |
5486 you practice it) to do this. | |
5487 | |
5488 This probably works only on windows and requires you to use Internet Explorer | |
5489 and an email client that understand RTF content coming from clipboard, such | |
5490 as Outlook or Outlook Express. At least that would make the process faster. I | |
5491 haven't tried on any other combination though. This is what you need to do: | |
5492 | |
5493 - Open the file containing the code/code snippet/diff etc. in gvim. If you | |
5494 use dark background for GVim (like me), then I would suggest you to change | |
5495 your color scheme temporarily to something else that has a white background | |
5496 or just use the "-U NONE" as below: | |
5497 | |
5498 gvim -U NONE <file> | |
5499 | |
5500 - Convert the file into HTML by using the following command at the colon | |
5501 prompt as below: | |
5502 | |
5503 :runtime syntax/2html.vim | |
5504 | |
5505 - The above step will open a new window with the HTML content in it. You might | |
5506 want to just save it with the suggested name or write into a temporary file as: | |
5507 | |
5508 :w! c:/tmp/t.html | |
5509 | |
5510 - Open the IE browser window and open the above temp file "c:/tmp/t.html". | |
5511 - Now you select all (press ^A) and copy it (^C). - You are ready to paste | |
5512 it with syntax coloring in any application that accepts RTF content from | |
5513 clipboard, including Outlook or Outlook Express mail composing window. | |
5514 | |
5515 </pre></tip> </html> <Tip category="KVim"> <html><center>maximize | |
5516 window and return to previous split structure</center> <pre> <A | |
5517 HREF="http://vim.sf.net/tip_view.php?tip_id=199">http://vim.sf.net/tip_view.php?tip_id=199</A><BR> | |
5518 | |
5519 Say you have layed out a complex window split structure, and want to | |
5520 temporarily open 1 window with max dimensions, but don't want to lose your | |
5521 split structure. The following function and mappings let you toggle between | |
5522 the split windows and on window maximized. The mappings prevent the default | |
5523 behavior of calling :only and losing your finely tuned splits. | |
5524 | |
5525 Put this bit in your vimrc file, change mappings if you don't want to override | |
5526 the defaults: | |
5527 | |
5528 nnoremap <C-W>O :call MaximizeToggle ()<CR> nnoremap <C-W>o | |
5529 :call MaximizeToggle ()<CR> nnoremap <C-W><C-O> :call | |
5530 MaximizeToggle ()<CR> | |
5531 | |
5532 function! MaximizeToggle() | |
5533 if exists("s:maximize_session") | |
5534 source s:maximize_session call delete(s:maximize_session) | |
5535 unlet s:maximize_session let &hidden=s:maximize_hidden_save | |
5536 unlet s:maximize_hidden_save | |
5537 else | |
5538 let s:maximize_hidden_save = &hidden let s:maximize_session = | |
5539 tempname() set hidden mksession! s:maximize_session only | |
5540 endif | |
5541 endfunction | |
5542 | |
5543 </pre></tip> </html> <Tip category="KVim"> <html><center>Bouncing | |
5544 Parentheses (during insertion)</center> <pre> <A | |
5545 HREF="http://vim.sf.net/tip_view.php?tip_id=200">http://vim.sf.net/tip_view.php?tip_id=200</A><BR> | |
5546 | |
5547 When one is inserting parentheses some folks like to see the cursor bounce | |
5548 off the matching parenthesis. To do that, put the following map into your | |
5549 <.vimrc> file: | |
5550 | |
5551 inoremap ) )<c-o>%<c-o>:sleep | |
5552 500m<CR><c-o>%<c-o>a | |
5553 | |
5554 Adjust the time delay (its 500 milliseconds above) to suit your needs. | |
5555 | |
5556 </pre></tip> </html> <Tip category="KVim"> | |
5557 <html><center>The meaning of life</center> <pre> <A | |
5558 HREF="http://vim.sf.net/tip_view.php?tip_id=201">http://vim.sf.net/tip_view.php?tip_id=201</A><BR> | |
5559 | |
5560 Use this tip if you need to discover the meaning of life, the universe | |
5561 and everything. | |
5562 | |
5563 Simply do: :h 42 | |
5564 | |
5565 </pre></tip> </html> <Tip category="KVim"> | |
5566 <html><center>debugging window autocommands</center> <pre> <A | |
5567 HREF="http://vim.sf.net/tip_view.php?tip_id=202">http://vim.sf.net/tip_view.php?tip_id=202</A><BR> | |
5568 | |
5569 Don't know how people debug autocommands, but I just found out that you can | |
5570 debug (at least) those that result due to window close by just doing a debug | |
5571 quit, i.e., | |
5572 | |
5573 :debug quit | |
5574 | |
5575 Vim will let you step into the autocommands. Try it to believe. | |
5576 | |
5577 </pre></tip> </html> <Tip category="KVim"> | |
5578 <html><center>Make make more helpful</center> <pre> <A | |
5579 HREF="http://vim.sf.net/tip_view.php?tip_id=203">http://vim.sf.net/tip_view.php?tip_id=203</A><BR> | |
5580 | |
5581 I find this a very useful command to use. Add the below 4 lines to your vimrc. | |
5582 Then instead of "make" use "Make". | |
5583 | |
5584 " Command Make will call make and then cwindow which " opens a 3 line error | |
5585 window if any errors are found. " if no errors, it closes any open cwindow. | |
5586 :command -nargs=* Make make <args> | cwindow 3 | |
5587 | |
5588 </pre></tip> </html> <Tip category="KVim"> <html><center>Some | |
5589 mappings for using cscope with vim.</center> <pre> <A | |
5590 HREF="http://vim.sf.net/tip_view.php?tip_id=204">http://vim.sf.net/tip_view.php?tip_id=204</A><BR> | |
5591 | |
5592 These mappings can make using cscope a fun. You can copy the word under the | |
5593 cursor in one window, and search for it from other window. | |
5594 | |
5595 " Copy and paste the word under cursor map <silent> <C-Space> | |
5596 :let@m=expand("<cword>")<CR> | |
5597 | |
5598 " Use the C-Space word as the search criterion map <C-F6> :cscope | |
5599 find s <C-R>=@m<CR><CR> map <C-F5> :cscope find | |
5600 c <C-R>=@m<CR><CR> map <C-F7> :cscope find g | |
5601 <C-R>=@m<CR><CR> | |
5602 | |
5603 </pre></tip> </html> <Tip category="KVim"> | |
5604 <html><center>Computing a sum of numbers in vim</center> <pre> <A | |
5605 HREF="http://vim.sf.net/tip_view.php?tip_id=205">http://vim.sf.net/tip_view.php?tip_id=205</A><BR> | |
5606 | |
5607 "Sometimes you need to sum a some numbers in vim. There *are* some plugins | |
5608 "that can do the job. But what if the numbers are not in a columns or are on | |
5609 "the same line or are sacttered all across the file? You might also need to | |
5610 "sum all the numbers in file that look like '1234$', or '54565 Eu' ignoring | |
5611 others. " "There is a very simple trick, using (my favourite) command ":s " | |
5612 "First you define following function | |
5613 | |
5614 :let g:S=0 "In global variable S we later find the result | |
5615 | |
5616 :function! Sum(number) "The function is defined with a '!', | |
5617 "so it does not complain during debugging | |
5618 "when you are redefining the function | |
5619 :let g:S=g:S+a:number "we accumulate the result in global variable | |
5620 S :return a:number "function returns the argument, so after a :s | |
5621 "command the text remains the same | |
5622 :endfunction | |
5623 | |
5624 "you can do issue those few commands from a command line, "or create a small | |
5625 file and put it into your plugin directory, "or write those few commands | |
5626 into a file end issue a command :so % | |
5627 | |
5628 "how to use this little function: "let's suppose you have a simple | |
5629 column of numbers like " "10 "20 "30 " "you issue command like: :let S=0 | |
5630 :%s/[0-9]\+/\=Sum(submatch(0))/ "the command finds the first number on the | |
5631 line and adds it to the S " "the result is displayed :echo $S | |
5632 | |
5633 "!!!! don't forget to do :let g:S=0 "before use. | |
5634 | |
5635 "you can also use \zs and \ze atoms in a regular expression to "delimit the | |
5636 number, so submatch(0) returns only a number and "the text remains unchanged | |
5637 after 'substitute' | |
5638 | |
5639 "for starter on the wonderfull world of regular expressions see: :help | |
5640 usr_27.txt | |
5641 | |
5642 "for the definition of the search pattern see :help :s :help pattern | |
5643 | |
5644 "for replacement strings begining with \= and special function submatch(0)see | |
5645 :help sub-replace-special | |
5646 | |
5647 "for the *ultimate* guide through the world of regular expressions see book: | |
5648 "Mastering Regular Expressions "Powerful Techniques for Perl and Other Tools | |
5649 "by Jeffrey E.F. Friedl "from O'REILLY | |
5650 | |
5651 "the book does not write about vim, yet here you can learn that ":s command | |
5652 is the most powerfull command you can find in a text editor. "(with the | |
5653 possible exception of :global command) | |
5654 | |
5655 </pre></tip> </html> <Tip category="KVim"> <html><center>Highlight | |
5656 doubled word errors in text</center> <pre> <A | |
5657 HREF="http://vim.sf.net/tip_view.php?tip_id=206">http://vim.sf.net/tip_view.php?tip_id=206</A><BR> | |
5658 | |
5659 An error I sometimes make while working on a LaTeX file is the repetition of | |
5660 a word as in "the the". Most often, such doubled words come about through | |
5661 a careless edit. Doubled words are hard to spot when the first word of the | |
5662 doubled pair is the last word on one line, and the second word of the pair | |
5663 is the the first word on the next line. There is an example of such an error | |
5664 in the last sentence. Vim's syntax mechanism can be used to highlight doubled | |
5665 words as an error. | |
5666 | |
5667 To obtain this highlighting for TeX and LaTeX files, place the following | |
5668 two lines: | |
5669 | |
5670 syn match texDoubleWord "\c\<\(\a\+\)\_s\+\1\>" hi def link | |
5671 texDoubleWord Error | |
5672 | |
5673 in a file called tex.vim in the directory that shows up last in your | |
5674 runtimepath (:set runtimepath? to check). This will often be either | |
5675 ~/.vim/after/syntax/tex.vim or $VIM/vimfiles/after/syntax/tex.vim | |
5676 | |
5677 The same effect can be obtained for files of a different filetype, say html, | |
5678 by putting the same lines in a file called html.vim in the same location. | |
5679 | |
5680 For more on the runtimepath, :he runtimepath. For more on syntax highlighting, | |
5681 :he syntax | |
5682 | |
5683 </pre></tip> </html> <Tip category="KVim"> <html><center>editing | |
5684 databases with Vim/Perl/DBI</center> <pre> <A | |
5685 HREF="http://vim.sf.net/tip_view.php?tip_id=207">http://vim.sf.net/tip_view.php?tip_id=207</A><BR> | |
5686 | |
5687 Perl's Data-Base-Independent (DBI) module provides programming language | |
5688 level access to a lot of databases. | |
5689 | |
5690 Vim hosts an embedded Perl interpreter. So it is only a matter of some key | |
5691 strokes to interactively issue DB commands from within Vim or to search, | |
5692 edit, and replace database contents including retrieval and storage. Of course | |
5693 "create table" scripts can be worked upon in Vim as well as storing recurring | |
5694 patterns in Vim functions or Perl modules. | |
5695 | |
5696 Prerequisites: Vim needs to be compiled with Perl support enabled. See the | |
5697 |if_perl.txt| manual page! The CPAN module DBI as well as an appropriate | |
5698 database driver has to be installed with Perl in order to execute these | |
5699 Vim commands: | |
5700 | |
5701 " connect to perl's dbi module: :perl use dbi; | |
5702 | |
5703 " connect to the database: :perl $dbh = dbi->connect( | |
5704 "DBI:mysql:$DBNAME:$HOST",$USER,$PASSWORD, | |
5705 { raiseerror => 1}); | |
5706 | |
5707 " perform a simple query: :perl $result = $dbh->selectall_arrayref("show | |
5708 tables;"); | |
5709 | |
5710 " insert the list of tables into the current buffer's top: :perl | |
5711 $curbuf->Append(0, map($_->[0], @{$result})); | |
5712 | |
5713 In MySql the command "show tables;" results in a list of table names. Inserted | |
5714 into a Vim buffer this results in one line per table. | |
5715 | |
5716 You can find more on my web page <A | |
5717 HREF="http://members.chello.at/intelliware/dbEdit">http://members.chello.at/intelliware/dbEdit</A><BR> | |
5718 | |
5719 </pre></tip> </html> <Tip category="KVim"> <html><center>Alter | |
5720 the display of buffers in the buffers menu</center> <pre> <A | |
5721 HREF="http://vim.sf.net/tip_view.php?tip_id=208">http://vim.sf.net/tip_view.php?tip_id=208</A><BR> | |
5722 | |
5723 If you use the buffers menu, here's where you can change how the buffernames | |
5724 are displayed: | |
5725 | |
5726 menu.vim, function s:BMMunge | |
5727 | |
5728 OLD: let name2 = name2 . ' (' . a:bnum . ')' | |
5729 | |
5730 displays: | |
5731 | |
5732 .vimrc (1) menu.vim (2) | |
5733 | |
5734 NEW: let name2 = '&' . a:bnum . '. ' . name2 | |
5735 | |
5736 displays | |
5737 | |
5738 1. .vimrc 2. menu.vim | |
5739 (with the 1 and the 2 underlined) | |
5740 | |
5741 which is more useful, because you can (almost) always pick the buffer you | |
5742 want with one keystroke, the buffernumber, until you get to buffer 10 anyway. | |
5743 | |
5744 Roger | |
5745 | |
5746 </pre></tip> </html> <Tip category="KVim"> | |
5747 <html><center>backtracking your movements in a file</center> <pre> <A | |
5748 HREF="http://vim.sf.net/tip_view.php?tip_id=209">http://vim.sf.net/tip_view.php?tip_id=209</A><BR> | |
5749 | |
5750 If you are jumping from one line to another a lot. You may find the "Ctrl-o" | |
5751 command handy. Usually u can set markers in a buffer to keep track of your | |
5752 movements. but Ctrl-o makes it even easier. it takes you back sequentially | |
5753 to all your previous cursor locations in a buffer. just press ctrl-o in | |
5754 normal mode and u will go to your last cursor position. | |
5755 | |
5756 Njoy | |
5757 | |
5758 </pre></tip> </html> <Tip category="KVim"> | |
5759 <html><center>compiling the actual file with gcc</center> <pre> <A | |
5760 HREF="http://vim.sf.net/tip_view.php?tip_id=210">http://vim.sf.net/tip_view.php?tip_id=210</A><BR> | |
5761 | |
5762 if you use set makeprg=gcc\ -o\ %<\ % in your .vimrc, and your actual | |
5763 file is file.c, then :make will compile file.c with the output file. (gcc | |
5764 file.c -o file). | |
5765 | |
5766 </pre></tip> </html> <Tip category="KVim"> | |
5767 <html><center>Rotate color themes</center> <pre> <A | |
5768 HREF="http://vim.sf.net/tip_view.php?tip_id=211">http://vim.sf.net/tip_view.php?tip_id=211</A><BR> | |
5769 | |
5770 This tip is for those who like to change their vim color themes pretty often. | |
5771 I like different themes just for a change in my work environment. To achieve | |
5772 this just add the following to your .vimrc or _vimrc file. | |
5773 | |
5774 let themeindex=0 function! RotateColorTheme() | |
5775 let y = -1 while y == -1 | |
5776 let colorstring = | |
5777 "#blue.vim#elflord.vim#evening.vim#koehler.vim#murphy.vim#pablo.vim#ron.vim#" | |
5778 let x = match(colorstring,"#",g:themeindex) let y = | |
5779 match(colorstring,"#",x+1) let g:themeindex = x+1 ":echo x | |
5780 y g:themeindex if y == -1 | |
5781 let g:themeindex = 0 | |
5782 else | |
5783 let themestring = strpart(colorstring,x+1,y-x-1) | |
5784 echo("Setting Theme to-> ".themestring) return | |
5785 ":so $VIMRUNTIME/colors/".themestring | |
5786 endif | |
5787 endwhile | |
5788 endfunction | |
5789 | |
5790 Change the value of colorstring above by changing the line let colorstring = | |
5791 "#blue.vim#elflord.vim#evening.vim#koehler.vim#murphy.vim#pablo.vim#ron.vim#" | |
5792 You can add your favorite color themes in this string so that you can rotate | |
5793 between them. Just make sure that any string that you add is in between the # | |
5794 as shown above. Just follow the format above and things will work. | |
5795 | |
5796 Then assign a key to roate the theme. map <F8> :execute | |
5797 RotateColorTheme() | |
5798 | |
5799 Dunno if there are better ways to do the same. I just did a "help eval" | |
5800 and wrote the above. | |
5801 | |
5802 </pre></tip> </html> <Tip category="KVim"> <html><center>Setting | |
5803 file attributes without reloading a buffer</center> <pre> <A | |
5804 HREF="http://vim.sf.net/tip_view.php?tip_id=212">http://vim.sf.net/tip_view.php?tip_id=212</A><BR> | |
5805 | |
5806 While creating scripts and others executable files with Vim it is needed to | |
5807 set UNIX executable bit on the file. You can do this from inside Vim with | |
5808 :!chmod a+x %. The % represents current buffer's filename. The problem is | |
5809 that Vim will notice attribute changes and prompt you to reload a file. If | |
5810 you do this, your undo history for the file will be lost. | |
5811 | |
5812 The following function facilitate changing executable attributes without | |
5813 reloading a buffer. Thanks to Bram for the algorithm for this function. | |
5814 | |
5815 fun! SetExecutableBit() | |
5816 let fname = expand("%:p") :checktime exec "au FileChangedShell | |
5817 " . fname . " :echo" :silent !chmod a+x % :checktime exec | |
5818 "au! FileChangedShell " . fname | |
5819 endfun | |
5820 | |
5821 " Create an EX command that will call the function. command -nargs=0 Xbit | |
5822 call SetExecutableBit() | |
5823 | |
5824 Now you can type :Xbit to make the file executable! | |
5825 | |
5826 </pre></tip> </html> <Tip category="KVim"> | |
5827 <html><center>delet all lines containt TXT</center> <pre> <A | |
5828 HREF="http://vim.sf.net/tip_view.php?tip_id=213">http://vim.sf.net/tip_view.php?tip_id=213</A><BR> | |
5829 | |
5830 I needed this one when I was editing an ldif file: | |
5831 | |
5832 I needed to delete all lines containing "profile": | |
5833 | |
5834 :g/profile/d | |
5835 | |
5836 very handydandy | |
5837 | |
5838 </pre></tip> </html> <Tip category="KVim"> | |
5839 <html><center>Current buffer based menus</center> <pre> <A | |
5840 HREF="http://vim.sf.net/tip_view.php?tip_id=214">http://vim.sf.net/tip_view.php?tip_id=214</A><BR> | |
5841 | |
5842 If you have different menus for different filetypes, and you want to have | |
5843 only the menu relevant to current buffer displayed, you can use this approach: | |
5844 | |
5845 in .vimrc: au BufEnter * if exists('b:BuffEnter')|exec b:BuffEnter|endif au | |
5846 BufLeave * if exists('b:BuffEnter')|exec b:BuffLeave|endif | |
5847 | |
5848 In appropriate ftplugin/?.vim, there are assigned commands to create or | |
5849 destroy the menus - here typed in directly, may be of course call to a | |
5850 menu-generating function or whatever. | |
5851 | |
5852 let b:BuffEnter='amenu C.added ...' let b:BuffLeave='unmenu! C|unmenu C' | |
5853 | |
5854 </pre></tip> </html> <Tip category="KVim"> <html><center>Edit | |
5855 configuration files for a filetype</center> <pre> <A | |
5856 HREF="http://vim.sf.net/tip_view.php?tip_id=215">http://vim.sf.net/tip_view.php?tip_id=215</A><BR> | |
5857 | |
5858 When you open a file, vim may load several scripts to customize itself for | |
5859 editing the file type the file is associated with (for example a file "test.c" | |
5860 is associated with the filetype "c"). Such configurations include the setting | |
5861 of syntax highlighting colors (:help syntax) and support for indentation | |
5862 (:help filetype-indent-on). When you start to override these files for | |
5863 yourself, it can sometimes be confusing, which file sets a specific option. | |
5864 The following function can be used, to edit the configuration files which | |
5865 are associated with a specific filename. It open a buffer for all files which | |
5866 get loaded. If I invoke it with ':call Edit_ft_conf("test.c")', for example, | |
5867 I end up with the following buffers / windows: | |
5868 1 a "[No File]" line 1 2 a "test.c" | |
5869 line 1 3 a= "/usr/local/share/vim/vim60/syntax/c.vim" | |
5870 line 1 4 a "~/.vim/after/syntax/c.vim" line 1 5 #a= | |
5871 "/usr/local/share/vim/vim60/indent/c.vim" line 1 6 %a= | |
5872 "/usr/local/share/vim/vim60/ftplugin/c.vim" line 1 | |
5873 | |
5874 Here comes the function: | |
5875 | |
5876 " Edit filetype configuration files " Usage: ':call Edit_ft_conf("file")' | |
5877 " Purpose: open all scripts which get loaded implicitly by opening "file" " | |
5878 (syntax highlighting, indentation, filetype plugins, ..) " The order of | |
5879 windows reflects the order of script loading (but "file" is " the topmost | |
5880 window) fun! Edit_ft_conf(name) | |
5881 " we may not do this with a loaded file, since this won't trigger the | |
5882 " configuration file loading as desired. " try calling with 'call | |
5883 Edit_ft_conf("nonexistingfile.<EXT>")' if this " gives you troubles | |
5884 if bufexists(a:name) && bufloaded(a:name) | |
5885 echo "!Attention: buffer for " . a:name . " is loaded, unload first." | |
5886 return | |
5887 endif " split-open the file with verbose set, grab the output into a | |
5888 register " (without clobbering) let safereg = @u redir @u " redirect | |
5889 command output to register @u exec "silent 2verbose split " . a:name | |
5890 " verbose level 2 suffices to catch all scripts which get opened | |
5891 redir END " Parse register @u, looking for smth like: | |
5892 'sourcing"/usr/local/share/vim/vim60/syntax/c.vim"' let pos = 0 let | |
5893 regexp = 'sourcing "[^"]\+"' while match(@u,regexp,pos) >= 0 | |
5894 let file = matchstr(@u,regexp,pos) let pos = matchend (@u,regexp,pos) | |
5895 let file = strpart(file,10,strlen(file)-11) exec "silent below split | |
5896 " . file | |
5897 endwhile " restore the register let @u = safereg | |
5898 endfun | |
5899 | |
5900 </pre></tip> </html> <Tip category="KVim"> <html><center>calculate | |
5901 equations from within vim</center> <pre> <A | |
5902 HREF="http://vim.sf.net/tip_view.php?tip_id=216">http://vim.sf.net/tip_view.php?tip_id=216</A><BR> | |
5903 | |
5904 The following map and function calculates equations using the program 'bc' | |
5905 (found on most linux systems, available for most systems). Visually select the | |
5906 equation you want to calculate, then hit ;bc - if the selection ends with an | |
5907 '=' sign, the answer will be appended after the equal, otherwise, the answer | |
5908 is echoed as a message. The code to put in a vimrc and source is at the end. | |
5909 | |
5910 Equations can span multiple lines, and the full bc syntax is probably | |
5911 supported. Additionally, sin (), cos (), etc, are transformed into the | |
5912 names used by bc (s () c (), etc). | |
5913 | |
5914 Here are some example lines: | |
5915 | |
5916 2 * sqrt (2) = | |
5917 | |
5918 3 * (2 - 1) + 4.0 ^ 6 = | |
5919 | |
5920 4 / 3 = | |
5921 | |
5922 3 + | |
5923 4 - | |
5924 2 * (1 / (3 + 2)) = | |
5925 | |
5926 define rad (x) { | |
5927 return (x / 180) * 4 * atan (1) | |
5928 } cos (rad (45)) = | |
5929 | |
5930 Select each of these in turn (continguous non-blank lines, and hit ;bc for | |
5931 each), and this is what you get: 2 * sqrt (2) = 2.82842712474619009760 | |
5932 | |
5933 3 * (2 - 1) + 4.0 ^ 6 = 4099.000000 | |
5934 | |
5935 4 / 3 = 1.33333333333333333333 | |
5936 | |
5937 3 + | |
5938 4 - | |
5939 2 * (1 / (3 + 2)) = 6.60000000000000000000 | |
5940 | |
5941 define rad (x) { | |
5942 return (x / 180) * 4 * atan (1) | |
5943 } cos (rad (45)) = .70710678118654752440 | |
5944 | |
5945 Fun, no? Here is the code you need to put in your vimrc file: | |
5946 | |
5947 vnoremap ;bc "ey:call CalcBC()<CR> function! CalcBC() | |
5948 let has_equal = 0 | |
5949 | |
5950 " remove newlines and trailing spaces let @e = substitute (@e, "\n", | |
5951 "", "g") let @e = substitute (@e, '\s*$', "", "g") | |
5952 | |
5953 " if we end with an equal, strip, and remember for output if @e =~ "=$" | |
5954 let @e = substitute (@e, '=$', "", "") let has_equal = 1 | |
5955 endif | |
5956 | |
5957 " sub common func names for bc equivalent let @e = substitute (@e, | |
5958 '\csin\s*(', "s (", "") let @e = substitute (@e, '\ccos\s*(', "c | |
5959 (", "") let @e = substitute (@e, '\catan\s*(', "a (", "") let @e = | |
5960 substitute (@e, "\cln\s*(", "l (", "") | |
5961 | |
5962 " escape chars for shell let @e = escape (@e, '*()') | |
5963 | |
5964 " run bc, strip newline let answer = substitute (system ("echo " | |
5965 . @e . " \| bc -l"), "\n", "", "") | |
5966 | |
5967 " append answer or echo if has_equal == 1 | |
5968 normal `> exec "normal a" . answer | |
5969 else | |
5970 echo "answer = " . answer | |
5971 endif | |
5972 endfunction | |
5973 | |
5974 </pre></tip> </html> <Tip category="KVim"> <html><center>Translate | |
5975 &#nnn; in html source to readable ascii</center> <pre> <A | |
5976 HREF="http://vim.sf.net/tip_view.php?tip_id=217">http://vim.sf.net/tip_view.php?tip_id=217</A><BR> | |
5977 | |
5978 I found a website *cough*Tivoli.com*cough* that likes to obfuscate some of | |
5979 its help file web pages using &#nnn; instead of normal ascii. If you load | |
5980 the source with Vim (in Opera you can just designate Vim as your source | |
5981 viewing program), you can :so the following code to make it readable. | |
5982 | |
5983 let n = 32 while n < 127 | |
5984 if n == 38 | |
5985 silent! exec '%s/&/\&/g' | |
5986 elseif n == 47 | |
5987 silent! exec '%s///\//g' | |
5988 else | |
5989 silent! exec '%s/&#' . n . ';/' . nr2char(n) . '/g' | |
5990 endif let n = n + 1 | |
5991 endwhile | |
5992 | |
5993 Disclaimer: I hacked this together in about 10 minutes (or possibly longer :). | |
5994 It worked suitably for the website I wrote it for (or possibly "against" :). | |
5995 Your Milage May Vary. | |
5996 | |
5997 See :help eval, :help silent, :help exec, :help :s | |
5998 | |
5999 </pre></tip> </html> <Tip category="KVim"> <html><center>Check | |
6000 for comments, independent of the filetype</center> <pre> <A | |
6001 HREF="http://vim.sf.net/tip_view.php?tip_id=218">http://vim.sf.net/tip_view.php?tip_id=218</A><BR> | |
6002 | |
6003 For some scripts it might be useful to detect, whether a specific position | |
6004 in a buffer is inside of a comment or not. Syntax highlighting can save us | |
6005 the work for parsing the comments ourselves. | |
6006 | |
6007 The command | |
6008 :echo synIDattr(synIDtrans(synID(line("."), col("."), 0)), "name") | |
6009 echoes the group used for *highlighting* the character at the current | |
6010 cursor position, see ':help synIDtrans()'. It will usually be "Comment" | |
6011 if the cursor is inside of a comment, so | |
6012 synIDattr(synIDtrans(synID(line("."), col("."), 0)), "name") == "Comment" | |
6013 detects, independent of the filetype (which have their own group 'names' | |
6014 for comments), if the cursor is inside a comment or not. The expression | |
6015 synIDattr(synIDtrans(synID(line("."), col("."), 0)), "name") =~ | |
6016 'Comment\|Constant\|PreProc' | |
6017 will detect additionally, if the cursor is inside of a string or some | |
6018 preprocessor statement. | |
6019 | |
6020 </pre></tip> </html> <Tip category="KVim"> <html><center>make | |
6021 from command line, open vim on errors</center> <pre> <A | |
6022 HREF="http://vim.sf.net/tip_view.php?tip_id=219">http://vim.sf.net/tip_view.php?tip_id=219</A><BR> | |
6023 | |
6024 A simple alias (*csh) or shell function (bash) will let you run make from your | |
6025 shell, then automatically open vim or gvim on the errors (if there were any): | |
6026 | |
6027 csh or tcsh: | |
6028 | |
6029 alias Make 'make \!* |& tee make.errors || gvim -q make.errors -c :copen' | |
6030 | |
6031 bash: | |
6032 | |
6033 Make () { command make "$@" |& tee make.errors || gvim -q make.errors -c | |
6034 :copen ; } | |
6035 | |
6036 If you use vanilla sh or ksh or even cmd.exe, you can probably do the same - | |
6037 add a not if you have ideas. | |
6038 | |
6039 </pre></tip> </html> <Tip category="KVim"> | |
6040 <html><center>Match every word except 'foo'</center> <pre> <A | |
6041 HREF="http://vim.sf.net/tip_view.php?tip_id=220">http://vim.sf.net/tip_view.php?tip_id=220</A><BR> | |
6042 | |
6043 This is a regular expression that matches all words except 'foo' | |
6044 \v<(foo>)@!\k+> | |
6045 | |
6046 \v Very magic < Start-of-word (Foo>) The | |
6047 atom 'Foo' followed by end-of-word @! Match (with zero length) | |
6048 when the previous atom doesn't match. \k+ Match one or more | |
6049 Keywords > Match end-of-word. | |
6050 | |
6051 This is a kool example of using \@! in the middle of a regexp. The non-magic | |
6052 version is: \<\(foo\>\)\@!\k\+\> | |
6053 | |
6054 </pre></tip> </html> <Tip category="KVim"> | |
6055 <html><center>indenting "throws" in java</center> <pre> <A | |
6056 HREF="http://vim.sf.net/tip_view.php?tip_id=221">http://vim.sf.net/tip_view.php?tip_id=221</A><BR> | |
6057 | |
6058 I want to indent java files like this: | |
6059 | |
6060 int x(int y, int z) | |
6061 throws Exception | |
6062 { | |
6063 [...] return something; | |
6064 } | |
6065 | |
6066 By default vim will properly indent "throws" line, but following "{" will | |
6067 not be deindented back to the method declaration. | |
6068 | |
6069 The following indentexpr does the trick: let | |
6070 &indentexpr='getline(v:lnum)=~"^\\s*{" && getline(v:lnum-1)=~"^\\s*throws\\s" | |
6071 ? cindent(v:lnum)-&sw : cindent(v:lnum)' | |
6072 | |
6073 It just checks that the current line starts with "{" and the previous line | |
6074 starts with "throws" and if that is the case, it subtracts one shiftwidth | |
6075 from the number returned by cindent. | |
6076 | |
6077 </pre></tip> </html> <Tip category="KVim"> | |
6078 <html><center>Building vim with color on HP-UX</center> <pre> <A | |
6079 HREF="http://vim.sf.net/tip_view.php?tip_id=222">http://vim.sf.net/tip_view.php?tip_id=222</A><BR> | |
6080 | |
6081 Following the normal steps of running "./configure" and "make" to build vim | |
6082 on an HP-UX 10.20 will result in vim being linked with the termlib library. | |
6083 This library does not support certain termcap capability codes, such as the | |
6084 "Co" code used to query the number of colors supported by the terminal. | |
6085 Consequently, vim will not display colors when used with a color terminal | |
6086 such as a color xterm. | |
6087 | |
6088 One solution to this is to run the configure script with the | |
6089 "--with-tlib=curses" option, like this: | |
6090 | |
6091 ./configure --with-tlib=curses | |
6092 | |
6093 This will cause vim to be linked with the HP-UX curses library, which does | |
6094 support the color termcap capability codes. | |
6095 | |
6096 Note that the xterm that comes standard with HP-UX 10.20 does not display color | |
6097 character attributes. To see colors when running vim in a terminal window, | |
6098 you will also need to install a color terminal emulator such as a recent xterm. | |
6099 | |
6100 </pre></tip> </html> <Tip category="KVim"> | |
6101 <html><center>Reverse Selected Text</center> <pre> <A | |
6102 HREF="http://vim.sf.net/tip_view.php?tip_id=223">http://vim.sf.net/tip_view.php?tip_id=223</A><BR> | |
6103 | |
6104 Suppose you want to reverse some text - I don't know why you would want to - | |
6105 maybe you're dyslexic. Anyway, I had a need, so this mapping will reverse | |
6106 visually selected text. Put the mapping in your vimrc or otherwise source | |
6107 it, then visually select the word or words, and hit ;rv - really only works | |
6108 with selections on one line: | |
6109 | |
6110 vnoremap ;rv c<C-O>:set revins<cr><C-R>"<esc>:set | |
6111 norevins<cr> | |
6112 | |
6113 </pre></tip> </html> <Tip category="KVim"> | |
6114 <html><center>Shifting blocks visually</center> <pre> <A | |
6115 HREF="http://vim.sf.net/tip_view.php?tip_id=224">http://vim.sf.net/tip_view.php?tip_id=224</A><BR> | |
6116 | |
6117 I use the < and > commands on blocks a lot, and it has always annoyed me | |
6118 that if you want to shift more than one 'shiftwidth', you have count how many | |
6119 'shiftwidth's you want to enter the '[count]>', or restore the selection | |
6120 with "gv". So I've cooked up two mappings that come in very handy: | |
6121 | |
6122 :vnoremap < <gv :vnoremap > >gv | |
6123 | |
6124 These mappings will reselect the block after shifting, so you'll just have | |
6125 to select a block, press < or > as many times as you like, and press | |
6126 <ESC> when you're done to unselect the block. | |
6127 | |
6128 I know it's not rocket science, but it sure has helped me a lot. | |
6129 | |
6130 </pre></tip> </html> <Tip category="KVim"> | |
6131 <html><center>vim can interact with xdvi</center> <pre> <A | |
6132 HREF="http://vim.sf.net/tip_view.php?tip_id=225">http://vim.sf.net/tip_view.php?tip_id=225</A><BR> | |
6133 | |
6134 vim can interact with the tricks that the latest xdvi does: | |
6135 | |
6136 * If one clicks at some place in xdvi, vim automatically jumps to the | |
6137 corresponding line in the LaTeX source file ("reverse search") | |
6138 * Also, from inside vim, one can jump to the corresponding line in xdvi | |
6139 which becomes highlighted ("forward search"). | |
6140 | |
6141 Here is how to do it: | |
6142 | |
6143 * Reverse search: | |
6144 We start a vim server by: vim --servername xdvi We start xdvi(k) on | |
6145 file.dvi by: | |
6146 xdvik -editor "vim --servername xdvi --remote +%l %f" file.dvi | |
6147 At the desired location in xdvi, we press: <ctrl><left_mouse> | |
6148 Then, vim will jump to the corresponding line in the source file. | |
6149 | |
6150 * Forward search: | |
6151 Inside vim, we type, for example, _g which is the following mapping: | |
6152 (the following should be a single line) | |
6153 | |
6154 map _g :execute "!xdvik -name xdvi -sourceposition " | |
6155 . line(".") . expand("%") . " " . expand("%:r") . ".dvi" | |
6156 <cr><cr> | |
6157 | |
6158 [the command to go to the point of xdvi that corresponds to line, eg, 77 | |
6159 of the source file is (no space after 77) | |
6160 xdvik -name xdvi -sourceposition 77file.tex file.dvi ] | |
6161 | |
6162 For the above to work one needs: 1) A recent version of xdvi or xdvik | |
6163 (>22.39 I think) 2) The package srcltx.sty and \usepackage{srcltx} | |
6164 (which should be | |
6165 commented out when one finishes and is ready for printing etc). | |
6166 3) Our version of vim should have been compiled with +clientserver | |
6167 (however, my vim doesn't have it and still works, so try it before | |
6168 Bram finds out what is happening and fixes it) | |
6169 | |
6170 </pre></tip> </html> <Tip category="KVim"> <html><center>Edit | |
6171 file under cursor after a horizontal split</center> <pre> <A | |
6172 HREF="http://vim.sf.net/tip_view.php?tip_id=226">http://vim.sf.net/tip_view.php?tip_id=226</A><BR> | |
6173 | |
6174 I use the command 'gf' quite often. But with this command the current buffer | |
6175 is hidden. To avoid that I use the following mapping : | |
6176 | |
6177 map gw <Esc>:sp %<CR> gf | |
6178 | |
6179 With this mapping the file under the cursor is opened after a horizontal split. | |
6180 | |
6181 </pre></tip> </html> <Tip category="KVim"> | |
6182 <html><center>Power of :g</center> <pre> <A | |
6183 HREF="http://vim.sf.net/tip_view.php?tip_id=227">http://vim.sf.net/tip_view.php?tip_id=227</A><BR> | |
6184 | |
6185 :g is something very old and which is very powerful. I just wanted to | |
6186 illustrate the use of it with some examples. Hope, it will be useful for | |
6187 someone. | |
6188 | |
6189 Brief explanation for ":g" ------------------------- Syntax is: | |
6190 :[range]:g/<pattern>/[cmd] | |
6191 You can think the working as, for the range (default whole file), execute | |
6192 the colon command(ex) "cmd" for the lines matching <pattern>. Also, | |
6193 for all lines that matched the pattern, "." is set to that particular line | |
6194 (for certain commands if line is not specified "." (current line) is assumed). | |
6195 | |
6196 Some examples ------------- Display context (5 lines) for all occurences of | |
6197 a pattern | |
6198 :g/<pattern>/z#.5 :g/<pattern>/z#.5|echo "==========" << | |
6199 same as first, but with some beautification >> | |
6200 Delete all lines matching a pattern | |
6201 :g/<pattern>/d | |
6202 Delete all blank lines (just an example for above) | |
6203 :g/^\s*$/d | |
6204 Double space the file | |
6205 :g/^/pu =\"\n\" :g/^/pu _ << the above one also works >> | |
6206 Copy all lines matching a pattern to end of file | |
6207 :g/<pattern>/t$ | |
6208 Yank all lines matching a pattern to register 'a' | |
6209 0"ay0:g/<pattern>/y A | |
6210 Increment the number items from current line to end-of-document by one | |
6211 :.,$g/^\d/exe "normal! \<c-a>" | |
6212 Comment (C) lines containing "DEBUG" statements | |
6213 g/^\s*DEBUG/exe "norm! I/* \<Esc>A */\<Esc>" | |
6214 A Reverse lookup for records (eg: An address book, with Name on start-of-line | |
6215 and fields after a space) | |
6216 :g/<patern>?^\w?p "if only name is interested | |
6217 :g/<patern>/ka|?^\w?p|'ap "if name and the lookup-line | |
6218 is interested :g/<patern>/?^\w?|+,/^[^ ]/-1p "if entire record | |
6219 is interested | |
6220 Reverse a file (just to show the power of 'g') | |
6221 :g/^/m0 | |
6222 | |
6223 Foot note 1: use :v to negate the search pattern Foot note 2: Some explanation | |
6224 of commonly used commands with :g | |
6225 :2,8co15 => Copy lines 2 through 8 after line 15 :4,15t$ => Copy | |
6226 linesa 4 through 15 towards end of document (t == co) | |
6227 :-t$ => Copy previous line to end of document | |
6228 :m0 => Move current line to the top of the document | |
6229 :.,+3m$-1 => Move current line through cur-line+3 to the last but one line | |
6230 of the document | |
6231 Foot note 3: Commands used with :g are ex commands, so a help search should | |
6232 be, | |
6233 :help :<help-topic> eg. :help :k | |
6234 | |
6235 </pre></tip> </html> <Tip category="KVim"> <html><center>Deleting | |
6236 nested reply threads in emails</center> <pre> <A | |
6237 HREF="http://vim.sf.net/tip_view.php?tip_id=228">http://vim.sf.net/tip_view.php?tip_id=228</A><BR> | |
6238 | |
6239 I find the following setting useful when replying to email threads that have | |
6240 lots of lines like the following: > blah > > blah > > > blah | |
6241 | |
6242 autocmd FileType mail map <F8> :%g/^> >/d<CR> | |
6243 | |
6244 When replying to a mail and you want to remove everything except what the | |
6245 person you are directly replying to wrote just press F8. From the example | |
6246 above, you would just be left with > blah | |
6247 | |
6248 What it does is simply match any line starting with > > and deletes it. | |
6249 It's not perfect as sigs and other debris may remain but it takes a lot | |
6250 of the grunt work out of replying to mails. The autocmd only maps F8 when | |
6251 using mails, this is handy if you use F8 for other things as I do. | |
6252 | |
6253 :help autocmd :help map :help :g | |
6254 | |
6255 </pre></tip> </html> <Tip category="KVim"> <html><center>First | |
6256 thing to try before asking help</center> <pre> <A | |
6257 HREF="http://vim.sf.net/tip_view.php?tip_id=229">http://vim.sf.net/tip_view.php?tip_id=229</A><BR> | |
6258 | |
6259 I've seen several questions asked in the reflector which is available in the | |
6260 help files. Yeah, I know the help is huge. But, you can try this command | |
6261 to show a list of related topics you are trying: | |
6262 :he <topic><c-d> | |
6263 It is "some topic" followed by the key sequence Ctrl-D. For eg: | |
6264 :he xterm<c-d> | |
6265 will show all the help topics matching xterm. Then you can do | |
6266 completion/copy-n-paste the topic you are searching. Of course you can cycle | |
6267 through all the topics through repeated <TABS>, but if the number of | |
6268 hits are huge, it is cumbersome. | |
6269 | |
6270 Enjoy vimming beginners!!! -Arun | |
6271 | |
6272 </pre></tip> </html> <Tip category="KVim"> <html><center>copy | |
6273 current file to another location from within vim</center> <pre> <A | |
6274 HREF="http://vim.sf.net/tip_view.php?tip_id=230">http://vim.sf.net/tip_view.php?tip_id=230</A><BR> | |
6275 | |
6276 I work on jsp pages in my source tree but I have to copy the jsp files over | |
6277 to the tomcat directory in order to view my changes.The following mapping | |
6278 will copy the file being edited to another location. | |
6279 | |
6280 command Cpage silent !cp '%:p' "c:/Progra~1/Tomcat/webapps/console/pages/%" | |
6281 | |
6282 Explanation: | |
6283 | |
6284 % refers to the current buffer %:p refers to the path to the file silent | |
6285 suppresses the command prompt window. | |
6286 | |
6287 Usage: | |
6288 | |
6289 :Cpage | |
6290 | |
6291 </pre></tip> </html> <Tip category="KVim"> | |
6292 <html><center>Localized color schemes</center> <pre> <A | |
6293 HREF="http://vim.sf.net/tip_view.php?tip_id=231">http://vim.sf.net/tip_view.php?tip_id=231</A><BR> | |
6294 | |
6295 i frequently like to edit multiple files in the same vim session. however, | |
6296 if i come into vim from another window i frequently hit 'i' and start typing | |
6297 in whatever buffer is currently being used -- this is often the wrong one | |
6298 (requires <esc>, undo, go the other buffer and . to redo). | |
6299 | |
6300 one way to work around this for me is to use a different color scheme | |
6301 depending on what file i'm working on: | |
6302 | |
6303 au BufEnter * if (exists("b:colors_name")) | let b:current_colors=colors_name | |
6304 | execute "colorscheme " . b:colors_name | endif | |
6305 | |
6306 au BufLeave * if (exists("b:current_colors")) | execute "colorscheme " | |
6307 . b:current_colors | endif | |
6308 | |
6309 if you define b:colors_name with a particular color scheme name, then the | |
6310 above autocommands will switch to that colorscheme when you enter that window | |
6311 and will return to the original color upon departure. | |
6312 | |
6313 inside ftplugin/java.vim, for example, i might have b:colors_name set to | |
6314 'morning', causing all java files to have a distinguishing color scheme. | |
6315 | |
6316 </pre></tip> </html> <Tip category="KVim"> <html><center>Search | |
6317 JDK help for keyword at cursor</center> <pre> <A | |
6318 HREF="http://vim.sf.net/tip_view.php?tip_id=232">http://vim.sf.net/tip_view.php?tip_id=232</A><BR> | |
6319 | |
6320 If you are using the Win32 version of Vim you can use this tip to search | |
6321 the Jdk help for the keyword under the cursor. | |
6322 You need the winhlp32 version of the Jdk docs from this URL - <A | |
6323 HREF="http://www.confluent.fr/javadoc/indexe.html.">http://www.confluent.fr/javadoc/indexe.html.</A><BR> | |
6324 It is a 16mb D/L and approx 85mb unzipped! | |
6325 | |
6326 I added a command to the popup menu :amenu PopUp.JavaHelp :!start winhlp32 | |
6327 -k <cword> F:\jdk\winhelp\JDK13.HLP <CR | |
6328 | |
6329 And also made a keymapping map J :!start winhlp32 -k <cword> | |
6330 F:\jdk\winhelp\JDK13.HLP <CR> | |
6331 | |
6332 Trivial yes, but I find it quite useful. | |
6333 | |
6334 </pre></tip> </html> <Tip category="KVim"> <html><center>Some | |
6335 tips for using Vim to write Lisp code</center> <pre> <A | |
6336 HREF="http://vim.sf.net/tip_view.php?tip_id=233">http://vim.sf.net/tip_view.php?tip_id=233</A><BR> | |
6337 | |
6338 For some tips on how to use Vim for writing Lisp code, see <A | |
6339 HREF="http://www.lisp-p.org/i000/15-vim.">http://www.lisp-p.org/i000/15-vim.</A><BR> | |
6340 | |
6341 </pre></tip> </html> <Tip category="KVim"> <html><center>Vi(M) | |
6342 Command Line tips & tricks</center> <pre> <A | |
6343 HREF="http://vim.sf.net/tip_view.php?tip_id=234">http://vim.sf.net/tip_view.php?tip_id=234</A><BR> | |
6344 | |
6345 Hi VIMMERs | |
6346 | |
6347 These tips save me wearing out my delicate little fingers with unnecessary | |
6348 keystrokes. They assume Unix, but I also use them on a Windows Unix Shell | |
6349 (MKS) as well | |
6350 | |
6351 # When I know the file i want to edit is the most recent file in a directory | |
6352 | |
6353 alias -x vew='vi `l\s -t * | head -1 `' | |
6354 | |
6355 #When I know the file I want to edit contains a unique keyword #this is | |
6356 actually in a little shell script call ed vg where the keyword is passed as | |
6357 parameter $1 #/bin/sh #name vg vi.exe $(grep -isl $1 *) & | |
6358 | |
6359 # some variations alias -x vp='vi `l\s -t *.@(pl|cgi)| head -1 `' | |
6360 | |
6361 #execute the most recent script (I call this from within VIM with a mapped | |
6362 button) alias -x xew='`l\s -t *.pl | head -1 `' | |
6363 | |
6364 Cheers zzapper | |
6365 | |
6366 </pre></tip> </html> <Tip category="KVim"> <html><center>Toggle | |
6367 highlight word under cursor, to find cursor.</center> <pre> <A | |
6368 HREF="http://vim.sf.net/tip_view.php?tip_id=235">http://vim.sf.net/tip_view.php?tip_id=235</A><BR> | |
6369 | |
6370 When the screen has scrolled such as during a search, it may be difficult to | |
6371 find the cursor. :help %# explains the pattern one can use to highlight the | |
6372 word around the cursor, which gives a bigger target to look for on the screen. | |
6373 I have this in my .vimrc: | |
6374 | |
6375 function VIMRCWhere() | |
6376 if !exists("s:highlightcursor") | |
6377 match Todo /\k*\%#\k*/ let s:highlightcursor=1 | |
6378 else | |
6379 match None unlet s:highlightcursor | |
6380 endif | |
6381 endfunction map <C-K> :call VIMRCWhere()<CR> | |
6382 | |
6383 This means that in "normal" mode ctrl-k will toggle the highlight. Todo is | |
6384 a hightlight group whch is particularly easy to see. For further information | |
6385 see ":help s:", ":help match", ":help exists()" and ":help funtion". | |
6386 | |
6387 </pre></tip> </html> <Tip category="KVim"> <html><center>Menu | |
6388 for inserting special characters</center> <pre> <A | |
6389 HREF="http://vim.sf.net/tip_view.php?tip_id=236">http://vim.sf.net/tip_view.php?tip_id=236</A><BR> | |
6390 | |
6391 First, thanks for the script printascii.vim. | |
6392 | |
6393 When looking at the ascii table, I found some characters I'd like to have | |
6394 inserted when editing. Add the following lines in your _gvimrc and you | |
6395 can select them via menu. (change the names of the menu if you don't have | |
6396 German installed or don't like my titles). I also made some abbreviations | |
6397 to get separation lines in documentation or code files, e.g. abb dotlin | |
6398 ……………………………………………………………………………………………………………………………………………………………………………………………^M | |
6399 abb cdotlin | |
6400 /*…………………………………………………………………………………………………………………………………………………………………………………*/^M | |
6401 abb fdotlin | |
6402 •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••^M | |
6403 abb cfdotlin | |
6404 /*•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••*/^M abb | |
6405 dlin =======================================================================^M | |
6406 abb cdlin | |
6407 /*===================================================================*/^M abb | |
6408 lin -----------------------------------------------------------------------^M | |
6409 abb clin | |
6410 /*-------------------------------------------------------------------*/^M abb | |
6411 ulin _______________________________________________________________________^M | |
6412 abb culin | |
6413 /*___________________________________________________________________*/^M abb | |
6414 Ulin ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯^M | |
6415 abb cUlin | |
6416 /*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/^M | |
6417 | |
6418 (you have to substitute ^M with CTRL_V CTRL_M or delete it) | |
6419 | |
6420 20imenu Editieren.Sonderzeichen.open\ angle\ « | |
6421 <C-R>=nr2char(171)<CR> 20nmenu Editieren.Sonderzeichen.open\ | |
6422 angle\ « a<C-R>=nr2char(171)<CR><ESC> | |
6423 20imenu Editieren.Sonderzeichen.close\ angle\ » | |
6424 <C-R>=nr2char(187)<CR> 20nmenu Editieren.Sonderzeichen.close\ | |
6425 angle\ » a<C-R>=nr2char(187)<CR><ESC> | |
6426 20imenu Editieren.Sonderzeichen.start\ mark\ „ | |
6427 <C-R>=nr2char(132)<CR> 20nmenu Editieren.Sonderzeichen.start\ | |
6428 mark\ „ a<C-R>=nr2char(132)<CR><ESC> | |
6429 20imenu Editieren.Sonderzeichen.end\ mark\ \ ” | |
6430 <C-R>=nr2char(148)<CR> 20nmenu Editieren.Sonderzeichen.end\ | |
6431 mark\ \ ” a<C-R>=nr2char(148)<CR><ESC> | |
6432 20imenu Editieren.Sonderzeichen.fat\ dot\ \ • | |
6433 <C-R>=nr2char(149)<CR> 20nmenu Editieren.Sonderzeichen.fat\ | |
6434 dot\ \ • a<C-R>=nr2char(149)<CR><ESC> | |
6435 20imenu Editieren.Sonderzeichen.etc\ \ \ … | |
6436 <C-R>=nr2char(133)<CR> 20nmenu Editieren.Sonderzeichen.etc\ | |
6437 \ \ … a<C-R>=nr2char(133)<CR><ESC> | |
6438 20imenu Editieren.Sonderzeichen.!underscore\ \ ¯ | |
6439 <C-R>=nr2char(175)<CR> 20nmenu Editieren.Sonderzeichen.!underscore\ | |
6440 \ ¯ a<C-R>=nr2char(175)<CR><ESC> | |
6441 20imenu Editieren.Sonderzeichen.copyright\ \ © | |
6442 <C-R>=nr2char(169)<CR> 20nmenu Editieren.Sonderzeichen.copyright\ | |
6443 \ © a<C-R>=nr2char(169)<CR><ESC> | |
6444 20imenu Editieren.Sonderzeichen.paragraph\ \ § | |
6445 <C-R>=nr2char(167)<CR> 20nmenu Editieren.Sonderzeichen.paragraph\ | |
6446 \ § a<C-R>=nr2char(167)<CR><ESC> | |
6447 20imenu Editieren.Sonderzeichen.noitamalcxe\ ¡ | |
6448 <C-R>=nr2char(161)<CR> 20nmenu Editieren.Sonderzeichen.noitamalcxe\ | |
6449 ¡ a<C-R>=nr2char(161)<CR><ESC> | |
6450 | |
6451 </pre></tip> </html> <Tip category="KVim"> <html><center>If | |
6452 you prefer vertical splits</center> <pre> <A | |
6453 HREF="http://vim.sf.net/tip_view.php?tip_id=237">http://vim.sf.net/tip_view.php?tip_id=237</A><BR> | |
6454 | |
6455 This is just in case there's somebody else who likes to work in a maximized | |
6456 vim window on a high resolution desktop. If you follow good coding practice | |
6457 and make sure your programs use only 80 characters in each row, have you | |
6458 noticed how much space lies unused on the right? | |
6459 | |
6460 I find that the following settings keep me from ever seeing another horizontal | |
6461 split, unless I specifically ask for it. | |
6462 | |
6463 cabbrev split vsplit cabbrev hsplit split cabbrev sta vertical sta cabbrev | |
6464 help vertical help cabbrev new vnew cabbrev right botright | |
6465 | |
6466 ; A more heavyweight solution for ^W^] function! ToggleSplit (dir) | |
6467 let currFname = bufname ("%") let old = winnr () | |
6468 | |
6469 " Window navigation to ensure the correct window is 'last'. if (a:dir == | |
6470 "u") | |
6471 wincmd k let back="j" | |
6472 elseif (a:dir == "d") | |
6473 wincmd j let back="k" | |
6474 elseif (a:dir == "l") | |
6475 wincmd h let back="l" | |
6476 elseif (a:dir == "r") | |
6477 wincmd l let back="h" | |
6478 endif | |
6479 | |
6480 if (winnr () == old) | |
6481 echo "Ouch" return | |
6482 endif | |
6483 | |
6484 exec "wincmd " . back | |
6485 | |
6486 quit | |
6487 | |
6488 if (back == "j" || back == "k") | |
6489 let orientation = "vsplit" | |
6490 else | |
6491 let orientation = "split" | |
6492 endif | |
6493 | |
6494 if (back == "j" || back == "l") | |
6495 let dir = "below" | |
6496 else | |
6497 let dir = "above" | |
6498 endif | |
6499 | |
6500 exec dir . " " . orientation " " . currFname | |
6501 endfunction noremap ^W^] ^W^]:silent call ToggleSplit ("d")<CR> | |
6502 | |
6503 ; Optional. set splitright ; In which case the above mapping becomes: noremap | |
6504 ^W^] :set splitbelow<CR>^W^]:silent call ToggleSplit ("u")<CR>:set | |
6505 nosplitbelow<CR> ; Or you could just set splitbelow ; :-) | |
6506 | |
6507 ; Very elegant and almost perfect, but it screws up if you want to run a | |
6508 command with ranges :-) ;noremap : :vertical<Space> | |
6509 | |
6510 ; EOF | |
6511 | |
6512 </pre></tip> </html> <Tip category="KVim"> <html><center>Very | |
6513 basic session persistence</center> <pre> <A | |
6514 HREF="http://vim.sf.net/tip_view.php?tip_id=238">http://vim.sf.net/tip_view.php?tip_id=238</A><BR> | |
6515 | |
6516 I use the following code in my plugins dir to ease session persistance. If | |
6517 I want my session to persist I use :mks! and then whenever I open the | |
6518 Session.vim file, my session is restored. If I am working from a restored | |
6519 session and I close VIM, the session is saved automatically. Drawback is | |
6520 that it makes editing the Session.vim file a bit cumbersome ;) | |
6521 | |
6522 au BufRead Session.vim so % au VimLeave * call SaveCurrentSession() | |
6523 | |
6524 function! SaveCurrentSession() | |
6525 if v:this_session != "" | |
6526 exe "mksession! " . v:this_session | |
6527 endif | |
6528 endfunction | |
6529 | |
6530 </pre></tip> </html> <Tip category="KVim"> | |
6531 <html><center>map shift-up and shift-down</center> <pre> <A | |
6532 HREF="http://vim.sf.net/tip_view.php?tip_id=239">http://vim.sf.net/tip_view.php?tip_id=239</A><BR> | |
6533 | |
6534 You can make Vim scroll the text using the shifted up/down arrows, sort | |
6535 of like your browser (except with shifted keys :), by mapping Shift-Up to | |
6536 Ctrl-Y and Shift-Down to Ctrl-E. | |
6537 | |
6538 map <s-Down> <C-E> map <s-Up> <C-Y> | |
6539 | |
6540 Shift-Down will then scroll down (like moving a scroll-bar down, or like | |
6541 moving a cursor at the bottom of a window down), and Shift-Up will then | |
6542 scroll up (like moving a scroll-bar up, etc). | |
6543 | |
6544 If you'd rather think about the text moving down/up instead of the cursor | |
6545 moving up/down, you can of course swap the mappings. | |
6546 | |
6547 If you normally use j and k for cursor movement, and rarely use the arrow | |
6548 keys, you can map the arrow keys directly, in which case I'd probably map | |
6549 the shifted arrow keys back to cursor movement: | |
6550 | |
6551 map <down> <c-e> map <up> <c-y> map <s-down> | |
6552 j map <s-up> k | |
6553 | |
6554 See :help ctrl-e, :help ctrl-y, and :help key-mapping. | |
6555 | |
6556 See also :help i_ctrl-o and :help map-modes for how to set up these mappings | |
6557 for use in other modes (like insert mode :). | |
6558 | |
6559 (Vim by default maps s-Down and s-Up to Ctrl-F and Ctrl-B, for both normal and | |
6560 visual mode. Keep this in mind if you change some of the above mappings to | |
6561 "nmap", 'cause you'll probably also want to look in to "vmap".) | |
6562 | |
6563 </pre></tip> </html> <Tip category="KVim"> | |
6564 <html><center>Hideall for Vim</center> <pre> <A | |
6565 HREF="http://vim.sf.net/tip_view.php?tip_id=240">http://vim.sf.net/tip_view.php?tip_id=240</A><BR> | |
6566 | |
6567 Xemacs has a hide all function which can make all the function in your C file a | |
6568 fold and close them. And here is something small to achieve similiar under Vim. | |
6569 | |
6570 func! HideAll() | |
6571 syn region myFold start="{" end="}" transparent fold syn sync fromstart | |
6572 set foldnestmax=1 set foldmethod=syntax | |
6573 endfunc | |
6574 | |
6575 amenu Whatever.Hide\ all :call HideAll()<CR> | |
6576 | |
6577 </pre></tip> </html> <Tip category="KVim"> | |
6578 <html><center>"Hide" Folding Markers</center> <pre> <A | |
6579 HREF="http://vim.sf.net/tip_view.php?tip_id=241">http://vim.sf.net/tip_view.php?tip_id=241</A><BR> | |
6580 | |
6581 I wanted to start using folding without having to get used to seeing the | |
6582 (default) markers, a.k.a {{{ and }}}. So, here are 2 autocmd's that will | |
6583 make them fade to black....bg=black fg=black | |
6584 | |
6585 au BufRead,BufNewfile * syn match fmrkr '"*{{{\|"*}}}' | | |
6586 \ syn cluster vimCommentGroup contains=fmrkr | | |
6587 \ hi fmrkr term=NONE guibg=black guifg=black \ | |
6588 ctermbg=black ctermfg=black | |
6589 | |
6590 au BufRead,BufNewfile * syn match fmrkr '"*{{{\|"*}}}' | |
6591 \ containedin=vimLineComment contained | | |
6592 \ hi fmrkr term=NONE guibg=black guifg=black \ | |
6593 ctermbg=black ctermfg=black | |
6594 | |
6595 They both accomplish the same thing, but with different methods, so simply pick | |
6596 one and see those annoying (at least to me) markers fade away. I just tried | |
6597 it out with vim files, but you can easily modify it for any other filetypes. | |
6598 | |
6599 Thanks to Colin's lead with ':help c-syntax' for the 1st au. Thanks to | |
6600 Benji's lead with ':help containedin' for the 2nd au. Understanding most | |
6601 of the syntax.txt document file would also be helpful. | |
6602 | |
6603 To figure out what highlighting group the Marker is in, I would suggest | |
6604 using Chip's vimtip#99. | |
6605 | |
6606 Happy Vimming! | |
6607 | |
6608 </pre></tip> </html> <Tip category="KVim"> | |
6609 <html><center>The power of "\_" in reg-ex</center> <pre> <A | |
6610 HREF="http://vim.sf.net/tip_view.php?tip_id=242">http://vim.sf.net/tip_view.php?tip_id=242</A><BR> | |
6611 | |
6612 One of the most uncelebrated feature of vim 6.0 is the ability to span a | |
6613 search across multiple lines. | |
6614 | |
6615 \_^ maps a begining of line anywhere in search pattern. \_$ ---"----- end | |
6616 ----------------------"-------------------------. \_s ---"------ space | |
6617 ------------"------------------------- . | |
6618 | |
6619 e.g /{\_s will map all white spaces and new-line chars after a "{" | |
6620 | |
6621 The \_ can be appended to other objects as well. such as \_U, \_L, \_. (this | |
6622 one's risky) . | |
6623 | |
6624 See :help pattern for more details. Njoy | |
6625 | |
6626 </pre></tip> </html> <Tip category="KVim"> | |
6627 <html><center>Develop vim modules on Win</center> <pre> <A | |
6628 HREF="http://vim.sf.net/tip_view.php?tip_id=243">http://vim.sf.net/tip_view.php?tip_id=243</A><BR> | |
6629 | |
6630 We're trying to develop txt2pdf.vim <A | |
6631 HREF="http://vim.sourceforge.net/scripts/script.php?script_id=283 on | |
6632 Win.">http://vim.sourceforge.net/scripts/script.php?script_id=283 | |
6633 on Win.</A><BR> It's a very simple module to save the | |
6634 current file and convert it to PDF using our txt2pdf tool <A | |
6635 HREF="http://www.sanface.com/txt2pdf.html">http://www.sanface.com/txt2pdf.html</A><BR> | |
6636 On our Windows 2000 we've developed it. It works good. Today we've tested | |
6637 the module on Linux. Surprise: it doesn't work. Default Win Vim configure | |
6638 save on Win text in Win way: EOL \r\n. A Vim module made in this way can't | |
6639 work on Linux (probably on every Unix OS). If you want to make a Vim module | |
6640 on Win and you want it can work also on Unix (we hope the same rula can work | |
6641 also on different OS) you've to save the Vim module with Unix EOL (\n). | |
6642 | |
6643 Please send us (sanface@sanface.com) your notes about other OS (e.g. OpenVMS). | |
6644 | |
6645 </pre></tip> </html> <Tip category="KVim"> <html><center>Ask | |
6646 vim where an option was set.</center> <pre> <A | |
6647 HREF="http://vim.sf.net/tip_view.php?tip_id=244">http://vim.sf.net/tip_view.php?tip_id=244</A><BR> | |
6648 | |
6649 When things go wrong, it is sometimes hard to figure out why. | |
6650 For example, | |
6651 an option might be set in the system vimrc file, in a personal vimrc file, | |
6652 in a plugin (global or local), or interactively. Vim will tell you where | |
6653 the current value was set if you ask: | |
6654 | |
6655 :verbose set history? | |
6656 | |
6657 will tell you the current value of the 'history' option, and where it was set. | |
6658 | |
6659 </pre></tip> </html> <Tip category="KVim"> <html><center>Working | |
6660 with Unicode (platform-independent)</center> <pre> <A | |
6661 HREF="http://vim.sf.net/tip_view.php?tip_id=245">http://vim.sf.net/tip_view.php?tip_id=245</A><BR> | |
6662 | |
6663 Here are the main options you will want to set if you want to work with | |
6664 Unicode files in (g)vim (see at bottom what help tags to look for) | |
6665 | |
6666 if has("multi_byte") | |
6667 set encoding=utf-8 " how vim shall represent | |
6668 characters internally setglobal fileencoding=utf-8 " empty is | |
6669 also OK (defaults to same as 'encoding'). Or you may want to set one | |
6670 of the ucs encodings (which | |
6671 " may use less disk | |
6672 space if you use | |
6673 only "alphabetic" | |
6674 scripts such as | |
6675 Latin, Greek, | |
6676 Cyrillic, Hebrew | |
6677 or Arabic, and " | |
6678 not "ideographic" | |
6679 scripts like | |
6680 Chinese, Japanese | |
6681 or Korean. With | |
6682 the ucs encodings | |
6683 it is usually better | |
6684 set bomb " to also set 'bomb' | |
6685 on ('byte-order-mark" option, irrelevant for utf-8 but not for | |
6686 ucs) set termencoding=iso-8859-15 " or whatever is appropriate | |
6687 to your locale (iso-8859-15 is Latin1 + Euro currency sign) set | |
6688 fileencodings=ucs-bom,iso-8859-15,iso-8859-3,utf-8 | |
6689 " or whatever is appropriate to the kinds of files you want to | |
6690 edit " 'fileencodings' defines the heuristic to set 'fillencoding' | |
6691 (local to buffer) when reading an existing file. The first one that | |
6692 matches will be used. " ucs-bom is "ucs with byte-order-mark"; | |
6693 it must not come after ucs-8 if you want it to be used | |
6694 else | |
6695 echoerr "Sorry, this version of (g)vim was not compiled with +multi_byte" | |
6696 endif | |
6697 | |
6698 In "replace" mode, one utf character (one or more data bytes) replaces one | |
6699 utf character (which need not use the same number of bytes) In "normal" mode, | |
6700 ga shows the character under the cursor as text, decimal, octal and hex; g8 | |
6701 shows which byte(s) is/are used to represent it In "insert" or "replace" mode, | |
6702 - any character defined on your keyboard can be entered the usual way (even | |
6703 with dead keys if you have them, e.g. âêîôû äëïöü) - any character which | |
6704 has a "digraph" (there are a huge lot of them, see :dig after setting | |
6705 enc=utf-8) can be entered with a Ctrl-K prefix - any utf character at | |
6706 all can be entered with a Ctrl-V prefix, either <Ctrl-V> u aaaa | |
6707 or <Ctrl-V> U bbbbbbbb, with 0 <= aaaa <= FFFF, or 0 <= | |
6708 bbbbbbbb <= 7FFFFFFF | |
6709 | |
6710 Unicode can be used to create html "body text", at least for Netscape 6 and | |
6711 probably for IE; but on my machine it doesn't display properly as "title text" | |
6712 (i.e., between <title></title> tags in the <head> part). | |
6713 | |
6714 Gvim will display it properly if you have the fonts for it, provided that | |
6715 you set 'guifont' to some fixed-width font which has the glyphs you want | |
6716 to use (Courier New is OK for French, German, Greek, Russian and more, | |
6717 but I'm not sure about Hebrew or Arabic; its glyphs are of a more "fixed" | |
6718 width than those of, e.g. Lucida Console: the latter can be annoying if you | |
6719 need bold Cyrillic writing). | |
6720 | |
6721 see: | |
6722 | |
6723 :h utf8 :h 'enc' :h 'fenc' :h 'fencs' :h 'tenc' :h 'bomb' :h 'guifont' | |
6724 :h ga :h g8 :h i_Ctrl-V_digit | |
6725 | |
6726 Happy Vimming ! Tony. | |
6727 | |
6728 </pre></tip> </html> <Tip category="KVim"> <html><center>Working | |
6729 with Unicode (the same, rewritten for legibility)</center> <pre> <A | |
6730 HREF="http://vim.sf.net/tip_view.php?tip_id=246">http://vim.sf.net/tip_view.php?tip_id=246</A><BR> | |
6731 | |
6732 1. Where to look for help ------------------------- :h utf8 :h encoding-values | |
6733 :h 'enc' :h 'fenc' :h 'fencs' :h 'tenc' :h 'bomb' :h 'guifont' :h ga :h g8 | |
6734 :h :dig :h i_Ctrl-V_digit :h has() | |
6735 | |
6736 2. What to do (These are *examples*. Modify them to suit your work | |
6737 environment.) ------------- if has("multi_byte") | |
6738 set encoding=utf-8 setglobal fileencoding=utf-8 | |
6739 set bomb set termencoding=iso-8859-15 set | |
6740 fileencodings=ucs-bom,iso-8859-15,iso-8859-3,utf-8 | |
6741 else | |
6742 echoerr "Sorry, this version of (g)vim was not compiled with +multi_byte" | |
6743 endif | |
6744 | |
6745 3. What the above does ---------------------- * has("multi_byte") checks if | |
6746 you have the right options compiled-in. If you haven't got what it takes, | |
6747 it's no use trying to use Unicode. | |
6748 | |
6749 * 'encoding' sets how vim shall represent characters internally. Utf-8 is | |
6750 necessary for most flavors of Unicode. | |
6751 | |
6752 * 'fileencoding' sets the encoding for a particular file (local to buffer); | |
6753 :setglobal sets the default value. An empty value can also be used: it defaults | |
6754 to same as 'encoding'. Or you may want to set one of the ucs encodings, It | |
6755 might make the same disk file bigger or smaller depending on your particular | |
6756 mix of characters. Also, IIUC, utf-8 is always big-endian (high bit first) | |
6757 while ucs can be big-endian or little-endian, so if you use it, you will | |
6758 probably need to set 'bomb" (see below). | |
6759 | |
6760 * 'bomb' (boolean): if set, vim will put a "byte order mark" at the start | |
6761 of ucs files. This option is irrelevant for most non-ucs files (utf-8, | |
6762 iso-8859, etc.) | |
6763 | |
6764 * 'termencoding' defines how your keyboard encodes what you type. The value | |
6765 you put there will depend on your locale: iso-8859-15 is Latin1 + Euro currency | |
6766 sign, but you may want something else for, say, an Eastern European keyboard. | |
6767 | |
6768 * 'fileencodings' defines the heuristic to set 'fileencoding' (local to buffer) | |
6769 when reading an existing file. The first one that matches will be used (and, | |
6770 IIUC, if there is no match, Vim falls back on Latin1). Ucs-bom is "ucs with | |
6771 byte-order-mark"; it must not come after utf-8 if you want it to be used. | |
6772 | |
6773 4. Additional remarks --------------------- * In "replace" mode, one utf | |
6774 character (one or more data bytes) replaces one utf character (which need | |
6775 not use the same number of bytes) | |
6776 | |
6777 * In "normal" mode, ga shows the character under the cursor as text, decimal, | |
6778 octal and hex; g8 shows which byte(s) is/are used to represent it. | |
6779 | |
6780 * In "insert" or "replace" mode, | |
6781 - any character defined on your keyboard can be entered the usual way | |
6782 (even with dead keys if you have them, e.g. French circumflex, German | |
6783 umlaut, etc.); - any character which has a "digraph" (there are a huge lot | |
6784 of them, see :dig after setting enc=utf-8) can be entered with a Ctrl-K | |
6785 prefix; - any utf character at all can be entered with a Ctrl-V prefix, | |
6786 either <Ctrl-V> u aaaa or <Ctrl-V> U bbbbbbbb, with 0 <= | |
6787 aaaa <= FFFF, or 0 <= bbbbbbbb <= 7FFFFFFF. | |
6788 | |
6789 * Unicode can be used to create html "body text", at least for Netscape 6 and | |
6790 probably for IE; but on my machine it doesn't display properly as "title text" | |
6791 (i.e., between <title></title> tags in the <head> part). | |
6792 | |
6793 * Gvim will display it properly if you have the fonts for it, provided | |
6794 that you set 'guifont' to some fixed-width font which has the glyphs you | |
6795 want to use (Courier New is OK for French, German, Greek, Russian and more, | |
6796 but I'm not sure about Hebrew or Arabic; its glyphs are of a more "fixed" | |
6797 width than those of, e.g. Lucida Console: the latter can be awkward if you | |
6798 need bold Cyrillic writing). | |
6799 | |
6800 Happy Vimming ! Tony. | |
6801 | |
6802 </pre></tip> </html> <Tip category="KVim"> | |
6803 <html><center>Preexisting code indentation</center> <pre> <A | |
6804 HREF="http://vim.sf.net/tip_view.php?tip_id=247">http://vim.sf.net/tip_view.php?tip_id=247</A><BR> | |
6805 | |
6806 Using tabs as elementary unit in your code indentation has two advantages: | |
6807 first, you may modify 'tabstop' and immediately all the indentations depths | |
6808 are modified according to it; second, your file will be smaller. | |
6809 | |
6810 But how can we change some already-written code in order to convert spaces | |
6811 to tabs. Very simple! Suppose your old code has an indentation unit of | |
6812 2 spaces :ret! 2 :x will replace every 2-spaces to one tab, independently | |
6813 from your current tabstop value, and will save the modified file. Then, | |
6814 if you open again the file with tabstop=2, the file will look as before but | |
6815 it will be smaller. If you open the file with tabstop=4, the code vill have | |
6816 a more indented look, and so on... | |
6817 | |
6818 Cheers! | |
6819 | |
6820 </pre></tip> </html> <Tip category="KVim"> <html><center>Auto-save | |
6821 the current buffer periodically.</center> <pre> <A | |
6822 HREF="http://vim.sf.net/tip_view.php?tip_id=248">http://vim.sf.net/tip_view.php?tip_id=248</A><BR> | |
6823 | |
6824 I have no idea if this was implemented in vim 5.3 or not, but you can | |
6825 definitely do the following kludge in 6.x by using CursorHold and | |
6826 localtime: | |
6827 | |
6828 - When you start reading a file, set a buffer variable to the current | |
6829 time: | |
6830 | |
6831 au BufRead,BufNewFile * let b:start_time=localtime() | |
6832 | |
6833 - Set a CursorHold event to check to see if enough time has elapsed | |
6834 since the last save and save if not: | |
6835 | |
6836 au CursorHold * call UpdateFile() | |
6837 | |
6838 - Define a function to save the file if needed: | |
6839 | |
6840 " only write if needed and update the start time after the save | |
6841 function! UpdateFile() | |
6842 if ((localtime() - b:start_time) >= 60) | |
6843 update let b:start_time=localtime() | |
6844 else | |
6845 echo "Only " . (localtime() - b:start_time) . " seconds have elapsed | |
6846 so far." | |
6847 endif | |
6848 endfunction | |
6849 | |
6850 - Reset the start time explicitly after each save. | |
6851 | |
6852 au BufWritePre * let b:start_time=localtime() | |
6853 | |
6854 Obviously, you should get rid of the else portion once you're certain | |
6855 that this does indeed do what you wanted. | |
6856 | |
6857 The thing to note is that the CursorHold will only fire after | |
6858 'updatetime' milliseconds of inactivity have elapsed. So, if you type | |
6859 rapidly for one and a half minutes non-stop, it won't actually save | |
6860 anything until you STOP activity long enough. This may be what you want | |
6861 anyway because it won't interrupt your activity with a forced save. | |
6862 | |
6863 The actual save-delay can be changed from '60' to another number (in seconds) | |
6864 or a variable or anything like that. This entire functionality can be easily | |
6865 wrapped inside a nice script which enables/disables this on a per-buffer basis | |
6866 (maybe with maps etc.). If desired, I can provide that also. | |
6867 | |
6868 </pre></tip> </html> <Tip category="KVim"> <html><center>Quickly | |
6869 insert #if 0 - #endif around block of code</center> <pre> <A | |
6870 HREF="http://vim.sf.net/tip_view.php?tip_id=249">http://vim.sf.net/tip_view.php?tip_id=249</A><BR> | |
6871 | |
6872 One of my favorite macros that I use in vim (and vi) inserts a #if 0 #endif | |
6873 sandwich around a block of code. I always map this to the 2 key sequence ;' | |
6874 which is the semi-colon followed by the single quote. Look at your keyboard, | |
6875 you will notice these keys are adjacent to one another. I like this mapping | |
6876 because it's very fast, my fingers easily roll from one key to the next, | |
6877 obviously YMMV. | |
6878 | |
6879 To use this mapping, go to the line of code that you want the '#if 0' to be | |
6880 on, type ma to mark this line with the marker a, then move to the line that | |
6881 should be last line just above the '#endif' and press ;' | |
6882 | |
6883 " insert #if 0 - #endif around block of code map ;' mz'aO<Esc>i#if | |
6884 0<Esc>'zo<Esc>i#endif<Esc> | |
6885 | |
6886 -- David Thompson dat1965@yahoo.com | |
6887 | |
6888 </pre></tip> </html> <Tip category="KVim"> | |
6889 <html><center>One big window</center> <pre> <A | |
6890 HREF="http://vim.sf.net/tip_view.php?tip_id=250">http://vim.sf.net/tip_view.php?tip_id=250</A><BR> | |
6891 | |
6892 If you like to see your files in fullscreen, and you have to edit more files, | |
6893 you can do the following. * Use only one window * Open further files with :e * | |
6894 type :nm <A-Up> :bp!<CR> * type :nm <A-Down> :bn!<CR> | |
6895 * type :nm <C-F4> :bd!<CR> You can of course change the keys. | |
6896 Now to switch between windows, you can press Alt-Up, and Alt-Down (Just in | |
6897 the GUI, if you use console, don't use Alt key) Another idea is to map them | |
6898 to Ctrl-Tab, and Ctrl-Shift-Tab To close the current file you can press Ctrl-F4 | |
6899 | |
6900 </pre></tip> </html> <Tip category="KVim"> <html><center>align | |
6901 #endif with corresponding #if/#ifdef</center> <pre> <A | |
6902 HREF="http://vim.sf.net/tip_view.php?tip_id=251">http://vim.sf.net/tip_view.php?tip_id=251</A><BR> | |
6903 | |
6904 If you try to impose any sort of alignment on your preprocessor directives, | |
6905 rather than just starting them on column 0, this mapping will align the #endif | |
6906 'correctly' when you type '#en', start a new line, and bring you back to | |
6907 the correct alignment to edit code. | |
6908 | |
6909 inoremap <buffer> #en | |
6910 X<BS><Esc>?#if<CR>"zy0^Og0"zpDa#endif<CR>X<BS><Esc>?#end?-1<CR>^"zy0^O0"zpDa | |
6911 | |
6912 I am reasonably sure this is insensitive to vim options... | |
6913 | |
6914 </pre></tip> </html> <Tip category="KVim"> <html><center>python | |
6915 script to align statements</center> <pre> <A | |
6916 HREF="http://vim.sf.net/tip_view.php?tip_id=252">http://vim.sf.net/tip_view.php?tip_id=252</A><BR> | |
6917 | |
6918 i know there's some awk scripts out there that do the same thing, and if i | |
6919 were a real trooper i would have written this in vims internal language but... | |
6920 | |
6921 i wrote a python script to align statements. | |
6922 | |
6923 i put this in my .vimrc: map L :!lineUp.py<cr> " of course lineUp.py | |
6924 is somewhere in my path | |
6925 | |
6926 and i have this python file somewhere in my path: <A | |
6927 HREF="http://ophinity.com/res/dotFiles/lineUp.py">http://ophinity.com/res/dotFiles/lineUp.py</A><BR> | |
6928 | |
6929 so now i can just pipe the offending lines thru my code: :5, 10 !lineUp.py | |
6930 or using the mapping above, visually select the lines and press 'L' | |
6931 | |
6932 </pre></tip> </html> <Tip category="KVim"> <html><center>The | |
6933 power of | (v75|r- actually...)</center> <pre> <A | |
6934 HREF="http://vim.sf.net/tip_view.php?tip_id=253">http://vim.sf.net/tip_view.php?tip_id=253</A><BR> | |
6935 | |
6936 '|' as you may well be aware is the goto column motion, and that "75|" | |
6937 will place your cursor on column 75 of the current line. | |
6938 | |
6939 That in itself is pretty handy at times, but some true power arises when | |
6940 used in conjuction with visual mode and replace. Or you could just say a | |
6941 sneaky trick :) | |
6942 | |
6943 v75|r- will repace from the cursor to the end of line with '-' *breakdown* | |
6944 v to turn on visual mode 75 for the count | *bar* to goto column r to enter | |
6945 repace - to specify the char to replace. | |
6946 | |
6947 A handy and quick way to make a noticable section of your code (or whatever). | |
6948 | |
6949 A handy way to use this (formated to just drop into DrChip's CStubs): "// | |
6950 -[Feral]--------------------------------------------------------------- | |
6951 "// <cursor> | |
6952 elseif wrd == "//" | |
6953 exe "norm! a | |
6954 -[AuthorId]\<esc>$lv75|r-$a\<cr>\<esc>$a " | |
6955 | |
6956 "// -[Feral:146/02@08:31]-------------------------------------------------- | |
6957 "// <cursor> | |
6958 elseif wrd == "///" | |
6959 exe "norm! s | |
6960 -[AuthorId:\<C-R>=strftime('%j/%y@%H:%M')\<CR>]\<esc>$lv75|r-$a\<cr>\<esc>$a | |
6961 " | |
6962 | |
6963 "/* -[Feral:146/02@08:31]-------------------------------------------------- | |
6964 " * <cursor> " * | |
6965 -------------------------------------------------------------------- */ | |
6966 elseif wrd == "/*" | |
6967 exe "norm! a | |
6968 -[AuthorId:\<C-R>=strftime('%j/%y@%H:%M')\<CR>]\<esc>$lv75|r-$a\<cr>\<cr>\<esc>2lv72|r-$a | |
6969 */\<esc>k$a " | |
6970 | |
6971 Have to love VIM! | |
6972 | |
6973 </pre></tip> </html> <Tip category="KVim"> <html><center>Using | |
6974 \%[] to easily match parts of a word.</center> <pre> <A | |
6975 HREF="http://vim.sf.net/tip_view.php?tip_id=254">http://vim.sf.net/tip_view.php?tip_id=254</A><BR> | |
6976 | |
6977 This code fragment is suitable to drop into DrChip's CStubs. | |
6978 After much searching I was unable to find a tip nor script | |
6979 number to referance, I believe where I found Dr. Chip's CStubs originally : <A | |
6980 HREF="http://users.erols.com/astronaut/vim/vimscript/drcstubs.vim">http://users.erols.com/astronaut/vim/vimscript/drcstubs.vim</A><BR> | |
6981 Thank you Dr. Chip! (= | |
6982 | |
6983 If you have ever wanted to match parts of a word you may have considered | |
6984 something like: if wrd == "re" || wrd == "ret" || wrd == "retu" || wrd == | |
6985 "retur" | |
6986 "do something | |
6987 | |
6988 Althought the above works well enough it is a pain to maintain and add new | |
6989 words (not to mention its just a touch messy ;) ) | |
6990 | |
6991 A more elegant (and easier to use I believe) method would be to use \%[] | |
6992 as part of a pattern. | |
6993 | |
6994 For instance, "\\<re\\%[tur]\\>" will match "re", "ret", "retu" or | |
6995 "retur" | |
6996 | |
6997 *breakdown* \\< = start of word re = first letters of word we want to | |
6998 require to match \\%[tur] = optionally match chars bewteen the braces, | |
6999 i.e. 't', 'tu' or 'tur' \\> = end of word | |
7000 | |
7001 So, we can use this as a pattern for match like so (In DrChip's CStubs) | |
7002 | |
7003 elseif match(wrd, "\\<re\\%[tur]\\>") > -1 | |
7004 exe "norm! bdWireturn\<Esc>" | |
7005 | |
7006 Which, I think, is a little better than the longer alternative: " vs elseif | |
7007 wrd == "re" || wrd == "ret" || wrd == "retu" || wrd == "retur" | |
7008 exe "norm! bdWireturn\<Esc>" | |
7009 | |
7010 Just another one of those VIM things that made me smile :) | |
7011 | |
7012 </pre></tip> </html> <Tip category="KVim"> | |
7013 <html><center>arbitrary tags for file names</center> <pre> <A | |
7014 HREF="http://vim.sf.net/tip_view.php?tip_id=255">http://vim.sf.net/tip_view.php?tip_id=255</A><BR> | |
7015 | |
7016 This definitely work on linux and there is probably some windows equivalent. | |
7017 I've started working with tomcat and many many .jsp files. I find this | |
7018 trick to be very helpful. | |
7019 | |
7020 find -name '*.jsp' -printf '%f\t%P\t1\n' |sort > jsp.tags | |
7021 | |
7022 This will create a file called jsp.tags with tag entries for each .jsp file. | |
7023 Within Vim I use | |
7024 | |
7025 :set tags+=jsp.tags | |
7026 | |
7027 Now I can to simple :tag file.jsp to quickly switch b/w the many, many | |
7028 .jsp files. | |
7029 | |
7030 One important note. The utility sort will use the value of LC_COLLATE to sort | |
7031 according to your locale. This will give Vim issues. So try "LC_COLLATE=C | |
7032 sort" instead of plain "sort" | |
7033 | |
7034 </pre></tip> </html> <Tip category="KVim"> <html><center>Opening | |
7035 current Vim file in your Windows browser</center> <pre> <A | |
7036 HREF="http://vim.sf.net/tip_view.php?tip_id=256">http://vim.sf.net/tip_view.php?tip_id=256</A><BR> | |
7037 | |
7038 Hi Vimmers | |
7039 | |
7040 open current file in browser | |
7041 | |
7042 map ,f :update<CR>:silent !start c:\progra~1\intern~1\iexplore.exe | |
7043 file://%:p<CR> | |
7044 | |
7045 open http link under cursor in your browser | |
7046 | |
7047 map ,i :update<CR>: !start c:\progra~1\intern~1\iexplore.exe | |
7048 <cWORD><CR> | |
7049 | |
7050 Note use of cWORD (not cword) meaning OUTER Word | |
7051 | |
7052 Works for me in XP & 98 (Original came from a posting by Ralf Arens) | |
7053 | |
7054 zzapper | |
7055 | |
7056 </pre></tip> </html> <Tip category="KVim"> | |
7057 <html><center>fast page up/down.</center> <pre> <A | |
7058 HREF="http://vim.sf.net/tip_view.php?tip_id=257">http://vim.sf.net/tip_view.php?tip_id=257</A><BR> | |
7059 | |
7060 i discovered a cool way to move between pages of the same document in vim | |
7061 6.1. press a number in -normal mode- and the page up/down. the document | |
7062 will move with that number of pages up/down.if the number is greater that | |
7063 the nr of pages, document will move to begin/end of file. i didn't test it | |
7064 on other version. | |
7065 | |
7066 </pre></tip> </html> <Tip category="KVim"> <html><center>how | |
7067 long is the current word?</center> <pre> <A | |
7068 HREF="http://vim.sf.net/tip_view.php?tip_id=258">http://vim.sf.net/tip_view.php?tip_id=258</A><BR> | |
7069 | |
7070 ever wondered how long the current word is? this can be quite useful when | |
7071 editing data files. simply add the following to your .vimrc | |
7072 | |
7073 nmap <C-_> :echo 'word' expand("<cword>") ' wordlen =' | |
7074 strlen(expand("<cword>"))<CR> | |
7075 | |
7076 and it will tell you the word under the cursor, and how long it is. | |
7077 | |
7078 and for things that arent words, this addition to your .vimrc works on | |
7079 sections of a line that have been hightligted in visual mode | |
7080 | |
7081 vmap <C-_> "-y:echo 'word' @- ' wordlen =' strlen(@-)<CR> | |
7082 | |
7083 again you see the "word", and its length this may also work on vim 5.x, | |
7084 but i havent checked to make sure. | |
7085 | |
7086 </pre></tip> </html> <Tip category="KVim"> <html><center>removing | |
7087 the toolbar (icons) from gvim</center> <pre> <A | |
7088 HREF="http://vim.sf.net/tip_view.php?tip_id=259">http://vim.sf.net/tip_view.php?tip_id=259</A><BR> | |
7089 | |
7090 Change good or bad usually encounters interia from people in excepting it. | |
7091 gvim 6.0 is the first version that introduced the icons shortcut in shape | |
7092 of a toolbar under the menu. when we upgraded to the new and improved vim | |
7093 6.1 from vim 5.7 some of people in our company encountered some problems | |
7094 with their syntax highlighting and some of them objected on the new toolbar | |
7095 which displayed icons for some common tasks for people more used to GUI. | |
7096 | |
7097 I finally figured out how to remove this new feature since I also didn't | |
7098 see much use for it | |
7099 | |
7100 Here is for all those who haven't figured it out yet | |
7101 | |
7102 In your .gvimrc include the following two lines | |
7103 | |
7104 unmenu ToolBar unmenu! ToolBar | |
7105 | |
7106 Doing this from an open gvim does not remove them but grays them out but | |
7107 doing from gvimrc does the job | |
7108 | |
7109 I was also trying to remove the menus at the top and almost succeeded with | |
7110 a similar technique but somehow the Buffer menu item stays there no matter | |
7111 what. IMHO it is a bug but it could very well be a feature ;) | |
7112 | |
7113 I tried this | |
7114 | |
7115 unmenu * unmenu! * | |
7116 | |
7117 even added this line after the above two but didn't help unmenu Buffers | |
7118 | |
7119 I hope this benefits you all as much as I have benefitted from all your tips | |
7120 | |
7121 </pre></tip> </html> <Tip category="KVim"> | |
7122 <html><center>gvim-->mouse-->popup menu</center> <pre> <A | |
7123 HREF="http://vim.sf.net/tip_view.php?tip_id=260">http://vim.sf.net/tip_view.php?tip_id=260</A><BR> | |
7124 | |
7125 This tip is for those who prefer to do some of the common operations like | |
7126 cut/copy/paste etc using mouse. All u have to do is | |
7127 | |
7128 :set mousemodel=popup | |
7129 | |
7130 by this u get a popup menu on right click of your mouse and u can do all | |
7131 the common operations like undo, cut, copy, paste, select etc using mouse. | |
7132 | |
7133 u can also customise your popup menu by editing $VIMRUNTIME/menu.vim | |
7134 | |
7135 </pre></tip> </html> <Tip category="KVim"> <html><center>Close | |
7136 windows from Gvim poup menu</center> <pre> <A | |
7137 HREF="http://vim.sf.net/tip_view.php?tip_id=261">http://vim.sf.net/tip_view.php?tip_id=261</A><BR> | |
7138 | |
7139 To close windows from the popup menu add these lines to your .gvimrc | |
7140 | |
7141 :amenu PopUp.Close.\ Window :confirm close<CR> :amenu PopUp.Close.\ | |
7142 Other :confirm only<CR> | |
7143 | |
7144 You obviously need ':set mousemodel=popup' in your .gvimrc as well :=) | |
7145 | |
7146 </pre></tip> </html> <Tip category="KVim"> <html><center>Bored | |
7147 of ur arrow shapped mouseptr?</center> <pre> <A | |
7148 HREF="http://vim.sf.net/tip_view.php?tip_id=262">http://vim.sf.net/tip_view.php?tip_id=262</A><BR> | |
7149 | |
7150 here is how u can change the shape of ur mouseptr in gvim. | |
7151 | |
7152 :set mouseshape=n:pencil | |
7153 | |
7154 this will change the shape of the mouseptr to pencil in normal mode. u can | |
7155 choose different shapes for different modes. see :h mouseshape | |
7156 | |
7157 Want more shapes? | |
7158 | |
7159 Then look for the file cursorfont.h in ur X11/ directory. This file contains | |
7160 lots of cursor shape #define definitions, like . #define XC_heart 62 . | |
7161 now :set mouseshape=n:62 will set the shape of the mouseptr to heart in | |
7162 normal mode. | |
7163 | |
7164 -ncr | |
7165 | |
7166 </pre></tip> </html> <Tip category="KVim"> | |
7167 <html><center>color active line</center> <pre> <A | |
7168 HREF="http://vim.sf.net/tip_view.php?tip_id=263">http://vim.sf.net/tip_view.php?tip_id=263</A><BR> | |
7169 | |
7170 This tip shows how to color the active line, the line in which the cursor | |
7171 is, for better reading. You should try possibility 2 before 1, IMHO it is | |
7172 mostly usable. | |
7173 | |
7174 possibility 1: | |
7175 :au! CursorHold * let @/ = '\%' . line('.') . 'l.*' :set ut=500 | |
7176 | |
7177 explanation: | |
7178 After 500 ms of waiting for you to hit a key, vim sets the search | |
7179 register to a pattern that matches the current line. | |
7180 | |
7181 problem: | |
7182 Register / holds the search pattern, so you cannot have color the active | |
7183 line and search. Therefore another solution: | |
7184 | |
7185 possibility 2: | |
7186 :highlight CurrentLine guibg=darkgrey guifg=white (or whatever | |
7187 colors you want) :au! Cursorhold * exe 'match CurrentLine /\%' | |
7188 . line('.') . 'l.*/' :set ut=100 | |
7189 | |
7190 explanation: | |
7191 This solution uses 'match' to highlight a string, it does not interface | |
7192 with the current search pattern. | |
7193 | |
7194 addition: | |
7195 Turning the highlighning off: | |
7196 :au! Cursorhold :match none | |
7197 The order of these commands are important. If :match none is executed | |
7198 first, the autocommand would almost immediately execute another match | |
7199 command. | |
7200 | |
7201 references to vim help: | |
7202 :help Cursorhold :help 'ut' :help /\%l :help "/ :help \% | |
7203 | |
7204 </pre></tip> </html> <Tip category="KVim"> <html><center>F5 | |
7205 Compile and Run, F8 Compile (ala Visual Studio)</center> <pre> <A | |
7206 HREF="http://vim.sf.net/tip_view.php?tip_id=264">http://vim.sf.net/tip_view.php?tip_id=264</A><BR> | |
7207 | |
7208 I love vim, it's my default editor on my Sun, Windows, Linux and *BSD boxen. | |
7209 That said, I hate having to flip windows to compile while doing the | |
7210 write->compile->debug loop. | |
7211 | |
7212 If you're used to Visual Studio and the ability it has to just hit F5 to | |
7213 compile and run the current file or F8 to compile or step through the code | |
7214 you'll appreciate this... | |
7215 | |
7216 This is my Windows version of this scriplet/tiplet. For other platforms, | |
7217 you'll want to change the IF ELSE loops. You should actually never see | |
7218 the "Unsuccessful" message from the compile/run loop unless the compiler | |
7219 completely bombs out. This is from my _vimrc... | |
7220 | |
7221 map <F5> :call CompileRunGcc()<CR> | |
7222 | |
7223 map <F8> : call CompileGcc()<CR> | |
7224 | |
7225 func! CompileRunGcc() | |
7226 exec "w" "Save the file exec "!gcc % -o %< && cr 10 && IF | |
7227 EXIST %<.exe (%<) ELSE banner -c = Compile Unsuccessful | |
7228 " exec "i" "jump back where we were | |
7229 | |
7230 | |
7231 endfunc | |
7232 | |
7233 func! CompileGcc() | |
7234 exec "w" exec "!gcc % -o %< && IF EXIST %<.exe (cr 5 && | |
7235 banner -c # Success) ELSE banner -c # Compile Unsuccessful | |
7236 " exec "i" | |
7237 | |
7238 endfunc | |
7239 | |
7240 </pre></tip> </html> <Tip category="KVim"> | |
7241 <html><center>Fast help in full window</center> <pre> <A | |
7242 HREF="http://vim.sf.net/tip_view.php?tip_id=265">http://vim.sf.net/tip_view.php?tip_id=265</A><BR> | |
7243 | |
7244 You can get fast access to help by writing small script | |
7245 | |
7246 #!/bin/bash vim -c "help $1" -c only | |
7247 | |
7248 now name it eg. vih and from cl | |
7249 | |
7250 $ vih makeprg | |
7251 | |
7252 </pre></tip> </html> <Tip category="KVim"> | |
7253 <html><center>use -S command line switch</center> <pre> <A | |
7254 HREF="http://vim.sf.net/tip_view.php?tip_id=266">http://vim.sf.net/tip_view.php?tip_id=266</A><BR> | |
7255 | |
7256 The -S switch could be used to simplify common idiom: start Vim and source | |
7257 a script file: gvim -c ":so foobar.vim" got translated into gvim -S foobar.vim | |
7258 | |
7259 Yes, this tip is trivial but I still see the -c ":so x" way too often. Time | |
7260 to update your mind! | |
7261 | |
7262 </pre></tip> </html> <Tip category="KVim"> | |
7263 <html><center>selectively displaying abbreviations</center> <pre> <A | |
7264 HREF="http://vim.sf.net/tip_view.php?tip_id=267">http://vim.sf.net/tip_view.php?tip_id=267</A><BR> | |
7265 | |
7266 Hi Vimmers, abbreviations have always been one of the most useful parts of | |
7267 vi(m), trouble is when you've got too many you forgot what you called them. | |
7268 | |
7269 You can of course list the whole lot with | |
7270 | |
7271 :ab<cr> | |
7272 | |
7273 But did you know that you can type the first few letters of your abbreviations | |
7274 and get a list of just thos abs eg | |
7275 | |
7276 :ab php<cr> gives me all my php abs & :ab perl<cr> gives me all | |
7277 my perls | |
7278 | |
7279 also try control-D instrad of <cr> | |
7280 | |
7281 zzapper | |
7282 | |
7283 </pre></tip> </html> <Tip category="KVim"> <html><center>Get cursor | |
7284 position as byte percentage instead of line percentage</center> <pre> <A | |
7285 HREF="http://vim.sf.net/tip_view.php?tip_id=268">http://vim.sf.net/tip_view.php?tip_id=268</A><BR> | |
7286 | |
7287 On line 300 of a thousand line file, Vim will show you that you're 30% | |
7288 through the file. But what if most of the lines have one character in them, | |
7289 and some of them have twenty thousand? Sometimes it comes in handy to know | |
7290 your percentage through the file in terms of current-byte / total-bytes. | |
7291 I looked through the Vim docs and couldn't find a way to do this, so I wrote | |
7292 a Vim function to show it. | |
7293 | |
7294 Put this in your .vimrc: | |
7295 | |
7296 function! Percent() | |
7297 let byte = line2byte( line( "." ) ) + col( "." ) - 1 let size = (line2byte( | |
7298 line( "$" ) + 1 ) - 1) " return byte . " " . size . " " . (byte * 100) | |
7299 / size return (byte * 100) / size | |
7300 endfunction | |
7301 | |
7302 (Uncomment the first return to see intermediate values.) | |
7303 | |
7304 And put this somewhere in your "set statusline=...": | |
7305 | |
7306 %{Percent()}%% | |
7307 | |
7308 See "help statusline", "help eval". | |
7309 | |
7310 </pre></tip> </html> <Tip category="KVim"> <html><center>Syntax highlighting | |
7311 is "out of sync", seems to correct itself with refresh ??</center> <pre> <A | |
7312 HREF="http://vim.sf.net/tip_view.php?tip_id=269">http://vim.sf.net/tip_view.php?tip_id=269</A><BR> | |
7313 | |
7314 This one has come across the 'vim' users mailing list many times, and probably | |
7315 comp.editors as well... | |
7316 | |
7317 Summary: see :help :syn-sync and search for 'sync' in your favorite syntax | |
7318 file in $VIMRUNTIME/syntax | |
7319 | |
7320 Long Version: The syntax highlight code utilizes a certain synchronization | |
7321 method to efficiently figure out syntax highlighting, specifically if you | |
7322 aren't at the very beginning or end of a file. The specific setting is 'syntax | |
7323 sync'. For various file types the method is set by default in this is setup | |
7324 in the syntax file and one can vary the degree of trouble which VIM goes to to | |
7325 try and figure this out. As an example for C, from $VIMRUNTIME/syntax/c.vim: | |
7326 | |
7327 if exists("c_minlines") | |
7328 let b:c_minlines = c_minlines | |
7329 else | |
7330 if !exists("c_no_if0") | |
7331 let b:c_minlines = 50 " #if 0 constructs can be long | |
7332 else | |
7333 let b:c_minlines = 15 " mostly for () constructs | |
7334 endif | |
7335 endif exec "syn sync ccomment cComment minlines=" . b:c_minlines | |
7336 | |
7337 Where c_minlines is the minimum number of lines that VIM goes backward to try | |
7338 to find the start of a comment for syntax highlighting. If that line which | |
7339 starts a comment is outside of that range, highlighting will appear wrong. | |
7340 | |
7341 You can easily set up something like this in your .vimrc: let c_minlines=500 | |
7342 or even bigger, but realize that it is a performance trade-off and that | |
7343 syntax highlighting will slow things down. | |
7344 | |
7345 </pre></tip> </html> <Tip category="KVim"> | |
7346 <html><center>Insert a single character</center> <pre> <A | |
7347 HREF="http://vim.sf.net/tip_view.php?tip_id=270">http://vim.sf.net/tip_view.php?tip_id=270</A><BR> | |
7348 | |
7349 Using Insert mode to insert a single character feels clumsy (you need 3 | |
7350 keypresses for one character), so here's a slightly easier way: | |
7351 | |
7352 :nmap <space> i_<esc>r | |
7353 | |
7354 Now, when in Normal mode, just press space followed by what it is you want | |
7355 to insert. | |
7356 | |
7357 BUG: Repeating the insertion with . doesn't work. | |
7358 | |
7359 </pre></tip> </html> <Tip category="KVim"> <html><center>easy | |
7360 (un)commenting out of source code</center> <pre> <A | |
7361 HREF="http://vim.sf.net/tip_view.php?tip_id=271">http://vim.sf.net/tip_view.php?tip_id=271</A><BR> | |
7362 | |
7363 Something that I do quite alot is comment out blocks of text, only to uncomment | |
7364 that same block later. The following mappings have proven useful to me. They | |
7365 can be applied using visually selected blocks, or with motion keys. | |
7366 | |
7367 " lhs comments map ,# :s/^/#/<CR> map ,/ :s/^/\/\//<CR> map ,> | |
7368 :s/^/> /<CR> map ," :s/^/\"/<CR> map ,% :s/^/%/<CR> | |
7369 map ,! :s/^/!/<CR> map ,; :s/^/;/<CR> map ,- :s/^/--/<CR> | |
7370 map ,c :s/^\/\/\\|^--\\|^> \\|^[#"%!;]//<CR> | |
7371 | |
7372 " wrapping comments map ,* :s/^\(.*\)$/\/\* \1 \*\//<CR> map ,( | |
7373 :s/^\(.*\)$/\(\* \1 \*\)/<CR> map ,< :s/^\(.*\)$/<!-- | |
7374 \1 -->/<CR> map ,d :s/^\([/(]\*\\|<!--\) \(.*\) | |
7375 \(\*[/)]\\|-->\)$/\2/<CR> | |
7376 | |
7377 The commands to comment a selection of text are as follows, begining with | |
7378 begining-of-line comments: | |
7379 | |
7380 ,# shell, perl, etc ,/ c++ ,> email quote ," vim ,% | |
7381 latex, prolog ,! assembly?... add single ! ,; scheme ,- | |
7382 don't remember this one... add -- ,c clears any of the previous | |
7383 comments | |
7384 | |
7385 Here are the wrapping comments, each line wrapped individually: | |
7386 | |
7387 ,* c ,( Standard ML ,< html ,d clears any of | |
7388 the wrapping comments | |
7389 | |
7390 </pre></tip> </html> <Tip category="KVim"> <html><center>automaticaly | |
7391 formating pasted text (p=`])</center> <pre> <A | |
7392 HREF="http://vim.sf.net/tip_view.php?tip_id=272">http://vim.sf.net/tip_view.php?tip_id=272</A><BR> | |
7393 | |
7394 In times past I used a nice editor that had the neat feature of automatically | |
7395 setting pasted text to the proper indent level. Recently I've begun to miss | |
7396 this so I went looking in the help and camp up with.... | |
7397 | |
7398 =`] | |
7399 | |
7400 which will format to the end of the pasted text... Perfect to call right | |
7401 after you past something as the cursor ends up at the top of the pasted text, | |
7402 thus the mapping: | |
7403 | |
7404 :map <c-p> =`] | |
7405 | |
7406 " by the by the above may should be nmap and I am pretty sure c-p is unused, | |
7407 your mileage will vary no doubt. | |
7408 | |
7409 However I wanted the formatting to automatically be done so it was two simple | |
7410 (once I figured out how!) nnoremap: | |
7411 | |
7412 " [Feral:185/02@14:27] map c-p to what p was (past with no formatting), map | |
7413 p to p and = to end of pasted text. :nnoremap p p=`] :nnoremap <c-p> p | |
7414 | |
7415 This simply (as the comment hints at) maps normal mode p to what p did (paste) | |
7416 then = to `] (last character in the previously changed text). While ctrl+p | |
7417 just does what p did. (just in case you find you don't want a bit of text | |
7418 auto formatted.). | |
7419 | |
7420 reference: :h :nnoremap :h p :h = :h `] | |
7421 | |
7422 Whatever the name of this idea is, tis something I find handy :) | |
7423 | |
7424 Happy VIMing | |
7425 | |
7426 </pre></tip> </html> <Tip category="KVim"> <html><center>Fast | |
7427 fixing of email quotations (too long lines)</center> <pre> <A | |
7428 HREF="http://vim.sf.net/tip_view.php?tip_id=273">http://vim.sf.net/tip_view.php?tip_id=273</A><BR> | |
7429 | |
7430 When using VIM as your editor of choice, even for email processing - as I | |
7431 do - it is often unpleasing how some MUA's quote the email body produced by | |
7432 mailers such as Outlook. The lines often span across multiple visual lines | |
7433 and its difficult to reply on certain parts of it. | |
7434 | |
7435 With VIM, you can quickly fix those quotations to maintain a proper 75 char | |
7436 break. For example, when using Mutt, put this line in your .muttrc, or use | |
7437 a custom .vimrc_mail for it: | |
7438 | |
7439 set editor="vim -c 'set fo=tcrq' -c 'set tw=76'" | |
7440 | |
7441 For other MUA's this has to be fitted. However, now, when your quoted email | |
7442 is displayed, you can use this VIM sequence to fix it: | |
7443 | |
7444 1. move cursor to first line of broken paragraph 2. press 'V' and move to the | |
7445 last line of the paragraph you want to fix 3. press 'g' and then 'q'. The | |
7446 marked text will wrap around to your specified textwidth (76 in our case) | |
7447 and the quotations will be preserved across the lines | |
7448 | |
7449 </pre></tip> </html> <Tip category="KVim"> | |
7450 <html><center>Some useful mappings for TeX</center> <pre> <A | |
7451 HREF="http://vim.sf.net/tip_view.php?tip_id=274">http://vim.sf.net/tip_view.php?tip_id=274</A><BR> | |
7452 | |
7453 You know, TeX requires a lot of additional formatting code. I'm tired of | |
7454 opening and closing braces, brakets, | |
7455 \beginning and \ending etc. I particularly hate typing \begin and \end. | |
7456 To help myself and to save a few(not a few) keystrokes I naturaly came up to | |
7457 some solutions, which I wish to share with other TeXnicians and TeXperts whhich | |
7458 use Vim. "===============================cut here========================= | |
7459 "=============== you can put it in ~/.vim/after/ftplugin/tex.vim | |
7460 =============== " " Note: i_<C-L> " This constructs a skeleton of a TeX | |
7461 environment. " You write a line like this: " floatingfigure:ht<C-L> | |
7462 " and after you press <C-L>, you get: " " \begin[ht]{floatingfigure} | |
7463 " " \end{floatingfigure} " -- INSERT -- " " where floatingfigure is the | |
7464 desired environment " ht are options " : is delimiter; in fact, you can | |
7465 use whatever delimiter you want " as long it is not in &iskeyword option. | |
7466 inoremap <buffer> <C-L> | |
7467 \:s/[^][:alnum:]<bar>]\+/,/eg | |
7468 \I\begin{ea}[A]%d%%P \:s/\[,/[/e \:s/,]/]/e | |
7469 \:s/\[]//e \0f{y%o\endpO | |
7470 inoremap <buffer> { {}i inoremap <buffer> [ []i inoremap | |
7471 <buffer> ^ ^{}i inoremap <buffer> _ _{}i inoremap <buffer> | |
7472 \( \(\)hi inoremap <buffer> \[ \[\]hi | |
7473 | |
7474 " Note: v_<C-L> " For this to work, you have to write on a blank | |
7475 line the name of " the desired environment and options (see i_<C-L>) | |
7476 and visual select " (from top to bottom) this and following lines. " After | |
7477 pressing <C-L> the selected lines will be surrounded " with begin/end | |
7478 skeleton of the environment. vnoremap <buffer> <C-L> o | |
7479 \:s/[^][:alnum:]<bar>]\+/,/eg | |
7480 \I\begin{ea}[A]%d%%P \:s/\[,/[/e \:s/,]/]/e | |
7481 \:s/\[]//e \0f{y%gvoo\endp | |
7482 " vnoremap <buffer> { di{}P " vnoremap <buffer> | |
7483 [ di[]P vnoremap <buffer> di^{}P vnoremap <buffer> di_{}P | |
7484 vnoremap <buffer> \( di\(\)hP vnoremap <buffer> \[ di\[\]hP | |
7485 | |
7486 " This makes "two spaces after a comma" before every :write au BufWritePre | |
7487 *.tex %s/,\(\S\)/, \1/ge | |
7488 | |
7489 "==================== You can put this in your ~/.vimrc | |
7490 ======================== " If cursor is inside braces and not before comma, | |
7491 blank or opening brace, " exit the brace block and stay in insert mode. " | |
7492 If cursor is outside braces, it inserts a space or perform an abbreviation | |
7493 " as normal. function! CleverSpace() | |
7494 let CharOnCursor = strpart( getline('.'), col('.')-2, 1) let | |
7495 CharAfterCursor = strpart( getline('.'), col('.'), 1) if CharOnCursor | |
7496 !~ ',\|\s\|(' && CharAfterCursor =~ ')\|]\|}' | |
7497 normal x | |
7498 endif | |
7499 endfunction inoremap <Space> <Space>:call CleverSpace()<LF>a | |
7500 | |
7501 " I use the last function not only for LaTeX but also in C sources. | |
7502 | |
7503 </pre></tip> </html> <Tip category="KVim"> | |
7504 <html><center>Some useful mappings for TeX</center> <pre> <A | |
7505 HREF="http://vim.sf.net/tip_view.php?tip_id=275">http://vim.sf.net/tip_view.php?tip_id=275</A><BR> | |
7506 | |
7507 You know, TeX requires a lot of additional formatting code. I'm tired of | |
7508 opening and closing braces, brakets, | |
7509 \beginning and \ending etc. I particularly hate typing \begin and \end. | |
7510 To help myself and to save a few(not a few) keystrokes I naturaly came up to | |
7511 some solutions, which I wish to share with other TeXnicians and TeXperts whhich | |
7512 use Vim. "===============================cut here========================= | |
7513 "=============== you can put it in ~/.vim/after/ftplugin/tex.vim | |
7514 =============== " " Note: i_<C-L> " This constructs a skeleton of a TeX | |
7515 environment. " You write a line like this: " floatingfigure:ht<C-L> | |
7516 " and after you press <C-L>, you get: " " \begin[ht]{floatingfigure} | |
7517 " " \end{floatingfigure} " -- INSERT -- " " where floatingfigure is the | |
7518 desired environment " ht are options " : is delimiter; in fact, you can | |
7519 use whatever delimiter you want " as long it is not in &iskeyword option. | |
7520 inoremap <buffer> <C-L> | |
7521 \:s/[^][:alnum:]<bar>]\+/,/eg | |
7522 \I\begin{ea}[A]%d%%P \:s/\[,/[/e \:s/,]/]/e | |
7523 \:s/\[]//e \0f{y%o\endpO | |
7524 inoremap <buffer> { {}i inoremap <buffer> [ []i inoremap | |
7525 <buffer> ^ ^{}i inoremap <buffer> _ _{}i inoremap <buffer> | |
7526 \( \(\)hi inoremap <buffer> \[ \[\]hi | |
7527 | |
7528 " Note: v_<C-L> " For this to work, you have to write on a blank | |
7529 line the name of " the desired environment and options (see i_<C-L>) | |
7530 and visual select " (from top to bottom) this and following lines. " After | |
7531 pressing <C-L> the selected lines will be surrounded " with begin/end | |
7532 skeleton of the environment. vnoremap <buffer> <C-L> o | |
7533 \:s/[^][:alnum:]<bar>]\+/,/eg | |
7534 \I\begin{ea}[A]%d%%P \:s/\[,/[/e \:s/,]/]/e | |
7535 \:s/\[]//e \0f{y%gvoo\endp | |
7536 " vnoremap <buffer> { di{}P " vnoremap <buffer> | |
7537 [ di[]P vnoremap <buffer> di^{}P vnoremap <buffer> di_{}P | |
7538 vnoremap <buffer> \( di\(\)hP vnoremap <buffer> \[ di\[\]hP | |
7539 | |
7540 " This makes "two spaces after a comma" before every :write au BufWritePre | |
7541 *.tex %s/,\(\S\)/, \1/ge | |
7542 | |
7543 "==================== You can put this in your ~/.vimrc | |
7544 ======================== " If cursor is inside braces and not before comma, | |
7545 blank or opening brace, " exit the brace block and stay in insert mode. " | |
7546 If cursor is outside braces, it inserts a space or perform an abbreviation | |
7547 " as normal. function! CleverSpace() | |
7548 let CharOnCursor = strpart( getline('.'), col('.')-2, 1) let | |
7549 CharAfterCursor = strpart( getline('.'), col('.'), 1) if CharOnCursor | |
7550 !~ ',\|\s\|(' && CharAfterCursor =~ ')\|]\|}' | |
7551 normal x | |
7552 endif | |
7553 endfunction inoremap <Space> <Space>:call CleverSpace()<LF>a | |
7554 | |
7555 " I use the last function not only for LaTeX but also in C sources. | |
7556 | |
7557 </pre></tip> </html> <Tip category="KVim"> | |
7558 <html><center>Function signature previewer</center> <pre> <A | |
7559 HREF="http://vim.sf.net/tip_view.php?tip_id=276">http://vim.sf.net/tip_view.php?tip_id=276</A><BR> | |
7560 | |
7561 Have you ever tried to call a function which parameters you have forgotten? | |
7562 Especially those long named and with long parameter list GTK+ functions | |
7563 like gtk_menu_item_image_from_stock_new(..........) !!! By accident I saw a | |
7564 function in Vim help. It's name was PreviewWord and it allowed one to jump | |
7565 in the preview window to the tag for the word cursor is on. I _slightly_ | |
7566 modified this function not to need tags file, but to search included files | |
7567 instead. I wrote another function, which uses the above said one, which | |
7568 triggers PreviewWord when you open the parenthesis after a function name. | |
7569 Here it is: " Note: " This is literally stolen from Vim help. The only | |
7570 changes are: " (1) if w != "" becomes if w =~ "\k" " | |
7571 (2) exe "silent! ptag " . w becomes exe "silent! psearch " . w " * | |
7572 The first change prevents PreviewWord of searching while cursor is on some " | |
7573 non-keyword characters, e.g. braces, asterisks, etc. function! PreviewWord() | |
7574 if &previewwindow " don't do this in the | |
7575 preview window | |
7576 return | |
7577 endif let w = expand("<cword>") " get the word under | |
7578 cursor if w =~ "\k" " if there is one | |
7579 ":ptag" to it | |
7580 | |
7581 " Delete any existing highlight before showing another tag | |
7582 silent! wincmd P " jump to preview | |
7583 window if &previewwindow " if we really | |
7584 get there... | |
7585 match none " delete existing | |
7586 highlight wincmd p " back to | |
7587 old window | |
7588 endif | |
7589 | |
7590 " Try displaying a matching tag for the word under the cursor | |
7591 let v:errmsg = "" exe "silent! psearch " . w if v:errmsg =~ | |
7592 "tag not found" | |
7593 return | |
7594 endif | |
7595 | |
7596 silent! wincmd P " jump to preview | |
7597 window if &previewwindow " if we really get | |
7598 there... | |
7599 if has("folding") | |
7600 silent! .foldopen " don't want | |
7601 a closed fold | |
7602 endif call search("$", "b") " to end of | |
7603 previous line let w = substitute(w, '\\', '\\\\', | |
7604 "") call search('\<\V' . w . '\>') " | |
7605 position cursor on match " Add a match highlight to | |
7606 the word at this position hi previewWord term=bold | |
7607 ctermbg=green guibg=green exe 'match previewWord "\%' | |
7608 . line(".") . 'l\%' . col(".") . 'c\k*"' wincmd p | |
7609 " back to old window | |
7610 endif | |
7611 endif | |
7612 endfunction au! CursorHold *.[ch] nested call PreviewWord() | |
7613 | |
7614 " Note: " When you open a parenthesis after a function name, and | |
7615 at the " line end, that function's definition is previewed through | |
7616 PreviewWord(). " This is inspired from Delphi's CodeInsight technology. | |
7617 " Something similar (PreviewClassMembers) could be written for " the C++ | |
7618 users, for previewing the class members when you type " a dot after an | |
7619 object name. " If somebody decides to write it, please, mail it to me. | |
7620 function! PreviewFunctionSignature() | |
7621 let CharOnCursor = strpart( getline('.'), col('.')-2, 1) if col(".") == | |
7622 col("$") | |
7623 call PreviewWord() | |
7624 endif return "(" | |
7625 endfunction inoremap <buffer> ( | |
7626 <C-R>=PreviewFunctionSignature()<LF> | |
7627 | |
7628 </pre></tip> </html> <Tip category="KVim"> | |
7629 <html><center>Function signature previewer</center> <pre> <A | |
7630 HREF="http://vim.sf.net/tip_view.php?tip_id=277">http://vim.sf.net/tip_view.php?tip_id=277</A><BR> | |
7631 | |
7632 Have you ever tried to call a function which parameters you have forgotten? | |
7633 Especially those long named and with long parameter list GTK+ functions | |
7634 like gtk_menu_item_image_from_stock_new(..........) !!! By accident I saw a | |
7635 function in Vim help. It's name was PreviewWord and it allowed one to jump | |
7636 in the preview window to the tag for the word cursor is on. I _slightly_ | |
7637 modified this function not to need tags file, but to search included files | |
7638 instead. I wrote another function, which uses the above said one, which | |
7639 triggers PreviewWord when you open the parenthesis after a function name. | |
7640 Here it is: " Note: " This is literally stolen from Vim help. The only | |
7641 changes are: " (1) if w != "" becomes if w =~ "\k" " | |
7642 (2) exe "silent! ptag " . w becomes exe "silent! psearch " . w " * | |
7643 The first change prevents PreviewWord of searching while cursor is on some " | |
7644 non-keyword characters, e.g. braces, asterisks, etc. function! PreviewWord() | |
7645 if &previewwindow " don't do this in the | |
7646 preview window | |
7647 return | |
7648 endif let w = expand("<cword>") " get the word under | |
7649 cursor if w =~ "\k" " if there is one | |
7650 ":ptag" to it | |
7651 | |
7652 " Delete any existing highlight before showing another tag | |
7653 silent! wincmd P " jump to preview | |
7654 window if &previewwindow " if we really | |
7655 get there... | |
7656 match none " delete existing | |
7657 highlight wincmd p " back to | |
7658 old window | |
7659 endif | |
7660 | |
7661 " Try displaying a matching tag for the word under the cursor | |
7662 let v:errmsg = "" exe "silent! psearch " . w if v:errmsg =~ | |
7663 "tag not found" | |
7664 return | |
7665 endif | |
7666 | |
7667 silent! wincmd P " jump to preview | |
7668 window if &previewwindow " if we really get | |
7669 there... | |
7670 if has("folding") | |
7671 silent! .foldopen " don't want | |
7672 a closed fold | |
7673 endif call search("$", "b") " to end of | |
7674 previous line let w = substitute(w, '\\', '\\\\', | |
7675 "") call search('\<\V' . w . '\>') " | |
7676 position cursor on match " Add a match highlight to | |
7677 the word at this position hi previewWord term=bold | |
7678 ctermbg=green guibg=green exe 'match previewWord "\%' | |
7679 . line(".") . 'l\%' . col(".") . 'c\k*"' wincmd p | |
7680 " back to old window | |
7681 endif | |
7682 endif | |
7683 endfunction au! CursorHold *.[ch] nested call PreviewWord() | |
7684 | |
7685 " Note: " When you open a parenthesis after a function name, and | |
7686 at the " line end, that function's definition is previewed through | |
7687 PreviewWord(). " This is inspired from Delphi's CodeInsight technology. | |
7688 " Something similar (PreviewClassMembers) could be written for " the C++ | |
7689 users, for previewing the class members when you type " a dot after an | |
7690 object name. " If somebody decides to write it, please, mail it to me. | |
7691 function! PreviewFunctionSignature() | |
7692 let CharOnCursor = strpart( getline('.'), col('.')-2, 1) if col(".") == | |
7693 col("$") | |
7694 call PreviewWord() | |
7695 endif return "(" | |
7696 endfunction inoremap <buffer> ( | |
7697 <C-R>=PreviewFunctionSignature()<LF> | |
7698 | |
7699 </pre></tip> </html> <Tip category="KVim"> | |
7700 <html><center>all the right moves</center> <pre> <A | |
7701 HREF="http://vim.sf.net/tip_view.php?tip_id=278">http://vim.sf.net/tip_view.php?tip_id=278</A><BR> | |
7702 | |
7703 One of the principles of effective text editing is moving around very | |
7704 efficiently. Following are some pointers which may help u do that. | |
7705 | |
7706 h move one character left j move one row down | |
7707 k move one row up l move one char. right. w move | |
7708 to begining of next word b move to begining of previous word | |
7709 e move to end of word W move to begining of next word after a | |
7710 whitespace B move to begining of pervious word before a whitespace | |
7711 E move to end of word before a whitespace. | |
7712 | |
7713 (All the above movements can be preceeded by a numeric value . i.e '4j' | |
7714 will move 4 rows down ) | |
7715 | |
7716 ^ move to first non blank char of the line. g_ move to last non | |
7717 blank char of the line. 0 moev to begining of line $ move | |
7718 to end of line. gg move to first line. G move to last line. | |
7719 nG move to "n"th line. H top of screen. | |
7720 M middle of screen | |
7721 L bottom of screen | |
7722 Ctrl-D move half page down Ctrl-U move half page up. Ctrl-B page-up | |
7723 Ctrl-F page down. | |
7724 | |
7725 Ctrl-o last cursor position. '[a-z,0-9,A-Z] jump to the marker. (u | |
7726 can set a marker on line by :- m[a-zA-Z,0-9] and then jump back to | |
7727 it by '[a-z,A-Z0-9] | |
7728 | |
7729 n next matching search pattern N previous matching search pattern * | |
7730 next word under cursor | |
7731 # previous word under cursor. g* next matching search pattern | |
7732 under cursor. g# previous matching search pattern under cursor. | |
7733 | |
7734 </pre></tip> </html> <Tip category="KVim"> <html><center>On Windows, make GVim | |
7735 the default action for double-click with "unknown file types"</center> <pre> <A | |
7736 HREF="http://vim.sf.net/tip_view.php?tip_id=279">http://vim.sf.net/tip_view.php?tip_id=279</A><BR> | |
7737 | |
7738 I find myself installing the following registry modification for all my | |
7739 PC's now (even other people's PC's). It applies to Microsoft Windows | |
7740 machines only. The following is also for Windows 9x... NT or XP or 2000 | |
7741 may require modifications (which I don't care to understand!). | |
7742 | |
7743 The problem: You double-click on a file that doesn't have a 'registered type' | |
7744 and that pesky "What program should I use?" dialog pops up. Even worse, | |
7745 depending on the installation, the GVim icon may not be listed, and one has | |
7746 to browse to the executable... and then the type becomes forever bonded | |
7747 to being editted with GVim (if that box is checked). The standard Vim 6.1 | |
7748 installation does include a "right click to edit" menu item for all files, | |
7749 but a double-click is so much faster! | |
7750 | |
7751 The solution: What if unregistered types would just automatically open up | |
7752 in GVim? Well, they can.. with a little registry trickery. | |
7753 | |
7754 How to Install it: | |
7755 | |
7756 Step 1. Create a text file called "vimalways.reg" and paste the below text | |
7757 into it. | |
7758 | |
7759 Step 2. Important NOTE: You will have to edit the pathname to correspond | |
7760 to the pathname of your GVim.exe. The text below works fine for a GVim 6.1 | |
7761 default installation. | |
7762 | |
7763 Step 3: Save the file. | |
7764 | |
7765 Step 4: Right-click on the file and select "install". Then you are done! | |
7766 | |
7767 ------ vimalways.reg ------- cut here ------snip---snip--- REGEDIT4 | |
7768 | |
7769 [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell] | |
7770 | |
7771 [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell\Open with &GVim] @="Open | |
7772 with &GVim" | |
7773 | |
7774 [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell\Open with &GVim\command] | |
7775 @="\"C:\\vim\\vim61\\gvim.exe\" \"%1\"" | |
7776 | |
7777 ----end of file---- cut here----- snip---snip---- | |
7778 | |
7779 Note 1. This can't be de-installed automatically, and if you want to remove | |
7780 it, you'll have to edit the registry by hand (annoying, but easy). | |
7781 | |
7782 Note 2. Keep this file around, so when you upgrade your GVim, all you have | |
7783 to do is modify the pathname (to say, for example, vim62) and then install | |
7784 it again. | |
7785 | |
7786 Ok, thanks for playing! And thanks to the author(s) of Vim and GVim. | |
7787 If it weren't for them, I'd still be using elvis or stevie! | |
7788 | |
7789 | |
7790 </pre></tip> </html> <Tip category="KVim"> <html><center>Integration | |
7791 with PyUnit testing framework</center> <pre> <A | |
7792 HREF="http://vim.sf.net/tip_view.php?tip_id=280">http://vim.sf.net/tip_view.php?tip_id=280</A><BR> | |
7793 | |
7794 Vim has a wonderful ability to integrate with external tools, like compilers, | |
7795 make, ctags etc. That's one of the reasons we love it. | |
7796 | |
7797 PyUnit can be seen as a "compiler" for the Python test code. To understand | |
7798 it, Vim should be told about the language the PyUnit speaks. This could be | |
7799 done with 'errorformat' option: | |
7800 | |
7801 setlocal efm=%C\ %.%#,%A\ \ File\ \"%f\"\\,\ line\ %l%.%#,%Z%[%^\ ]%\\@=%m | |
7802 | |
7803 This magic spell enables Vim to parse unittest.TextRunner's output and to | |
7804 enter quick-fix mode. To run all your unit tests at once you'll need to setup | |
7805 'makeprg' option and provide a runner. I'm using this setup: | |
7806 | |
7807 setlocal makeprg=./alltests.py | |
7808 | |
7809 And contents of the alltests.py (for the sake of completeness): | |
7810 | |
7811 #!/usr/bin/env python2 | |
7812 | |
7813 import unittest import sys sys.path.append('unittests') | |
7814 | |
7815 modules_to_test = ( | |
7816 'fooTest', 'barTest', 'bazTest', | |
7817 ) | |
7818 | |
7819 def suite(): | |
7820 alltests = unittest.TestSuite() for module in map(__import__, | |
7821 modules_to_test): | |
7822 alltests.addTest(unittest.findTestCases(module)) | |
7823 return alltests | |
7824 | |
7825 if __name__ == '__main__': | |
7826 unittest.main(defaultTest='suite') | |
7827 | |
7828 ============== end of the alltests.py file ======================== | |
7829 | |
7830 While talking about it, I'd also suggest to add a couple of mappings. | |
7831 In the end, my vim/files/ftplugin/python.vim looks like this: | |
7832 | |
7833 setlocal makeprg=./alltests.py\ -q setlocal efm=%C\ %.%#,%A\ \ File\ \"%f\"\\,\ | |
7834 line\ %l%.%#,%Z%[%^\ ]%\\@=%m iabbr <buffer> sae self.assertEquals | |
7835 iabbr <buffer> sar self.assertRaises | |
7836 | |
7837 For details see :help quick-fix, :help | |
7838 'efm' and :help 'makeprg'. See also: <A | |
7839 HREF="http://c2.com/cgi/wiki?PythonUnit">http://c2.com/cgi/wiki?PythonUnit</A><BR> | |
7840 | |
7841 Many thanks to Stefan Roemer who patiently spent quite some time to build | |
7842 'efm' for me. | |
7843 | |
7844 </pre></tip> </html> <Tip category="KVim"> | |
7845 <html><center>Stateful zz</center> <pre> <A | |
7846 HREF="http://vim.sf.net/tip_view.php?tip_id=281">http://vim.sf.net/tip_view.php?tip_id=281</A><BR> | |
7847 | |
7848 Do you find yourself hitting 'zz' all the time in order to see some context of | |
7849 what you're currently working on? If so, then this tip might be for you. If | |
7850 you add the following line in your vimrc, you can toggle zz mode by pressing | |
7851 <Leader>zz. | |
7852 | |
7853 " maintain a constant zz state, second call will toggle it back off map | |
7854 <Leader>zz :let &scrolloff=999-&scrolloff<CR> | |
7855 | |
7856 </pre></tip> </html> <Tip category="KVim"> | |
7857 <html><center>Folding with Regular Expression</center> <pre> <A | |
7858 HREF="http://vim.sf.net/tip_view.php?tip_id=282">http://vim.sf.net/tip_view.php?tip_id=282</A><BR> | |
7859 | |
7860 Well, I've tried to understand some of the folding scripts, but life's too | |
7861 short. Instead, I added the following lines to my vimrc file. | |
7862 | |
7863 set | |
7864 foldexpr=(getline(v:lnum)=~@/)?0:(getline(v:lnum-1)=~@/)\|\|(getline(v:lnum+1)=~@/)?1:2 | |
7865 map \z :set foldmethod=expr foldlevel=0 foldcolumn=2<CR> | |
7866 | |
7867 The first line is an extension of foldexpr=(getline(v:lnum)=~@/)?0:1 The | |
7868 second line (re)sets the foldmethod to expr(ession) plus. | |
7869 | |
7870 First search for /regexp/, then fold everything else with \z Use zr to reveal | |
7871 more context (before/after) lines. | |
7872 | |
7873 You could add (getline(v:lnum-2)=~@/)\|\|(getline(v:lnum+2)=~@/)?2:3 but it | |
7874 will take longer as folded lines (the majority) evaluate the full expression. | |
7875 | |
7876 What could be easier? | |
7877 | |
7878 </pre></tip> </html> <Tip category="KVim"> <html><center>Turn | |
7879 on syntax coloring in Mac OS X</center> <pre> <A | |
7880 HREF="http://vim.sf.net/tip_view.php?tip_id=283">http://vim.sf.net/tip_view.php?tip_id=283</A><BR> | |
7881 | |
7882 This tip is actually for vim 6.1. To turn on syntax coloring in Mac OS X | |
7883 enter the following commands, or place them in your $HOME/.vimrc file. | |
7884 | |
7885 :set term=builtin_beos-ansi :syntax on | |
7886 | |
7887 </pre></tip> </html> <Tip category="KVim"> <html><center>Mapping | |
7888 to print syntax highlighted buffer in B&W</center> <pre> <A | |
7889 HREF="http://vim.sf.net/tip_view.php?tip_id=284">http://vim.sf.net/tip_view.php?tip_id=284</A><BR> | |
7890 | |
7891 I use this mapping to print syntax highlighted C++ code in B&W This tip | |
7892 needs vimscript #233 print_bw. | |
7893 | |
7894 The mapping is as follows map <C-p> :color | |
7895 print_bw<CR>:hardcopy<CR>:color sean<CR>:syn on<CR> | |
7896 | |
7897 Change ":color sean" to whatever is your chosen color scheme. Need to | |
7898 change line 7 of print_bw from "syntax reset" to "syntax off" <C-p> | |
7899 on a syntax highlighted buffer turns off syntax highlighting , sets the | |
7900 colors to B&W, prints the buffer, resets the color scheme and turns on syntax | |
7901 highlighting again. | |
7902 | |
7903 </pre></tip> </html> <Tip category="KVim"> | |
7904 <html><center>Don't use the escape key!</center> <pre> <A | |
7905 HREF="http://vim.sf.net/tip_view.php?tip_id=285">http://vim.sf.net/tip_view.php?tip_id=285</A><BR> | |
7906 | |
7907 Vim (any vi really) is a dream for touch typists... Until you want to switch | |
7908 from insert mode to normal mode. Then you've got to reach way up to whack | |
7909 the escape key. | |
7910 | |
7911 Or at least that's what I was doing until I realized that (drum roll please) | |
7912 | |
7913 Esc is exactly equivalent to control-[ (that's the | |
7914 control key plus the left square bracket key) | |
7915 | |
7916 That little bit of knowledge, plus mapping my caps lock to another control | |
7917 key, was what turned my fascination with Vim into true love. You never have | |
7918 to lose track of the home row again! | |
7919 | |
7920 For Xfree86 users - you can make the capslock key another control key by adding | |
7921 | |
7922 Option "XkbOptions" "ctrl:nocaps" | |
7923 | |
7924 to the InputDevice section of your XF86Config file. | |
7925 | |
7926 For Windows NT/2000 users - use the following .reg file to do the same thing: | |
7927 | |
7928 REGEDIT4 | |
7929 | |
7930 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout] | |
7931 "Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,1d,00,3a,00,00,00,00,00 | |
7932 | |
7933 </pre></tip> </html> <Tip category="KVim"> <html><center>Recover | |
7934 after doing something... ugly.</center> <pre> <A | |
7935 HREF="http://vim.sf.net/tip_view.php?tip_id=286">http://vim.sf.net/tip_view.php?tip_id=286</A><BR> | |
7936 | |
7937 I was once editing a file and wanted to test something. The test was meant | |
7938 to add a line at the end of the file, from outside vim. All was fine, but | |
7939 instead of >>, I wrote >. You can imagine what happened... :) | |
7940 | |
7941 If you happen to do something like that, the solution is: | |
7942 | |
7943 :recover | |
7944 | |
7945 </pre></tip> </html> <Tip category="KVim"> | |
7946 <html><center>Cool trick to change numbers</center> <pre> <A | |
7947 HREF="http://vim.sf.net/tip_view.php?tip_id=287">http://vim.sf.net/tip_view.php?tip_id=287</A><BR> | |
7948 | |
7949 In the gvim if you want to decrement any number just put ur curcor on that | |
7950 number in Esc mode and pres <CTRL> X | |
7951 | |
7952 </pre></tip> </html> <Tip category="KVim"> <html><center>A keymapping | |
7953 to generate Java setters and getters automatically</center> <pre> <A | |
7954 HREF="http://vim.sf.net/tip_view.php?tip_id=288">http://vim.sf.net/tip_view.php?tip_id=288</A><BR> | |
7955 | |
7956 This mapping makes it much simpler to write new java classes by simplifying | |
7957 some of the dull repetative coding (ie setters and getters). | |
7958 | |
7959 To use, first write a basic class with the following format: | |
7960 | |
7961 public class MyClass { | |
7962 | |
7963 private <type> <varname> = <initvalue>; private | |
7964 <type> <varname> = initvalue>; | |
7965 | |
7966 // getters | |
7967 | |
7968 // setters | |
7969 | |
7970 } | |
7971 | |
7972 Note the getters/setters comment -- they are important as they are used to | |
7973 place the getters and setters. | |
7974 | |
7975 The mapping is: | |
7976 | |
7977 map jgs mawv/ <Enter>"ty/ | |
7978 <Enter>wvwh"ny/getters<Enter>$a<Enter><Enter>public | |
7979 <Esc>"tpa<Esc>"npbiget<Esc>l~ea()<Enter>{<Enter><Tab>return | |
7980 <Esc>"npa;<Enter>}<Esc>=<Enter><Esc>/setters<Enter>$a<Enter><Enter>public | |
7981 void <Esc>"npbiset<Esc>l~ea(<Esc>"tpa | |
7982 <Esc>"npa)<Enter>{<Enter><Tab>this.<Esc>"npa=<Esc>"npa;<Enter>}<Esc>=<Enter>`ak | |
7983 | |
7984 (the above should be one long line with no spaces between the end of the | |
7985 lines above). | |
7986 | |
7987 To use this to generate a class go to the variable that should have a | |
7988 setter/getter and place the curser at the beginning of the 'private': | |
7989 | |
7990 private <type> <variable> = <initvalue>' ^ | |
7991 | |
7992 Then type: | |
7993 | |
7994 jgs | |
7995 | |
7996 this will create the first getter/setter and then move up to the next | |
7997 variable. You can just keep typing jgs until all the getters/setters have | |
7998 been generated. | |
7999 | |
8000 This should mapping isn't perfect and someone could probably make it a little | |
8001 cleaner. It could also relatively easily be adapted to C++. Please feel free | |
8002 to send me any feedback/enhancements as I am trying to compile a list of these. | |
8003 | |
8004 </pre></tip> </html> <Tip category="KVim"> <html><center>Alternative | |
8005 <escape> that allows you to do a "quick and dirty | |
8006 insert" and get out into normal mode</center> <pre> <A | |
8007 HREF="http://vim.sf.net/tip_view.php?tip_id=289">http://vim.sf.net/tip_view.php?tip_id=289</A><BR> | |
8008 | |
8009 This is an alternative key combo for the escape key from the one mentioned | |
8010 by David A. Rogers in vimtip #285. | |
8011 | |
8012 I do a lot of editting in Vim, and I've always found myself in situations where | |
8013 I had to "do a quick insert" - basically (from normal mode), change into insert | |
8014 mode, type in one quick word, then <esc> out, then navigate elsewhere. | |
8015 | |
8016 As has been rightly observed by a lot of people, the <esc> key can | |
8017 sometimes be a little bit out of the way. But that's no problem for ViM, is it? | |
8018 | |
8019 At first, I thought of editting the ViM source code itself, in order to come | |
8020 up with a command that could do things like say "let me jump into insert | |
8021 mode, type a few quick words, then escape out into normal mode when i press | |
8022 something like double <space>". | |
8023 | |
8024 It was only later when reading through the section in | |
8025 Jesse Goerz's "Beginner's Guide to ViM" on remapping (<A | |
8026 HREF="http://newbiedoc.sourceforge.net/tutorials/vim/mapping-vim.html) | |
8027 that I got inspired to retake a look at using remapping as an alternative | |
8028 instead.">http://newbiedoc.sourceforge.net/tutorials/vim/mapping-vim.html) | |
8029 that I got inspired to retake a look at using remapping as an alternative | |
8030 instead.</A><BR> | |
8031 | |
8032 This is what I came up with.. Use whatever is comfortable for you - single | |
8033 or double <Shift-space> | |
8034 | |
8035 :map! <S-space> <esc> :map! <S-space><S-space> | |
8036 <esc> | |
8037 | |
8038 With this quick combo ("Shift", + <space>), one can easily (and might | |
8039 I add, intuitively) "do a quick insert" and exit quickly out into normal | |
8040 mode. I guess I always thought the <space> would be a good way to | |
8041 do this sort of thing, since it is after all, so intuitive in the typing | |
8042 process. So why not make it such that it can "escape" you out into normal | |
8043 mode as well? Just type 'i', to go into insert mode, type in your stuff, | |
8044 and once you're done, hit Shift-space! | |
8045 | |
8046 </pre></tip> </html> <Tip category="KVim"> <html><center>Text | |
8047 Processing With Integrated Spell Checking</center> <pre> <A | |
8048 HREF="http://vim.sf.net/tip_view.php?tip_id=290">http://vim.sf.net/tip_view.php?tip_id=290</A><BR> | |
8049 | |
8050 I have written an HTML document to help others use Vim as a basic text | |
8051 processing application. It discusses how to integrate spell checking, | |
8052 dictionary, and thesaurus applications. It also talks about wrapping lines, | |
8053 indentation, justification, and the vim settings that effect the behavior | |
8054 of these operations. The document can be found at: | |
8055 <A | |
8056 HREF="http://www.highley-recommended.com/text-processing.html">http://www.highley-recommended.com/text-processing.html</A><BR> | |
8057 | |
8058 Everything has been tested with UNIX, Linux, Windows, and Windows with | |
8059 Cygwin patforms. | |
8060 | |
8061 </pre></tip> </html> <Tip category="KVim"> <html><center>^P | |
8062 & auto filling of variables and text</center> <pre> <A | |
8063 HREF="http://vim.sf.net/tip_view.php?tip_id=291">http://vim.sf.net/tip_view.php?tip_id=291</A><BR> | |
8064 | |
8065 Do you know you can auto fill the variable and names as you type your code | |
8066 ? This will help most of the programmers, who always try hard to remember the | |
8067 variable names and browse through all the files to find out the variable name. | |
8068 Use Ctrl+P and Ctrl+N to autofill the variables names etc. Just practice, | |
8069 you will feel the ease of using vim | |
8070 | |
8071 </pre></tip> </html> <Tip category="KVim"> | |
8072 <html><center>vim + cscope + cygwin</center> <pre> <A | |
8073 HREF="http://vim.sf.net/tip_view.php?tip_id=292">http://vim.sf.net/tip_view.php?tip_id=292</A><BR> | |
8074 | |
8075 I've found that vim + cscope + cygwin does not work. The problem seems to | |
8076 be that in | |
8077 | |
8078 sprintf(cmd, "exec %s -dl -f %s", prog, csinfo[i].fname); | |
8079 | |
8080 vim execs cscope with the "-dl" options, causing it to fail. It is probably | |
8081 a cscope bug, but a simple workaround is top build vim without thad "d": | |
8082 | |
8083 sprintf(cmd, "exec %s -l -f %s", prog, csinfo[i].fname); | |
8084 | |
8085 seems to work for me! | |
8086 | |
8087 </pre></tip> </html> <Tip category="KVim"> <html><center>remember | |
8088 where you had ended reading help</center> <pre> <A | |
8089 HREF="http://vim.sf.net/tip_view.php?tip_id=293">http://vim.sf.net/tip_view.php?tip_id=293</A><BR> | |
8090 | |
8091 You could jump to the last place you had been while reading Vim help files | |
8092 if you add this to your .vimrc file: | |
8093 | |
8094 au BufLeave * if &ft == "help" | mark H | endif | |
8095 | |
8096 Then use 'H to go to the mark H. | |
8097 | |
8098 To work between Vim runs 'viminfo' option should be setup to save file marks. | |
8099 See :help 'viminfo' and :help file-marks for more information. | |
8100 | |
8101 </pre></tip> </html> <Tip category="KVim"> <html><center>Use | |
8102 Ctrl-S to save current or new files.</center> <pre> <A | |
8103 HREF="http://vim.sf.net/tip_view.php?tip_id=294">http://vim.sf.net/tip_view.php?tip_id=294</A><BR> | |
8104 | |
8105 I wanted to have a single key stroke that would save existing files, or call | |
8106 the file browser. Here's a key map for Ctrl-S to accomplish that (place in | |
8107 vimrc file): | |
8108 | |
8109 if has("gui_running") | |
8110 " If the current buffer has never been saved, it will have no name, | |
8111 " call the file browser to save it, otherwise just save it. :map | |
8112 <silent> <C-S> :if expand("%") == ""<CR>:browse confirm | |
8113 w<CR>:else<CR>:confirm w<CR>:endif<CR> | |
8114 endif | |
8115 | |
8116 Tom Kimpton | |
8117 | |
8118 </pre></tip> </html> <Tip category="KVim"> | |
8119 <html><center>Line/word/file/whatever completion</center> <pre> <A | |
8120 HREF="http://vim.sf.net/tip_view.php?tip_id=295">http://vim.sf.net/tip_view.php?tip_id=295</A><BR> | |
8121 | |
8122 In addition to vimtip #291 you can use whole <C-x> completion mode. It | |
8123 can complete whole lines (<C-x>l, then <C-p>, <C-n>), | |
8124 filenames (<C-f>), keywords, words from custom dictionary and many, | |
8125 many others. During coding it usually saves a LOT of key strokes ;) This | |
8126 mode has many other powerful features, for example when completing word (by | |
8127 <C-x><C-p> or just by <C-p>) you can continue completion | |
8128 with another <C-x><C-p>. For example, after writing such text: | |
8129 | |
8130 this is first line second line is here | |
8131 | |
8132 Placing cursor at third line and pressing <C-x>l will double last | |
8133 line - <C-n>, <C-p> in this moment can be used to manipulate | |
8134 completed line. Or, instead of completing whole line you can press 'f' and | |
8135 then complete by <C-p> which will result in 'first' word. After that | |
8136 you can <C-x><C-p> to get 'line' word (since this is next word | |
8137 after 'first'). Try yourself for other powerful combinations. | |
8138 | |
8139 </pre></tip> </html> <Tip category="KVim"> <html><center>Attach | |
8140 the currently open file to email</center> <pre> <A | |
8141 HREF="http://vim.sf.net/tip_view.php?tip_id=296">http://vim.sf.net/tip_view.php?tip_id=296</A><BR> | |
8142 | |
8143 This is very simple, but most people don't seem to take advantage of | |
8144 this. Often you have some file (source code or other text file) already open | |
8145 in an existing vim session and you need to attach it with an email. It is | |
8146 very simple. | |
8147 - First copy the filename into clipboard. For this I put the following | |
8148 mapping in vimrc and press <F2>: | |
8149 nnoremap <F2> :let @*=expand("%:p")<cr> | |
8150 - Go to your email compose window and use your regular file attachment | |
8151 menu (Insert->File in outlook) and press ^V (or whatever key to paste | |
8152 clipboard) and press Enter. | |
8153 | |
8154 That is all there to it. If you are on windows and your email client doesn't | |
8155 accept forward-slashes, then you might want to change the map to: | |
8156 | |
8157 nnoremap <F2> :let @*=substitute(expand("%:p"), "/", "\\", | |
8158 "g")<cr> | |
8159 | |
8160 HTH, Hari | |
8161 | |
8162 </pre></tip> </html> <Tip category="KVim"> <html><center>Start | |
8163 in insert mode without loosing your escape key</center> <pre> <A | |
8164 HREF="http://vim.sf.net/tip_view.php?tip_id=297">http://vim.sf.net/tip_view.php?tip_id=297</A><BR> | |
8165 | |
8166 There are two parts to this, each is fairly simple. | |
8167 | |
8168 First, I want to start in insert mode. Well "set im!" in my vimrc did the | |
8169 job, but I lost the escape key. Second, I have found that often times, | |
8170 when I'm in command mode, I hit escape trying to get back into insert mode. | |
8171 I am always rewarded with a beep, telling me once again I made that mistake. | |
8172 | |
8173 So I mapped esc in command mode to set insert mode (":set im") and I mapped | |
8174 esc in insert mode to unset insert mode (<c-o>:set im) Well then I | |
8175 realized if you hit "i" in command mode, escape woulding work the first time. | |
8176 So here's the code to add to your vimrc: | |
8177 | |
8178 set im! " start in insert mode map <esc> :set | |
8179 im!<cr> " escape in command mode goes to insert mode map | |
8180 i :set im!<cr> " i in command mode goes to insert mode | |
8181 map! <esc> <c-o>:set im!<cr> " escape in insert mode goes | |
8182 to command mode | |
8183 | |
8184 see :help insert | |
8185 | |
8186 </pre></tip> </html> <Tip category="KVim"> <html><center>Changing | |
8187 case with regular expressions</center> <pre> <A | |
8188 HREF="http://vim.sf.net/tip_view.php?tip_id=298">http://vim.sf.net/tip_view.php?tip_id=298</A><BR> | |
8189 | |
8190 I stumbled across this factoid on a website about vi. I haven't been able to | |
8191 locate it in the Vim documentation, but it works in Vim, and it's very handy. | |
8192 | |
8193 There are times that you might like to go through a file and change the case | |
8194 of characters that match some arbitrary criteria. If you understand regular | |
8195 expressions well, you can actually do this fairly easily. | |
8196 | |
8197 It's as simple as placing \U or \L in front of any backreferences in your | |
8198 regular expressions. Vim will make the text in the backreference uppercase | |
8199 or lowercase (respectively). | |
8200 | |
8201 (A "backreference" is a part of a regular expression that refers to a previous | |
8202 part of a regular expression. The most common backrefernces are &, \1, \2, | |
8203 \3, ... , \9). | |
8204 | |
8205 Some examples that demonstrate the power of this technique: | |
8206 | |
8207 Lowercase the entire file - :%s/.*/\L&/g | |
8208 | |
8209 (& is a handy backreference that refers to the complete text of the match.) | |
8210 | |
8211 Uppercase all words that are preceded by a < (i.e. opening HTML tag names): | |
8212 :%s/<\(\w*\)/<\U\1/g | |
8213 | |
8214 Please add a note if you know where this is in the documentation. I have | |
8215 done Ctrl-D searches on upper, lower, \U, and \L with no luck. | |
8216 | |
8217 </pre></tip> </html> <Tip category="KVim"> | |
8218 <html><center>Open file under cursor.</center> <pre> <A | |
8219 HREF="http://vim.sf.net/tip_view.php?tip_id=299">http://vim.sf.net/tip_view.php?tip_id=299</A><BR> | |
8220 | |
8221 A little thing that I did and found quite useful: | |
8222 | |
8223 function! OpenFileUnderCursor() | |
8224 let FileName = expand("<cfile>") let OldPath = getcwd() silent cd | |
8225 %:p:h execute "silent sp +e " . FileName execute "silent cd " . OldPath | |
8226 endfunction | |
8227 | |
8228 map! silent <M-e> :call OpenFileUnderCursor()<CR> | |
8229 | |
8230 Then use Alt+E on a filename to open it (relative to the directory the | |
8231 current file resides in). | |
8232 | |
8233 </pre></tip> </html> <Tip category="KVim"> <html><center>Making | |
8234 a tags file for IDL (Interactive Data Language)</center> <pre> <A | |
8235 HREF="http://vim.sf.net/tip_view.php?tip_id=300">http://vim.sf.net/tip_view.php?tip_id=300</A><BR> | |
8236 | |
8237 I have recently began using the tags features of vim (:help tags) with my | |
8238 fortran codes and come to appreciate their power. I also do a lot of coding | |
8239 in IDL (Interactive Data Language), but found that ctags did not have native | |
8240 support for IDL. If you take the time you can learn how to get ctags to | |
8241 support IDL, but I found, after a search of usenet, that someone else has | |
8242 already done this and written a perl script called idltags. It is part | |
8243 of an emacs package (is anyone still reading?) that you need to download, | |
8244 called idlwave, which is located at: | |
8245 <A HREF="http://idlwave.org/">http://idlwave.org/</A><BR> | |
8246 and currently (I don't know if this will change) the direct download link is | |
8247 <A | |
8248 HREF="http://idlwave.org/download/idlwave.tar.gz">http://idlwave.org/download/idlwave.tar.gz</A><BR> | |
8249 In the usenet pages the maintainer, JD Smith, was suggesting that idlwave | |
8250 had outgrown idltags and was not sure it was still needed, so I don't know | |
8251 how long it will be available. | |
8252 | |
8253 </pre></tip> </html> <Tip category="KVim"> <html><center>Edit | |
8254 files in path, or related.</center> <pre> <A | |
8255 HREF="http://vim.sf.net/tip_view.php?tip_id=301">http://vim.sf.net/tip_view.php?tip_id=301</A><BR> | |
8256 | |
8257 You can write a little shell function that will let you easily edit any file | |
8258 that is in the path, or which's location can be retrieved with the whereis | |
8259 tool. This is something similar to what I have in /etc/profile: | |
8260 | |
8261 function vvim() { vim `whereis $1|cut -d: -f2` } function ggvim() { gvim | |
8262 `whereis $1|cut -d: -f2` } | |
8263 | |
8264 Then just type, for example, "vvim ls", and you'll start vim with /bin/ls | |
8265 and /usr/share/man/ls.1.gz loaded :) (it's not very useful to edit /bin/ls, | |
8266 but you get the ideea ;) | |
8267 | |
8268 </pre></tip> </html> <Tip category="KVim"> | |
8269 <html><center>Use gvim in kmail</center> <pre> <A | |
8270 HREF="http://vim.sf.net/tip_view.php?tip_id=302">http://vim.sf.net/tip_view.php?tip_id=302</A><BR> | |
8271 | |
8272 To automatically open gvim to edit in kmail, "-f" command line option must | |
8273 be used . In kmail configuration go to the composer settings , and write | |
8274 in the "use external editor" field the following command : "gvim -f %f" | |
8275 Without -f option gvim would work in background and editing would not have | |
8276 any effect on kmail. | |
8277 | |
8278 </pre></tip> </html> <Tip category="KVim"> <html><center>Statusline | |
8279 Tab Level Function Ruler TVIM</center> <pre> <A | |
8280 HREF="http://vim.sf.net/tip_view.php?tip_id=303">http://vim.sf.net/tip_view.php?tip_id=303</A><BR> | |
8281 | |
8282 I use this function to let me know if my cursor is on a TAB column. The t* | |
8283 on the ruler means I am not. But t3 means the cursor is on tablevel 3 ~vimrc | |
8284 ----------------------- My Ruler ------------------------ r4,c13,t3 ~vimrc | |
8285 ----------------------- My Ruler ------------------------ r4,c14,t* If you | |
8286 want to change a tab level you can drag or push the first character of a line | |
8287 to a desired tab level. (more on that later) This ruler replacement will let | |
8288 you know where you are, whether you like to use space tabs (see vimtip #12 ) | |
8289 or regular tabs. My function is set to four space tabs stops and only goes | |
8290 9 levels but can be easily modified. | |
8291 | |
8292 Actually I just wanted to learn how to use a function in my _vimrc and this | |
8293 was my first attempt. Add this to your _vimrc | |
8294 | |
8295 "--------------------cut------------------ set laststatus=2 "This makes sure | |
8296 the ruler shows. See help laststatus set statusline=%f\ ---------\ My\ | |
8297 Ruler\ ----------\ r%l,c%c,t%{ShowTab()} "See help statusline (I toggle | |
8298 between 12 helpful rulers -- more on that later) fu ShowTab() | |
8299 let TabLev='*' let Col=(col(".")) if Col == 1 | let TabLev='0' | | |
8300 en if Col == 5 | let TabLev='1' | en if Col == 9 | let TabLev='2' | | |
8301 en if Col ==13 | let TabLev='3' | en if Col ==17 | let TabLev='4' | | |
8302 en if Col ==21 | let TabLev='5' | en if Col ==25 | let TabLev='6' | | |
8303 en if Col ==29 | let TabLev='7' | en if Col ==33 | let TabLev='8' | | |
8304 en if Col ==37 | let TabLev='9' | en | |
8305 return TabLev endf "The ruler (statusline) shows a t* unless you are on | |
8306 col 1,5,9,13,... "-------------------cut------------------- | |
8307 | |
8308 This function ShowTab() gets called and updates the ruler with every cursor | |
8309 move but it does not slow things down as I type. Perhaps a speed typist | |
8310 may complain :-) In case I write something else you may search on the key | |
8311 word TVIM Best Wishes TVIM Tamed Vim paradocs@frontiernet.net | |
8312 | |
8313 </pre></tip> </html> <Tip category="KVim"> | |
8314 <html><center>fold braces and javadoc</center> <pre> <A | |
8315 HREF="http://vim.sf.net/tip_view.php?tip_id=304">http://vim.sf.net/tip_view.php?tip_id=304</A><BR> | |
8316 | |
8317 If you'd like to have javadoc folded together with areas in braces try that | |
8318 <pre> set foldmethod=syntax set foldenable syn region foldBraces | |
8319 start=/{/ end=/}/ transparent fold syn region foldJavadoc start=,/\*\*, | |
8320 end=,\*/, transparent fold keepend </pre> and play a bit with: | |
8321 <pre> set foldlevel=0 set foldnestmax=10 </pre> parameters | |
8322 | |
8323 </pre></tip> </html> <Tip category="KVim"> <html><center>Best | |
8324 of VIM Tips (VIM's best Features)</center> <pre> <A | |
8325 HREF="http://vim.sf.net/tip_view.php?tip_id=305">http://vim.sf.net/tip_view.php?tip_id=305</A><BR> | |
8326 | |
8327 Here's a necessarily cryptic list of "MY" Best Vim Tips | |
8328 that I've gleaned from <A HREF="http://vim.sf.net/ & | |
8329 comp.editors ">http://vim.sf.net/ & comp.editors </A><BR> <A | |
8330 HREF="http://groups.google.com/groups?safe=off&group=comp.editors">http://groups.google.com/groups?safe=off&group=comp.editors</A><BR> | |
8331 | |
8332 updated version at <A | |
8333 HREF="http://www.rayninfo.co.uk/vimtips.html">http://www.rayninfo.co.uk/vimtips.html</A><BR> | |
8334 ------------------------------------------------------------------------------ | |
8335 # Absolutely essential | |
8336 ------------------------------------------------------------------------------ | |
8337 vim.sf.net : Visit frequently comp.editors : "VIM" dominated | |
8338 newsgroup * # g* g# : find word under cursor (forwards/backwards) | |
8339 % : match brackets {}[]() matchit.vim : % now matches | |
8340 tags <tr><td><script> etc <C-N> <C-P> : word | |
8341 completion in insert mode <C-X><C-L> : Line complete SUPER | |
8342 USEFUL /<C-R><C-W> : Pull <cword> onto search/command | |
8343 line :set ignorecase # you nearly always want this :syntax on : colour | |
8344 syntax in Perl,HTML,PHP etc :h slash<C-D> : type control-D and get a | |
8345 list all help topics containing | |
8346 slash (plus use TAB for Help completion) | |
8347 ------------------------------------------------------------------------------ | |
8348 # MAKE IT EASY TO UPDATE/RELOAD_vimrc :nmap | |
8349 ,s :source $VIM/_vimrc :nmap ,v :e $VIM/_vimrc | |
8350 ------------------------------------------------------------------------------ | |
8351 #VISUAL MODE Mappings :vmap sb "zdi<b><C-R>z</b><ESC> | |
8352 : wrap <b></b> around VISUALLY selected | |
8353 Text :vmap st "zdi<?= <C-R>z ?><ESC> | |
8354 : wrap <?= ?> around VISUALLY selected Text | |
8355 ------------------------------------------------------------------------------ | |
8356 # Exploring :Ex : file explorer note capital Ex \be | |
8357 : builtin buffer explorer :ls : list of buffers(eg | |
8358 following) :cd .. : move to parent directory | |
8359 ------------------------------------------------------------------------------ | |
8360 # Great guu : lowercase line gUU | |
8361 : uppercase line gf : open file name under | |
8362 cursor (SUPER) ga : display hex,ascii value of | |
8363 character under cursor ggVGg? : rot13 whole file | |
8364 CTRL-A,CTRL-X : increment,decerement number under cursor | |
8365 win32 users must remap CNTRL-A | |
8366 CTRL-R=5*5 : insert 25 into text | |
8367 ------------------------------------------------------------------------------ | |
8368 # Makes all other tips superfluous :h 42 :h holy-grail :help! | |
8369 ------------------------------------------------------------------------------ | |
8370 # Markers & moving about '. : jump to last modification | |
8371 line (SUPER) `. : jump to exact spot in last modification | |
8372 line <C-O> : retrace your movements in file | |
8373 (old) <C-I> : retrace your movements in file (new) | |
8374 :ju(mps) :help jump-motions :history : list of all your commands | |
8375 ------------------------------------------------------------------------------ | |
8376 # Abbreviations & maps :map <f7> :'a,'bw! c:/aaa/x :map <f8> | |
8377 :r c:/aaa/x :map <f9> :w<CR>:!c:/php/php.exe %<CR> | |
8378 :map <f11> :.w! c:/aaa/xr<CR> :map <f12> :r | |
8379 c:/aaa/xr<CR> :ab php : list of abbreviations beginning | |
8380 php :map , : list of maps beginning , # For use in Maps | |
8381 <CR> : carriage Return for maps <ESC> : | |
8382 Escape <LEADER> : normally \ <BAR> : | pipe | |
8383 ------------------------------------------------------------------------------ | |
8384 # List your Registers :reg : display contents | |
8385 of all registers "1p.... : retrieve numeric buffers | |
8386 ------------------------------------------------------------------------------ | |
8387 # Useful trick "ayy@a : execute "Vim command" in a | |
8388 text file yy@" : same thing using unnamed register | |
8389 ------------------------------------------------------------------------------ | |
8390 # Get output from other commands :r!ls.exe : | |
8391 reads in output of ls !!date : same thing | |
8392 :%!sort -u : use an external program to filter content | |
8393 ------------------------------------------------------------------------------ | |
8394 # Multiple Files Management :wn : write file and move to | |
8395 next (SUPER) :bd : remove file from buffer list (SUPER) | |
8396 :sav php.html : Save current file as php.html and "move" to php.html | |
8397 :sp fred.txt : open fred.txt into a split :e! : return to | |
8398 unmodified file :w c:/aaa/% : save file elsewhere :e # : | |
8399 edit alternative file :e % :rew : rewwind to first file in | |
8400 ARGS :bn : next file :bp : next file :brew | |
8401 ------------------------------------------------------------------------------ | |
8402 # Recording (BEST TIP of ALL) qq # record to q your commands | |
8403 q @q to execute @@ to Repeat # editing a register/recording "ap | |
8404 <you can now see register contents, edit as required> "add @a | |
8405 ------------------------------------------------------------------------------ | |
8406 # _vimrc essentials :set incsearch : jumps to search word as you type (annoying | |
8407 but excellent) :set wildignore=*.o,*.obj,*.bak,*.exe :set shiftwidth=3 | |
8408 ------------------------------------------------------------------------------ | |
8409 # launching Win IE :nmap ,f :update<CR>:silent | |
8410 !start c:\progra~1\intern~1\iexplore.exe | |
8411 file://%:p<CR> :nmap ,i :update<CR>: !start | |
8412 c:\progra~1\intern~1\iexplore.exe <cWORD><CR> | |
8413 ------------------------------------------------------------------------------ | |
8414 # FTPing from VIM cmap ,r :Nread <A | |
8415 HREF="ftp://209.51.134.122/public_html/index.html | |
8416 ">ftp://209.51.134.122/public_html/index.html </A><BR> cmap ,w :Nwrite <A | |
8417 HREF="ftp://209.51.134.122/public_html/index.html">ftp://209.51.134.122/public_html/index.html</A><BR> | |
8418 gvim <A | |
8419 HREF="ftp://209.51.134.122/public_html/index.html">ftp://209.51.134.122/public_html/index.html</A><BR> | |
8420 ------------------------------------------------------------------------------ | |
8421 # appending to registers (use CAPITAL) # yank | |
8422 5 lines into "a" then add a further 5 "a5yy 10j "A5yy | |
8423 ------------------------------------------------------------------------------ | |
8424 [I : show lines matching word under cursor <cword> | |
8425 ------------------------------------------------------------------------------ | |
8426 #Conventional Shifting :'a,'b>> # visual shifting | |
8427 (builtin-repeat) :vnoremap < <gv :vnoremap > >gv | |
8428 ------------------------------------------------------------------------------ | |
8429 # searching /^joe.*fred.*bill/ : normal /^[A-J]\+/ : search | |
8430 for lines beginning A-J followed by at leat 1 A-J /forum\(\_.\)*pent | |
8431 search over possible multiple lines /fred\_s*joe/i : any | |
8432 whitespace including newline /fred\|joe : Search for FRED OR JOE | |
8433 ------------------------------------------------------------------------------ | |
8434 #substitution :%s/fred/joe/igc : general substitute command | |
8435 :%s/\r//g : Delete DOS returns ^M :'a,'bg/fred/s/dick/joe/gc | |
8436 : VERY USEFUL :s/\(.*\):\(.*\)/\2 : \1/ : reverse fields separated | |
8437 by : :%s/^.\{-}pdf/new.pdf/ non greedy matching (ie to first pdf) | |
8438 :s/fred/<c-r>a/g substitute "fred" with contents of register "a" | |
8439 :%s/^\(.*\)\n\1/\1$/ delete duplicate lines # non-greedy matching | |
8440 \{-} :%s/^.\{-}pdf/new.pdf/ :help /\{-} :s/fred/<c-r>a/g | |
8441 substitute "fred" with contents of register "a" # multiple commands | |
8442 :%s/\f\+\.gif\>/\r&\r/g | v/\.gif$/d | %s/gif/jpg/ :%s/suck\|buck/loopy/gc | |
8443 : ORing :s/__date__/\=strftime("%c")/ : insert datestring | |
8444 ------------------------------------------------------------------------------ | |
8445 # global command :g/^\s*$/d :delete all blank lines :g!/^dd/d : | |
8446 delete lines not containing string :v/^dd/d : delete lines not | |
8447 containing string :g/fred/,/joe/d : not line based :v/./.,/./-1join : compress | |
8448 empty lines :'a,'b g/^Error/ . w >> errors.txt :g/cmap\|form/p : ORing | |
8449 ------------------------------------------------------------------------------ | |
8450 # Paste register * :redir @* : redirect commands to paste :redir | |
8451 END "*yy : yank to paste "*p : insert paste buffer | |
8452 ------------------------------------------------------------------------------ | |
8453 # Formatting text gq<CR> gqap (a is motion p paragraph (visual mode)) | |
8454 ------------------------------------------------------------------------------ | |
8455 # Operate command over multiple files :argdo | |
8456 %s/foo/bar/ :bufdo %s/foo/bar/ :windo %s/foo/bar/ | |
8457 ------------------------------------------------------------------------------ | |
8458 # Command line tricks gvim -h ls | gvim - : edit a PIPE!! # | |
8459 vg.ksh (shell script) # vi all files in directory containing | |
8460 keyword $1 and jump to $1 gvim.exe -c "/$1" $(grep -isl "$1" *) & | |
8461 ------------------------------------------------------------------------------ | |
8462 | |
8463 </pre></tip> </html> <Tip category="KVim"> <html><center>Open a | |
8464 web-browser with the URL in the current line</center> <pre> <A | |
8465 HREF="http://vim.sf.net/tip_view.php?tip_id=306">http://vim.sf.net/tip_view.php?tip_id=306</A><BR> | |
8466 | |
8467 function! Browser () | |
8468 let line = getline (".") let line = matchstr (line, "http[^ ]*") exec | |
8469 "!netscape ".line | |
8470 endfunction | |
8471 | |
8472 map <Leader>w :call Browser ()<CR> | |
8473 | |
8474 </pre></tip> </html> <Tip category="KVim"> <html><center>annoying | |
8475 "Hit any key to close this window..."</center> <pre> <A | |
8476 HREF="http://vim.sf.net/tip_view.php?tip_id=307">http://vim.sf.net/tip_view.php?tip_id=307</A><BR> | |
8477 | |
8478 i use gvim and bash heavily under win98. i have | |
8479 | |
8480 let $HOME = substitute($HOME, '\\', '/', 'g') set shell=bash\ --rcfile\ | |
8481 \"$HOME\"_bashrc\ -i | |
8482 | |
8483 in my _vimrc, and something like | |
8484 | |
8485 function br() { if [ $1 ]; then | |
8486 explorer.exe ${1//\//\\} | |
8487 else | |
8488 explorer.exe ${PWD//\//\\} | |
8489 fi | |
8490 } | |
8491 | |
8492 in my _bashrc. when i finish editing one html file, i simply type :!br % | |
8493 | |
8494 everything works fine now. but when :!br % executes, one console window will | |
8495 bump out and wait me to press some key to contiue. i consider this quiet | |
8496 annoying. i want the console window to disappear automatically if no fault | |
8497 has happened. does anyone know how to achieve this? thanks. | |
8498 | |
8499 </pre></tip> </html> <Tip category="KVim"> | |
8500 <html><center>Move through wrapped lines.</center> <pre> <A | |
8501 HREF="http://vim.sf.net/tip_view.php?tip_id=308">http://vim.sf.net/tip_view.php?tip_id=308</A><BR> | |
8502 | |
8503 If you don't like the fact that when you press Up and Down on a wrapped line, | |
8504 you get to the next phisical line instead of the next line on the screen, | |
8505 you can do something like this: | |
8506 | |
8507 imap <silent> <Down> <C-o>gj imap <silent> <Up> | |
8508 <C-o>gk | |
8509 | |
8510 nmap <silent> <Down> gj nmap <silent> <Up> gk | |
8511 | |
8512 </pre></tip> </html> <Tip category="KVim"> <html><center>close | |
8513 vim you left open remotely</center> <pre> <A | |
8514 HREF="http://vim.sf.net/tip_view.php?tip_id=309">http://vim.sf.net/tip_view.php?tip_id=309</A><BR> | |
8515 | |
8516 Vim 6 has this cool client-server protocol. I use it all the time to edit | |
8517 a file in an existing gvim, like so $ gvim --remote [filename] | |
8518 | |
8519 Today I left myself logged in at the console at work, and when I got home | |
8520 I realized I had left vim running with files unsaved. I think I even left | |
8521 it in insert mode. I wanted to edit these files at home. So I ssh'd to the | |
8522 machine and started playing with the --remote commands. | |
8523 | |
8524 :help was a bit cryptic | |
8525 --remote-send {keys} Send {keys} to server and exit. | |
8526 | |
8527 After a lot of failed attempts, I finally succeeded in getting the remote | |
8528 vim to save its buffers and quit. | |
8529 | |
8530 $ DISPLAY=:0 vim --servername GVIM --remote-send '<ESC>:wqa<CR>' | |
8531 | |
8532 A couple of notable things. Then environment variable DISPLAY has to be the | |
8533 display of the remote vim, and you have to be able to open that display. The | |
8534 client-server stuff is done through X. | |
8535 | |
8536 The <CR> is important. This part eluded me for a long time. The {keys} | |
8537 are just like keys you would press if you were editing at the console, | |
8538 and you have to press enter, or vim won't do anything. | |
8539 | |
8540 Check your .swp files to make sure vim really closed the files it was | |
8541 editing. Vim provides little feedback as to the success or failure of what | |
8542 you're trying to do remotely. Nonetheless, it's clearly a useful feature to | |
8543 have available. | |
8544 | |
8545 </pre></tip> </html> <Tip category="KVim"> <html><center>showing ascii | |
8546 value of the current character in decimal, hex, and octal</center> <pre> <A | |
8547 HREF="http://vim.sf.net/tip_view.php?tip_id=310">http://vim.sf.net/tip_view.php?tip_id=310</A><BR> | |
8548 | |
8549 dont know if you guys know this or not, but i was trying to make the word | |
8550 "hello" to upper case by trying "gaUw" (= which didnt work but it showed | |
8551 the decimal, hex, and octal of the char under the cursor... ncie to know. | |
8552 | |
8553 </pre></tip> </html> <Tip category="KVim"> <html><center>Open | |
8554 the folder containing the currently open file</center> <pre> <A | |
8555 HREF="http://vim.sf.net/tip_view.php?tip_id=311">http://vim.sf.net/tip_view.php?tip_id=311</A><BR> | |
8556 | |
8557 Occasionally, on windows, I have files open in gvim, that the folder for that | |
8558 file is not open. This key map opens the folder that contains the currently | |
8559 open file. The expand() is so that we don't try to open the folder of an | |
8560 anonymous buffer, we would get an explorer error dialog in that case. | |
8561 | |
8562 if has("gui_running") | |
8563 if has("win32") | |
8564 " Open the folder containing the currently open file. Double <CR> at | |
8565 end " is so you don't have to hit return after command. Double quotes are | |
8566 " not necessary in the 'explorer.exe %:p:h' section. :map <silent> | |
8567 <C-F5> :if expand("%:p:h") != ""<CR>:!start explorer.exe | |
8568 %:p:h<CR>:endif<CR><CR> | |
8569 endif | |
8570 endif | |
8571 | |
8572 Tom. | |
8573 | |
8574 </pre></tip> </html> <Tip category="KVim"> | |
8575 <html><center>Copy, Cut, and Paste</center> <pre> <A | |
8576 HREF="http://vim.sf.net/tip_view.php?tip_id=312">http://vim.sf.net/tip_view.php?tip_id=312</A><BR> | |
8577 | |
8578 PS: copy, cut, and paste are the words from (usually) gui editor. | |
8579 | |
8580 Ever try to cut (or copy) some lines and paste to another place? If you | |
8581 need to count the lines first, then try these to eliminate counting task. | |
8582 | |
8583 Cut and Paste: | |
8584 | |
8585 1. Place the cursor at the beginning of the block you want to CUT. 2. Mark | |
8586 it with md 3. Go to the end of the block. 4. Cut it with d'd 5. Go to the | |
8587 new location that you want to PASTE those text. 6. Press P. | |
8588 | |
8589 Copy and Paste: | |
8590 | |
8591 1. Place the cursor at the beginning of the block you want to COPY. 2. Mark | |
8592 it with my 3. Go to the end of the block. 4. Cut it with y'y 5. Go to the | |
8593 new location that you want to PASTE those text. 6. Press P. | |
8594 | |
8595 The name of the mark used is related to the operation (d:delete or y:yank). | |
8596 I found that those mark names requires minimal movement of my finger. ;) | |
8597 | |
8598 </pre></tip> </html> <Tip category="KVim"> <html><center>printing | |
8599 using kprinter (unix + kde)</center> <pre> <A | |
8600 HREF="http://vim.sf.net/tip_view.php?tip_id=313">http://vim.sf.net/tip_view.php?tip_id=313</A><BR> | |
8601 | |
8602 just add set printexpr=system('kprinter'\ .\ '\ '\ .\ v:fname_in)\ .\ | |
8603 delete(v:fname_in)\ +\ v:shell_error to your ~/.vimrc; further on all your | |
8604 printing will be piped through the nice and consistent print-dialog of kde. | |
8605 | |
8606 lg, tomte | |
8607 | |
8608 </pre></tip> </html> <Tip category="KVim"> | |
8609 <html><center>Insert and back...</center> <pre> <A | |
8610 HREF="http://vim.sf.net/tip_view.php?tip_id=314">http://vim.sf.net/tip_view.php?tip_id=314</A><BR> | |
8611 | |
8612 this is related to vimtip #289 in terms of programmers (like I) too lazy to | |
8613 move their hands to reach the far far away <esc> key.... joking! :) | |
8614 actually the less your hands move around the faster you type, and the fester | |
8615 you type the more time you have on your hands to think of "what" you type... | |
8616 | |
8617 here is a small snippet from my mappings file, ready to speed things up: // | |
8618 the key overloading might be a somewhat confusing at first.... | |
8619 | |
8620 --cut--- imap <S-Space> <esc>l imap <C-CR> <esc>o | |
8621 imap <S-CR> <esc>O | |
8622 | |
8623 nmap <S-Space> i nmap <space><space> i nnoremap <CR> | |
8624 o nmap <S-CR> O | |
8625 | |
8626 ---uncut--- | |
8627 | |
8628 Good luck!! | |
8629 | |
8630 </pre></tip> </html> <Tip category="KVim"> | |
8631 <html><center>"Smart <home>"</center> <pre> <A | |
8632 HREF="http://vim.sf.net/tip_view.php?tip_id=315">http://vim.sf.net/tip_view.php?tip_id=315</A><BR> | |
8633 | |
8634 to make it faster to navigate through indented code here is a common way to | |
8635 "go home"... | |
8636 | |
8637 ---cut--- fun! s:SmartHome() | |
8638 if col('.') != match(getline('.'), '\S')+1 | |
8639 norm ^ | |
8640 else | |
8641 :call cursor(line('.'),2) norm h | |
8642 endif | |
8643 endfun inoremap <silent><home> <C-O>:call | |
8644 <SID>SmartHome()<CR> nnoremap <silent><home> :call | |
8645 <SID>SmartHome()<CR> vnoremap <silent><home> :call | |
8646 <SID>SmartHome()<CR> | |
8647 | |
8648 ---uncut--- | |
8649 | |
8650 what this snippet does is make the <home> key behave as it does in | |
8651 such IDEs as PythonWin or MSVisualStudio, and that is first go to the first | |
8652 non whitespace, and then to the first char on the line. | |
8653 | |
8654 </pre></tip> </html> <Tip category="KVim"> <html><center>Using | |
8655 /pattern/ search in a script</center> <pre> <A | |
8656 HREF="http://vim.sf.net/tip_view.php?tip_id=316">http://vim.sf.net/tip_view.php?tip_id=316</A><BR> | |
8657 | |
8658 There are a number of ways you can search for a pattern in a script. | |
8659 The search function is the typical way to search for a pattern. But, it | |
8660 has limited options. In particular, there are no options to control the | |
8661 position of the cursor after it matches the pattern. | |
8662 | |
8663 Instead you can use :normal command. The secret is to add a <CR> | |
8664 (^M) on the end of the command. For example, to search for "pattern" | |
8665 and move the cursor to the end of the matching pattern issue the command: | |
8666 | |
8667 :normal /pattern/e+1^M | |
8668 | |
8669 where ^M is a real carriage return. It can be entered with | |
8670 <c-v><c-m>. | |
8671 | |
8672 Another use is when you want to enter a bunch of normal commands together. | |
8673 For example, if you were looking to find a '{' to highlight and delete | |
8674 a C block. The '{' may not be on the same line so you can't use the "f" | |
8675 normal command. | |
8676 | |
8677 :normal V/{/^M%d | |
8678 | |
8679 A drawback to using the normal command is that if the pattern does not | |
8680 match then it is difficult to detect. Also, you can get in trouble with | |
8681 the wrapscan setting. | |
8682 | |
8683 For more information about these commands look at | |
8684 | |
8685 :help / :help normal :help search() | |
8686 | |
8687 </pre></tip> </html> <Tip category="KVim"> | |
8688 <html><center>Mozilla Vim Keybindings</center> <pre> <A | |
8689 HREF="http://vim.sf.net/tip_view.php?tip_id=317">http://vim.sf.net/tip_view.php?tip_id=317</A><BR> | |
8690 | |
8691 If you use VIM you like the h, j, k, and l movement keys. I found myself | |
8692 annoyed at not having these movement keys available when browsing web pages. | |
8693 Moving to the arrow keys on a laptop is annoying to just scroll the page. | |
8694 | |
8695 Locate your mozilla/res/builtin directory (varies by platform). You could | |
8696 search for htmlBindings.xml to find it. (ie. locate htmlBindings.xml. | |
8697 | |
8698 On Mac OS X it's inside the Mozilla application bundle. | |
8699 /Applications/Mozilla/Mozilla.app/Contents/MacOS/res/builtin. | |
8700 | |
8701 Create a new XML file called userHTMLBindings.xml, making it executable for | |
8702 all users and making sure the CRLF format is the same as htmlBindings.xml. | |
8703 i.e. on Mac OS X most files use \r but Vim writes \n instead. You can either | |
8704 save the file with Vim as a Mac formatted file or use tr '\n' '\r' < | |
8705 input.xml > output.xml to convert the file. | |
8706 | |
8707 Place the following XML into the userHTMLBindings.xml file. | |
8708 | |
8709 <?xml version="1.0"?> | |
8710 | |
8711 <bindings id="htmlBindings" | |
8712 xmlns="<A | |
8713 HREF="http://www.mozilla.org/xbl"">http://www.mozilla.org/xbl"</A><BR> | |
8714 xmlns:xul="<A | |
8715 HREF="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">">http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"></A><BR> | |
8716 | |
8717 <binding id="browserUser"> | |
8718 <handlers> | |
8719 <handler event="keypress" key="h" command="cmd_scrollLeft"/> | |
8720 <handler event="keypress" key="j" command="cmd_scrollLineDown"/> | |
8721 <handler event="keypress" key="k" command="cmd_scrollLineUp"/> | |
8722 <handler event="keypress" key="l" command="cmd_scrollRight"/> | |
8723 </handlers> | |
8724 </binding> | |
8725 </bindings> | |
8726 | |
8727 There are many more bindings one could configure to get Vim like keybindings. | |
8728 You can read <A HREF="http://www.mozilla.org/unix/customizing.html#keys for | |
8729 more information.">http://www.mozilla.org/unix/customizing.html#keys for | |
8730 more information.</A><BR> | |
8731 | |
8732 PS. I love the keymaster/gatekeeper xul reference in the xul URL above. | |
8733 It's from the original GhostBusters movie. ;-) | |
8734 | |
8735 | |
8736 | |
8737 </pre></tip> </html> <Tip category="KVim"> <html><center>Extended | |
8738 Bracket and Parenthesis + extras for perl</center> <pre> <A | |
8739 HREF="http://vim.sf.net/tip_view.php?tip_id=318">http://vim.sf.net/tip_view.php?tip_id=318</A><BR> | |
8740 | |
8741 This is an extension of vimtip #153 I found this tip useful, but the jump | |
8742 seemed out of place for me, I couldn't enter just one ' or ", and so I created | |
8743 an improvement Basically, I set it up so that when you're in perl and have | |
8744 a non keyword charcter, (except for @, $ and % for perl) and you type a { | |
8745 you get: { | |
8746 | <- cursor | |
8747 } Where as, when I have a keyword I get: word{} With the cursor in the middle, | |
8748 for hashes in perl. I can jump out of any block, except the "" or '' blocks, | |
8749 by typing their closing charcter. So } jumps me out past the next } in | |
8750 the file. | |
8751 | |
8752 Warning, this search may wrap around. | |
8753 | |
8754 Finally, I made it so that, using the alt key, <Alt-'> inserts a ' | |
8755 <Alt-/> inserts a " <Alt-[> inserts a [ <Alt-]> inserts a | |
8756 ] <Alt--> inserts a { <Alt-=> inserts a } <Alt-,> inserts | |
8757 a < <Alt-.> inserts a > | |
8758 | |
8759 "######################################## " File - | |
8760 matchMe.vim " Date - Wednesday, August 21, 2002 | |
8761 "######################################## | |
8762 | |
8763 " This code fixes my problem with " does the one format for perl and still | |
8764 keeps hashes function! InsertBrackets() | |
8765 let fileType = &ft | |
8766 | |
8767 if fileType == 'perl' | |
8768 let col = col('.') - 1 if !col || getline('.')[col - 1] !~ | |
8769 '\k' && getline('.')[col - 1] !~ '\$' && getline('.')[col - 1] | |
8770 !~ '@' && getline('.')[col - 1] !~ '%' && getline('.')[col - | |
8771 1] !~ '#' | |
8772 return "{\<cr>\<bs>}\<esc>ko" | |
8773 else | |
8774 return "{}\<esc>i\<c-o>:echo \<cr>" | |
8775 endif | |
8776 else | |
8777 return "{\<cr>\<bs>}\<esc>ko" | |
8778 endif | |
8779 endfunction | |
8780 | |
8781 " This code jumps out of the brackets function! JumpNext(normChar) | |
8782 let ret = | |
8783 "\<space>\<esc>ma\<left>/\\".a:normChar."\<cr>mb`ai\<del>\<esc>`bi\<right>" | |
8784 return ret | |
8785 endfunction | |
8786 | |
8787 " mappings inoremap " ""<esc>i<c-o>:echo | |
8788 <cr> inoremap ' ''<esc>i<c-o>:echo <cr> | |
8789 inoremap < <><esc>i<c-o>:echo <cr> | |
8790 inoremap ( ()<esc>i<c-o>:echo <cr> inoremap [ | |
8791 []<esc>i<c-o>:echo <cr> inoremap { <c-r>=InsertBrackets | |
8792 ()<cr> inoremap > <c-r>=JumpNext(">")<cr> | |
8793 inoremap ) <c-r>=JumpNext(")")<cr> | |
8794 inoremap ] <c-r>=JumpNext("]")<cr> inoremap } | |
8795 <c-r>=JumpNext("}")<cr> inoremap <m-[> [ inoremap <m-]> | |
8796 ] inoremap <m-/> " inoremap <m--> { inoremap <m-=> } | |
8797 inoremap <m-,> < inoremap <m-.> > inoremap <m-'> ' | |
8798 | |
8799 "######################################## " End Of File | |
8800 "######################################## | |
8801 | |
8802 If you have any other suggestions, drop a note... | |
8803 | |
8804 </pre></tip> </html> <Tip category="KVim"> <html><center>text | |
8805 formatting (lining up ='s,('s etc))</center> <pre> <A | |
8806 HREF="http://vim.sf.net/tip_view.php?tip_id=319">http://vim.sf.net/tip_view.php?tip_id=319</A><BR> | |
8807 | |
8808 some time onw would like to reformat text like a=1; foo=2; longstring=1; c=2 | |
8809 | |
8810 to | |
8811 | |
8812 a =1; foo =2; longstring =1; c =2; | |
8813 | |
8814 Note I am not sure wether the code above is displayed properly in your browsers | |
8815 what is basically shows is all the ='s are lined up in a single column | |
8816 and this is how we achive it 0f=20i<space><esc>020lvf=hx and | |
8817 this is what it does 0 goes to first column f= | |
8818 finds next occurance of = on current line 20i<space><esc> | |
8819 inserts 20 spaces before = 0 goesback to | |
8820 first column 20l forward 20 column vf=hx | |
8821 deletes everything up to the = sign | |
8822 | |
8823 </pre></tip> </html> <Tip category="KVim"> | |
8824 <html><center>Borland pageup/down behavier</center> <pre> <A | |
8825 HREF="http://vim.sf.net/tip_view.php?tip_id=320">http://vim.sf.net/tip_view.php?tip_id=320</A><BR> | |
8826 | |
8827 borlandbehavier = the cursor keeps the same xy position during pageup/down | |
8828 | |
8829 Im new to VIM scripting, im sure it can be done smarter? I read vimtip #105 | |
8830 and it gave me a clue of how BorlandPageUp/Down could be done. | |
8831 | |
8832 " i could'nt find any get_number_of_visible_lines function, so i made my own. | |
8833 function GetNumberOfVisibleLines() | |
8834 let cur_line = line(".") let cur_col = virtcol(".") normal H let | |
8835 top_line = line(".") normal L let bot_line = line(".") | |
8836 | |
8837 execute "normal " . cur_line . "G" execute "normal " . cur_col . "|" | |
8838 return bot_line - top_line | |
8839 endfunc | |
8840 | |
8841 " noremap <PageUp> 39<C-U>:set scroll=0<CR> | |
8842 function! MyPageUp() | |
8843 let visible_lines = GetNumberOfVisibleLines() execute "normal " | |
8844 . visible_lines . "\<C-U>:set scroll=0\r" | |
8845 endfunction | |
8846 | |
8847 " noremap <PageDown> 39<C-D>:set scroll=0<CR> | |
8848 function! MyPageDown() | |
8849 let visible_lines = GetNumberOfVisibleLines() execute "normal " | |
8850 . visible_lines . "\<C-D>:set scroll=0\r" | |
8851 endfunction | |
8852 | |
8853 " BorlandPascal pageup/down behavier! " todo: when hitting top/bottom of file, | |
8854 then restore Y to lastY noremap <PageUp> :call MyPageUp()<CR> | |
8855 noremap <PageDown> :call MyPageDown()<CR> | |
8856 | |
8857 </pre></tip> </html> <Tip category="KVim"> <html><center>Centura | |
8858 swap with upper/lower line behavier</center> <pre> <A | |
8859 HREF="http://vim.sf.net/tip_view.php?tip_id=321">http://vim.sf.net/tip_view.php?tip_id=321</A><BR> | |
8860 | |
8861 I was once forced to use a windows development suite called "Centura". | |
8862 The only good thing i remember was its swap current_line with upper/lower line. | |
8863 | |
8864 function! MySwapUp() | |
8865 let cur_col = virtcol(".") normal ddkkp execute "normal " . cur_col . "|" | |
8866 endfunction | |
8867 | |
8868 function! MySwapDown() | |
8869 let cur_col = virtcol(".") normal ddp execute "normal " . cur_col . "|" | |
8870 endfunction | |
8871 | |
8872 " swap lines and preserve cursorx " todo: in visual mode, perform swap with | |
8873 line before/after the selection noremap <S-Up> :call MySwapUp()<CR> | |
8874 noremap <S-Down> :call MySwapDown()<CR> | |
8875 | |
8876 </pre></tip> </html> <Tip category="KVim"> <html><center>text | |
8877 template with placeholders</center> <pre> <A | |
8878 HREF="http://vim.sf.net/tip_view.php?tip_id=322">http://vim.sf.net/tip_view.php?tip_id=322</A><BR> | |
8879 | |
8880 Many scripts/ftplugin provide text or code templates. Sadly none of the | |
8881 marks the places where you are supposed to "fill in the form". My own code | |
8882 templates for C/C++ insert a triple percent (%%%) where you are supposed to | |
8883 enter something. I mapped ;; to find the next %%% and change them. All the | |
8884 template mappings are insert-mode only, while the "skip to next placeholder" | |
8885 is both insert and normal mode enabled. | |
8886 | |
8887 A complete for-loop template for C++ looks like: | |
8888 | |
8889 :imap <buffer> ;fo <C-O>mzfor( %%%; %%%; %%%)<CR>{ // | |
8890 %%%<CR>%%%<CR>}<CR><C-O>'z;; | |
8891 | |
8892 The command to go to the next placeholder is this: | |
8893 | |
8894 :imap <buffer> ;; <C-O>/%%%<CR><C-O>c3l :nmap | |
8895 <buffer> ;; /%%%<CR>c3l | |
8896 | |
8897 Every time I need a for-loop ;fo produces this ( _ is the cursor position) | |
8898 : for( _; %%% ; %%%) { // %%% | |
8899 %%% | |
8900 } | |
8901 | |
8902 Now I enter starting value (i=0): for( i=0_; %%% ; %%%) { // %%% | |
8903 %%% | |
8904 } | |
8905 | |
8906 and go to the condition using ;; for( i=0; _ ; %%%) { // %%% | |
8907 %%% | |
8908 } | |
8909 | |
8910 and so forth. | |
8911 | |
8912 The choice of %%% proved to be almost universal, it even works in MATLAB or | |
8913 LaTeX where % is the comment character. | |
8914 | |
8915 Even if you forget to replace one %%%, that's not a problem as the compiler | |
8916 flags is as a syntax error (except MATLAB and LaTeX, of course). | |
8917 | |
8918 It made my life easier, maybe it works for you. | |
8919 | |
8920 </pre></tip> </html> <Tip category="KVim"> | |
8921 <html><center>using folders with latex</center> <pre> <A | |
8922 HREF="http://vim.sf.net/tip_view.php?tip_id=323">http://vim.sf.net/tip_view.php?tip_id=323</A><BR> | |
8923 | |
8924 set foldmarker=\\begin,\\end set foldmethod=marker | |
8925 | |
8926 this is useful with big latex document | |
8927 | |
8928 </pre></tip> </html> <Tip category="KVim"> <html><center>Search | |
8929 and replace in files named NAME</center> <pre> <A | |
8930 HREF="http://vim.sf.net/tip_view.php?tip_id=324">http://vim.sf.net/tip_view.php?tip_id=324</A><BR> | |
8931 | |
8932 I'm not sure if there is a simple way to do this from within Vim, but, | |
8933 I wrote this simple script that does it. It basically searches for files | |
8934 named NAMED (whatever name pass) for a given string and replaces that with | |
8935 a given string: find_replace.sh NAMED "string_to_find" "string_to_replace" | |
8936 | |
8937 This is all done from the command line without opening Vim. | |
8938 | |
8939 Of course one could do things like: | |
8940 :let n = 1 :while n <= argc() " loop over all | |
8941 files in arglist : exe "argument " . n : " start at | |
8942 the last char in the file and wrap for the : " first | |
8943 search to find match at start of file : normal G$ : | |
8944 let flags = "w" : while search("foo", flags) > 0 : | |
8945 s/foo/bar/g : let flags = "W" : endwhile : update | |
8946 " write the file if modified : let n = n + 1 :endwhile | |
8947 | |
8948 As suggested in the Vim help files :-) but, I wanted to go and find only | |
8949 these files... here is the script: | |
8950 1 #!/bin/sh 2 # Luis Mondesi < lemsx1@hotmail.com > 3 # | |
8951 DESCRIPTION: 4 # it uses vim to replace a given string for 5 # | |
8952 another in a number of files 6 # 7 # usage: 8 # find_replace.sh file | |
8953 "string" "replace" 9 # | |
8954 10 if [ $1 -a $2 -a $3 ]; then 11 for i in `find . -name "$1" | |
8955 -type f | xargs grep -l $2`; do 12 # how do search and replace | |
8956 13 # the screen might flicker... vim opening and closing... | |
8957 14 vim -c ":%s/$2/$3/g" -c ":wq" $i 15 done 16 exit 0 | |
8958 17 fi 18 # I should never reach here 19 echo -e "USAGE: find_replace.sh | |
8959 file 'string' 'replace' \n\n" 20 exit 1 | |
8960 | |
8961 </pre></tip> </html> <Tip category="KVim"> <html><center>Errorformat | |
8962 for java/ant/junit/cygwin/bash</center> <pre> <A | |
8963 HREF="http://vim.sf.net/tip_view.php?tip_id=325">http://vim.sf.net/tip_view.php?tip_id=325</A><BR> | |
8964 | |
8965 If you program in Java and use Jakarta ant for builds *and* if you have the | |
8966 bash shell, this tip will make your development experience a little smoother. | |
8967 | |
8968 This tip will result in a working compile/edit/debug system (in Win32 vim/gvim | |
8969 and in Cygwin vim) that takes you to the exact lines where the build fails, | |
8970 whether the failure is a compilation error or a junit test failure. If you | |
8971 use bash on a linux box, you shouldn't have to change very much to get | |
8972 everything to work. | |
8973 | |
8974 There are 6 sections: 1. set up your build script 2. set up makeprg 3. set | |
8975 up shell options 4. set up path formatting options 5. set up your errorformat | |
8976 6. set up key mappings | |
8977 | |
8978 Set up build script ------------------- Add the following script to your path | |
8979 (I use /usr/local/bin/): | |
8980 | |
8981 mymake: #!/bin/bash cd /work/ ant -emacs $* 2>&1 | tr '\\' / | tr ^M ' | |
8982 ' | sed -u -n -f /usr/local/bin/testerrors.sed | tee /tmp/errors | |
8983 | |
8984 Comment: sed -u is non-standard, use the code at: <A | |
8985 HREF="http://mail.gnu.org/pipermail/bug-gnu-utils/2002-May/000192.html to | |
8986 get">http://mail.gnu.org/pipermail/bug-gnu-utils/2002-May/000192.html to | |
8987 get</A><BR> the -u option for sed (this avoids waiting for the build output | |
8988 to get to the screen) | |
8989 | |
8990 testerrors.sed: # This assumes that all your junit test cases are in a com.* | |
8991 package /^Running com\./ { | |
8992 # duplicate the line s!\(.*\)!\1\ | |
8993 \1! | |
8994 P | |
8995 | |
8996 # turn the test package into a directory path for %D errorformat | |
8997 s!.*\(com\..*\)\.[A-Za-z_][A-Za-z0-9_]*!\1! s!\.!/!g s!.*!Entering: | |
8998 /work/src/&! | |
8999 | |
9000 # print the line and go on p n | |
9001 } | |
9002 | |
9003 # just pass any unmatched lines through p | |
9004 | |
9005 Set up makeprg -------------- Add the following lines to your vimrc: | |
9006 autocmd BufNewFile,BufRead /work/*.java set makeprg=mymake autocmd | |
9007 BufNewFile,BufRead ?:/work/*.java set makeprg=mymake | |
9008 | |
9009 Set up shell options -------------------- Add the following lines to your | |
9010 vimrc: | |
9011 " in order to have bash as the shell for win32 vi.exe and gvim.exe, | |
9012 you have " to set these options, and also build vimrun.exe in the cygwin | |
9013 environment " so that the system() call is executed via bash, not cmd.exe | |
9014 -- the command " to build vimrun.exe is "make -f Make_cyg.mak vimrun.exe" | |
9015 set shell=bash.exe set shellcmdflag=-c set shellslash | |
9016 | |
9017 Also to use this environment in Win32 gvim, you must recompile vimrun so | |
9018 that gvim invokes the shell via bash, not via cmd.exe. | |
9019 | |
9020 Set up path formatting options ------------------------------ Add the | |
9021 following lines to your vimrc: | |
9022 " allows DOS file names from UNIX (Cygwin) vim set isfname+=\ | |
9023 | |
9024 Set up your errorformat ----------------------- Add the following lines to | |
9025 your vimrc: | |
9026 " the "\%DEntering:\ %f," rule relies on a sed script which generates " | |
9027 "Entering: " messages for each test class run (the directory name is " | |
9028 generated from the test class package and a hard-coded src root) | |
9029 | |
9030 " the "%\\C" at the start of the exception matching line tells to match | |
9031 " case-exact (the exception mathching lines rely on the %D rule that sets | |
9032 " up the correct directory from the package structure) | |
9033 | |
9034 " ant/junit/javac errorformat set errorformat= | |
9035 \%-G%.%#build.xml:%.%#, \%-G%.%#warning:\ %.%#, \%-G%\\C%.%#EXPECTED%.%#, | |
9036 \%f:%l:\ %#%m, \C:%f:%l:\ %m, \%DEntering:\ %f\ %\\=, \%ECaused\ | |
9037 by:%[%^:]%#:%\\=\ %\\=%m, \%ERoot\ cause:%[%^:]%#:%\\=\ %\\=%m, | |
9038 \%Ecom.%[%^:]%#:%\\=\ %\\=%m, \%Eorg.%[%^:]%#:%\\=\ %\\=%m, | |
9039 \%Ejava.%[%^:]%#:%\\=\ %\\=%m, \%Ejunit.%[%^:]%#:%\\=\ %\\=%m, | |
9040 \%-Z%\\C\ at\ com.mypkg.%.%#.test%[A-Z]%.%#(%f:%l)\ %\\=, | |
9041 \%-Z%\\C\ at\ com.mypkg.%.%#.setUp(%f:%l)\ %\\=, \%-Z%\\C\ at\ | |
9042 com.mypkg.%.%#.tearDown(%f:%l)\ %\\=, \%-Z%^\ %#%$, \%-C%.%#, \%-G%.%# | |
9043 | |
9044 NOTE: Make sure that the character before "at" is an actual Tab character | |
9045 in the three long -Z lines above | |
9046 | |
9047 Here is an annotated version: | |
9048 set errorformat= | |
9049 " don't treat the build.xml diagnostic as an error | |
9050 \%-G%.%#build.xml:%.%#, | |
9051 | |
9052 " don't treat warning lines as errors \%-G%.%#warning:\ %.%#, | |
9053 | |
9054 " don't treat lines containing "EXPECTED" as errors | |
9055 \%-G%\\C%.%#EXPECTED%.%#, | |
9056 | |
9057 " look for this standard error format \%f:%l:\ %#%m, | |
9058 | |
9059 " look for this standard error format (with C: on front) \C:%f:%l:\ %m, | |
9060 | |
9061 " look for special sed-generated "Entering" lines while running tests | |
9062 \%DEntering:\ %f\ %\\=, | |
9063 | |
9064 " look for exceptions that were thrown in the tests, use the exception | |
9065 " description as the error message (don't know how to also include the | |
9066 " exception name in the error message) \%ECaused\ by:%[%^:]%#:%\\=\ | |
9067 %\\=%m, \%ERoot\ cause:%[%^:]%#:%\\=\ %\\=%m, \%Ecom.%[%^:]%#:%\\=\ | |
9068 %\\=%m, \%Eorg.%[%^:]%#:%\\=\ %\\=%m, \%Ejava.%[%^:]%#:%\\=\ %\\=%m, | |
9069 \%Ejunit.%[%^:]%#:%\\=\ %\\=%m, | |
9070 | |
9071 " using the "Entering" directory and the filename/line number provided | |
9072 " in the exception trace, go to the test method where the exception | |
9073 " was thrown \%-Z%\\C\ at\ com.mypkg.%.%#.test%[A-Z]%.%#(%f:%l)\ | |
9074 %\\=, \%-Z%\\C\ at\ com.mypkg.%.%#.setUp(%f:%l)\ %\\=, \%-Z%\\C\ at\ | |
9075 com.mypkg.%.%#.tearDown(%f:%l)\ %\\=, | |
9076 | |
9077 " empty lines terminate searching for further exception lines \%-Z%^\ | |
9078 %#%$, | |
9079 | |
9080 " any line can intervene between the start of an exception printout | |
9081 " and the line where it ends (last in list so that it is matched if | |
9082 " none of the other exception trace patterns match) \%-C%.%#, | |
9083 | |
9084 " all other lines are not errors \%-G%.%# | |
9085 | |
9086 Set up key mappings ------------------- Add the following lines to your vimrc: | |
9087 nmap <F10> :clist<CR> nmap <F11> :cprev<CR> nmap | |
9088 <F12> :cnext<CR> | |
9089 | |
9090 This allows for quick error navigation. | |
9091 | |
9092 NOTES ----- Vim treats the "Entering: /work/src/..." messages in a weird way. | |
9093 If there are any actual errors, then these error lines are ignored by the | |
9094 :cnext and :cprev commands, but if there are no real errors, then :cnext and | |
9095 :cprev roll through these "Entering:" messages as if they were errors, but | |
9096 since they don't include any line numbers, the cursor position is never moved. | |
9097 | |
9098 I thought that this was strange, but even stranger, it is programmed directly | |
9099 into the vim error handling code to function exactly this way. There were | |
9100 no comments, and nobody responded on the vim mailing list, so I just decided | |
9101 to live with it. | |
9102 | |
9103 The upshot of it all is that if you see an error like "Entering:", chances | |
9104 are that your build succeeded and all the tests ran without a problem. | |
9105 | |
9106 Hope this helps... | |
9107 | |
9108 Mail me with bugs at jdsumsion at earthlink.net. | |
9109 | |
9110 </pre></tip> </html> <Tip category="KVim"> <html><center>Help | |
9111 for VIM Help (VIM QuickRef)</center> <pre> <A | |
9112 HREF="http://vim.sf.net/tip_view.php?tip_id=326">http://vim.sf.net/tip_view.php?tip_id=326</A><BR> | |
9113 | |
9114 Type :help quickref or :h quic | |
9115 | |
9116 And get a VIM Command Quick Reference Page brilliant for beginners & | |
9117 oldtimers alike | |
9118 | |
9119 type :h help to learn how to use help | |
9120 | |
9121 Other Help Tips | |
9122 | |
9123 # help for help :h visual<C-D><tab> : obtain list of all | |
9124 visual help topics | |
9125 : Then use tab to step thru them | |
9126 :h ctrl<C-D> : list help of all control keys :h :r | |
9127 : help for :ex command :h CTRL-R : normal mode :h \r | |
9128 : what's \r in a regexp :h i_CTRL-R : help for say <C-R> | |
9129 in insert mode :h c_CTRL-R : help for say <C-R> in command | |
9130 mode :h v_CTRL-V : visual mode :h tutor : VIM Tutor | |
9131 | |
9132 These are also listed in my Best Of VIM Tips vimtip #305 | |
9133 | |
9134 </pre></tip> </html> <Tip category="KVim"> | |
9135 <html><center>key mappings</center> <pre> <A | |
9136 HREF="http://vim.sf.net/tip_view.php?tip_id=327">http://vim.sf.net/tip_view.php?tip_id=327</A><BR> | |
9137 | |
9138 I use my left thumb for the alt key and right for the space. Using this | |
9139 combo, you can get some useful key maps for which you don't have to move | |
9140 your hands. I find I have to turn my hand a little to press the left ctrl key. | |
9141 | |
9142 These are some maps i use for C programming. | |
9143 | |
9144 map ' ` map <C-f> :w<C-m>:!make<C-m> map <M-]> | |
9145 <C-]> Tags map <M-[> | |
9146 <C-t> Tags map <M-u> | |
9147 :!ctags -R *<C-m> Build | |
9148 Tags map <M-c> I/*<Esc>A*/<Esc> | |
9149 Comment current line map <M-d> ^xx$xx | |
9150 Delete comment for a single line map <M-l> | |
9151 [{zf% Fold upto the enclosing brace | |
9152 level map <M-o> zo open fold | |
9153 map <M-i> zc close fold map | |
9154 <M-.> :cn<C-m> Go | |
9155 to next error in list map <M-,> :cp<C-m> | |
9156 previous error in list | |
9157 | |
9158 imap <Tab> <C-p> | |
9159 Complete word inoremap <S-Tab> <Tab> | |
9160 Tab inoremap { <CR>{<CR> | |
9161 Brace and line inoremap } <CR>} | |
9162 brace and line. saves one enter stroke | |
9163 | |
9164 imap <M-j> <Esc> | |
9165 Escape. Don't want to move my hand to esc key. imap <M-k> <C-y> | |
9166 Copy line from above. imap <M-q> /* */<Esc>hhi | |
9167 Comment selected lines | |
9168 | |
9169 noremap <M-r> ddko{<C-m>}<Esc>kpko Convert a | |
9170 simple statement to a compound statement. And place cursor above prev line. | |
9171 noremap <M-k> ddko{<C-m>}<Esc>kpo Same as | |
9172 above but place cursor below old line. | |
9173 | |
9174 vnoremap <M-j> <Esc> vnoremap <M-c> | |
9175 di/*<C-m>/<C-m><Esc>kkp Commented selected text | |
9176 | |
9177 nmap <M-n> :noh<CR> No hilight | |
9178 | |
9179 Bye, | |
9180 Nithin. | |
9181 | |
9182 </pre></tip> </html> <Tip category="KVim"> <html><center>Vim | |
9183 in Microsoft Visual Foxpro</center> <pre> <A | |
9184 HREF="http://vim.sf.net/tip_view.php?tip_id=328">http://vim.sf.net/tip_view.php?tip_id=328</A><BR> | |
9185 | |
9186 You can tell MS VFP to use an external editor for editing project files. | |
9187 To tell MS VFP to use Vim: | |
9188 | |
9189 start regedit locate [HKEY_CURRENT_USER | |
9190 \Software | |
9191 \Microsoft | |
9192 \VisualFoxPro | |
9193 \5.0 | |
9194 \Options] | |
9195 | |
9196 and create a new item TEDIT with string content "/N | |
9197 C:\Progra~1\vim\vim61\gvim.exe" (or whatever your path to Vim happens to be.) | |
9198 | |
9199 This will not replace the internal VFP editor for such things as modifying the | |
9200 "click method" for a button (unfortunately), but when you modify a program, | |
9201 VFP will fire up gvim. | |
9202 | |
9203 Start MS VFP, start Help and look for TEDIT. ;-) | |
9204 | |
9205 </pre></tip> </html> <Tip category="KVim"> | |
9206 <html><center>A map for swapping words</center> <pre> <A | |
9207 HREF="http://vim.sf.net/tip_view.php?tip_id=329">http://vim.sf.net/tip_view.php?tip_id=329</A><BR> | |
9208 | |
9209 Put the following map into your <.vimrc>: | |
9210 | |
9211 nmap <silent> gw | |
9212 "_yiw:s/\(\%#\w\+\)\(\W\+\)\(\w\+\)/\3\2\1/<cr><c-o><c-l> | |
9213 | |
9214 Then when you put the cursor on or in a word, press "gw", and the word will | |
9215 be swapped with the next word. The words may even be separated by punctuation | |
9216 (such as "abc = def"). | |
9217 | |
9218 While we're talking swapping, here's a map for swapping characters: | |
9219 | |
9220 nmap <silent> gc xph | |
9221 | |
9222 This hint was formed in a collaboration between Chip Campbell - Arun Easi - | |
9223 Benji Fisher | |
9224 | |
9225 </pre></tip> </html> <Tip category="KVim"> | |
9226 <html><center>how to stop auto indenting</center> <pre> <A | |
9227 HREF="http://vim.sf.net/tip_view.php?tip_id=330">http://vim.sf.net/tip_view.php?tip_id=330</A><BR> | |
9228 | |
9229 Since VIM 6.0 the indent has been improved so much. But sometimes when | |
9230 we are pasting formated text (source code or HTML etc) into a buffer, VIM | |
9231 indents again so that lines will be padded with too much spaces. | |
9232 | |
9233 Setting nocindent, noautoindent, nosmartindent still cannot stop this. All you | |
9234 need to do is "set paste", then paste your stuff, and then "set nopaste" again. | |
9235 | |
9236 Ref: indentexpr | |
9237 | |
9238 </pre></tip> </html> <Tip category="KVim"> | |
9239 <html><center>modline magic...</center> <pre> <A | |
9240 HREF="http://vim.sf.net/tip_view.php?tip_id=331">http://vim.sf.net/tip_view.php?tip_id=331</A><BR> | |
9241 | |
9242 One of the things about vim that are both quite simple yet very | |
9243 useful is that you can store by-file settings... that is each file can | |
9244 contain settings specific to it. this thing is called a modline (:help | |
9245 modline). though this is limited to only the 'set' command arguments, you | |
9246 can do allot of local to file things like the indent type, folding method | |
9247 and so on. | |
9248 | |
9249 the syntax is as follows: | |
9250 | |
9251 // vim:set ts=4 sw=4 nowrap: | |
9252 | |
9253 or | |
9254 | |
9255 /* vim:noai:ts=2:sw=4: */ | |
9256 | |
9257 The modlines can be contained in comments so as to not interfere with | |
9258 the file syntax (shown here for C/C++). these lines are read by vim when | |
9259 it loads the file, and they can either be in the first or last 5 lines | |
9260 (by default). | |
9261 | |
9262 refer to ':help modline' | |
9263 | |
9264 //and a happy 20th birthday to the good old smiley!! :-) | |
9265 | |
9266 </pre></tip> </html> <Tip category="KVim"> | |
9267 <html><center>make footnotes in vim</center> <pre> <A | |
9268 HREF="http://vim.sf.net/tip_view.php?tip_id=332">http://vim.sf.net/tip_view.php?tip_id=332</A><BR> | |
9269 | |
9270 I found at <A | |
9271 HREF="http://groups.google.com/groups?q=vim+changing+shell+to+zsh&hl=en&lr=&ie=UTF-8&selm=S_Rh9.716%24a5.124150%40news.uchicago.edu&rnum=4">http://groups.google.com/groups?q=vim+changing+shell+to+zsh&hl=en&lr=&ie=UTF-8&selm=S_Rh9.716%24a5.124150%40news.uchicago.edu&rnum=4</A><BR> | |
9272 a macro to insert footnotes in vim, but it doesn't work as of vim6.0. so i | |
9273 wrote my own; this macro requires two differents shortcuts, one for entering | |
9274 the first footnote, the other one for all subsequent footnotes. | |
9275 | |
9276 when you hit "K0" (first footnote) or "KK" (all other footnotes) in normal | |
9277 mode, your cursor is positionned at the end of the document, in the footnote & | |
9278 in insert mode. The "a" bookmark is set to the place where you entered the | |
9279 footnote in the text. so a "`a" will bring you back to the location of the | |
9280 footnote in the text. | |
9281 | |
9282 " for now requires entering K0 for the first footnote and then KK | |
9283 nmap K0 i[0]<esc>maG$i<end><enter>[0] nmap KK | |
9284 maG$?\[[0-9]*\]<enter>yt]G$i<end><enter><esc>p<C-a>i<end>]<esc>`aP<C-a><right>i]<esc>maG$i<end><end> | |
9285 | |
9286 </pre></tip> </html> <Tip category="KVim"> | |
9287 <html><center>Syntax-based folding for c/c++/java</center> <pre> <A | |
9288 HREF="http://vim.sf.net/tip_view.php?tip_id=333">http://vim.sf.net/tip_view.php?tip_id=333</A><BR> | |
9289 | |
9290 Here's a function to toggle the use of syntax-based folding for a c/c++/java | |
9291 file. It also handles folding markers. | |
9292 | |
9293 function! OutlineToggle() | |
9294 if (! exists ("b:outline_mode")) | |
9295 let b:outline_mode = 0 | |
9296 endif | |
9297 | |
9298 if (b:outline_mode == 0) | |
9299 syn region myFold start="{" end="}" transparent fold syn sync | |
9300 fromstart set foldmethod=syntax | |
9301 | |
9302 silent! exec "%s/{{{/<<</" silent! exec "%s/}}}/>>>/" | |
9303 | |
9304 let b:outline_mode = 1 | |
9305 else | |
9306 set foldmethod=marker | |
9307 | |
9308 silent! exec "%s/<<</{{{/" silent! exec "%s/>>>/}}}/" | |
9309 | |
9310 let b:outline_mode = 0 | |
9311 endif | |
9312 endfunction | |
9313 | |
9314 </html></tip> |