OSX中的Vim:如何通过在终端中打开的vim文件向上/向下/转到EOL?


28

在腻子中,这就是我最初使用VIM的方式,我可以执行以下操作:

  • 向上翻页/向下翻页:使用本机的向上翻页/向下翻页键。在Mac中,替代方法是Fn +上/下键,该键在终端中不起作用(不在vim文件中滚动,但在终端缓冲区中滚动)
  • 同样,Fn +右/左键也不会带我开始/结束行

如何在Mac OS X中模拟此功能?


如果您将“ Fn +右/左”替换或增加为“ Home / End”,这可能有助于弄清您的问题,这就是这些Fn组合的作用。
克里斯·佩奇

Answers:


48

这不是专门针对mac的问题,实际上是vi的问题。

在导航模式下,ctrl-f向下滚动页面,而ctrl-b向上滚动页面(请考虑“ F”或“ B” ack)。Ctrl-d向下滚动半页,而ctrl-u向上滚动半页。

^将您带到一行的开头,$将带到末尾。我知道,我知道,但是有历史原因。

这是关于vi控制一个非常好的备忘单。vi有点奥秘,但是一旦将其内部化,它便是世界上最快,最流畅的文本编辑器。


1
“这不是专门针对mac的问题,这实际上是vi的问题。” 主要是关于如何设置Mac OS X Terminal应用程序的键盘映射,但是事实证明,问题的第二部分,关于行的开始/结束,已经在Terminal中具有映射,一种可能的解决方案是将vi的映射编辑为明白它。或者,可以编辑终端键盘图。
克里斯·佩奇

16

终端的默认首选项映射Shift- Page UpShift- Page Down到告诉Vim和Emacs之类的程序滚动(ESC [ 5 ~ESC [ 6 ~)的字符序列。

如果希望这些键将字符序列发送到没有Shift修饰符的终端,则可以自定义键盘映射:

终端>首选项>设置> [配置文件]>键盘

如果这样做,我建议您Shift通过交换已移位键和未移位键的映射来反转这些键的修饰符的含义,以使替代行为仍然可用。另外,请参阅“ 视图”菜单,其中包含使用Command修饰符的滚动命令,因此无论终端键盘映射如何,它们都可用。

类似地,Shift- HomeShift- End映射为移动到当前行(ESC [ HESC [ F)的开始/结束。Bash可以理解这些序列,但是您可能必须自定义Vim才能理解它们,或编辑专门针对Vim的映射。Vim,Emacs和其他一些程序发送一个转义序列,以将终端置于“应用程序光标模式”,其中Home / End键发送ESC O HESC O F,但是终端(从10.9开始)不实现此行为。因此,您可能希望更改键盘映射以代替发送其他代码(Bash也理解它们)。(在其他OS上,Home并且End用于行的开始/结束,因此Terminal为它们提供了Shift用于对称的修饰符。)

Control- Left ArrowControl- Right Arrow也默认映射到“移动到行的开始/结束”序列,尽管它们与映射到Shift- HomeShift-的序列不同End。而是将它们映射到与Emacs和Bash兼容的序列ESC [ 5 DESC [ 5 C。假设Vim不使用这些,最简单的方法是使用〜/ .vimrc自定义Vim以接受它们。

请注意,在最新版本的macOS中,默认情况下,终端不再对首选项HomeEnd首选项具有显式映射。相反,它具有动态行为,当备用屏幕处于活动状态时(例如,在使用全屏应用程序(例如emacs,vim,screen或tmux)时),按键会自动映射到行的开始/行尾。当在主屏幕上使用诸如shell之类的面向行的程序时,默认情况下,它们会继续滚动终端视图。该Shift修正反转的行为。


@MarkHu我在上一段中介绍了这一点。
克里斯·佩奇

如上一段所述,默认值在其他版本的MacOS中可能有所不同/缺失。对于10.13.6,我必须\033[5~为PageDown / Up 添加(和... 6。)。
MarkHu

2

最简单和最佳的解决方案是n+ ,其中n您要向下移动的行数是向下键。

我经常只做12+ 22+


1

我习惯了Home / End(首页/结尾),使我进入“插入”模式下的行首和结尾(从Windows和我认为Linux中使用),Mac不支持。这特别令人讨厌,因为当我在远程系统上使用vim时,我也不容易做到。经过一番痛苦的尝试和错误之后,我想出了一些.vimrc做相同事情的代码,最终在这里找到了另一个提出类似解决方案的人:

https://coderwall.com/p/fd_bea

请享用。

:inoremap <C-e> <C-o>$
:inoremap <C-a> <C-o>0
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.