在Mac OS X终端中使用Vim:逐字移动光标

11

我已按照在Mac OS X终端中逐字移动光标的方法指南进行操作,现在在终端中我可以逐字移动光标。

但是,在Vim中,我只能逆向逐字移动。无论我将\033f设置为 option+cursor-rightshift+cursor-right,我都不能逐字向前移动。唯一的解决办法是进入普通模式并点击<w>以移动到下一个单词。有什么想法可以修复这个问题吗?谢谢。


9
正常模式下,w是逐字移动最佳方式。 - alternative
1
在插入模式下,您可以使用^O运行一个普通模式命令并保持在插入模式中,例如^Ow。 - Alex Martini
4个回答

12

w不是一种解决方法。它是逐字移动的主要方式(参见:WbBeE)。你想要的是一种解决方法,但这并不能帮助你学习Vim。


3
有人可能会认为使用VIM本地键盘快捷键来移动不是一种解决方法,但对于我来说,这确实非常不方便和低效。特别是你需要在插入模式和正常模式之间切换才能移动到下一个单词的部分。
这就是为什么我想出了一个基于this answer在SuperUser上的解决方案。这个想法是将Terminal.app提供的输入直接映射到VIM中。SU上的答案展示了在vimrc文件中放置什么内容可以使Home/End键按预期工作。
我的修改版本包括使用 Option+箭头 (或者 Alt+箭头) 来导航单词。我尽可能地模仿了 Terminal 的移动行为。所以按下 Option+向右箭头 (Alt+向右箭头) 将把光标移到单词后的下一个字符(与 VIM 的 w 原生行为不同,它将把光标移到单词的最后一个字符)。
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

作为一个小但重要的奖励,您可以在不退出插入模式的情况下获得Home/End导航。在10.8.5上测试通过。

1
这太棒了,但我注意到在插入模式下,移动时会多出一个“l”。例如,如果 [x] 光标.. [x]foo bar 然后 ⌥ <Right> --> fool[x] bar --> ⌥ <Right> folo balr[x] - skilbjo
更新以上内容...只需将:imap <ESC>f <C-o>e改为即可... l 是不必要的。 - skilbjo

1

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

set -o vi

切换到vim行为模式。在此模式下,您可以使用Esc键切换到正常模式,并像在vim中移动;然后按i键返回插入模式。

所以不要惊讶于Vim没有试图像Emacs那样操作。Vim的整个强大之处在于这些简单的动作。


-bash:bindkey:命令未找到。我认为这不是标准命令。此外,对于区域字母表中的重音字符,经常使用“Alt + 字符”。 - Maciej Sz
我的错。不知怎么忘了我正在运行zsh。 - Thomas Jeffery

0
截至11月23日,这些简单的快捷键在我使用终端应用程序中的vim(插入模式)中有效。这些功能是开箱即用的,不需要编辑rc文件等。
Shift+左/右 - 逐词移动
Fn+Shift+左/右 - 跳转到行首或行尾
Fn+Shift+上/下 - 上翻页/下翻页

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接