【问题标题】:Vim: Custom mapping for surround plugin to surround visual selection?Vim:环绕插件的自定义映射到环绕视觉选择?
【发布时间】:2013-12-15 15:26:16
【问题描述】:

我打算surround我的visual selection,和sublime等编辑器一样。

由于我已经安装了surround 插件,因此viwS" 确实用" 包围所选单词,' 等类似

因此以下是我的尝试:

vnoremap ' S'
vnoremap " S"
vnoremap [ S[
vnoremap { S{
vnoremap ( S(

但当我尝试使用它们时,它会神秘地删除整行并插入quote

我哪里错了?如何纠正?

【问题讨论】:

  • S 将清除整行并进入插入模式
  • 但是当我使用viwS" 时它可以工作。我该如何解决?

标签: vim vim-plugin dotfiles


【解决方案1】:

你使用*noremap错了:

当你使用*noremap时,你要求Vim使用S的本义。

当你使用 *map 时,你要求 Vim 使用 S 的当前含义。

vnoremap 可以,如果您的映射执行的命令应该是本机命令,但您使用的命令已经被插件重新映射。你应该改用*map

此外,vmap 涵盖 visualselect 模式:您的映射可能应该更精确。

那么……

xmap ' S'
xmap " S"
xmap [ S[
xmap { S{
xmap ( S(

(编辑)

<C-c> 的问题正好相反:你正在使用 vmap,所以你告诉 Vim 无论" 目前使用什么。因为……

  1. 您已将" 映射为S"
  2. 您在 <C-c> 映射的 RHS 中使用 "
  3. 而你使用vmap...

<C-c> 会执行S"+ygv,这不是您想要的。上面的规则很简单:遵循它们,一切都会好起来的。他们又来了,只是措辞略有不同:

  • 当您想使用具有默认含义的命令时,请使用 *noremap

  • 当您想使用具有重新映射含义的命令时,请使用 *map

【讨论】:

  • 1 个问题,现在 somehome <c-c> 在可视模式下触发 S"。发生了什么?
  • 这里没有。也许是杂散映射?
  • 这是我的<c-c> 映射vmap <c-c> "+ygv
  • 是的,如果您注意我写的内容,问题就很明显了。查看我的编辑。
  • 你是对的。我在混淆一些东西。原因很明显——可能是我需要睡觉。谢谢大佬!
猜你喜欢
  • 1970-01-01
  • 2013-12-24
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
  • 2021-04-26
相关资源
最近更新 更多