我注意到在以插入模式在.txt文件中沿一行进行编辑时,在使用键序列进行写操作之后,光标将移至该行的开头:
>我想更改此行为,以使光标将在:write之后保持位置。这可能吗?我不需要光标保持在插入模式,我只希望它在写入后保持其最后位置。

我在Windows上使用gVim 7.4。我的.vimrc非常基础,我不相信任何设置都会干扰此行为。我还从我的.vimrc(与正式的vim.org Windows安装程序捆绑在一起)中删除了mswin.vim和example.vim的采购。意识到光标仅在完全由尾随空白组成的行上写入后才滑动到最左边。换句话说,当该行是一个悬挂的缩进并且除了空格之外没有其他字符时,光标只会滑动到esc-:w的最左边。 .vimrc使用以下设置来处理缩进行为:

<esc>:w


因此,在缩进行下方创建的新行将包含4个尾随空白,作为行(我想保留)。按下“ esc”键时,光标将滑动到缓冲区的最左端。

是否有办法在按“ esc”以返回正常模式时保留光标位置,该行由尾随空白空格组成(如缩进)?

评论

我从未在任何平台上的Vim中注意到此行为...如果以类似方式启动gVim,会发生什么情况:gvim -u NONE -U NONE(可以使用cmd.exe,也可以创建快捷方式)?这将防止加载您的(g)vimrc文件。

那是您完整的vimrc文件吗?我的第一个怀疑是您vimrc文件中的一个autocmd正在删除结尾的空格。在没有任何vimrc文件的情况下启动gVim时,行为是否会发生变化(请参见上面的注释)?

上面不是我完整的.vimrc,还有其他设置。运行不带.vimrc的gVim(:scriptnames显示没有.vimrc或.gvimrc)解决了我的问题。您是完全正确的,我需要浏览我的.vimrc或其他可能导致此问题的来源。

显然,消除换行符是一种可取的行为,我在这里阅读这是为了使文件保持空白。
那是关于打开新行...不是关于写入文件?

#1 楼

查看自动缩进的文档可以找到为什么以及如何解决它的答案。 :help 'autoindent':在开始新行时(在插入模式下键入<CR>
或使用“ o”或“ O”命令时),从当前行复制缩进。如果您没有
在新行中键入除<BS>CTRL-D以外的任何内容,然后键入
<Esc>CTRL-O<CR>,则缩进将再次删除。将光标
移至另一行具有相同的效果,除非在'cpoptions'中包括了'I'标志
。换句话说,如果您希望它不会丢失缩进,在按Esc之前先键入一些内容然后退格,则空格将保留。回到插入模式并同时使用'cindent',请使用Shift-S代替i,这将清除(已经为空)行,并从适当的缩进级别开始。这不像上面的解决方案那样普遍,但是我在编写C代码时更喜欢这种解决方案,这样我的文件实际上就不会用纯空格行保存。

评论


这是原始文档对我的问题的肯定答案。感谢您的总结和叙述-我不会考虑使用:h autoindent获得此信息。也感谢@Carpetsmoker的讨论,提出了解决方案。

– Jim
2015年2月17日在21:07

这解决了我涉及重新映射o和O而不退出插入模式,而是保持缩进的问题。这可以通过执行nnoremap o 和nnoremap O O 来完成

–Max Coplan
20年1月20日在17:50

非常感谢!

–Max Coplan
20年1月20日在17:50