【问题标题】:vim on mac os X function key mapping not workingmac os X上的vim功能键映射不起作用
【发布时间】:2011-12-04 06:20:50
【问题描述】:

我最近开始使用 Mac OS X Lion 系统并尝试在终端中使用 Vim。我以前在我的 Ubuntu 系统中有一个 .vimrc 文件,并且将 F2F5 键映射到 pastetoggle 并运行 python 解释器。这是我为它准备的两行:

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

它在 Ubuntu 中运行良好,但在 Mac 中不再运行。 (以上两行在我的主目录下的 .vimrc 中。)我已经在我的偏好中关闭了 Mac 特定的功能,因此功能键不用于音量之类的东西。现在按 F5 似乎将所有字母大写,直到下一个单词,而 F2 似乎删除下一行并插入 O.....

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

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

谢谢!

【问题讨论】:

  • 它可能会也可能不会解决您的问题,但您可能想尝试在终端中使用 MacVim 而不是 Vim。
  • @icktoofay 嗯,我想我对 OSX 下的“UNIX 核心”期望太高了,很多东西实际上必须是 Mac 特定的。那我就来试试 MacVim。
  • 与“UNIX 核心”没有区别,而与终端不同。如果您使用xterm,那么它应该像在Linux 上那样工作,但xterm 不是OS X 原生的;它必须在 X11 辅助应用程序下运行。
  • 这没什么帮助,但它对我有用。我转到系统偏好设置-> 键盘并选中“使用所有 F1、F2 等键作为标准功能键”(听起来像你做的那样),将你的行放入我的 .vimrc,现在按 F5 运行 Python。我在 OS X 10.6.8 和 vim 7.2.108 下运行。
  • @icktoofay 这是有道理的,我认为终端在按下时实际上并没有触发&lt;F5&gt;,但找不到任何修复它的方法,这一定是个问题。跨度>

标签: macos vim


【解决方案1】:

我终于通过添加这样的映射使我的函数映射工作了:

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 和 tmux 配置了 screen-256color,但函数映射仍然不起作用。因此,如果 iTerm2 中的这些序列符合 xterm,则 has('mac') 可能是不必要的,我还没有检查,所以暂时将其留在我自己的配置中。

您可能还想要一些imap 版本。请注意,您不应使用 noremap 变体,因为您确实希望这些映射级联(以触发您已将 &lt;Fx&gt; 映射到的任何内容)。

【讨论】:

    【解决方案2】:

    关于您的配色方案/日晒问题 - 确保您使用完整日晒发行版中可用的日晒配置文件设置终端(或我更喜欢的 iTerm2),您可以在此处下载:http://ethanschoonover.com/solarized/files/solarized.zip

    那么您可能遇到的唯一其他问题是确保您将 $TERM 设置为 xterm-256colorscreen-256color(如果您使用 screen 或 tmux)。

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

    【讨论】:

      【解决方案3】:

      看到这个答案:https://stackoverflow.com/a/10524999/210923

      基本上将我的 TERM 类型更改为 xterm-256color 使我能够正确映射功能键。

      【讨论】:

        【解决方案4】:

        我在 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

        【讨论】:

          猜你喜欢
          • 2014-10-19
          • 2011-12-13
          • 2011-03-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多