Mac 上 vi 中的 INSERT 模式中的 home/end

Mac 上 vi 中的 INSERT 模式中的 home/end

在 Mac 上,当不处于 INSERT 模式时,我可以在 vi 中转到行首和行末:

^(行首)
$(行尾)

例如这里解释如下: 如何在终端/VIM 编辑器中执行“end”、“home”、“page up”和“page down”?

但是,在 INSERT 模式下,如何转到 vi 中的行首和行末?

cmd+ /在窗口之间滚动
alt+向后移动一个单词
ctrl+ /不执行任何操作
shift+ /向后/向前移动一个单词
ctrl+ cmd+ /向后/向前移动一个单词
fn+ left/转到终端缓冲区的开头/结尾

@romainl 提供的解决方案摘要如下:
终端 > 首选项 > 设置 > 键盘 > +
键:Home,修饰符:无,操作:发送文本,\017^
键:End,修饰符:无,操作:发送文本,\017$

我发现了一个非常巧妙的解决方案,它节省了一次按键: 在插入模式下移动到行首

ctrl+o后跟0(home) 或$(end) 或^(第一个非空白字符)

这是一个非常详尽的答案: 在插入模式下遍历文本

答案1

第一的,在插入模式下,您不应该移动光标。

第二,仅有的一些Mac 键盘不带<Home>/<End>键。在花大价钱买一台使用起来如此痛苦的电脑之前,你应该仔细看看。

第三,当您没有物理<Home>/<End>键时,您可以使用以下快捷方式:

  • fn+对于<Home>
  • fn+对于<End>

第四,Terminal.app 无论如何都会捕获<Home>/ ,因此如果您希望 Vim 接收和 ,<End>则必须在“首选项”窗口中编辑这些绑定。<Home><End>

对于<Home>,按Ctrl+o(它插入\017)然后^

家

对于<End>,按Ctrl+o(它插入\017)然后$

结尾

答案2

MacVim 附带的系统 gvimrc 文件有两组映射。一组默认启用,另一组禁用。奇怪的是,它们都不包含在插入模式下转到行首/行末的命令,但仍然值得一看:

:e $VIM/gvimrc

你可以像这样向 vimrc 文件添加一些内容:

inoremap <D-Left> <Home>
inoremap <D-Right> <End>

一个小测试表明这在 GUI 中有效,但在终端中无效,所以也许应该将其放入 gvimrc 文件中。怎么样?

inoremap <C-V><S-Left> <Home>
inoremap <C-V><S-Right> <End>

无需逐字输入这些命令: <C-V>是一个字符,<S-Left>是另一个字符。 在我的计算机上,使用 Mac 的 Terminal.app,我逐字输入以下命令可获得相同的效果:

inoremap <Esc>OC <End>
inoremap <Esc>OD <Home>

当使用 GUI 时,这可能会被系统 gvimrc 文件中的设置覆盖。

相关内容