2011-12-03 7 views
2

これは、多くの異なるテキストエディタ(またはWindowsのコピーペーストメカニズム)に関連する非常に一般的な問題です。インデントされたコードの断片をコピー・ペーストすると、最初の行が正しくインデントされ、残りの行が1レベル右に移動し、手作業による修正(刺激的)が必要になることがよくあります。例えばテキストエディタが貼り付けられたコードのインデントを変形する理由を教えてください。

私はコードを貼り付けるとき:

int i = 0; 
for(; i < 5; ++i){ 
    System.out.println(i); 
} 

を効果は、多くの場合、次のようになります。

int i = 0; 
    for(; i < 5; ++i){ 
     System.out.println(i); 
    } 

この問題は、Eclipseのような超高度のIDEを使用した場合でも発生します。その問題の原因は何ですか?何年もの間、私はそれに対処しなければならなかったのですか?

+0

vim/gvimでペーストモードでペーストすると、この問題は発生しません。http://ayaz.wordpress.com/2008/06/21/paste-mode-pasting-text-and-indenting-it-in -vim/ – number5

答えて

3

という問題

の原因は何IDEは、おそらくあなたに代わってスマートインデントのいくつかの並べ替えをやろうとしているが、この場合には、それはバグのように見えるん。

Zeusエディタは非常によく似た処理を行います。あなたは、その後にそのコードを貼り付ける場合は、以下に示す場所であなたの例に

System.out.println(i+1); 
System.out.println(i+2); 
System.out.println(i+3); 

int i = 0; 
for(; i < 5; ++i){ 
    System.out.println(i); 
} <-- place cursor on this line 

私はあなたがクリップボードにこのテキストをコピーすると仮定何を意味するかの例として

あなたはこのコード(Zeusがそうするコード)で終わるべきです:

int i = 0; 
for(; i < 5; ++i){ 
    System.out.println(i); < place cursor on this line 
    System.out.println(i+1); 
    System.out.println(i+2); 
    System.out.println(i+3); 
} 

ご覧のとおりあなたはどれを期待しているかもしれないものとは異なり、このです:をインデントスマートある

int i = 0; 
for(; i < 5; ++i){ 
    System.out.println(i); < place cursor on this line 
System.out.println(i+1); 
System.out.println(i+2); 
System.out.println(i+3); 
} 

なぜ私は何年もそれを処理しなければならなかったのですか?

この機能を無効にするには、IDEにオプションが必要です。ゼウスは確かにそのような選択肢を持っています。

+1

ええ、おそらくそれは実際にスマートインデントのいくつかの種類です。私は確かめるためにそれをオフにしようとします。ありがとうございました! –