【问题标题】:Why is my Vim starting in replacemode?为什么我的 Vim 以替换模式启动?
【发布时间】:2013-12-26 14:40:59
【问题描述】:

我可能不小心更改了某些设置,但现在我不知道它是什么。

行为:

  • 每当我编辑现有文件时,Vim 都会以替换 (R) 模式启动。这是本周的新内容。
  • 每当我执行vim nonExistantFile.txt 时,Vim 都会以正常模式启动

到目前为止的诊断步骤:

  1. /etc/vimrc 没有任何相关性,特别是不包含 startreplace
  2. /home/<myuser>/.vimrc 没有任何相关内容,特别是不包含 startreplace
  3. alias 没有显示 vim 相关

平台信息:

  • Vim 版本 7.3.1314
  • Windows 7 64 位
  • 32 位 Cygwin 和 Vim 二进制文件

其他可能相关信息:

  • 前段时间(在这开始发生之前)我将/etc/vimrc从我的CentOS 6.4机器复制到Cygwin /etc/vimrc
  • 我最近编辑了一些二进制文件

我很困惑,我想不出其他可以尝试的方法。

更新:

  • 我已将问题缩小到/etc/vimrc sn-p
  • 奇怪地注释掉这两个命令中的任何一个都可以解决问题

Vimrc sn-p(注意:这确实有 unix 行结尾):

" Only do this part when compiled with support for autocommands
if has("autocmd")
  "<snip>
  " When editing a file, always jump to the last cursor position
  autocmd BufReadPost *
  \ if line("'\"") > 0 && line ("'\"") <= line("$") |
  \   exe "normal! g'\"" |
  \ endif
  " don't write swapfile on most commonly used directories for NFS mounts or USB sticks
  autocmd BufNewFile,BufReadPre /media/*,/mnt/* set directory=~/tmp,/var/tmp,/tmp
  "<snip>
endif

【问题讨论】:

  • 想一想,centos 换行符可能与 win 不兼容。你能再拿一个 vimrc 吗?
  • 尝试删除您的.viminfo 文件。我曾经遇到过类似的问题,它解决了。我的理论是.viminfo 包含一些在启动时执行的流氓命令。
  • @KevinDTimm 你可能正在做某事
  • @KevinDTimm 不,我在文件上使用了unix2dos,结果卡住了

标签: vim configuration


【解决方案1】:

我在.vimrc 中映射了nnoremap &lt;ESC&gt; :nohlsearch&lt;CR&gt;,这导致了这种行为。

将此映射到&lt;Enter&gt; 为我解决了这个问题。

【讨论】:

  • 哇,谢谢!由于某种奇怪的原因,这导致了上面导致的替换模式问题和箭头键键入 A/B/C/D。我在这里提出了这个问题github.com/vim/vim/issues/3080
  • 这正是我遇到的问题!你是怎么知道是它造成的?
  • 我将 vimrc 一分为二,发现这种变化导致了这种行为。非常奇怪,我花了很长时间才找到。但你可以相信,这让我发疯了。
【解决方案2】:

检查 ~/.exrc 文件的初始设置,必须有一个标志在启动时将您的 vi 设置为 REPLACE 模式!

http://alvinalexander.com/unix/edu/un010003/

干杯!

【讨论】:

  • 好主意,但我没有~/.exrc 也没有/etc/exrc
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    function! ResCur()
      if line("'\"") <= line("$")
        normal! g`"
        return 1
      endif
    endfunction
    
    augroup resCur
      autocmd!
      autocmd BufWinEnter * call ResCur()
    augroup END
    

    http://vim.wikia.com/wiki/Restore_cursor_to_file_position_in_previous_editing_session

    【讨论】:

      猜你喜欢
      • 2013-02-07
      • 1970-01-01
      • 2016-09-18
      • 2015-10-17
      • 2019-05-23
      • 1970-01-01
      • 2013-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多