我已按照在Mac OS X终端中逐字移动光标的方法指南进行操作,现在在终端中我可以逐字移动光标。
但是,在Vim中,我只能逆向逐字移动。无论我将\033f设置为 option+cursor-right
或 shift+cursor-right
,我都不能逐字向前移动。唯一的解决办法是进入普通模式并点击<w>
以移动到下一个单词。有什么想法可以修复这个问题吗?谢谢。
我已按照在Mac OS X终端中逐字移动光标的方法指南进行操作,现在在终端中我可以逐字移动光标。
但是,在Vim中,我只能逆向逐字移动。无论我将\033f设置为 option+cursor-right
或 shift+cursor-right
,我都不能逐字向前移动。唯一的解决办法是进入普通模式并点击<w>
以移动到下一个单词。有什么想法可以修复这个问题吗?谢谢。
w
不是一种解决方法。它是逐字移动的主要方式(参见:W
、b
、B
、e
、E
)。你想要的是一种解决方法,但这并不能帮助你学习Vim。
插入
模式和正常
模式之间切换才能移动到下一个单词的部分。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
上测试通过。[x]
光标.. [x]foo bar
然后 ⌥ <Right> --> fool[x] bar
--> ⌥ <Right> folo balr[x]
- skilbjo:imap <ESC>f <C-o>e
改为即可... l
是不必要的。 - skilbjo让我为您澄清一些事情。Bash(在终端内运行的Shell程序)具有您所熟悉的行为。(使用Alt+f向前移动一个单词,使用Alt+b向后移动一个单词。)这最初是为了像Emacs一样。您可以使用命令
set -o vi
切换到vim行为模式。在此模式下,您可以使用Esc键切换到正常模式,并像在vim中移动;然后按i键返回插入模式。
所以不要惊讶于Vim没有试图像Emacs那样操作。Vim的整个强大之处在于这些简单的动作。
w
是逐字移动最佳方式。 - alternative