如何阻止 vim 窗格在 tmux 中闪烁?

How to stop vim pane from blinking in tmux?

我在 tmux 中使用 vim 它做了一件非常烦人的事情:每当我在 vim 中进行一些编辑(无论我是否保存)然后立即切换到另一个窗格,vim 窗格的指示器开始闪烁,直到我 return 到它。这是调试时的常见情况,当我不断在代码和 make/gdb 输出之间跳转时。这并不总是发生,只有当我的 I/O 速度很低时才会发生(我登录到具有 NFS 文件系统的远程服务器并且网络磁盘有时会变得非常慢),所以我认为正在发生的事情是 vim 做了一些 I/O (例如写入交换文件)并想让我知道它已经完成了。如果我不立即切换到另一个窗格并给它一些时间进行内务处理,就不会发生这种情况(但这显然适得其反)。

这是我从具有 vim:

的窗格 1 切换后立即发生的情况的 gif

这是我的 tmux 配置:

set -g default-terminal "screen-256color" # colors!
setw -g xterm-keys on
set -s escape-time 0                      # fastest command sequences
set -sg repeat-time 600                   # increase repeat timeout
#set -s quiet on                           # disable various messages
#set -s focus-events on

set -g prefix2 C-q                        # GNU-Screen compatible prefix
bind C-a send-prefix -2

set -q -g status-utf8 on                  # expect UTF-8 (tmux < 2.2)
setw -q -g utf8 on

set -g history-limit 5000                 # boost history

set-window-option -g mode-keys vi

# edit configuration
bind e new-window -n '~/.tmux.conf.local' "sh -c '${EDITOR:-vim} ~/.tmux.conf.local && tmux source ~/.tmux.conf && tmux display \"~/.tmux.conf sourced\"'"

set-option -g repeat-time 0

# reload configuration
bind r source-file ~/.tmux.conf \; display '~/.tmux.conf sourced'

# -- display -------------------------------------------------------------------

set -g base-index 1         # start windows numbering at 1
setw -g pane-base-index 1   # make pane numbering consistent with windows

setw -g automatic-rename on # rename window to reflect current program
set -g renumber-windows on  # renumber windows when a window is closed

set -g set-titles on                        # set terminal title
set -g set-titles-string '#h ❐ #S ● #I #W'

set -g display-panes-time 800 # slightly longer pane indicators display time
set -g display-time 1000      # slightly longer status messages display time

set -g status-interval 10     # redraw status line every 10 seconds

# clear both screen and history
bind -n C-l send-keys C-l \; run 'sleep 0.05 && tmux clear-history'

# activity
set -g monitor-activity on
set -g visual-activity off

这是我的 vim 配置:

set encoding=utf-8  " The encoding displayed.
set fileencoding=utf-8  " The encoding written to file.

set nocompatible
filetype off
syntax on

set tabstop=4
set expandtab
set shiftwidth=4
set softtabstop=4

set number

set hlsearch
set list
set listchars=tab:>-
set listchars+=eol:�
set listchars+=space:�

set splitright
set splitbelow

colorscheme molokai

" Vundle config
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
call vundle#end()
filetype plugin indent on

set laststatus=2
set updatetime=1000

au BufNewFile,BufRead * if &syntax == '' | set syntax=sh | endif

闪烁一直困扰着我,所以我进行了更多搜索,终于找到了 this link 提供的答案。原来必须禁用 tmux 中的铃声。

为了参考,我转载了下面的答案:

# disable in vim

set vb t_vb=     " no visual bell & flash

# disable bell in tmux
# disable sound bell
set -g bell-action none
# disable visual bell
set -g visual-bell off