How do I make text wrapping match current indentat

2019-01-18 03:55发布

问题:

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.)

回答1:

You're looking for breakindent

You may want to also refer to this thread.



回答2:

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.



回答3:

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."



回答4:

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.



回答5:

I think set textwidth=80 should do it.