在 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 Up和Shift-Page Down到告诉 Vim 和 Emacs 等程序滚动(ESC [ 5 ~
和ESC [ 6 ~
)的字符序列。
如果您希望这些键向终端发送不带Shift修饰符的字符序列,您可以自定义键盘映射:
终端 > 首选项 > 设置 > [配置文件] > 键盘
如果您这样做,我建议您通过交换 Shift 键和非 Shift 键的映射来反转这些键的修饰键含义Shift,以便替代行为仍然可用。另请参阅看法菜单,其中包含使用Command修饰符的滚动命令,因此无论终端键盘映射如何,它们都可用。
类似地,Shift-Home和Shift-End被映射为移动到当前行的开始/结束(ESC [ H
和ESC [ F
)。Bash 可以理解这些序列,但您可能必须自定义 Vim 才能理解它们,或者专门为 Vim 编辑映射。Vim、Emacs 和一些其他程序发送转义序列以将终端置于“应用程序光标模式”,其中 Home/End 键发送ESC O H
和ESC O F
,但终端(从 10.9 开始)未实现此行为。因此,您可能希望更改键盘映射以发送这些其他代码(Bash 也能理解它们)。(在其他操作系统上,Home和End用于行的开始/结束,因此终端为它们提供了Shift对称修饰符。)
Control-Left Arrow和Control-Right Arrow默认也映射到“移动到行首/行末”序列,但它们与映射到Shift-Home和Shift- 的序列不同End。相反,它们被映射到 Emacs 和 Bash 兼容序列ESC [ 5 D
和ESC [ 5 C
。假设 Vim 未使用这些序列,最简单的方法是使用 ~/.vimrc 自定义 Vim 以接受这些序列。
请注意,在较新版本的 macOS 中,默认情况下,终端不再在偏好设置中具有显式映射。相反,它具有动态行为,Home即End当备用屏幕处于活动状态时(例如,在使用 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