如何以不同方式映射Ctrl + A和Ctrl + Shift + A?

Koh*_*chi 77 vim

在终端中,人们无法区分Ctrl+ ACtrl+ Shift+,A因为它们都发出相同的密钥代码,所以我可以看出为什么Vim不能这样做.但作为X应用程序的gVim可以区分Ctrl+ ACtrl+ Shift+ A.有没有办法以不同的方式映射这两件事?

对于初学者,我想做类似以下的事情:使"从剪贴板粘贴"像Gnome终端一样工作,同时保持Ctrl+ V到视觉模式.

:nmap <C-S-V> "+gP
Run Code Online (Sandbox Code Playgroud)

gra*_*ywh 40

Gvim没有这样做,因为vim不能这样做(在正常情况下).对不起,但就是这样.


然而...

某些终端(例如,xterm和iterm2)可以配置为为任何密钥组合发送任意转义序列.

例如,下面添加到.Xresources为的xterm发送<Esc>[65;5uCtrlShiftA.然后,您可以将其映射到Vim中<C-S-a>.(65是shift-a的十进制Unicode值,5是ctrl修饰符的位.在这种情况下,u代表"unicode".)

! .Xresources
XTerm*vt100.translations: #override Ctrl ~Meta Shift <Key>a: string(0x1b) string("[65;5u")
Run Code Online (Sandbox Code Playgroud)

iTerm和[u] rxvt也可以配置为执行此操作(未提供示例).

更多信息:http://www.leonerd.org.uk/hacks/fixterms/


ani*_*ane 7

正如已经指出的那样,没有办法以<C-S-A>不同的方式进行映射<C-A>.

但是,使用autokey(用于Linux和Windows)或autohotkey(用于Windows)等工具,您可以重新映射<C-S-A>以为特定应用程序发送不同的键击.

例如,在我的系统上,我有以下设置autokey:

$ cat ~/.config/autokey/data/gnome-terminal/ctrlshifta-gnome-terminal.py
#ctrl+shift+a sends '<S-F1>a'
keyboard.send_keys("<shift>+<f1>a") # Note that `f` in `f1` needs to be in lower case.
Run Code Online (Sandbox Code Playgroud)

为它分配这些属性:

  1. 键盘快捷键为 ctrl+shift+a
  2. 窗口类: gnome-terminal-server.Gnome-terminal

然后你~/.vimrc可以创建映射<S-F1>a来做任何你想做的事情.


笔记:

  1. 我用作<S-F1>检测的领导键<C-S>.这是因为我的终端不接受<F13>- <F37>等密钥.如果您的应用程序支持它,(gvim我认为)建议使用这些键.
  2. 我主要vimgnome-terminal.所以我用作window class = gnome-terminal-server.Gnome-terminal过滤器.gvim如果需要,可以将其修改为使用.autokey支持一个按钮,用于捕获任何其他窗口的属性,如类/标题.


小智 5

如果您不满意现有的简历功能,则可以改用CQ。参见::help CTRL-V-alternative。


Ing*_*kat 5

由于键盘输入在内部处理的方式,不幸的是,即使在 GVIM 中,这在今天通常也不可能。某些组合键,例如Ctrl+ 非字母无法映射,并且无法区分Ctrl+ 字母与Ctrl+ Shift+ 字母。(除非您的终端为其发送了一个不同的termcap代码,而大多数情况下不会。)在插入或命令行模式下,尝试键入组合键。如果没有任何反应/被插入,则不能使用该组合键。这也适用于<Tab>/ <C-I><CR>/ <C-M>/ <Esc>/<C-[>等(仅例外是<BS>/ <C-H>)。这是一个已知的痛点,并在vim_dev各种讨论和#vim IRC频道的主题。

有些人(最重要的是 Paul LeoNerd Evans)想要解决这个问题(即使对于支持这个的终端中的控制台 Vim),并且已经提出了各种建议,cp。http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8

但截至今天,还没有补丁或志愿者出现,尽管许多人表示希望在未来的 Vim 版本中拥有它。