1

275 行のコードを含むファイルがあります。行はcegの定数宣言です

      71 #define LM_HOST_ALLOWED             3100 //Boolean.

私の問題は、他のファイルからコピーして貼り付けてそのファイルを作成したため、多くの重複行があり、行が100%同じではないことです

例えば

      71 #define LM_HOST_ALLOWED             3100 //Boolean.
      72 #define LM_HOST_ALLOWED               3100 //Boolean.

これらの行を見つけて、そのうちの1つだけを保持する方法はvimにありますか。または、特定のレベルで数値 (この場合は 3100) 係数を持つようにすべての行をフォーマットする方法はありますか? 例えば6つのタブか何か?手動でやり始めましたが、編集モードに出入りするのは面倒です。助けてください!この質問が意味をなさない場合は、改善にご協力ください。

編集: テキストの書式設定に関する解決策を見つけました:vimの通常モードで次のように入力します:

qa0f f 50i <esc>38|dwjq274@a そしてそれは仕事をします。これを見つけて本当によかったです(このフォーラムでも)問題は、uniqコマンドが私が読んでいるはずのことを実行しないことです。vim で :!uniq と入力しますが、すべての重複行が削除されるわけではありません。場所によっては、スペースではなくタブが原因である可能性があると考えています。それに関する情報はありますか?

4

2 に答える 2

1

tabular.vimを使用して数字を並べることができます。次のようなものを使用します。

:Tabularize / [0-9]\{4\}/l2c1

これにより、次のようにすべての数字が 4 桁 (3100この場合) に整列されます。

71 #define LM_HOST_ALLOWED  3100 //Boolean.
72 #define LM_HOST_ALLOWED  3100 //Boolean.
于 2012-11-29T22:38:05.763 に答える
0

順序を維持することが重要でない場合は、次を使用できます

:%sort u

内容をソートし、各行のインスタンスを1つだけ保持します。(最初にAlignまたはTabularizeを使用して行フォーマットを正規化したと仮定します。)


順序を維持する必要がある場合は、私のSearchPositionプラグインが便利な場合があります。Alt+マッピングを使用Mすると、バッファ内の現在の単語の出現回数が表示されます。各行を調べて、重複を確認できます。


これを頻繁に行う場合(および問題の根本原因、つまり重複のエントリを修正できない場合)、およびを使用してすべての行を解析し、見つかった最初の重複行にジャンプするカスタムコマンドを作成できgetline()ますsplit()。おそらくVimscriptのほんの数行です。

于 2012-11-30T08:11:45.167 に答える