无法通过tmux获取Vim中的Control Arrow键

时间:2016-06-30 21:04:53

标签: macos vim terminal tmux

我一直想把这个拿出来两个星期而没有运气。

我在OSX上使用Iterm2,使用tmux作为会话管理器。我在.vimrc

中使用以下两个绑定进行了VIM设置
"_____Easy change tab left and right____
 nnoremap <C-Left> :tabprevious<CR>
 nnoremap <C-Right> :tabnext<CR>
 nnoremap <C-h> :tabprevious<CR>
 nnoremap <C-l> :tabnext<CR>

现在奇怪的是,当左箭头显示时,ctrl h和l快捷键工作正常。

E349: No identifier under cursor

这似乎与应该发生的事情无关(它在TMUX之外完美运行!),但是使用:map检查我的映射并不会显示任何冲突的映射。但我无法弄清楚这一点。任何帮助都将非常感激。下面是我的tux.conf文件。由于这完全在tmux之外工作,我不相信vimrc应该与此有任何关系。

我有一种感觉,它的Iterm2会向终端发送奇怪的东西而tmux会误解它们,但我不知道如何修复它。

tmux.conf

#set -g default-terminal "xterm-256color"
set -sg escape-time 0

# remap prefix from 'C-b' to 'C-a'
unbind C-b
set-option -g prefix C-a
bind-key C-a send-prefix

# split panes using | and -
bind | split-window -h
bind - split-window -v
unbind '"'
unbind %

# reload config file (change file location to your the tmux.conf you want to use)
bind r source-file ~/.tmux.conf

# switch panes using Alt-arrow without prefix
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D

# Enable mouse mode (tmux 2.1 and above)
set -g mouse on

# don't rename windows automatically
set-option -g allow-rename off

# Use Alt-arrow keys without prefix key to switch panes
bind -n M-S-Left previous-window
bind -n M-S-Right next-window

# Dont clear screen after other program is on
set-window-option -g alternate-screen on
#set-window-option -g xterm-keys on

2 个答案:

答案 0 :(得分:2)

如果您取消注释这些行:

#set -g default-terminal "xterm-256color"
#set-window-option -g xterm-keys on

然后tmux

  • TERM环境变量设置为定义这些键的终端描述,并
  • 发送vim期望的xterm样式控件箭头键。

如果没有这两项更改,TERM设置为screen(没有定义键),tmux将为控制箭头键发送不同的序列(发生不在 终端描述中。)

答案 1 :(得分:0)

一个相关的问题是,您无法使用OSX终端机中tmux中的元箭头键来调整窗格的大小。解决方案是选择“使用选项作为元键”,然后删除“键盘”部分中与选项箭头对应的行。

Correct settings in OSX Catalina Terminal Preferences