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
不是解决方法。这是逐字移动的主要方式(另请参阅:W
、b
、B
、e
、E
)。您想要的是一种完全无法帮助您学习 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 <ESC>f <C-o>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:逐字移动光标的主要内容,如果未能解决你的问题,请参考以下文章