为什么我的Vim以替换模式启动?

为什么我的Vim以替换模式启动?,vim,configuration,Vim,Configuration,我可能不小心改变了一些设置,但现在我想不出是什么 行为: 每当我编辑现有文件时,Vim都会以替换(R)模式启动。从本周开始,这是新的 无论何时执行vim nonExistantFile.txt,vim都会在正常模式下启动 到目前为止的诊断步骤: /etc/vimrc没有任何相关内容,特别是不包含startreplace /home/.vimrc没有任何相关内容,特别是不包含startreplace alias不显示任何与vim相关的 平台信息: Vim版本7.3.1314 Windows

我可能不小心改变了一些设置,但现在我想不出是什么

行为:

  • 每当我编辑现有文件时,Vim都会以替换(
    R
    )模式启动。从本周开始,这是新的
  • 无论何时执行
    vim nonExistantFile.txt
    ,vim都会在正常模式下启动
到目前为止的诊断步骤:

  • /etc/vimrc
    没有任何相关内容,特别是不包含
    startreplace
  • /home/.vimrc
    没有任何相关内容,特别是不包含
    startreplace
  • alias
    不显示任何与vim相关的
  • 平台信息:

    • Vim版本7.3.1314
    • Windows 7 64位
    • 32位Cygwin和Vim二进制
    其他可能相关的信息:

    • 不久前(在此之前),我将CentOS 6.4机器上的
      /etc/vimrc
      复制到Cygwin
      /etc/vimrc
    • 我最近编辑了一些二进制文件
    我被难住了,我想不出还有什么别的办法

    更新:

    • 我已经将问题缩小到这个
      /etc/vimrc
      片段
    • 奇怪的是,注释掉这两个命令中的任何一个都可以解决问题
    Vimrc代码段(注意:它有unix行结尾):

    “仅在使用自动命令支持编译时执行此部分
    如果有(“自动MD”)
    "
    编辑文件时,始终跳转到最后一个光标位置
    autocmd BufReadPost*
    
    \如果line(“\”)>0&&line(“\”)检查~/.exrc文件的初始设置,则必须有一个标志,用于在启动时将vi设置为替换模式


    干杯!

    我在
    /etc/vimrc
    中添加了一些换行符并交换了两个命令,这似乎是导致问题的原因…这似乎解决了问题。我不知道为什么。

    下面的内容似乎为我解决了这个问题。我认为有一些自动命令代码干扰了光标位置恢复,所以请清除以前的自动命令(如下所示)为我修复了该问题:

    function! ResCur()
      if line("'\"") <= line("$")
        normal! g`"
        return 1
      endif
    endfunction
    
    augroup resCur
      autocmd!
      autocmd BufWinEnter * call ResCur()
    augroup END
    
    函数!ResCur()
    如果行(“\”)I在my
    .vimrc
    中映射了
    nnoremap:nohlsearch
    ,这导致了这种行为


    将此映射到
    为我解决了问题。

    只是想一想,centos新线可能与win不兼容。你能抓到另一个vimrc吗?试着删除你的
    .viminfo
    文件。我曾经遇到过类似的问题,它解决了。我的理论是,
    .viminfo
    包含一些在启动时执行的恶意命令。@KevinDTimm您可能会something@KevinDTimm不,我在文件中使用了
    unix2dos
    ,这是个好主意,但我没有
    ~/.exrc
    也没有
    /etc/exrc
    哇,谢谢!由于某种奇怪的原因,这导致了上面的替换模式问题和箭头键键入A/B/C/D。我在这里提出了这个问题,这正是我遇到的问题!你怎么知道是它引起的?我把我的vimrc一分为二,发现这改变了行为。很奇怪,我花了很长时间才找到。但你可以相信,这让我快发疯了。
    function! ResCur()
      if line("'\"") <= line("$")
        normal! g`"
        return 1
      endif
    endfunction
    
    augroup resCur
      autocmd!
      autocmd BufWinEnter * call ResCur()
    augroup END