Terminal

vim inside screen:縮進顯示不正確

  • October 19, 2016

當我在 unix 螢幕外使用 vim 編輯文件時,vim 會正確顯示文件。但是,當我在 unix 螢幕中打開同一個文件時,縮進“似乎”變得凌亂。

我說“似乎”是因為縮進實際上是正確的(如果您在第二張圖像中看到突出顯示的游標,它實際上位於正確的行首)

這裡可能是什麼問題?

編輯:不僅是我的文件,甚至 vim 消息似乎也很混亂 在此處輸入圖像描述 我已經嘗試了所有可能的方法,還在螢幕程式碼中更改了 CRLF 的程式碼,但無法擺脫這個問題。最後切換到tmux,效果很好。

外屏: 外屏

內屏: 內屏

圖片似乎顯示這些功能正常工作

  • 顏色(也許)
  • 游標定址(將游標移動到正確的位置)
  • 選項卡(未知:如果聲稱終端支持硬體選項卡但根本不支持,則第二行將從左邊距開始)

但是第二行是問題所在。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.

這似乎是正常關閉。您的其中一項stty設置可能混淆了 vim(或 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 在這種情況下做了正確的事情。

引用自:https://unix.stackexchange.com/questions/316146