Reputation: 17021
My Vim configuration includes set formatoptions=c,q,a
. I am completely annoyed with the following problem (|
denotes cursor position, its exact position does not matter, as you probably know only the fact of its presence in this commented line matters):
" This is a long line which we would like to wrap. However, something sick is go|ing to happen if we hit "gqip" here!
if has('win32') || has('win64')
set runtimepath^=~/.vim
set runtimepath+=~/.vim/after
endif
Now we hit gqip
:
" This is a long line which we would like to wrap. However, something sick is
" go|ing to happen if we hit "gqip" here!
if has('win32') || has('win64') set runtimepath^=~/.vim set
runtimepath+=~/.vim/after endif
What it does is - it actually treats the whole thing as a single paragraph. (Yes, I know that separating with a blank line prevents this behavior, but it does not solve the problem!) What I would like it to be is indeed:
" This is a long line which we would like to wrap. However, something sick is
" go|ing to happen if we hit "gqip" here!
if has('win32') || has('win64')
set runtimepath^=~/.vim
set runtimepath+=~/.vim/after
endif
In other words, it would be great if gq
could somehow forget about the code and work only with comments.
BONUS: How to do this formatting (wrapping comments only) on the whole buffer in one shot? Because, ideally I would like to move that stuff to a special formatting hook for file saving.
Upvotes: 7
Views: 18730
Reputation: 153
I know I'm a bit late to the party, but I found this question while investigating the same problem myself. How about:
set formatprg=fmt\ --prefix='\"'
With that gqip seems to behave as required. I will definitely be checking out the SameSyntaxMotion plugin though.
Upvotes: 0
Reputation: 22694
The meaning of the ip
text object is rather narrow, as @IngoKarkat pointed out: it is simply any text paragraph delimited by blank lines.
I have also created a plugin that you could use to address this problem.
textobj-comment - Text objects for comments
In contrast with the SameSyntaxMotion plugin, textobj-comment relies on the filetype-specific 'comments'
setting to identify comments. That means it should work even with syntax-highlighting turned off.
Use gqic
to format a comment.
Pro tip: Prefer gw
over gq
as it preserves the cursor position.
Upvotes: 5
Reputation: 172570
With my SameSyntaxMotion plugin, you can use the ay
text object to represent the entire block of comments the cursor is in, and re-format it using gqay
.
Upvotes: 3
Reputation: 172570
it actually treats the whole thing as a single paragraph
Well, with gqip
, you told it to! You need to choose the right motion. In this case of a single line, it would be gqq
. For 3 lines, that's gq2j
. If it's too many lines to count, use visual mode: Vjjjjjjgq
.
Upvotes: 17
Reputation: 60070
Search for commented lines using :g
, then wrap those lines:
:%g/^"/normal gq_
Upvotes: 2