Automatically hard wrap lines at column in VSCode
How can I automatically hard wrap lines in VSCode? By that I mean if a line reaches a specified column, automatically insert a newline at the word boundary closest to that column without going over. Vim has a setting called textwidth that does this that I like to use when editing Markdown. It doesn't seem like VSCode does, as far as I can tell. It just has ways to control softwrapping.
VSCode doesn't support this out of the box. But you can install the Rewrap
extension, which allows you to format the block that your cursor is currently in by pressing Alt + Q.
Rewrap
requires no further settings, since it reads VSCode's settings to obtain the column at which to break.
Rewrap
also supports automatic wrapping (off by default): https://github.com/stkb/Rewrap/wiki/Auto-wrap
Unfortunately, VSCode doesn't have this feature yet. But, we still can make it to be as close as vim automatic word wrapping beautiful feature.
First Step
We need to setup soft word wrap feature in VSCode.
- Open VSCode Settings via
Code => Preferences => Settings
. -
Add these 3 lines of editor settings.
"editor.wordWrap": "wordWrapColumn", "editor.wrappingIndent": "same", "editor.wordWrapColumn": n
Don't forget to change (n) with your preferred length of columns line. For me, I feel more comfortable to set it to 60.
Save this setting.
The main purpose of this first step is to make us feel more comfortable when we're typing because we don't need to manually type Enter and see a long line of text.
Second Step
We need to install Vim emulation for VSCode and set vim textwidth
.
- Install Vim emulation via VSCode extensions.
- Open VSCode Settings via
Code => Preferences => Settings
. -
Add this line of vim setting.
"vim.textwidth": n,
Don't forget to change (n) with your preferred length of columns line. For me, I will set this to be the same with (n) in the first step.
Save this setting.
Actual Use
When you finish to write your whole document, you can format it to be hard wrap lines using this way.
- Block all text using visual line mode (Shift + v)
- Type 'gq'