侏儒终端+ Vim和Ctrl-Shift映射


11

在Gnome终端中可以用Ctrl- 映射序列Shift吗?

我正在尝试添加映射

  • map <C-S-[> gT
  • map <C-S-]> gt

而且不起作用。怎么做?

我以某种方式映射了<C-S-]>,但事实证明不是<C-S-]>,而是<C-]>,因此看起来它无法按此顺序识别Shift。配置错误还是gnome-terminal的故障?

除了。<C-[>按下映射后,vim似乎正在等待。我想它是映射超时,但是当我精确按下<C-[>并且不想按下其他任何东西时,如何摆脱这个超时呢?

我刚刚开始学习vim,如果该映射中有明显错误的地方,非常抱歉。

Answers:


8

我认为这里的问题是,您试图获取预期在终端中运行的vim来识别CTRL-SHIFT序列。尽管X可能会识别出这样的组合,但是在终端上运行的应用程序(或如今,终端仿真器)却无法。这是因为,从历史上看,终端只能通过串行连接发送和接收7位或8位ASCII数据序列(尽管这可能包括定位光标,滚动或删除行,更改颜色和其他有用的“转义序列”)效果)。

ASCII字符集中有32个“控制代码”,包括熟悉的CTRL-A到CTRL-Z。但是没有相应的ASCII代码用于“ CTRL-SHIFT” A到Z。现在,gnome-terminal本身可以识别这些代码(例如,CTRL-SHIFT-V将粘贴剪贴板中的文本),但是vim不会能够直接访问它。

当然,可能(不知道)可以设置终端仿真器,以将CTRL-SHIFT按键转换为转义序列,然后可以通过vim映射识别该序列。

=======

更新

您可能对gvim感兴趣,它是vim的图形版本,它作为X程序而不是终端程序运行。也许gvim将能够理解CTRL-SHIFT代码?


4

GNOME终端似乎不允许使用该Ctrl键进行某些组合,这似乎是一个问题。在线搜索显示了很多这种情况。

以防万一您不知道,Ctrl+ page up/ page down循环浏览选项卡。


3

正如Bartleby 指出的那样,这是一个终端限制,因为vi认为键码相同。

对于诸如此类的终端,xterm您可以更改它。对于gnome-terminal 它忽略X资源设置,我不知道如何执行以下操作:

这个SO问题涵盖了相同的主题,此示例显示了此映射用于映射.Xresources文件中的多个键的情况。例如:

XTerm*vt100.translations: #override \
  Ctrl ~Meta Shift <Key>a: string(0x1b) string("[65;5u") \n\
  Ctrl ~Meta Shift <Key>b: string(0x1b) string("[66;5u") \n\ 
  Ctrl ~Meta Shift <Key>f: string(0x1b) string("[70;5u")  

现在,对于Ctrlavs. CtrlShiftaCtrlbvs. CtrlShiftbCtrlfvs CtrlShiftf。,我们在vi中有不同的键序列。

现在,我们可以在中以不同的方式映射它们~/.vimrc

map <ESC>[66;5u   :echo "ctrl-shift-b received"<CR>
map <ESC>[70;5u   :echo "ctrl-shift-f received"<CR>
map <C-b>         :echo "ctrl-b received"<CR>
map <C-f>         :echo "ctrl-f received"<CR>

最初的问题是关于gnome-terminal,而您的答复是xterm
egmont

@egmont:好点,我这边有疏忽。根据此答案.Xresources忽略gnome-terminal。那是不幸的。更新的答案。
cfi

将此单词作为对Q&A问答进行了略微改写/交叉张贴,因为我可能应该在此处删除它,因为它不适用于问询者的终端。
cfi


1

gnome-terminal密钥中,转义序列是不可配置的。对于许多键Ctrl+ keyShift+ Ctrl+ key生成不同的序列;不幸的是[]它们并没有,因此您无法区分它们。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.