Saturday, November 28, 2015

linux - How to break a line in vim with auto-wrap paragraph turning on?


I am trying to use the vim autowrap functionality to automatically wrap my paragraph into lines no longer than 80 letters in real time as I type. This can be done by set textwidth=80 and set fo+=a. The a option of the vim formatoptions or fo basically tells vim to wrap the entire paragraph while typing.


However, there is a very annoying side-effect, that I can no longer break a line by simply pressing enter.



This is a sample sentence.



Say for the above sentence, if I want to make it into:



This is


a sample sentence.



Usually I can just move the cursor to "a" and enter insert mode and then press enter. But after set fo+=a, nothing will happen when I press enter in the insert mode at "a". One thing I do notice is that if there is no space between "is" and "a", pressing enter will insert a space. But nothing else will happen after that.


So what do I miss here? How do I stop this annoying behavior?


Answer



After some exploration, I find a workaround that can solve the problem to some extent, though not perfect.


The basic idea is that when entering a line break, disable the auto-wrapping temporarily when sending and resume auto-wrapping after that. There are multiple ways of doing that. And the best one as far as I know is using the paste mode, since you don't have to exit insert mode when entering paste mode. So just make the following commands into any key binding you like in insert mode. The one I am using right now is inoremap


The reason why I think this one is not optimal is that for some reason I cannot bind in this way, but have to use another key.


If or can be configured in this way then the problem is 100% solved.


No comments:

Post a Comment

linux - How to SSH to ec2 instance in VPC private subnet via NAT server

I have created a VPC in aws with a public subnet and a private subnet. The private subnet does not have direct access to external network. S...