Mac OS X 终端中的 Vim:逐字移动光标

Posted

技术标签:

【中文标题】Mac OS X 终端中的 Vim:逐字移动光标【英文标题】:Vim in Mac OS X Terminal: Move cursor word by word 【发布时间】: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。 【参考方案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。

以上是关于Mac OS X 终端中的 Vim:逐字移动光标的主要内容,如果未能解决你的问题,请参考以下文章

在 Mac OS X 上将代码粘贴到终端窗口中的 vim

全屏文本编译器vim

Mac 终端光标快捷键

iOS - Mac Vim 编辑器

如何将光标锁定在 Mac OS X 上的窗口内部?

Mac OS X 系统12个常用的文本编辑快捷键(移动选中)