snipt

Ctrl+h for KB shortcuts

VimL

auto indent for python files

" indent.vimrc
autocmd BufRead * python setIndentation()

python << EOF
def setIndentation():
   import vim
   maxSearch = 1000     #  max number of lines to search through

   indentSpaces = None
   cb = vim.current.buffer
   indentCount = { ' ' : 0, '\t' : 0 }
   justSawDefOrClassLine = 0
   for i in xrange(0, min(maxSearch, len(cb))):
      line = cb[i]
      if not line: continue

      #  count spaces after a class or def line
      if justSawDefOrClassLine:
         justSawDefOrClassLine = 0
         if line[0] == ' ':
            indentSpaces = 0
            for c in line:
               if c != ' ': break
               indentSpaces = indentSpaces + 1
      if line[:4] == 'def ' or line[:6] == 'class ':
         justSawDefOrClassLine = 1

      #  add to tab versus space count
      if line[0] in ' \t':
         indentCount[line[0]] = indentCount.get(line[0], 0) + 1

   #  more lines started with space
   if indentCount[' '] > indentCount['\t']:
      vim.command('set smarttab tabstop=8 expandtab')
      if indentSpaces:
         vim.command('set ts=%d sw=%d' % ( indentSpaces, indentSpaces ))

   #  more lines started with tab
   else:
      vim.command('set softtabstop=3 ts=3 sw=3')
