web-dev-qa-db-ja.com

ケイトは配置スペースをタブに置き換えます

Kate(3.11.2)でコードのブロックをインデントすると、配置に使用されるスペースがタブに置き換えられ、すべての配置が台無しになり、これらすべてのスペースを復元することになります。

例:

if (true)
{
—→$foo = 'bar'.
—→•••••••'baz';
}

—→はタブ、スペース)

2文字幅のタブを使用してインデントします。問題は、これらの行を選択してTabキーを押してインデントレベルを追加すると、2つのスペースのグループが1つのタブに置き換えられることです。

—→if (true)
—→{
—→—→$foo = 'bar'.
—→—→—→—→—→'baz';
—→}

最後の(奇数)スペースを削除します。タブの幅は定義されておらず、コードの表示を壊さずに変更できる必要があるため、これは誤りです。

私の設定(Editor Component → Editing → Indentation)では、Indent usingTabulators and Spacesに設定しましたが、保存されず、すぐにTabulatorsに戻ります。

バグですか?または、私のケイトが正しく構成されていませんか?

3
lesenk

ケイトの開発者であるため、答えは次のとおりです。

ケイトのインデントシステムは インデントと配置の概念 をサポートしています:

または、2つの要素の配列を返すこともできます。

   return [ indent, align ];

この場合、最初の要素は上記と同じインデントの深さで、特別な値と同じ意味です。ただし、2番目の要素は、「配置」の列を表す絶対値です。この値がインデント値よりも大きい場合、差は最初のパラメーターのインデント後に追加されるスペースの数を表します。それ以外の場合、2番目の番号は無視されます。インデントにタブとスペースを使用することは、「混合モード」と呼ばれることがよくあります。

したがって、理論的には機能します。ただし、実際には、「Cスタイル」圧子および他のほとんどの圧子はこれをサポートしていません。代わりに、インデントと配置を区別せずに、インデントレベルを返すだけです。

言い換えると、必要な機能が実装されていません。

幸いなことに、これらの圧子はすべてJavaScriptで記述されているため、 非常に簡単に変更できます になります。貢献はいつでも[email protected]で歓迎されています。したがって、これに取り組むことに興味がある場合は、お問い合わせください!

4
dhaumann