【问题标题】:Vim 's' Key BrokenVim 的钥匙坏了
【发布时间】:2017-01-18 01:58:20
【问题描述】:

s在命令模式下通常会删除光标下的字符并进入插入模式。但是现在输入s 会打开这样的提示(在左下角)

>

而不是通常的替换模式。

我检查了什么:

  • .vimrc 中没有键被重新映射

  • :map s 显示:

x s 潜行_s n s 潜行_s

这是重新映射 x-s 还是 s?

什么可能导致这种行为?

编辑:我正在使用 vundle 插件管理器。从 .vimrc 中删除这一行可以解决问题。

call vundle#end()

这不是必需的吗?

编辑 2:正如@yolenoyer 所说,vundle#end() 是必需的,或者 all 插件被禁用。使用该建议,将其缩小到 vim-sneak 插件,甚至在其文档中说:

How dare you remap s?

【问题讨论】:

  • 在 vim 和命令模式中没有称为替换的模式,您是指命令行模式还是普通模式?请更具体!
  • 感谢您的评论。 vi中有两种模式:命令模式和插入模式。我相信您将命令模式视为“正常”模式。
  • vi中有2种以上的模式。
  • 啊,是的,当然 - ':' 调用的最后一行模式 - 这就是你所说的“命令行模式”吗?
  • 是的,我就是这个意思。

标签: macos vim macvim


【解决方案1】:
  • 除了映射来改变s 正常命令的行为之外,我没有看到任何其他方法。 你真的确定没有映射吗?请通过运行以下命令再次检查您的映射:

    :map s
    
  • 不要删除 .vimrc 中的 call vundle#end() 行:它会禁用您安装的所有插件。

    相反,尝试注释此行之前列出的每个插件(以 Plugin 开头的行),每次再次启动 vim 以检查行为是否改变。

关于模式的一些说明

当您在普通模式下输入s 时,您不会进入任何“替换”模式,而是进入插入 删除光标前的一个(或多个)字符后的模式。

您使用“替代”一词(在您的标题和问题内容中)造成的混淆是 有问题,因为它使人们认为您在谈论 :s 命令(这可能真的 称为...替代命令!)

【讨论】:

  • 优秀。我最初没有发现问题,因为正如你所说,删除 vundle#end() 正在禁用 all 插件!根据您的建议,我将范围缩小到 vim-sneak 插件,它重新映射了 s 键。
【解决方案2】:

Vim 的搜索和替换(替换)不需要.vimrc 中的任何附加模块或映射。您可以简单地使用:%s/foo/bar/gfoo 的任何实例替换为bar。欲了解更多信息,请查看here

请注意,替换命令 s 不带 :(普通命令)可能会以数字 x 为前缀,删除 x 字符并切换到插入模式。

【讨论】:

  • 感谢您抽出宝贵时间回答!这发生在 command 模式下。也就是说,不是在您输入冒号-s (:s/pat/repl/) 时得到的提示。
  • @automorphic 有正常、插入和可视模式。您能否详细说明命令模式的含义?
  • 命令模式就是你所说的普通模式。导航键 h,j,k,l 移动光标的位置(s 进入替换模式)。
  • 是的,你提到的第二种模式。如果我的 .vimrc 调用 vundle#end(),那就坏了。
猜你喜欢
  • 1970-01-01
  • 2017-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-26
  • 1970-01-01
相关资源
最近更新 更多