EOF
https://snipt.net/embed/aecc55a59c615a790ea205fc33e53e89/
/raw/aecc55a59c615a790ea205fc33e53e89/
aecc55a59c615a790ea205fc33e53e89
vim
VimL
41
2019-08-18T05:31:45
True
False
False
/api/public/snipt/8268/
auto-indent-for-python-files
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><a href="#L-1"> 1</a> <a href="#L-2"> 2</a> <a href="#L-3"> 3</a> <a href="#L-4"> 4</a> <a href="#L-5"> 5</a> <a href="#L-6"> 6</a> <a href="#L-7"> 7</a> <a href="#L-8"> 8</a> <a href="#L-9"> 9</a> <a href="#L-10">10</a> <a href="#L-11">11</a> <a href="#L-12">12</a> <a href="#L-13">13</a> <a href="#L-14">14</a> <a href="#L-15">15</a> <a href="#L-16">16</a> <a href="#L-17">17</a> <a href="#L-18">18</a> <a href="#L-19">19</a> <a href="#L-20">20</a> <a href="#L-21">21</a> <a href="#L-22">22</a> <a href="#L-23">23</a> <a href="#L-24">24</a> <a href="#L-25">25</a> <a href="#L-26">26</a> <a href="#L-27">27</a> <a href="#L-28">28</a> <a href="#L-29">29</a> <a href="#L-30">30</a> <a href="#L-31">31</a> <a href="#L-32">32</a> <a href="#L-33">33</a> <a href="#L-34">34</a> <a href="#L-35">35</a> <a href="#L-36">36</a> <a href="#L-37">37</a> <a href="#L-38">38</a> <a href="#L-39">39</a> <a href="#L-40">40</a> <a href="#L-41">41</a></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span id="L-1"><a name="L-1"></a><span class="c">&quot; indent.vimrc</span> </span><span id="L-2"><a name="L-2"></a>autocmd <span class="nb">BufRead</span> * python setIndentation<span class="p">()</span> </span><span id="L-3"><a name="L-3"></a> </span><span id="L-4"><a name="L-4"></a><span class="k">python</span> <span class="o">&lt;&lt;</span> EOF </span><span id="L-5"><a name="L-5"></a><span class="k">def</span> <span class="nf">setIndentation</span><span class="p">():</span> </span><span id="L-6"><a name="L-6"></a> <span class="kn">import</span> <span class="nn">vim</span> </span><span id="L-7"><a name="L-7"></a> <span class="n">maxSearch</span> <span class="o">=</span> <span class="mi">1000</span> <span class="c1"># max number of lines to search through</span> </span><span id="L-8"><a name="L-8"></a> </span><span id="L-9"><a name="L-9"></a> <span class="n">indentSpaces</span> <span class="o">=</span> <span class="bp">None</span> </span><span id="L-10"><a name="L-10"></a> <span class="n">cb</span> <span class="o">=</span> <span class="n">vim</span><span class="o">.</span><span class="n">current</span><span class="o">.</span><span class="n">buffer</span> </span><span id="L-11"><a name="L-11"></a> <span class="n">indentCount</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">&#39; &#39;</span> <span class="p">:</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">&#39;</span><span class="se">\t</span><span class="s1">&#39;</span> <span class="p">:</span> <span class="mi">0</span> <span class="p">}</span> </span><span id="L-12"><a name="L-12"></a> <span class="n">justSawDefOrClassLine</span> <span class="o">=</span> <span class="mi">0</span> </span><span id="L-13"><a name="L-13"></a> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">min</span><span class="p">(</span><span class="n">maxSearch</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">cb</span><span class="p">))):</span> </span><span id="L-14"><a name="L-14"></a> <span class="n">line</span> <span class="o">=</span> <span class="n">cb</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> </span><span id="L-15"><a name="L-15"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">line</span><span class="p">:</span> <span class="k">continue</span> </span><span id="L-16"><a name="L-16"></a> </span><span id="L-17"><a name="L-17"></a> <span class="c1"># count spaces after a class or def line</span> </span><span id="L-18"><a name="L-18"></a> <span class="k">if</span> <span class="n">justSawDefOrClassLine</span><span class="p">:</span> </span><span id="L-19"><a name="L-19"></a> <span class="n">justSawDefOrClassLine</span> <span class="o">=</span> <span class="mi">0</span> </span><span id="L-20"><a name="L-20"></a> <span class="k">if</span> <span class="n">line</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39; &#39;</span><span class="p">:</span> </span><span id="L-21"><a name="L-21"></a> <span class="n">indentSpaces</span> <span class="o">=</span> <span class="mi">0</span> </span><span id="L-22"><a name="L-22"></a> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">line</span><span class="p">:</span> </span><span id="L-23"><a name="L-23"></a> <span class="k">if</span> <span class="n">c</span> <span class="o">!=</span> <span class="s1">&#39; &#39;</span><span class="p">:</span> <span class="k">break</span> </span><span id="L-24"><a name="L-24"></a> <span class="n">indentSpaces</span> <span class="o">=</span> <span class="n">indentSpaces</span> <span class="o">+</span> <span class="mi">1</span> </span><span id="L-25"><a name="L-25"></a> <span class="k">if</span> <span class="n">line</span><span class="p">[:</span><span class="mi">4</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;def &#39;</span> <span class="ow">or</span> <span class="n">line</span><span class="p">[:</span><span class="mi">6</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;class &#39;</span><span class="p">:</span> </span><span id="L-26"><a name="L-26"></a> <span class="n">justSawDefOrClassLine</span> <span class="o">=</span> <span class="mi">1</span> </span><span id="L-27"><a name="L-27"></a> </span><span id="L-28"><a name="L-28"></a> <span class="c1"># add to tab versus space count</span> </span><span id="L-29"><a name="L-29"></a> <span class="k">if</span> <span class="n">line</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="s1">&#39; </span><span class="se">\t</span><span class="s1">&#39;</span><span class="p">:</span> </span><span id="L-30"><a name="L-30"></a> <span class="n">indentCount</span><span class="p">[</span><span class="n">line</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="n">indentCount</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">line</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span> </span><span id="L-31"><a name="L-31"></a> </span><span id="L-32"><a name="L-32"></a> <span class="c1"># more lines started with space</span> </span><span id="L-33"><a name="L-33"></a> <span class="k">if</span> <span class="n">indentCount</span><span class="p">[</span><span class="s1">&#39; &#39;</span><span class="p">]</span> <span class="o">&gt;</span> <span class="n">indentCount</span><span class="p">[</span><span class="s1">&#39;</span><span class="se">\t</span><span class="s1">&#39;</span><span class="p">]:</span> </span><span id="L-34"><a name="L-34"></a> <span class="n">vim</span><span class="o">.</span><span class="n">command</span><span class="p">(</span><span class="s1">&#39;set smarttab tabstop=8 expandtab&#39;</span><span class="p">)</span> </span><span id="L-35"><a name="L-35"></a> <span class="k">if</span> <span class="n">indentSpaces</span><span class="p">:</span> </span><span id="L-36"><a name="L-36"></a> <span class="n">vim</span><span class="o">.</span><span class="n">command</span><span class="p">(</span><span class="s1">&#39;set ts=</span><span class="si">%d</span><span class="s1"> sw=</span><span class="si">%d</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="p">(</span> <span class="n">indentSpaces</span><span class="p">,</span> <span class="n">indentSpaces</span> <span class="p">))</span> </span><span id="L-37"><a name="L-37"></a> </span><span id="L-38"><a name="L-38"></a> <span class="c1"># more lines started with tab</span> </span><span id="L-39"><a name="L-39"></a> <span class="k">else</span><span class="p">:</span> </span><span id="L-40"><a name="L-40"></a> <span class="n">vim</span><span class="o">.</span><span class="n">command</span><span class="p">(</span><span class="s1">&#39;set softtabstop=3 ts=3 sw=3&#39;</span><span class="p">)</span> </span><span id="L-41"><a name="L-41"></a>EOF </span></pre></div> </td></tr></table>
gvim, indent, python, vim