我正在嘗試轉向 VIM 作為我的主要文字編輯器,已經花了很多時間設定所有內容並閱讀有關 VIM 的內容。
現在一切都很好,除了一件事一直困擾著我。當我啟動 VIM(我只使用終端版本)時,有時狀態列中會出現某種損壞的轉義序列或某些內容,看起來不正確
也打字任何帶有 : 的命令都會在您鍵入時替換符號,這看起來也不太好。
我多次檢查了 .vimrc,沒有發現任何可能導致此問題的原因。我唯一想到的是,也許,我搞砸了 VIM 事件和 TMUX 掛鉤
在我的 tmux.conf 中
set-hook -g pane-focus-in 'if -F "#{==:#{pane_current_command},Vim}" "set -g status off; set -g pane-border-status off" "set -g status on; set -g pane-border-status bottom"'
在.vimrc中
autocmd VimEnter * silent !tmux set -g status off
autocmd VimEnter * silent !tmux set -g pane-border-status off
autocmd VimLeave * silent !tmux set -g status on
autocmd VimLeave * silent !tmux set -g pane-border-status bottom
au FocusLost * :set laststatus=0
au FocusGained * :set laststatus=2
autocmd InsertLeave * redraw!
但它們看起來也不錯:/
我的設定是:
- macOS 10.4.15
- iTerm2 3.2.9
- 哦我的Zsh
- 多路復用器
- 麥克維姆 8.1.950
感謝您的協助
解決方案: 作為@尼古拉斯·馬裡奧特指出,這些是對 DSR(裝置狀態報告)的回應,該報告來自隱藏/顯示 tmux 狀態列時調整大小。就我而言,設定有點矯枉過正。首先,有用於窗格焦點的 tmux 鉤子:
set-hook -g pane-focus-in 'if -F "#{==:#{pane_current_command},Vim}" "set -g status off; set -g pane-border-status off" "set -g status on; set -g pane-border-status bottom"'
這個應該在至少一個打開了 VIM 的窗格或視窗之間切換時顯示/隱藏 tmux 欄。然後我的 .vimrc 中有這個:
autocmd VimEnter * silent !tmux set -g status off
autocmd VimEnter * silent !tmux set -g pane-border-status off
應該做同樣的事情,但是在 VimEnter 事件上,我寫了它們,因為我認為pane-focus-in
Vim 啟動時 tmux 鉤子不會觸發(窗格保持相同的焦點),實際上這不是真的,它會。
不幸的是,我不明白當set -g status off
andset -g pane-border-status off
執行兩次時到底發生了什麼,也許第二個被 tmux 忽略並且 vim 無法識別它,但是從 .vimrc 配置中刪除它確實有助於擺脫這些符號
答案1
這些是對 DSR(裝置狀態報告)的回應,我的猜測是 vim 在調整大小時發送此訊息(開啟和關閉 tmux 狀態列將調整大小)。看起來 vim 沒有正確解析回應。