Vim画面で:インデントマークが正しくありません。

Vim画面で:インデントマークが正しくありません。

vim を使用して Unix 画面の外部でファイルを編集すると、vim はファイルを正しく表示します。しかし、Unix画面で同じファイルを開くと、インデントが「めちゃくちゃ」になっているようです。

インデントが実際に正しいので、「〜のようです」と言います(2番目の画像で強調表示されたカーソルが表示されている場合は、実際には正しい行の先頭にあります)。

ここで何が間違っている可能性がありますか?

編集:私のファイルだけでなく、vimメッセージも混乱しているようです。 ここに画像の説明を入力してください。 可能なことをすべて試して、画面コードのCRLFコードも変更しましたが、この問題を取り除くことはできません。ついにtmuxに切り替えましたが、効果はかなり良かったです。

外部画面: 外部画面

内部画面: 内部スクリーン

ベストアンサー1

写真はこのような特徴を示していると思います。布材:

  • 色(おそらく)
  • カーソルのアドレス指定(カーソルを正しい位置に移動します)
  • タブ(不明:端末がハードウェアタブをサポートしていると主張してもまったくサポートしていない場合、2行目は左マージンから始まります)

しかし、2行目に問題があります。 Vimは中括弧から直下にカーソルを移動し(改行文字を使用)、キャリッジリターン/ラインフィードを取得できます。これでこの空間を説明できます。 vimはこのタイプの最適化を実行します。screen.c:

    else if (plan == PLAN_NL)
    {
        if (noinvcurs)
        screen_stop_highlight();
        while (screen_cur_row < row)
        {
        out_char('\n');
        ++screen_cur_row;
        }
        screen_cur_col = 0;
    }

あなたのstty設定は次のとおりですonlcr

 onlcr (-onlcr)
             Map (do not map) NL to CR-NL on output.

これは正常なシャットダウンのようです。設定の1つがsttyvim(またはscreen)を台無しにする可能性があるため、結果は次のようになります。

たとえば、クイックチェックで私はこれをしました(リテラルタブを使用)。

$ stty ocrnl
$ cat >foo
$ cat >foo <<EOF
if(a) {
        /*then b */
}
EOF
$ vim foo

そしてこれを見ました(vimが設定によって混同される可能性があるという証拠ocrnl):

if(a) {
        /*then b */

                   }

しかし(vimを終了して)そして

$ stty -ocrnl
$ vim foo

プログラム

if(a) {
        /*then b */
}

価値あるものなら、vi-like-emacsがこの場合に正しいことをします。

おすすめ記事