vim on mac os X功能键映射不起作用

时间:2011-12-04 06:20:51

标签: macos vim

我最近开始使用Mac OS X Lion系统并尝试在终端中使用Vim。我之前在我的Ubuntu系统中有一个.vimrc文件,并且 F2 F5 键映射到pastetoggle并运行python解释器。以下是我的两条线:

set pastetoggle=<F2>
map <buffer> <F5> :wa<CR>:!/usr/bin/env python % <CR>

它在Ubuntu中运行得很好,但在Mac中不再适用。 (上面的两行是在我的家庭目录下的.vimrc中。)我已经根据我的喜好关闭了Mac特定的功能,所以功能键没有用于像卷这样的东西。现在按 F5 似乎将所有字母大写直到下一个字, F2 似乎删除下一行并插入O .....

我需要做些什么让它按预期工作吗?

此外,我一直在使用曝光作为我的配色方案,并尝试在Mac中使用相同的配色方案。似乎正在从.vimrc读取scheme命令,但颜色仍然是默认颜色。即使.vim / colors文件和以前一样。这是我需要解决的相关错误吗?也许是我自己之后读取的另一个设置文件? (我找了_vimrc和.gvimrc,没有。)

谢谢!

4 个答案:

答案 0 :(得分:4)

我终于通过添加这样的映射来实现我的函数映射:

if has('mac') && ($TERM == 'xterm-256color' || $TERM == 'screen-256color')
  map <Esc>OP <F1>
  map <Esc>OQ <F2>
  map <Esc>OR <F3>
  map <Esc>OS <F4>
  map <Esc>[16~ <F5>
  map <Esc>[17~ <F6>
  map <Esc>[18~ <F7>
  map <Esc>[19~ <F8>
  map <Esc>[20~ <F9>
  map <Esc>[21~ <F10>
  map <Esc>[23~ <F11>
  map <Esc>[24~ <F12>
endif

如果您需要验证这些转义序列是否与您的终端匹配或设置自己的转发序列,请回答这些问题是有帮助的:

mapping function keys in vim
Binding special keys as vim shortcuts

这可能取决于终端模拟器表现一致(狂笑),但@Mark Carey的建议对我来说还不够(我希望它如此简单)。使用OS X上的iTerm2,我已经为xterm-256color配置了它,为screen-256color配置了tmux,功能映射仍然不起作用。因此,如果来自iTerm2的这些序列符合xterm标准,那么has('mac')可能是不必要的,我还没有检查过,所以暂时把它放在我自己的配置中。

您可能也需要一些imap版本。请注意,您不应该使用noremap变体,因为执行希望这些映射级联(触发您已映射<Fx>的任何内容)。

答案 1 :(得分:1)

关于您的colorscheme / solarized问题 - 请确保您设置终端(或我喜欢的iTerm2),并在完整的日光化版本中提供曝光的配置文件,您可以在此处下载:http://ethanschoonover.com/solarized/files/solarized.zip

然后,您可能遇到的唯一其他问题是确保在使用screen或tmux时设置$ TERM xterm-256colorscreen-256color

您可以查看我的dotfiles进行工作设置,但不要忘记设置Terminal / iTerm颜色配置文件作为第一步。

答案 2 :(得分:1)

请参阅此答案:https://stackoverflow.com/a/10524999/210923

本质上将我的TERM类型更改为xterm-256color允许我正确映射功能键。

答案 3 :(得分:0)

我在vimrc中使用以下内容来复制和粘贴

if &term =~ "xterm.*"
    let &t_ti = &t_ti . "\e[?2004h"
    let &t_te = "\e[?2004l" . &t_te
    function XTermPasteBegin(ret)
        set pastetoggle=<Esc>[201~
        set paste
        return a:ret
    endfunction
    map <expr> <Esc>[200~ XTermPasteBegin("i")
    imap <expr> <Esc>[200~ XTermPasteBegin("")
    cmap <Esc>[200~ <nop>
    cmap <Esc>[201~ <nop>
endif

我从这里得到了https://stackoverflow.com/a/7053522