Can I disable continuation of comments to the next line in Vim?
Andrew Henderson
In Vim, if I'm typing a comment in a code file, and I hit Enter, it automatically makes the newline a comment, too.
For instance, in a Ruby file:
# I manually typed the pound at the start of this line and hit enter.
# This line formatted itself this way automatically.Generally, this is what I want, but not always. How can I temporarily turn off this auto-commenting behavior?
38 Answers
I think you're looking for
:set formatoptions-=croFrom :help fo-table:
You can use the 'formatoptions' option to influence how Vim formats text.
'formatoptions' is a string that can contain any of the letters below. The
default setting is "tcq". You can separate the option letters with commas for
readability.
letter meaning when present in 'formatoptions'
t Auto-wrap text using textwidth
c Auto-wrap comments using textwidth, inserting the current comment leader automatically.
r Automatically insert the current comment leader after hitting <Enter> in Insert mode.
o Automatically insert the current comment leader after hitting 'o' or 'O' in Normal mode.
... 6 Temporarily setting the 'paste' option may do what you want, but it also disables a lot of other Vim features:
Use :set paste to turn it on and :set nopaste to turn it off. Alternatively, you can use :set paste! to toggle it.
See also:
:help 'paste'
:help 'pastetoggle'(Those commands are typed with the single-quotes.)
2An alternative is to just hit ctrl-w after you pressed enter. This deletes the previous word (e.g. # or //) when in insert mode. In fact, ctrl-w is a pretty universal shortcut in most applications.
I enter non-formatted plain new lines with <CR>.
When I want to continue typing the next line in the commented block I just use the O key as usual.
Try this:
nnoremap <silent> <cr> :set paste<cr>o<esc>:set nopaste<cr> 2 I have ended up with this:
nnoremap <Leader>o o<Esc>^Da
nnoremap <Leader>O O<Esc>^DaIt appends a new line, deletes everything already inserted there, and leaves the cursor in insert mode in the indented column, without messing with the format options.
This answer applies to Debian and some of its derivatives.
On a Debian distribution Vim defaults are unreasonable. They are located in /usr/share/vim/vim80/defaults.vim and applied after(!) /etc/vim/vimrc is run. The only way to tell Vim not to use its defaults is to ensure ~/.vimrc exists even if it is blank. Vim on startup tries to read from .vimrc, but if the file is not found it applies the defaults which brings a lot of undesirable behavior e.g. mouse integration, copy-paste quirks, comment auto-wrap, etc.
On Debian you can fix ALL that by simply running touch ~/.vimrc
This just makes it one line command which when you run this, it will disable continuation of comment permanently
echo 'au FileType * set fo-=c fo-=r fo-=o' >> ~/.vimrc 1 If you just want to temporary disable this feature, I think the easiest way is to make a key map. <C-u> can delete content of current line to the beginning, keep indent space, so I created a key map in my .vimrc:
inoremap <silent><expr> <C-CR> "\<CR>\<C-u>" This map is for insert mode, you can create a normal mode key map if you want, like below:
nnoremap <silent><expr> <C-CR> "o\<C-u>"