使用MacVim和环绕声。可视模式下的退格键用" "包围文本



我刚刚在.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"

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

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

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

这告诉我有一个选择模式映射,它将输入一个"b"(删除所选文本并进入插入模式),然后是插入模式<BS>;则CCD_ 4意味着CCD_;这个映射是由snipMate.vim定义的。还有一个到"-d的Visual模式映射。由于没有*,因此将对其进行重新映射。

有些东西坏了:我不知道第二个映射是从哪里来的。

也许如果我有第二张地图,你也可以。如果是这样的话,那么"就会被映射(在vimrc文件中定义)到S",我猜surround.vim会对此做些什么。这或多或少地解释了你所看到的。我不确定vim在那之后是什么模式,所以我不确定最后的-d会做什么。

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

:help :map
:help map-modes

它对我有效,所以可能是某种冲突。我对Vim还比较陌生,但到目前为止,我已经多次解决插件和配置冲突。插件和用户配置都可能相互影响,所以有时你可能会遇到非常奇怪的行为。

对我来说,一直在努力的是逐步消除问题的可能原因。您可以重命名vimrc文件以防止Vim找到它,然后查看问题是否仍然存在。如果没有,则说明vimrc中的某些内容不能很好地与插件配合使用。在这种情况下,请尝试注释vimrc中的行,以缩小问题的原因(确保创建备份)。

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

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

:verbose map<BS>
时,输出为:
v <BS>  "-d

我按照@benjifisher的建议做了,并添加了一行:

xnoremap <BS> "-d  

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

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

和删除现在工作的方式应该。所以…谢谢!

最新更新