在 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 文件中的设置覆盖。