Code Substitution Done Right - Switch.vim(vimninjas.com) |
Code Substitution Done Right - Switch.vim(vimninjas.com) |
So I'll pass on this plugin for the time being. That said, this new blog is fantastic and I'm bookmarking all the articles for later.
https://github.com/zef/vim-cycle
I really use it all the time and find it extremely useful, but not exactly in the way he seems to in the video. One of the ways I frequently use it is for CSS, where there are related words that can frequently change, like margin/padding, top/bottom, class/id, png/gif/jpg, absolute/relative, or in Ruby if/unless, present/blank, else/else if. Things like that...
The mapping I use is the same as is used to increment and decrement numbers in Vim, which is very natural to me so it's a really easy way to switch things much more quickly than typing them.
You can see the pairs I define by default in my plugin here:
https://github.com/zef/vim-cycle/blob/master/plugin/cycle.vi...
create(:user, :active => true).should be_active
Now, I want to change its properties and assert the opposite. I duplicate the line, change the property, and switch the "should" into a "should_not": create(:user, :active => false).should_not be_active
This is a very simple example, but I do things like this on a regular basis while writing tests. I assume other people have different workflows around this, but this works nicely for me. That's why I mentioned in the video that these are my own little timesavers, so you might not find them that useful :).As for the predicate stuff, it's actually "true or (predicate?)". The idea is that switching to this would result in the first branch always being executed, unconditionally. I use this for view templates when I want to see how the page looks when, for example, there's no logged in user (it'd take more time to log out and then back in :)), or when the user has no trading accounts, or some other simple condition that I want to disable for just a sec to check out if some div got misaligned.
Really, the basic idea is simple -- if there's some code that you often need to change into some other code, you could store that transformation as a "switch" and avoid repeating yourself.
* toggling booleans in a config file.
* switching a string literal between 'single quotes', "double quotes #{so I can add interpolation}", and :symbols. I do this pretty often. The former is easy enough with surround.vim (cs'"), but the latter is a pain (ds'bi:<ESC>)
* the ability to add a "tap" and remove it with a single key combo is interesting for debugging.
Though looking back a year ago, I struggled to navigate, let alone copy and paste. Step at a time, right? RIGHT?!
I'll get there though. Eventually.
" in ftplugin/javascript.vim
let b:switch_definitions =
\ [
\ g:switch_builtins.ruby_hash_style
\ ]
With this, in a javascript file, you can turn ":foo => 'bar'" entries into "foo: 'bar'" ones.If you do need global (non-filetype) switches, you could define some by placing them in the g:switch_definitions variable. Read up on the docs if you want more information.