Text expansion in vim
Upcoming SlideShare
Loading in...5
×
 

Text expansion in vim

on

  • 549 views

 

Statistics

Views

Total Views
549
Views on SlideShare
546
Embed Views
3

Actions

Likes
0
Downloads
1
Comments
0

1 Embed 3

http://lanyrd.com 3

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Text expansion in vim Text expansion in vim Presentation Transcript

  • Text Expansion In Vim These slides accompanied the 2013-09-17 NoVA Vim meetup and have since been edited. They’re still a bit more of an outline, but have a few gems of content. @mattboehm github.com/mattboehm
  • Rationale One of the most frequently cited reasons for using vim is that it saves you time/keystrokes, yet many people do not use any kind of input expansion. * type faster * save keystrokes (prevent RSI) * avoid common typos
  • imap ● instantly replaces characters typed ● works even in the middle of a word ● if you start typing characters that happen to be part of a map, the text doesn’t display on the screen til you finish the map or type a differing character ● no easy way to undo? ● (you probably don’t want this for most cases)
  • iabbrev ● triggered when you finish typing a word and hit space ● great for common strings like email addresses and urls ● no easy way to un-expand? =(
  • Snippets Many snippet plugins, but the two I’m most familar with are: * Snipmate: port of textmate’s snippet behavior * Ultisnips: inspired by textmate/snipmate. Added functionality, but requires vim compiled with a modern python.
  • My Ultisnips Configuration let g:UltiSnipsExpandTrigger="<tab>" let g:UltiSnipsJumpForwardTrigger="<tab>" let g:UltiSnipsJumpBackwardTrigger="<s-tab>" let g:UltiSnipsSnippetDirectories=["mysnippets"] I recommend copying the stock snippets into a separate directory and changing them to meet your needs.
  • Quickly edit snippets I used to have a snippet plugin installed, but never used it because editing/listing them was too hard. Make editing snippets effortless. nnoremap <leader>vs :call g:EditMySnippets() <CR> function! g:EditMySnippets() let ft = &ft tabe ~/.vim/bundle/mbsnippets/mysnippets/ call search(ft) endfunction When i type ,vs this opens my snippet dir in NERDTree and jumps to the first snippet containing the filetype of the original file
  • Basic usage snippet l "console.log" console.log(“${1}”); endsnippet I type: l<tab> Result: console.log(“|”)
  • snippet for "for (...) {...}" for (var ${2:i}=0; $2 < ${1:Things}.length; $2++) { ${3:$1[$2]} }; endsnippet I type “for<tab>” and get: for (var i=0; i < Things.length; i++) { Things[i] }; “Things” is highlighted. As I type, it changes to what I’m updating and all positions update in real time.
  • Visual replacement. snippet if "if" if (${1:condition}) { ${VISUAL}$0 } endsnippet I want to wrap code in an if block. I select it and type <tab>if<tab>
  • Interpolation snippet date "date" the date is `date` endsnippet runs the bash date command and inserts its result snippet ver "pythonversion" python version: `!p import sys;snip.rv=sys.version` endsnippet check out SirVer’s screencast for a better example:http://ww.sirver.net/blog/2012/03/31/fourth-episode-of-ultisnips-screencast/
  • Zen Coding Plugins exist for many editors * zencoding (now emmet) is the initial popular vim port * sparkup adds some features and is what I currently use
  • sparkup examples body>div>em becomes: <body> <div> <em></em> </div> </body>
  • More Examples #id .classname ul.classname li*3>em head>title<body visit https://github.com/rstacruz/sparkup#examples for a better presentation of examples
  • Sparkup Pros/Cons ● extended syntax ● jump between insert locations ● not easily configurable ● Main repo not pathogen-friendly; I use tristen’s branch
  • How can I productively use input expansion? Pick a small set of uses that come up a lot. Practice using the expansions until they’re ground into your brain then add more as desired. Do not look at the screen for feedback! You need to be able to type your shortcuts with your eyes closed while barely thinking about it.