views:

622

answers:

5

Does anyone know of a way to get vim to wrap long lines of text such that the position of the wrapped text is based on the indentation of the current line? I don't want to reformat my code, just for it to be displayed prettily.

For instance, if I set my settings so that the line:

print 'ProcessorError(%r, %r, %r)' % (self.file, self.index, self.message)

is displayed when wrapped as:

print 'ProcessorError(%r, %r, %r)' % (self.file, self.index,
    self.message)

then if I write a block of code like this:

    def __repr__(self):
        return 'ProcessorError(%r, %r, %r)' % (self.file, self.index, self.message)

it wraps to something like this:

    def __repr__(self):
        return 'ProcessorError(%r, %r, %r)' % (self.file, self.index,
    self.message)

I would prefer for it to be displayed as:

    def __repr__(self):
        return 'ProcessorError(%r, %r, %r)' % (self.file, self.index,
            self.message)

Edit: after reading Don Werve's response, it seems that I am indeed looking for the breakindent option, but the option is still on the "Awaiting updated patches" list (see Vim TODO). So what I'd like to know is what is the easiest way to get vim working with breakindent? (I don't care what version of vim I have to use.)

A: 

I think set textwidth=80 should do it.

hyperboreean
+1  A: 

You're looking for breakindent

You may want to also refer to this thread:

http://newsgroups.derkeiler.com/Archive/Comp/comp.editors/2005-07/msg00056.html

Don Werve
+1  A: 

I recommend this vimscript:

http://www.vim.org/scripts/script.php?script_id=974

"This indentation script for python tries to match more closely what is suggested in PEP 8 (http://www.python.org/peps/pep-0008.html). In particular, it handles continuation lines implied by open (parentheses), [brackets] and {braces} correctly and it indents multiline if/for/while statements differently."

Take care, -Brian

briandorsey
That's certainly a useful script, but it doesn't seem to do what I was actually asking. I want something to help with the visual position of long lines rather than with the position of automatic indentation.
talljosh
That script will also add newlines and correctly indent long lines, so they become nicely formatted lines under 80 characters long.
briandorsey
A: 

For controlling the indentation of Python code, see :h ft-python-indent. This for example will make Vim indent two times the shiftwidth if you do a newline while there's an unclosed paren:

let g:pyindent_open_paren = '&sw * 2'

However &sw * 2 is the default, so not sure why it's not working for you. It works for me with manual newlines or with textwidth-induced newlines.

The above setting needs to be in .vimrc or needs to be set somehow before Vim enters Python mode. Be sure to :setf python or that you're otherwise in Python mode.

Brian Carper
+3  A: 

I asked the same question on SuperUser, eventually found this question, found the patch, and updated the patch to work with Vim 7.2.148 from Fedora 11.

You can use yumdownloader --source vim to get the source RPM. Then add a Patch3312: line and a %patch3012 -p1 line to the spec file, and build the rpm.

retracile