2012-12-10 4 views
5

My Vimの設定にはset formatoptions=c,q,aが含まれています。私は、次のような問題に完全に悩まされています(|あなたはおそらく、このコメント行の問題でその存在の唯一の事実を知っているように、その正確な位置は、重要ではありません、カーソルの位置を示す):Vim:コードではなく、ハード・ラップ・コメントの "gq"コマンド

" 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 

今、私たちは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 

これは実際にはすべてを1つの段落として扱います。 (!はい、私は空白行で分離すると、この動作を防止することを知っているが、それは問題を解決していません)私はそれがしたいどのようなことは確かである。言い換えれば

" 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 

、それがあれば素晴らしいことですgqは何らかの形でコードを忘れてしまい、コメントでしか動作しない可能性があります。

BONUS:はどのように一発でバッファ全体に(コメントのみを包む)この書式設定を行うには?なぜなら、理想的には、ファイルを保存するための特別なフォーマットフックに移動したいからです。

答えて

3

私のSameSyntaxMotion pluginでは、テキストオブジェクトayを使用して、カーソルがあるコメントブロック全体を表現し、gqayを使用してフォーマットし直すことができます。

+0

病気の男、良い仕事、このプラグインを共有していただきありがとうございます。ちょうど発言 - 私は病原体を使用するので 'vimball'包装のためにそれをインストールするのはちょっと面倒です。また、 'SyntaxGroupMotion'という名前のほうがはるかに優れているように感じるので、それを見つけるのがはるかに簡単で直感的です。今質問がありますが、それはデフォルトのマッピングyとyでうまくいきますが、gとgにリマップしてみました(グループのニーモニックに続いて)、私は不運でした。ここのトリックは何ですか? –

+0

ああ、申し訳ありません、それは 'g'に再マップします。問題は、この 'nnoremap gwag'のような組み合わせをマッピングすることでした。この 'nmap gwag'のようにマップするのではなく、プラグインの' g'マッピングをキャッチできないように注意してください。 –

+0

偉大なプラグインの男の子のための親指! :D –

2

その後、:gを使ってコメント行を検索、これらの行を折り返す:

:%g/^"/normal gq_ 
+0

をチェックアウトされるように振る舞うように見えます... – Ves

+0

あなたのソリューションは個々の行をラップしますが、主な目的は**段落**のコメントをラップすることです - より一般的です。もう一つの欠点は、VimLのコメントリーダー '' 'をハードコーディングしたことです。任意のプログラミング言語(または少なくともいずれか)に対して、現在のコメントリーダーを格納する変数へのアクセス権を持っているならば、それは簡単です。私自身は、変数の名前とその変数がまったく存在するかどうかを知りません。 –

10

それは実際には単一の段落

だけでなく、全体を扱い、gqipで、あなたはそれを告げました!あなたは正しい動きを選択する必要があります。この1行の場合は、gqqとなります。 3行の場合、それはgq2jです。カウントするラインが多すぎる場合は、ビジュアルモード:Vjjjjjjgqを使用します。

+0

これは、この文脈では直観に反するものです。この場合、Vimが本当にしたいことは、コードから空白行(上と下)で区切られているかどうかにかかわらず、複数行のコメント(間に空白行なし)を独自の段落として考えることです。コードはコード、コメントはコメントです。毎回ラップするコメントの数を数えることは迷惑で、時間の無駄です。たとえそれが速い行動のように思えますが、実際にあなたが知っている時間が蓄積される傾向があります。分離にかかわらず、Vimにコメントを段落として扱うように教える方法はありますか? –

+0

私は実際に 'formatoptions'の' q 'のためにこのような動作を期待していますが、そうでないことが判明しました。これは大きな不運です。 –

+0

言い換えれば、正しい動きを提供することです。あなたは、そのようなコメントブロックの中にいるときに、それが最初に行く(隣接するコメント行がないときには)*ジェネリック(あらゆる言語でのコメントの作業、おそらく現在のコメントリーダーを表す変数の使用) * above **)を選択し、このブロックの最後まで(**の下に隣接するコメント行**がない場合)までテキストを選択します。これは確かに、トリックを行うだろう。 –

3

@IngoKarkatが指摘しているように、ipテキストオブジェクトの意味は狭いです。単純に空白行で区切られたテキストの段落です。

この問題に対処するために使用できるプラグインも作成しました。

textobj-commentからSameSyntaxMotionプラグイン、textobj-コメントコメントを識別するために、ファイルタイプ特有の'comments'の設定に依存しているとは対照的に、コメント

のためのテキストオブジェクト。つまり、構文強調表示をオフにしても機能するはずです。

gqicを使用してコメントを書式設定します。

プロヒント:それはカーソルの位置を維持するようgqgwを好みます。

+0

と病原体のインストール行を含めるために1つ、私は切断して私のターミナルにそれらを貼り付けることができます。もし行末にコメントがぶら下がり、その場にインデントしてしまうのであればnice – Orwellophile

0

私はパーティーに少し遅れていることは知っていますが、私は同じ問題を自分自身で調べながらこの質問を見つけました。どの程度:。。

セットformatprg = FMT \ --prefix = '\ "' はgqipで

が必要と私は間違いなくSameSyntaxMotionプラグインいえ

関連する問題