I would like to auto-indent text blocks that I have just put
. At a minimum, I would like to retab
the new block of text, since otherwise I sometimes end up with tabs in files that shouldn't have tabs when I copy them from files that do have tabs without noticing.
1 Answer
This is my current solution, but I'm certianly open to better ones:
nnoremap p pV`]=
nnoremap P PV`]=
This makes use of the ]
built-in mark, which is the "last character of the previously changed or yanked text" (from :help marks
).
I'd prefer not to remap primitive fundamental keys such as p
, and this won't work with other methods of pasting (e.g. the middle-click in X11). Also, I haven't used this for very long so I'm not sure yet if there are any behavioral oddities.
-
3
-
@romainl I didn't know about that, but that does indeed seem to do what I want. May 28, 2015 at 21:09
-
1@romainl Actually, that appears to remove leading spaces when pasting below a blank line, which is not necessarily what I want. May 28, 2015 at 21:52
-
Which is why there are both a
[p
(which is probably better written as]P
) and a]p
– lcd047May 29, 2015 at 5:01 -
[p
and]p
are to be used when you want to paste while keeping the indent of the line above or below. They are not magical replacements forP
andp
.– romainlMay 29, 2015 at 7:19
:set listchars=tab:\|\ ,trail:_,extends:>,precedes:<,nbsp:% list
listchars
. I suppose I could include tabs as well, though....