title: More efficient movements editing python files in vim
body: <p>Given a python file with the following repeated endlessly:</p>
  
  <pre><code>def myFunction(a, b, c):
      if a:
          print b
      elif c:
          print 'hello'
  </code></pre>
  
  <p>I'd like to move around and edit this file using familiar vim movements.  For instance, using (, ), [[, ]], {, } or deleting/yanking/changing text using commands like di}.</p>
  
  <p>In other languages (like C++, Java, C#, etc) you've got curly brackets abound, so using a movement like di} can easily find a matching curly brace and act on that block. And in fact if I am on the 'b' character on the above text and do a di) in vim, it successfully deletes the text between the two parens.</p>
  
  <p>The issue is in python's detection of code blocks, I think.  Using (, ), [[, ]], {, or } as movements all pretty much do the same thing, bringing you to the start (above or on the def line) or end (after the last line of the function) of the function.  And there is no way, as far as I know, to easily tell vim "select everything for this indentation block."  In the above example, I'd like to be on in 'i' of the if line, type di} and have it delete the entire if block (to the end of this particular function).</p>
  
  <p>I'm sure it should be possible to tell vim to operate on an indentation basis for such movements (well, maybe not that particular movement, but some user defined action).  Any thoughts on how to accomplish this?</p>