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

vaqhlq81  于 5个月前  发布在  Mac
关注(0)|答案(4)|浏览(68)

我已经遵循了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>移动到下一个字。有什么想法可以解决这个问题吗?谢谢。

5w9g7ksd

5w9g7ksd1#

w不是一种解决方法。它是逐词移动的主要方法(另请参阅:WbBeE)。您需要的是一种根本无法帮助您学习Vim的解决方法。

bqjvbblv

bqjvbblv2#

有些人可能会说,用VIM native keyboard shortcuts移动不是一个解决办法,但对我来说,它肯定是非常不方便和非常低效的。特别是你需要在insert模式和normal模式之间切换才能移动到下一个单词的部分。
这就是为什么我在SuperUser上提出了一个基于this answer的解决方案。这个想法是将Terminal.app提供的输入直接Map到Vim中。SU上的答案显示了如何将Home/End键放入vimrc文件中以按预期工作。
我下面的调整版本包括Option+arrow(或Alt+arrow)在单词上的导航。我试图模仿终端的移动行为,尽可能接近。因此,按Option+RightAlt+Right)将插入符号移动到单词后的下一个字符(而不是单词的最后一个字符,这是VIMs 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模式。测试10.8.5

myss37ts

myss37ts3#

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

set -o vi

字符串
切换到Vim行为。在此模式下,您可以使用ESC切换到正常模式,并像在vim中一样移动;然后按i返回插入模式。
所以不要惊讶于Vim并没有试图像Emacs那样工作,Vim背后的全部力量就在这些简单的动作背后。

uujelgoq

uujelgoq4#

截至11月23日,这些简单的快捷方式为我工作与Vim(插入模式)在终端应用程序中打开。这工程OOTB,没有rc文件等编辑是必要的。
Shift+left/right-逐字移动
Fn+Shift+left/right-跳转到行的开头或结尾
Fn+Shift+up/down-上一页/下一页

相关问题