我已按照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>
移动到下一个单词。关于如何解决这个问题的任何想法?感谢。
答案 0 :(得分:11)
w
不是解决方法。这是逐字移动的主要方式(另请参阅:W
,b
,B
,e
,E
)。你想要的是一种解决方法,它根本无法帮助你学习Vim。
答案 1 :(得分:1)
有些人可能会争辩说,使用VIM native keyboard shortcuts移动并不是一种解决方法,但对我而言,它确实非常不方便且非常低效。特别是您需要在insert
模式和normal
模式之间切换以转移到下一个单词的部分。
这就是我在SuperUser上提出基于this answer的解决方案的原因。我们的想法是直接在VIM中映射Terminal.app
提供的输入。 SU上的答案显示了要放置在vimrc
文件中以使Home / End键按预期工作的内容。
我在下面的调整版中包含Option+arrow
(或Alt+arrow
)字词导航。我试图模仿终端的行为尽可能接近我的行动。因此,按Option+Right
(Alt+Right
)会将插入符号移到单词后面的下一个字符(而不是单词的最后一个字符,即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
作为一个小但重要的奖励,您可以在不退出insert
模式的情况下获得Home / End导航。在10.8.5
上进行了测试。
答案 2 :(得分:1)
让我为你澄清一些事情。 Bash(在终端内运行的shell程序)具有您习惯的行为。 (使用Alt + f按字向前移动,Alt + b按字向后移动。)这最初与Emacs一样。您可以使用命令
set -o vi
切换到vim行为。在此模式下,您可以使用Esc切换到普通模式,并像在vim中一样移动;然后按i返回插入模式。
所以不要惊讶Vim没有像Emacs那样行事。 vim背后的全部力量都在这些简单的动作背后。