【问题标题】:Vim in Mac OS X Terminal: Move cursor word by wordMac OS X 终端中的 Vim:逐字移动光标
【发布时间】:2011-07-17 18:23:49
【问题描述】:

我已按照Is there any way in the OS X Terminal to move the cursor word by word? 中的指导进行操作,现在在终端中我可以逐字移动光标。

但是,在 Vim 中,我只能逐字向后移动。无论我将 \033f 设置为 option+cursor-right 还是 shift+cursor-right,我都无法逐字前进。我想出的唯一解决方法是进入正常模式并单击<w> 移动到下一个单词。关于如何解决这个问题的任何想法?谢谢。

【问题讨论】:

  • w 在普通模式下是逐字移动的最佳方式。
  • 您可以在插入模式下使用^O来运行一个普通模式的命令并保持插入模式,例如^Ow。

标签: macos vim


【解决方案1】:

w 不是解决方法。这是逐字移动的主要方式(另请参阅:WbBeE)。您想要的是一种完全无法帮助您学习 Vim 的解决方法。

【讨论】:

    【解决方案2】:

    有些人可能会争辩说,使用VIM native keyboard shortcuts 移动不是一种解决方法,但对我来说,它确实既不方便又非常低效。尤其是需要在insert 模式和normal 模式之间切换才能移动到下一个单词的部分。

    这就是为什么我想出了一个基于 SuperUser 上的this answer 的解决方案。这个想法是直接在 VIM 中映射 Terminal.app 提供的输入。 SU 上的答案显示了将哪些内容放入您的 vimrc 文件中以使 Home/End 键按预期工作。

    我在下面的调整版本包括Option+arrow(或Alt+arrow)的文字导航。我试图模仿终端尽可能靠近移动的行为。所以按Option+Right (Alt+Right) 会将插入符号移动到单词之后的下一个字符(而不是单词的最后一个字符,即VIMs w native bahavior)。

    let tp=$TERM_PROGRAM
    if tp == 'Apple_Terminal'
      :" map Mac OS X Terminal.app
    
      " map Home/End:
      :map <ESC>[H <Home>
      :map <ESC>[F <End>
      " small 'o' letter in <C-o> means no exit from the insert mode
      :imap <ESC>[H <C-o><Home>
      :imap <ESC>[F <C-o><End>
      :cmap <ESC>[H <Home>
      :cmap <ESC>[F <End>
    
      " map Option+Left/Option+Right:
      " for this to work you must have the bindings in Settings > Keyboard set
      " as follows:
      " 'option cursor left' to '\033b'
      " 'option cursor right' to '\033f'
      :map <ESC>f el
      :imap <ESC>b <C-o>b
      :imap <ESC>f <C-o>el
      :cmap <ESC>f el
    endif
    

    作为一项小而重要的奖励,您无需退出 insert 模式即可获得 Home/End 导航。在10.8.5 上测试。

    【讨论】:

    • 这太棒了,但我注意到在插入模式下我会在移动中附加一个额外的“l”。例如,如果[x] cursor.. [x]foo bar then ⌥ --> fool[x] bar --> ⌥ folo balr[x]
    • ^^ 更新到上面...只需使:imap &lt;ESC&gt;f &lt;C-o&gt;e...l 是不必要的
    【解决方案3】:

    让我为你澄清一些事情。 Bash(在终端内运行的 shell 程序)具有您习惯的行为。 (使用 Alt+f 向前移动一个单词,使用 Alt+b 向后移动一个单词。)这最初是为了像 Emacs 一样。你可以使用命令

    set -o vi
    

    切换到 vim 行为。在这种模式下,你可以使用 Esc 切换到普通模式,像在 vim 中一样移动;然后按 i 返回插入模式。

    所以不要对 Vim 没有尝试像 Emacs 一样行事感到惊讶。 vim 背后的全部力量在于这些简单的动作。

    【讨论】:

    • -bash: bindkey: command not found。我认为这不是标准命令。此外,Alt+character 经常用于区域字母表中的重音字符。
    • 我的错。不知何故忘记了我在运行 zsh。
    猜你喜欢
    • 2011-05-16
    • 1970-01-01
    • 2019-02-11
    • 2012-08-21
    • 2018-12-05
    • 2010-10-29
    • 2013-01-07
    • 2011-07-31
    • 1970-01-01
    相关资源
    最近更新 更多