开发者

Reformat a Python file to have 4 space indentations

开发者 https://www.devze.com 2023-02-15 18:17 出处:网络
I\'m editing a Python file that uses two spaces for programmatic indents -I prefer 4 spaces. In my .vimrc I have the following settings related to indentation:

I'm editing a Python file that uses two spaces for programmatic indents - I prefer 4 spaces. In my .vimrc I have the following settings related to indentation:

set tabstop=4                     "Indentation levels every four columns
set expandtab                     "Convert all tabs typed to spaces
set shiftwidth=4                  "Indent/outdent by four columns
set softtabstop=4

How do I get Vim to convert all the existing 2 space indents to be 4 space indents?

In other words:

if something:
  dothis()

becomes

if something:
    dothis()

When I tried gg=G

def check():
  for a in list:
    for  b in list2:
      check(a, b)
      while (len > MAX) :
        poll()

  while(len(thelist) > 0) :
    poll()  

  return re开发者_如何学运维sults

became

def check():
    for a in list:
    for  b in list2:
    check(a, b)
    while (len > MAX) : 
        poll()

        while(len(thelist) > 0) :
            poll()

            return results


In order to double the number of spaces at the beginning of every line (and only at the beginning):

:%s/^\s*/&&/g

& in replacement pattern is the matched pattern.

Probably it will not have any side-effect for you.


Pressing gg=G is the command to re-indent everything in a file. If you have other elements that can be re-indented, vim will indent these as well, which doesn't always give the desired effects. You'll have to clean these up manually if they're ugly.

Alternately, you can use the > command to indent, with ranges to go through the file somewhat efficiently manually. 99>k, for example, would indent the 99 lines below the cursor by one level.


I've found the reindent script http://pypi.python.org/pypi/Reindent/0.1.0 works well for me. Not pure vim, but really easy!

After its installed you can use it in vim with

:%! reindent

(ie pipe the entire buffer through the reindent program) and it's done.

From the command line it can be used to reindent multiple files (eg all files in a directory, or even recursively down a directory tree).


The best current way to reformat Python, fix many other issues, and also make it PEP8 compliant is to use autopep8. See this related question. So after you've installed autopep8 (e.g. pip install autopep8) in vim you do:

:%! autopep8 -

There's also a vim-autopep8 plugin to make things even simpler.


try the following substitution command:

:%s/  /    /g

(To clarify: there are two spaces between the first and second '/' and four the second and third '/'.)

One helpful command when working with whitespace issues is also the set list command which will visually show all whitespace. Use set nolist to unset.


The vim plugin vim-autoformat integrates the formatter autopep8 into vim automatically, if it is installed. You can format the whole file, or the visually selected part using a single keystroke.

More importantly, vim-autoformat takes the relevant settings of your .vimrc into account, e.g. if you have

set shiftwidth=4

in your .vimrc, it will pass this information on to autopep8.


Have you tried?

:retab

I'm not in front of a machine with Vim at the moment so I can't verify this.

0

精彩评论

暂无评论...
验证码 换一张
取 消