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

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

在 Putty 中(我主要使用 VIM 的方式),我可以执行以下操作:

  • 向上/向下翻页:使用原生的向上/向下翻页键。在 Mac 中,替代方法是 Fn + 向上/向下,但这在终端中不起作用(不会在 vim 文件内滚动,但会滚动终端缓冲区)
  • 类似地,Fn + 右/左键不会带我到行首/行末

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

答案1

这不是一个特定于 mac 的问题,这实际上是一个 vi 问题。

在导航模式下,ctrl-f 向下滚动一页,ctrl-b 向上滚动一页(想象“前进”和“后退”)。Ctrl-d 向下滚动半页,ctrl-u 向上滚动半页。

^ 会带您到行首,$ 会带您到行尾。我知道,我知道,但这是有历史原因的。

以下是一份关于 vi 控件的非常好的备忘单。vi 有点神秘,但是一旦你内化了它,它就是世界上最快、最灵巧的文本编辑器。

答案2

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

如果您希望这些键向终端发送不带Shift修饰符的字符序列,您可以自定义键盘映射:

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

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

类似地,Shift-HomeShift-End被映射为移动到当前行的开始/结束(ESC [ HESC [ F)。Bash 可以理解这些序列,但您可能必须自定义 Vim 才能理解它们,或者专门为 Vim 编辑映射。Vim、Emacs 和一些其他程序发送转义序列以将终端置于“应用程序光标模式”,其中 Home/End 键发送ESC O HESC O F,但终端(从 10.9 开始)未实现此行为。因此,您可能希望更改键盘映射以发送这些其他代码(Bash 也能理解它们)。(在其他操作系统上,HomeEnd用于行的开始/结束,因此终端为它们提供了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会反转行为。

答案3

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

我通常只做12+22+

答案4

我习惯在插入模式下使用 Home/End 键来定位行首和行末(Windows 和 Linux 上都用过),但 Mac 不支持。这尤其烦人,因为当我在远程系统上使用 vim 时,我也无法轻松做到这一点。经过一番痛苦的反复尝试,我找到了一些可以.vimrc做同样事情的行,并最终找到了另一个人,他在这里提出了类似的解决方案:

https://coderwall.com/p/fd_bea

享受。

:inoremap <C-e> <C-o>$
:inoremap <C-a> <C-o>0

相关内容