Как остановить мигание панели vim в tmux?

#linux #vim #tmux

Вопрос:

Я использую vim внутри tmux, и это очень раздражает: всякий раз, когда я делаю некоторые изменения в vim (независимо от того, сохраняю я их или нет), а затем сразу переключаюсь на другую панель, индикатор панели vim начинает мигать, пока я не вернусь к ней. Это распространенный сценарий при отладке, когда я постоянно переключаюсь между кодом и выводом make/gdb. Это происходит не всегда, это происходит только тогда, когда мои скорости ввода-вывода низкие (я вошел на удаленный сервер, на котором установлена файловая система NFS, и сетевой диск иногда становится очень медленным), поэтому я думаю, что происходит то, что vim выполняет некоторые операции ввода-вывода (например, запись для обмена файлами) и хочет сообщить мне, что это сделано. Этого не произойдет, если я немедленно не переключусь на другую панель и не дам ей некоторое время для ведения домашнего хозяйства (но это явно контрпродуктивно).

Вот gif того, что происходит сразу после того, как я переключаюсь с панели 1, на которой есть vim:

введите описание изображения здесь

Вот моя конфигурация 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 amp;amp; tmux source ~/.tmux.conf amp;amp; 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 amp;amp; 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 amp;syntax == '' | set syntax=sh | endif
 

Ответ №1:

Мигание продолжало меня беспокоить, поэтому я поискал еще и, наконец, нашел ответ, любезно предоставленный этой ссылкой. Оказывается, в tmux нужно отключить звонок.

Я воспроизвел ответ ниже для справки:

 # disable in vim

set vb t_vb=     " no visual bell amp; flash

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