2011-12-04 72 views
6

我最近开始使用Mac OS X Lion系统,并试图在终端中使用Vim。我以前在我的Ubuntu系统中有一个.vimrc文件,并且有F2F5键映射到pastetoggle并运行python解释器。这里是我的两条线:vim在mac os上X功能键映射不起作用

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

它在Ubuntu中工作得很好,但不再适用于Mac。 (以上两行代码位于我的主目录下的.vimrc中。)我已经关闭了Mac中的特定功能,因此功能键并未用于音量等功能。现在按F5 似乎大写所有字母,直到下一个单词,并F2似乎删除下一行,地插入O .....

有没有别的东西,我需要做的,把它按预期工作?

此外,我一直使用solarized作为我的配色方案,并试图在Mac中使用相同的配色方案。看起来,scheme命令是从.vimrc读取的,但颜色仍然是默认颜色。即使.vim/colors文件与以前一样。这是一个我需要修复的相关错误吗?也许另一个设置文件正在阅读我自己的? (我找了_vimrc和.gvimrc,都不存在。)

谢谢!

+1

它可能会或可能不会解决你的问题得到它,但你可能要使用尝试[的MacVim] (https://code.google.com/p/macvim/)而不是终端中的Vim。 – icktoofay

+0

@icktoofay嗯,我想我对OSX下“UNIX核心”的期望太高了,很多事情实际上必须是Mac特定的。然后我会给MacVim一个旋转。 – jet

+0

这与“UNIX核心”没有什么区别,而是与终端。如果你使用'xterm',那么它应该像在Linux上一样工作,但'xterm'不是OS X本机;它必须在X11助手应用程序下运行。 – icktoofay

回答

1

关于您的颜色方案/日光问题 - 请确保您设置了终端(或iTerm2,我更喜欢)与完整的日光分布中提供的日光配置文件,您可以在这里下载:http://ethanschoonover.com/solarized/files/solarized.zip

然后,您可能会碰到的唯一的其他问题是确保您设置$ TERM xterm-256colorscreen-256color如果您使用屏幕或tmux。

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

3

我终于得到了我的函数映射工作诉诸加入这样的映射:

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

这可能取决于终端仿真器一贯表现(大笑),但@马克·凯莉”我的建议对我来说还不够(我希望这很简单)。对于OS X上的iTerm2,我已经将其配置为xterm-256colorscreen-256color的tmux,并且函数映射仍然不起作用。因此,如果iTerm2中的这些序列符合xterm标准,那么has('mac')可能是不必要的,我还没有检查过,所以现在就把它留在我自己的配置中。

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

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