2

1.环境

vim7.3+zsh+iTerm2 上小牛

2. 映射问题

这是我的问题清单:

  1. 我的 vim 无法获得一些快捷方式:<C-q>, <C-s>, <A-Left|Right|..>, <D-char>.
  2. 我无法 在 mac 中映射一些特殊键,例如<A-char>, <A-S-char>, 。<C-A-char>

<C-q><C-s>

在 iTerm2 中,<C-q>将删除整行,(<C-s>并将启动Fwd-i-search)。
它的行为不像 start/stop character ,所以我认为这个问题与stty startand无关stty stop
但是在我将它添加到 之后~/.zshrc,我惊讶地发现该映射在 Vim 中运行良好<C-q><C-s>同时它不会改变 iTerm2 的行为<C-q><C-s>我不知道为什么)。

stty start undef
stty stop undef

<A-char>mac中的问题

在 mac 中,映射<A-char>不会直接在 mac 中工作。

:inoremap <A-u> type some string A-u
:inoremap <A-p> type some string A-p
:inoremap
i  õ           * type some string A-u
i  ð           * type some string A-p

据我所知,<A-char>在 mac 中,hit<A-u>只会打印一个声音警报。命中<A-p>将打印π。我发现那张地图π效果很好。

:inoremap π type some string A-p

<A-u>是否可以在vim中映射?

另一个复杂的问题,是否有可能<A-S-char><C-A-char>

:map <A-S-p> not work
:map ∏ works well(A-S-p will print `∏`)

:map <C-A-p> not work
:map <C-π> still not work

:map <C-S-p> do work

上面相关的另一个复杂问题,是否可能映射<C-A-char>

<A-Left|Right|UP|Down

在 iTerm2 中,点击<A-Left|...将导致(iTerm2 不会为它们绑定任何快捷方式。):

<A-Up> print 'A' with a sound alert.
<A-Down> print 'B' with a sound alert.
<A-Left> print 'D' with a sound alert.
<A-Down> print 'C' with a sound alert.

在 vim 中,<A-Left|...<Left><Right><Up><Down>插入模式、普通模式、可视 mdoe 和 Ex 模式等相同。

<D-char>

关于一些键<D-char>是iTerms自己的热键,例如: 1.<D-q>将退出iTerm2 1.<D-w>将关闭iTerm2中的当前选项卡

另一方面,其他键如<D-s>不是热键,在 vim 和终端中不打印任何字符。是否可以在vim中映射它们?

4

1 回答 1

1

地图<C-1>

Vim 不提供 keycode <C-1>,但你可以使用其他未使用的 vim keycode 代替

可以使用的潜在未使用的 Vim 键码包括:

<F13> to <F37>
<S-F13> to <S-F37>
<xF1> to <xF4>
<S-xF1> to <S-xF4>

键入:set termcap以查看未使用的 vim 键码。

如果要使用 hotkey Ctrl+1,请先将其映射到终端首选项中的 Esc 序列(例如^[C-1),然后将此终端键码与未使用的 vim 键码绑定,例如<F13>, <xF1>,<t_bc>等。

"bind vim keycode `<F13>` to terminal keycode `^[C-1`
:set <F13>=^[C-1
:imap <F13> Input some characters

更多详细信息,请参考vim 中的 fastcodes


地图<A-char>

默认情况下, <A-char>将在 mac 中打印特殊字符。通常,您可以映射此特殊字符。或者您可以在终端重新映射<Alt>Meta

地图<C-A-char><D-char>

与 相同<C-1>,如果您使用终端 vim,您可以使用 fastcodes 代替。

  1. 与终端绑定<C-A-char>任何键码,例如: ^[C-A-a
  2. 设置 vim fastkeycodes 并做映射:

映射:

:set <C-A-a>=^[C-A-a
:map <C-A-a> Input some characters
于 2014-05-12T12:22:17.430 回答