#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