ib.*_*ib. 21
虽然我不建议更改默认光标机制,但实现相关行为的一种方法是使用以下插入模式映射.
:inoremap <silent> <Esc> <Esc>`^
Run Code Online (Sandbox Code Playgroud)
这里的Esc键在插入模式下被重载以另外运行``^`命令,该命令将光标移动到最后一次插入模式停止的位置.由于在此映射中它在离开插入模式后立即执行Esc,因此与具有默认行为的位置相比,光标在右侧保留一个字符.
与其他一些解决方法不同,这个解决方案不需要使用该+ex_extra功能编译Vim .
DrA*_*rAl 17
虽然有一些技巧可以解决这个问题(例如ESC前两篇文章中提到的映射),但是没有一致的方法可以解决这个问题.原因是无法确定用于进入插入模式的方法.具体来说,给定abcDefg带有光标的字符串D:
如果按i,插入模式位置将在c和之间D.法线ESC会将光标置于上方c; <C-O>:stopinsert<CR>(或反引号方法)将光标放在上面D.
如果按a,插入模式位置将在D和之间e.法线ESC会将光标置于上方D; <C-O>:stopinsert<CR>将光标放在上面e.
如果你真的想要这样做,你可以用这样的东西来捏造它:
let insert_command = "inoremap <ESC> <C-O>:stopinsert<CR>"
let append_command = "iunmap <ESC>"
nnoremap i :exe insert_command<CR>i
nnoremap a :exe append_command<CR>a
Run Code Online (Sandbox Code Playgroud)
但是:请记住,这只会处理i,并a作为入门的方法:如果你使用可视块模式,I或A或什么的,你需要拿出新的命令,以匹配(也有很多他们).因此,我强烈建议你不要这样做.
就个人而言,我建议习惯默认行为.您可以轻松地使i OR逻辑为逻辑a.如果你以i牺牲逻辑for为代价将默认值更改为logical a,那么当你使用标准的vi/vim安装时,你会感到困惑.
根据Nathan Neff 的 评论,我发现的最佳方法是
autocmd InsertLeave * :normal! `^
set virtualedit=onemore
Run Code Online (Sandbox Code Playgroud)
autocmd 将光标移回插入模式结束时的位置(即与默认值相比向前移动一个)。
virtualedit 使其在行尾保持一致(因此它可以位于行中最后一个字符的前面)。
(编辑:normal!避免递归映射)
inoremap <silent> <Esc> <C-O>:stopinsert<CR>
Run Code Online (Sandbox Code Playgroud)
在你的.vimrc中
| 归档时间: |
|
| 查看次数: |
6433 次 |
| 最近记录: |