Vim:硬编码注释的"gq"命令,但不是代码(即使中间没有空行)

Ale*_*aev 5 format vim comments

我的Vim配置包括set formatoptions=c,q,a.我对以下问题感到非常恼火(|表示光标位置,其确切位置无关紧要,因为您可能只知道它在此注释行中存在的事实):

" 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
Run Code Online (Sandbox Code Playgroud)

现在我们点击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
Run Code Online (Sandbox Code Playgroud)

它的作用是 - 它实际上将整个事物视为一个段落.(是的,我知道用空行分隔可以防止这种行为,但它无法解决问题!)我希望它确实是:

" 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
Run Code Online (Sandbox Code Playgroud)

换句话说,如果gq能够以某种方式忘记代码并仅使用注释工作将会很棒.

奖励:如何一次性对整个缓冲区进行格式化(包装注释)?因为,理想情况下我想将这些东西移动到一个特殊的格式化钩子来保存文件.

Ing*_*kat 14

它实际上将整个事物视为一个段落

嗯,有gqip,你告诉它!你需要选择正确的动作.在这种单行的情况下,它将是gqq.对于3行,那就是gq2j.如果要计算的行太多,请使用可视模式:Vjjjjjjgq.


Ing*_*kat 3

通过我的SameSyntaxMotion 插件,您可以使用ay文本对象来表示光标所在的整个注释块,并使用 重新格式化它gqay