使用MacVim和surround.vim - 可视模式下的退格键用“”包围文本

时间:2014-02-27 18:47:04

标签: vim macvim keymapping surround

我只是重新映射了.vimrc中的一些键,我得到了一些奇怪的行为。

当我在可视模式下选择文本并点击删除键时,它会用“”...

围绕突出显示的文本

以下是我.vimrc

的相关内容
"Using Vundle
Bundle 'tpope/vim-surround'    

let mapleader= ","
let g:mapleader= ","

set backspace=eol,start,indent

"""""""""""""""""""""""""""""""""""""""""""""""""""
" => Surround Vim Shortcuts
"""""""""""""""""""""""""""""""""""""""""""""""""""
vmap ' S'
vmap " S"
vmap { S{
vmap } S}
vmap ( S(
vmap ) S)
vmap [ S[
vmap ] S]

" tags
vmap < S<
vmap > S>

" addressing the problem introduced by tags
vnoremap << <
vnoremap >> >

map <leader>s' ysiw'
map <leader>s" ysiw"
map <leader>s( ysiw)
map <leader>s[ ysiw]
map <leader>s{ ysiw}

map <leader>d' yss'
map <leader>d" yss"
map <leader>d( yss)
map <leader>d[ yss]
map <leader>d{ yss}

vmap <Leader>S <Plug>VSurround

示例:

  def persisted?
    false
  end

# I select it in visual mode, hit delete and it becomes:

  "def persisted?
  false
end"

我知道很多这种配置都是个人喜好所以欢迎任何建议,但更重要的是,为什么我会遇到这种情况?

3 个答案:

答案 0 :(得分:1)

这对我有用,所以这可能是某种冲突。我对Vim还是比较新的但是我现在不得不多次解决插件和配置冲突。插件和用户配置都可能相互影响,因此有时您可能会遇到非常奇怪的行为。

为我工作的是逐步消除问题的可能原因。您可以重命名vimrc文件以防止Vim找到它,然后查看问题是否仍然存在。如果没有,则vimrc中的某些内容与您的插件不兼容。在这种情况下,请尝试评论vimrc的行以缩小问题的原因(确保创建备份)。

如果问题不是由vimrc引起的,则可能是插件冲突。尝试从Vim插件路径中的plugin文件夹中移走插件文件,看看问题是否仍然存在。

答案 1 :(得分:1)

当我尝试:verbose map <BS>时,我得到了

s  <BS>        * b<BS>
    Last set from ~/<...>/after/plugin/snipMate.vim
x  <BS>          "-d

这告诉我有一个选择模式映射将输入“b”(删除所选文本并进入插入模式),然后是插入模式&lt; BS&gt; ; *表示b<BS>不会被重新映射;此映射由snipMate.vim定义。还有一个到"-d的可视模式映射。由于没有*,因此会重新映射。

有些东西被破坏了:我无法弄清楚第二张映射的来源。

也许如果我有第二个映射,那么你也是。如果是这样,那么"会被映射(在你的vimrc文件中定义)到S",我猜这个环绕.vim做了什么。这或多或少解释了你所看到的。我不确定vim的模式是什么,所以我不确定最后-d会做什么。

尝试:xunmap <BS>:xnoremap <BS> "-d,看看是否有帮助。如果是这样,请尝试将其放在vimrc文件的末尾。如果这不起作用,请尝试将其放在VimEnter自动命令中。

:help :map
:help map-modes

答案 2 :(得分:0)

对于记录我正在使用最新的MacVim(快照72),当我输入

:verbose map <BS>
时输出为:

v <BS>  "-d

我做了@benjifisher建议并添加了一行:

xnoremap <BS> "-d  

到我的.vimrc。现在的输出是

x  <BS>      *"-d  
s  <BS>       "-d  

和删除现在按照它应该的方式工作。所以......谢谢!