![tmux 与 vim 之间切换窗格的功能已损坏](https://linux22.com/image/1536556/tmux%20%E4%B8%8E%20vim%20%E4%B9%8B%E9%97%B4%E5%88%87%E6%8D%A2%E7%AA%97%E6%A0%BC%E7%9A%84%E5%8A%9F%E8%83%BD%E5%B7%B2%E6%8D%9F%E5%9D%8F.png)
好的,所以我在 tmux 中运行 vim,最近(实际上是今天)我突然无法ctrl+hjkl
在 tmux 和 vim 中切换窗格,相反它只会发出铃声并且拒绝切换。
如果我用鼠标选择 tmux 窗格,我可以使用切换回 vim 窗格,ctrl+hjkl
但除非我使用鼠标(我知道,我知道),否则无法再次切换回。
该问题仅发生在加载了 vim 的窗格中。
在我的tmux.conf
我有:
# smart pane switching with awareness of vim splits
bind -n C-h run "(tmux display-message -p '#{pane_current_command}' | grep -iq vim && tmux send-keys C-h) || tmux select-pane -L"
bind -n C-j run "(tmux display-message -p '#{pane_current_command}' | grep -iq vim && tmux send-keys C-j) || tmux select-pane -D"
bind -n C-k run "(tmux display-message -p '#{pane_current_command}' | grep -iq vim && tmux send-keys C-k) || tmux select-pane -U"
bind -n C-l run "(tmux display-message -p '#{pane_current_command}' | grep -iq vim && tmux send-keys C-l) || tmux select-pane -R"
bind -n C-\ run "(tmux display-message -p '#{pane_current_command}' | grep -iq vim && tmux send-keys 'C-\\') || tmux select-pane -l"
并且我在 vim 配置中设置了以下键绑定:
so ~/.vim/config/key_codes.vim
" Buffer switching
nnoremap <S-l> :bnext<CR>
nnoremap <S-h> :bprev<CR>
" \d delete buffer
nnoremap <S-x> :Kwbd<CR>
"tagbar toggling
map <F8> :TagbarToggle<CR>
map <F7> :NERDTreeToggle<CR>
" Increment numbers
nnoremap <A-a> <C-a>
nnoremap <A-x> <C-x>
nmap <C-W>! <Plug>Kwbd
nmap <C-p> :CommandT<CR>
map <Leader>c :call vroom#RunTestFile()<CR>
map <Leader>s :call vroom#RunNearestTest()<CR>
" \t to jump to test file
map <leader>t :A<CR>
" \t to jump to related file
map <leader>r :r<cr>
" \E to open file explorer in root
map <leader>E :Explore .<cr>
" \e to open file explorer in current dir
map <leader>e :Explore<cr>
"nerd tree mapings
" map <C-n> <plug>NERDTreeFocusToggle<CR>
" shift plus arrow for selection mode
" shift+arrow selection
map <Del> <Esc>x1i
vmap <Del> <Esc>x1v
"multi-cursor mappings"
let g:multi_cursor_next_key='<C-n>'
let g:multi_cursor_prev_key='<C-p>'
let g:multi_cursor_skip_key='<C-x>'
let g:multi_cursor_quit_key='<Esc>'
" Removing escape
ino jj <esc>
cno jj <c-c>
vno v <esc>
" Remove highlights with leader + enter
nmap <Leader><CR> :nohlsearch<cr>
" Ruby hash syntax conversion
nnoremap <F12> :%s/:\([^ ]*\)\(\s*\)=>/\1:/g<return>
" bind K to grep word under cursor
vmap K :grep! "\b<C-R><C-W>\b"<CR>:cw<CR>
键代码.vim:
function Allmap(mapping)
execute 'map' a:mapping
execute 'map!' a:mapping
endfunction
call Allmap(' <ESC>[A <Up>')
call Allmap(' <ESC>[B <Down>')
call Allmap(' <ESC>[C <Right>')
call Allmap(' <ESC>[D <Left>')
call Allmap(' <ESC>[F <End>')
call Allmap(' <ESC>[H <Home>')
call Allmap(' <ESC>[5~ <PageUp>')
call Allmap(' <ESC>[6~ <PageDown>')
call Allmap(' <ESC>[k4~ <C-Left>')
call Allmap(' <ESC>[5D <C-Left>')
call Allmap(' <ESC>Od <C-Left>')
call Allmap(' <ESC>[k6~ <C-Right>')
call Allmap(' <ESC>[5C <C-Right>')
call Allmap(' <ESC>Oc <C-Right>')
call Allmap(' <ESC>[1;2 <S>')
call Allmap(' <ESC>[1;2A <S-Up>')
call Allmap(' <ESC>[1;2B <S-Down>')
call Allmap(' <ESC>[1;2C <S-Right>')
call Allmap(' <ESC>[1;2D <S-Left>')
call Allmap(' <ESC>[1;2d <S-d>')
call Allmap(' <ESC>[1;2x <S-x>')
call Allmap(' <ESC>[1;2s <S-s>')
call Allmap(' <ESC>[3~ <Del>')
call Allmap(' <ESC>[1;2h <S-h>')
call Allmap(' <ESC>[1;2l <S-l>')
因为这可能对我很重要点文件。
编辑:按住 ctrl 并按下h
会使我的光标向左移动并执行相同的操作,但l
会导致我的光标闪烁到 Nerdtree,然后它立即闪烁回主文本缓冲区。
j
和 也会发生同样的事情k
,只是它会将光标向下移动,并且拒绝向上切换。
答案1
好的,根据别人的建议,我安装了一个名为vim-tmux-导航器像这样:
Bundle "tmux-plugins/vim-tmux"
它解决了我的问题,虽然我不高兴必须安装一个插件才能恢复它停止工作之前的功能,但至少它现在可以工作了,从好的方面来看,我不必改变我的 tmux-conf,因为我已经拥有的已经足够好了。